diff options
-rw-r--r-- | source4/torture/masktest.c | 107 |
1 files changed, 8 insertions, 99 deletions
diff --git a/source4/torture/masktest.c b/source4/torture/masktest.c index 74c640d30b..4097c8c35a 100644 --- a/source4/torture/masktest.c +++ b/source4/torture/masktest.c @@ -29,98 +29,7 @@ static const char *filechars = "abcdefghijklm."; static int verbose; static int die_on_error; static int NumLoops = 0; - -/* a test fn for LANMAN mask support */ -static int ms_fnmatch_lanman_core(const char *pattern, const char *string) -{ - const char *p = pattern, *n = string; - char c; - - if (strcmp(p,"?")==0 && strcmp(n,".")==0) goto match; - - while ((c = *p++)) { - switch (c) { - case '.': - /* if (! *n && ! *p) goto match; */ - if (*n != '.') goto nomatch; - n++; - break; - - case '?': - if ((*n == '.' && n[1] != '.') || ! *n) goto next; - n++; - break; - - case '>': - if (n[0] == '.') { - if (! n[1] && ms_fnmatch_lanman_core(p, n+1) == 0) goto match; - if (ms_fnmatch_lanman_core(p, n) == 0) goto match; - goto nomatch; - } - if (! *n) goto next; - n++; - break; - - case '*': - if (! *p) goto match; - for (; *n; n++) { - if (ms_fnmatch_lanman_core(p, n) == 0) goto match; - } - break; - - case '<': - for (; *n; n++) { - if (ms_fnmatch_lanman_core(p, n) == 0) goto match; - if (*n == '.' && !strchr_m(n+1,'.')) { - n++; - break; - } - } - break; - - case '"': - if (*n == 0 && ms_fnmatch_lanman_core(p, n) == 0) goto match; - if (*n != '.') goto nomatch; - n++; - break; - - default: - if (c != *n) goto nomatch; - n++; - } - } - - if (! *n) goto match; - - nomatch: - if (verbose) printf("NOMATCH pattern=[%s] string=[%s]\n", pattern, string); - return -1; - -next: - if (ms_fnmatch_lanman_core(p, n) == 0) goto match; - goto nomatch; - - match: - if (verbose) printf("MATCH pattern=[%s] string=[%s]\n", pattern, string); - return 0; -} - -static int ms_fnmatch_lanman(const char *pattern, const char *string) -{ - if (!strpbrk(pattern, "?*<>\"")) { - if (strcmp(string,"..") == 0) - string = "."; - - return strcmp(pattern, string); - } - - if (strcmp(string,"..") == 0 || strcmp(string,".") == 0) { - return ms_fnmatch_lanman_core(pattern, "..") && - ms_fnmatch_lanman_core(pattern, "."); - } - - return ms_fnmatch_lanman_core(pattern, string); -} +static int max_length = 20; static BOOL reg_match_one(struct smbcli_state *cli, const char *pattern, const char *file) { @@ -129,10 +38,6 @@ static BOOL reg_match_one(struct smbcli_state *cli, const char *pattern, const c if (strcmp(pattern,".") == 0) return False; - if (cli->transport->negotiate.protocol <= PROTOCOL_LANMAN1) { - return ms_fnmatch_lanman(pattern, file)==0; - } - if (strcmp(file,"..") == 0) file = "."; return ms_fnmatch(pattern, file, cli->transport->negotiate.protocol)==0; @@ -298,8 +203,8 @@ static void test_mask(int argc, char *argv[], } while (1) { - l1 = 1 + random() % 20; - l2 = 1 + random() % 20; + l1 = 1 + random() % max_length; + l2 = 1 + random() % max_length; pstrcpy(mask,"\\masktest\\"); pstrcpy(file,"\\masktest\\"); l = strlen(mask); @@ -340,6 +245,7 @@ static void usage(void) -W workgroup\n\ -U user%%pass\n\ -s seed\n\ + -l max test length\n\ -M max protocol\n\ -f filechars (default %s)\n\ -m maskchars (default %s)\n\ @@ -394,7 +300,7 @@ static void usage(void) seed = time(NULL); - while ((opt = getopt(argc, argv, "n:d:U:s:hm:f:aoW:M:vE")) != EOF) { + while ((opt = getopt(argc, argv, "n:d:U:s:hm:f:aoW:M:vEl:")) != EOF) { switch (opt) { case 'n': NumLoops = atoi(optarg); @@ -428,6 +334,9 @@ static void usage(void) case 'm': maskchars = optarg; break; + case 'l': + max_length = atoi(optarg); + break; case 'f': filechars = optarg; break; |