[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Jun 1 21:55:01 UTC 2023


The branch, master has been updated
       via  f30f5793ad5 libsmb: Fix directory listing against old servers
       via  e86234f3d61 tests: Show that we 100% loop in cli_list_old_recv()
       via  4804d6b89a9 tests: Make timelimit available to test scripts
      from  52cb127f16a docs: fix a typo in history file

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit f30f5793ad592e193546586b765837c0ac9f5647
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jun 1 15:57:26 2023 +0200

    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 <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Jun  1 21:54:42 UTC 2023 on atb-devel-224

commit e86234f3d61c62e4365e1ea105bdd29feaf7ccbe
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jun 1 16:41:37 2023 +0200

    tests: Show that we 100% loop in cli_list_old_recv()
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=15382
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4804d6b89a9146f1fc5270de158cd25254505f61
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jun 1 16:39:21 2023 +0200

    tests: Make timelimit available to test scripts
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=15382
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 selftest/selftesthelpers.py                 |  1 +
 source3/libsmb/clilist.c                    |  6 ++++++
 source3/script/tests/test_old_dirlisting.sh | 28 ++++++++++++++++++++++++++++
 source3/selftest/tests.py                   |  6 ++++++
 4 files changed, 41 insertions(+)
 create mode 100755 source3/script/tests/test_old_dirlisting.sh


Changeset truncated at 500 lines:

diff --git a/selftest/selftesthelpers.py b/selftest/selftesthelpers.py
index 951eeb4d1b5..908fe79cb19 100644
--- a/selftest/selftesthelpers.py
+++ b/selftest/selftesthelpers.py
@@ -236,3 +236,4 @@ rpcclient = binpath('rpcclient')
 smbcacls = binpath('smbcacls')
 smbcontrol = binpath('smbcontrol')
 smbstatus = binpath('smbstatus')
+timelimit = binpath('timelimit')
diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c
index 903c5d22777..58a8fe1a0c6 100644
--- a/source3/libsmb/clilist.c
+++ b/source3/libsmb/clilist.c
@@ -544,6 +544,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);
@@ -570,6 +575,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;
 }
diff --git a/source3/script/tests/test_old_dirlisting.sh b/source3/script/tests/test_old_dirlisting.sh
new file mode 100755
index 00000000000..f50a4742b1a
--- /dev/null
+++ b/source3/script/tests/test_old_dirlisting.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This tests listing directories using the SMBSearch call family
+
+if [ $# -lt 2 ]; then
+    cat <<EOF
+Usage: $0 TIMELIMIT SMBCLIENT
+EOF
+    exit 1
+fi
+
+TIMELIMIT="$1"
+shift
+SMBCLIENT="$VALGRIND $1"
+shift
+
+incdir=$(dirname $0)/../../../testprogs/blackbox
+. $incdir/subunit.sh
+
+# Make sure we don't loop 100% CPU. A normal dir listing should return
+# in less than 3 seconds. At the point of this commit smbclient -c dir
+# | wc returns 43 lines, so checking for 100 lines should be well
+# enough.
+
+count=$($TIMELIMIT 3 $SMBCLIENT //"$SERVER_IP"/tmpguest -m LANMAN1 -U% \
+		   -c dir | wc -l)
+
+testit "listing shares with LANMAN1" test ${count} -le 100 ||
+    failed=$((failed + 1))
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index 76bc90df1ad..75acbf87442 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -34,6 +34,7 @@ from selftesthelpers import valgrindify, smbtorture4_testsuites
 from selftesthelpers import smbtorture4_options
 from selftesthelpers import smbcontrol
 from selftesthelpers import smbstatus
+from selftesthelpers import timelimit
 smbtorture4_options.extend([
     '--option=torture:sharedelay=100000',
    '--option=torture:writetimeupdatedelay=500000',
@@ -829,6 +830,11 @@ for env in ["fileserver"]:
                   '$SERVER', 'fruit_resource_stream', '$USERNAME', '$PASSWORD',
                   '$LOCAL_PATH/fruit_resource_stream', smbclient3])
 
+plantestsuite("samba3.blackbox.smbclient_old_dir", "fileserver_smb1",
+              [os.path.join(samba3srcdir,
+                            "script/tests/test_old_dirlisting.sh"),
+               timelimit, smbclient3])
+
 for env in ["fileserver:local"]:
     plantestsuite("samba3.blackbox.net_usershare", env, [os.path.join(samba3srcdir, "script/tests/test_net_usershare.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', smbclient3])
 


-- 
Samba Shared Repository



More information about the samba-cvs mailing list