summaryrefslogtreecommitdiff
path: root/source3/lib/ms_fnmatch.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2001-08-20 05:15:26 +0000
committerAndrew Tridgell <tridge@samba.org>2001-08-20 05:15:26 +0000
commit11ce0f4d2d493702386c0bd49c8e2dd2aad84d56 (patch)
treef9d0e8cc2b71506b658e2a8519bf8bf4201f7618 /source3/lib/ms_fnmatch.c
parent5f0b9d08303aeddb01019ff2a63001c9dfa3088b (diff)
downloadsamba-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.c30
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);
}