diff options
author | Jeremy Allison <jra@samba.org> | 2007-12-04 18:02:06 -0800 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2007-12-04 18:02:06 -0800 |
commit | 3ec5a37280c1e780785439de93522b302f324d24 (patch) | |
tree | 15f042cd8fa51bdb60dc37d98bc6e6b52905bffc /source3/torture/masktest.c | |
parent | 3771ada352acab83451c4daf170ea92a5ee6354f (diff) | |
download | samba-3ec5a37280c1e780785439de93522b302f324d24.tar.gz |
Ok, down to just the client/*.c code now.
Jeremy.
(This used to be commit 7d3959f81a5439800b813ef052382e67424c90cd)
Diffstat (limited to 'source3/torture/masktest.c')
-rw-r--r-- | source3/torture/masktest.c | 82 |
1 files changed, 52 insertions, 30 deletions
diff --git a/source3/torture/masktest.c b/source3/torture/masktest.c index 62b24dc1d9f..3c037e727bf 100644 --- a/source3/torture/masktest.c +++ b/source3/torture/masktest.c @@ -95,9 +95,9 @@ static int ms_fnmatch_lanman_core(const char *pattern, const char *string) n++; } } - + if (! *n) goto match; - + nomatch: if (verbose) printf("NOMATCH pattern=[%s] string=[%s]\n", pattern, string); return -1; @@ -144,17 +144,16 @@ static bool reg_match_one(struct cli_state *cli, const char *pattern, const char return ms_fnmatch(pattern, file, cli->protocol, False) == 0; } -static char *reg_test(struct cli_state *cli, char *pattern, char *long_name, char *short_name) +static char *reg_test(struct cli_state *cli, const char *pattern, const char *long_name, const char *short_name) { static fstring ret; - fstrcpy(ret, "---"); + const char *new_pattern = 1+strrchr_m(pattern,'\\'); - pattern = 1+strrchr_m(pattern,'\\'); - - if (reg_match_one(cli, pattern, ".")) ret[0] = '+'; - if (reg_match_one(cli, pattern, "..")) ret[1] = '+'; - if (reg_match_one(cli, pattern, long_name) || - (*short_name && reg_match_one(cli, pattern, short_name))) ret[2] = '+'; + fstrcpy(ret, "---"); + if (reg_match_one(cli, new_pattern, ".")) ret[0] = '+'; + if (reg_match_one(cli, new_pattern, "..")) ret[1] = '+'; + if (reg_match_one(cli, new_pattern, long_name) || + (*short_name && reg_match_one(cli, new_pattern, short_name))) ret[2] = '+'; return ret; } @@ -245,7 +244,7 @@ static struct cli_state *connect_one(char *share) if (*c->server_domain || *c->server_os || *c->server_type) DEBUG(1,("Domain=[%s] OS=[%s] Server=[%s]\n", c->server_domain,c->server_os,c->server_type)); - + DEBUG(4,(" session setup ok\n")); if (!cli_send_tconX(c, share, "?????", @@ -268,16 +267,17 @@ static void listfn(const char *mnt, file_info *f, const char *s, void *state) if (strcmp(f->name,".") == 0) { resultp[0] = '+'; } else if (strcmp(f->name,"..") == 0) { - resultp[1] = '+'; + resultp[1] = '+'; } else { resultp[2] = '+'; } f_info = f; } -static void get_real_name(struct cli_state *cli, - pstring long_name, fstring short_name) +static void get_real_name(struct cli_state *cli, + char **pp_long_name, fstring short_name) { + *pp_long_name = NULL; /* nasty hack to force level 260 listings - tridge */ cli->capabilities |= CAP_NT_SMBS; if (max_protocol <= PROTOCOL_LANMAN1) { @@ -288,12 +288,15 @@ static void get_real_name(struct cli_state *cli, if (f_info) { fstrcpy(short_name, f_info->short_name); strlower_m(short_name); - pstrcpy(long_name, f_info->name); - strlower_m(long_name); + *pp_long_name = SMB_STRDUP(f_info->name); + if (!*pp_long_name) { + return; + } + strlower_m(*pp_long_name); } if (*short_name == 0) { - fstrcpy(short_name, long_name); + fstrcpy(short_name, *pp_long_name); } #if 0 @@ -303,14 +306,14 @@ static void get_real_name(struct cli_state *cli, #endif } -static void testpair(struct cli_state *cli, char *mask, char *file) +static void testpair(struct cli_state *cli, const char *mask, const char *file) { int fnum; fstring res1; char *res2; static int count; fstring short_name; - pstring long_name; + char *long_name = NULL; count++; @@ -326,14 +329,17 @@ static void testpair(struct cli_state *cli, char *mask, char *file) resultp = res1; fstrcpy(short_name, ""); f_info = NULL; - get_real_name(cli, long_name, short_name); + get_real_name(cli, &long_name, short_name); + if (!long_name) { + return; + } f_info = NULL; fstrcpy(res1, "---"); cli_list(cli, mask, aHIDDEN | aDIR, listfn, NULL); res2 = reg_test(cli, mask, long_name, short_name); - if (showall || + if (showall || ((strcmp(res1, res2) && !ignore_dot_errors) || (strcmp(res1+2, res2+2) && ignore_dot_errors))) { DEBUG(0,("%s %s %d mask=[%s] file=[%s] rfile=[%s/%s]\n", @@ -344,15 +350,17 @@ static void testpair(struct cli_state *cli, char *mask, char *file) cli_unlink(cli, file); if (count % 100 == 0) DEBUG(0,("%d\n", count)); + SAFE_FREE(long_name); } -static void test_mask(int argc, char *argv[], +static void test_mask(int argc, char *argv[], struct cli_state *cli) { - pstring mask, file; + char *mask, *file; int l1, l2, i, l; int mc_len = strlen(maskchars); int fc_len = strlen(filechars); + TALLOC_CTX *ctx = talloc_tos(); cli_mkdir(cli, "\\masktest"); @@ -360,10 +368,15 @@ static void test_mask(int argc, char *argv[], if (argc >= 2) { while (argc >= 2) { - pstrcpy(mask,"\\masktest\\"); - pstrcpy(file,"\\masktest\\"); - pstrcat(mask, argv[0]); - pstrcat(file, argv[1]); + mask = talloc_asprintf(ctx, + "\\masktest\\%s", + argv[0]); + file = talloc_asprintf(ctx, + "\\masktest\\%s", + argv[1]); + if (!mask || !file) { + goto finished; + } testpair(cli, mask, file); argv += 2; argc -= 2; @@ -374,8 +387,13 @@ static void test_mask(int argc, char *argv[], while (1) { l1 = 1 + random() % 20; l2 = 1 + random() % 20; - pstrcpy(mask,"\\masktest\\"); - pstrcpy(file,"\\masktest\\"); + mask = TALLOC_ARRAY(ctx, char, strlen("\\masktest\\")+1+22); + file = TALLOC_ARRAY(ctx, char, strlen("\\masktest\\")+1+22); + if (!mask || !file) { + goto finished; + } + memcpy(mask,"\\masktest\\",strlen("\\masktest\\")+1); + memcpy(file,"\\masktest\\",strlen("\\masktest\\")+1); l = strlen(mask); for (i=0;i<l1;i++) { mask[i+l] = maskchars[random() % mc_len]; @@ -396,6 +414,8 @@ static void test_mask(int argc, char *argv[], testpair(cli, mask, file); if (NumLoops && (--NumLoops == 0)) break; + TALLOC_FREE(mask); + TALLOC_FREE(file); } finished: @@ -435,10 +455,11 @@ static void usage(void) int main(int argc,char *argv[]) { char *share; - struct cli_state *cli; + struct cli_state *cli; int opt; char *p; int seed; + TALLOC_CTX *frame = talloc_stackframe(); setlinebuf(stdout); @@ -539,5 +560,6 @@ static void usage(void) test_mask(argc, argv, cli); + TALLOC_FREE(frame); return(0); } |