diff options
author | Andrew Tridgell <tridge@samba.org> | 2001-08-20 05:15:26 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2001-08-20 05:15:26 +0000 |
commit | 11ce0f4d2d493702386c0bd49c8e2dd2aad84d56 (patch) | |
tree | f9d0e8cc2b71506b658e2a8519bf8bf4201f7618 /source3/lib/ms_fnmatch.c | |
parent | 5f0b9d08303aeddb01019ff2a63001c9dfa3088b (diff) | |
download | samba-11ce0f4d2d493702386c0bd49c8e2dd2aad84d56.tar.gz samba-11ce0f4d2d493702386c0bd49c8e2dd2aad84d56.tar.bz2 samba-11ce0f4d2d493702386c0bd49c8e2dd2aad84d56.zip |
a bunch of fixes from the sflight to seattle
in particular:
- fixed NT status code for a bunch of ops
- fixed handling of protocol levels in ms_fnmatch
(This used to be commit 3eba9606f71f90bfd9820af26f8676277ed22390)
Diffstat (limited to 'source3/lib/ms_fnmatch.c')
-rw-r--r-- | source3/lib/ms_fnmatch.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/source3/lib/ms_fnmatch.c b/source3/lib/ms_fnmatch.c index 39b3e0013c..cc54ffb68e 100644 --- a/source3/lib/ms_fnmatch.c +++ b/source3/lib/ms_fnmatch.c @@ -146,13 +146,12 @@ static int ms_fnmatch_lanman1(const smb_ucs2_t *pattern, const smb_ucs2_t *strin Returns 0 on match, -1 on fail. */ -static int ms_fnmatch_w(const smb_ucs2_t *pattern, const smb_ucs2_t *string) +static int ms_fnmatch_w(const smb_ucs2_t *pattern, const smb_ucs2_t *string, int protocol) { const smb_ucs2_t *p = pattern, *n = string; smb_ucs2_t c; - extern int Protocol; - if (Protocol <= PROTOCOL_LANMAN2) { + if (protocol <= PROTOCOL_LANMAN2) { return ms_fnmatch_lanman1(pattern, string); } @@ -165,23 +164,23 @@ static int ms_fnmatch_w(const smb_ucs2_t *pattern, const smb_ucs2_t *string) case UCS2_CHAR('>'): if (n[0] == UCS2_CHAR('.')) { - if (! n[1] && ms_fnmatch_w(p, n+1) == 0) return 0; - if (ms_fnmatch_w(p, n) == 0) return 0; + if (! n[1] && ms_fnmatch_w(p, n+1, protocol) == 0) return 0; + if (ms_fnmatch_w(p, n, protocol) == 0) return 0; return -1; } - if (! *n) return ms_fnmatch_w(p, n); + if (! *n) return ms_fnmatch_w(p, n, protocol); n++; break; case UCS2_CHAR('*'): for (; *n; n++) { - if (ms_fnmatch_w(p, n) == 0) return 0; + if (ms_fnmatch_w(p, n, protocol) == 0) return 0; } break; case UCS2_CHAR('<'): for (; *n; n++) { - if (ms_fnmatch_w(p, n) == 0) return 0; + if (ms_fnmatch_w(p, n, protocol) == 0) return 0; if (*n == UCS2_CHAR('.') && !strchr_wa(n+1,'.')) { n++; break; @@ -190,7 +189,7 @@ static int ms_fnmatch_w(const smb_ucs2_t *pattern, const smb_ucs2_t *string) break; case UCS2_CHAR('"'): - if (*n == 0 && ms_fnmatch_w(p, n) == 0) return 0; + if (*n == 0 && ms_fnmatch_w(p, n, protocol) == 0) return 0; if (*n != UCS2_CHAR('.')) return -1; n++; break; @@ -207,12 +206,21 @@ static int ms_fnmatch_w(const smb_ucs2_t *pattern, const smb_ucs2_t *string) } -int ms_fnmatch(const char *pattern, const char *string) +int ms_fnmatch(const char *pattern, const char *string, int protocol) { wpstring p, s; + int ret; pstrcpy_wa(p, pattern); pstrcpy_wa(s, string); - return ms_fnmatch_w(p, s); + ret = ms_fnmatch_w(p, s, protocol); +/* DEBUG(0,("ms_fnmatch(%s,%s) -> %d\n", pattern, string, ret)); */ + return ret; +} + +/* a generic fnmatch function - uses for non-CIFS pattern matching */ +int gen_fnmatch(const char *pattern, const char *string) +{ + return ms_fnmatch(pattern, string, PROTOCOL_NT1); } |