]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libsmb: Fix directory listing against old servers
authorVolker Lendecke <vl@samba.org>
Thu, 1 Jun 2023 13:57:26 +0000 (15:57 +0200)
committerJule Anger <janger@samba.org>
Fri, 2 Jun 2023 13:52:29 +0000 (13:52 +0000)
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 <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
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 <janger@samba.org>
Autobuild-Date(v4-17-test): Fri Jun  2 13:52:29 UTC 2023 on sn-devel-184

selftest/knownfail.d/old-dirlist [deleted file]
source3/libsmb/clilist.c

diff --git a/selftest/knownfail.d/old-dirlist b/selftest/knownfail.d/old-dirlist
deleted file mode 100644 (file)
index 0c1066a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-^samba3.blackbox.smbclient_old_dir.*
index 25040438d9e8d93bc211142e803a3479a1dfd3a0..460b2963f8854abc5209754af9852c663397ea81 100644 (file)
@@ -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;
 }