it was a mask_match bug

Andrew Tridgell tridge at samba.org
Sat Jul 17 08:56:07 GMT 1999


Jeremy,

It was a mask_match() bug. I haven't found the bug, but I've found a
workaround. I've added:

  /* special case - if it is exactly the same then it always matches! */
  if (strcmp(str, regexp) == 0) return True;

the one that fails is:

  mask_match str=<.kderc> regexp=<.kderc>, case_sig = 0

I found one bug:

        if(cp1[strlen(cp1)-1] == '*')
          last_wcard_was_star = True;
        else
          last_wcard_was_star = False;

cp1 can be the empty string in which case you are looking in a random
memory location. Fixing this didn't fix the problem, but I suspect a
similar bug is somewhere else in mask_match().

We _really_ need a standalone mask_match() module with a huge pile of
test cases. Then we need to run it through purify. I'm CCing this to
samba-technical in case someone volunteers. The wildcard matching has
grown to be one of the most complex and worst bits of code in Samba. A
standalone mask_match utility would save us a _lot_ of trouble in the
future. 

Any volunteers?

Cheers, Tridge

PS: This bug probably explains a bunch of random problems with Samba
2.0. It would randomly fail to find files.


More information about the samba-technical mailing list