mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
Fix smbclient/tarmode panic on connecting to Windows 2000 clients.
'Freed frame ../source3/libsmb/clilist.c:934, expected ../source3/client/clitar.c:821' Cause: (strequal(finfo->name,"..") || strequal(finfo->name,".")) evaluates to true, do_tar returns without freeing ctx Signed-off-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Mon Aug 13 23:12:50 CEST 2012 on sn-devel-104
This commit is contained in:
parent
aaeb3f5d9b
commit
4e4c3062bc
@ -821,8 +821,10 @@ static NTSTATUS do_tar(struct cli_state *cli_state, struct file_info *finfo,
|
||||
TALLOC_CTX *ctx = talloc_stackframe();
|
||||
NTSTATUS status = NT_STATUS_OK;
|
||||
|
||||
if (strequal(finfo->name,"..") || strequal(finfo->name,"."))
|
||||
return NT_STATUS_OK;
|
||||
if (strequal(finfo->name,"..") || strequal(finfo->name,".")) {
|
||||
status = NT_STATUS_OK;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* Is it on the exclude list ? */
|
||||
if (!tar_excl && clipn) {
|
||||
@ -835,7 +837,8 @@ static NTSTATUS do_tar(struct cli_state *cli_state, struct file_info *finfo,
|
||||
client_get_cur_dir(),
|
||||
finfo->name);
|
||||
if (!exclaim) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
DEBUG(5, ("...tar_re_search: %d\n", tar_re_search));
|
||||
@ -844,7 +847,8 @@ static NTSTATUS do_tar(struct cli_state *cli_state, struct file_info *finfo,
|
||||
(tar_re_search && mask_match_list(exclaim, cliplist, clipn, True))) {
|
||||
DEBUG(3,("Skipping file %s\n", exclaim));
|
||||
TALLOC_FREE(exclaim);
|
||||
return NT_STATUS_OK;
|
||||
status = NT_STATUS_OK;
|
||||
goto cleanup;
|
||||
}
|
||||
TALLOC_FREE(exclaim);
|
||||
}
|
||||
@ -856,7 +860,8 @@ static NTSTATUS do_tar(struct cli_state *cli_state, struct file_info *finfo,
|
||||
|
||||
saved_curdir = talloc_strdup(ctx, client_get_cur_dir());
|
||||
if (!saved_curdir) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
DEBUG(5, ("strlen(cur_dir)=%d, \
|
||||
@ -869,7 +874,8 @@ strlen(finfo->name)=%d\nname=%s,cur_dir=%s\n",
|
||||
client_get_cur_dir(),
|
||||
finfo->name);
|
||||
if (!new_cd) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
client_set_cur_dir(new_cd);
|
||||
|
||||
@ -888,7 +894,8 @@ strlen(finfo->name)=%d\nname=%s,cur_dir=%s\n",
|
||||
"%s*",
|
||||
client_get_cur_dir());
|
||||
if (!mtar_mask) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
DEBUG(5, ("Doing list with mtar_mask: %s\n", mtar_mask));
|
||||
do_list(mtar_mask, attribute, do_tar, False, True);
|
||||
@ -902,11 +909,15 @@ strlen(finfo->name)=%d\nname=%s,cur_dir=%s\n",
|
||||
client_get_cur_dir(),
|
||||
finfo->name);
|
||||
if (!rname) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
status = NT_STATUS_NO_MEMORY;
|
||||
goto cleanup;
|
||||
}
|
||||
status = do_atar(rname,finfo->name,finfo);
|
||||
TALLOC_FREE(rname);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
TALLOC_FREE(ctx);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user