From: Volker Lendecke Date: Thu, 1 Jun 2023 13:57:26 +0000 (+0200) Subject: libsmb: Fix directory listing against old servers X-Git-Tag: samba-4.17.9~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af55bfe4e99ef2b6ee17d23ecdb1b836fe1dff29;p=thirdparty%2Fsamba.git libsmb: Fix directory listing against old servers cli_list_trans_recv() can be called multiple times. When it's done, it return NT_STATUS_OK and set *finfo to NULL. cli_list_old_recv() did not do the NULL part, so smbclient would endlessly loop. Bug: https://bugzilla.samba.org/show_bug.cgi?id=15382 Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Thu Jun 1 21:54:42 UTC 2023 on atb-devel-224 (cherry picked from commit f30f5793ad592e193546586b765837c0ac9f5647) Autobuild-User(v4-17-test): Jule Anger Autobuild-Date(v4-17-test): Fri Jun 2 13:52:29 UTC 2023 on sn-devel-184 --- diff --git a/selftest/knownfail.d/old-dirlist b/selftest/knownfail.d/old-dirlist deleted file mode 100644 index 0c1066a48c4..00000000000 --- a/selftest/knownfail.d/old-dirlist +++ /dev/null @@ -1 +0,0 @@ -^samba3.blackbox.smbclient_old_dir.* diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c index 25040438d9e..460b2963f88 100644 --- a/source3/libsmb/clilist.c +++ b/source3/libsmb/clilist.c @@ -537,6 +537,11 @@ static NTSTATUS cli_list_old_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, return status; } + if (state->dirlist == NULL) { + *pfinfo = NULL; + return NT_STATUS_OK; + } + num_received = talloc_array_length(state->dirlist) / DIR_STRUCT_SIZE; finfo = talloc_array(mem_ctx, struct file_info, num_received); @@ -563,6 +568,7 @@ static NTSTATUS cli_list_old_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, return status; } } + TALLOC_FREE(state->dirlist); *pfinfo = finfo; return NT_STATUS_OK; }