s3: tests: Add new test_stream_dir_rename.sh test.
authorJeremy Allison <jra@samba.org>
Tue, 28 Feb 2023 19:18:10 +0000 (11:18 -0800)
committerRalph Boehme <slow@samba.org>
Fri, 3 Mar 2023 15:44:33 +0000 (15:44 +0000)
Shows we are leaking an fsp/fd if we request a non-existent stream on a file.
This then causes rename of a directory containing the file to be denied, as
it thinks we have an existing open file below it.

Add knownfail.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15314

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
selftest/knownfail.d/stream_rename [new file with mode: 0644]
source3/script/tests/test_stream_dir_rename.sh [new file with mode: 0755]
source3/selftest/tests.py

diff --git a/selftest/knownfail.d/stream_rename b/selftest/knownfail.d/stream_rename
new file mode 100644 (file)
index 0000000..2dccb82
--- /dev/null
@@ -0,0 +1 @@
+^samba3.blackbox.stream_dir_rename.stream_rename\(fileserver\)
diff --git a/source3/script/tests/test_stream_dir_rename.sh b/source3/script/tests/test_stream_dir_rename.sh
new file mode 100755 (executable)
index 0000000..7ac3194
--- /dev/null
@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+# Test a stream can rename a directory once an invalid stream path below it was requested.
+# BUG: https://bugzilla.samba.org/show_bug.cgi?id=15314
+
+if [ $# -lt 5 ]; then
+        cat <<EOF
+Usage: test_stream_dir_rename.sh SERVER USERNAME PASSWORD PREFIX SMBCLIENT
+EOF
+        exit 1
+fi
+
+SERVER="${1}"
+USERNAME="${2}"
+PASSWORD="${3}"
+PREFIX="${4}"
+SMBCLIENT="${5}"
+SMBCLIENT="$VALGRIND ${SMBCLIENT}"
+shift 5
+
+incdir=$(dirname $0)/../../../testprogs/blackbox
+. $incdir/subunit.sh
+
+failed=0
+
+# Do not let deprecated option warnings muck this up
+SAMBA_DEPRECATED_SUPPRESS=1
+export SAMBA_DEPRECATED_SUPPRESS
+
+test_stream_xattr_rename()
+{
+       tmpfile=$PREFIX/smbclient_interactive_prompt_commands
+       #
+       # Test against streams_xattr_nostrict
+       #
+       cat >$tmpfile <<EOF
+deltree stream_xattr_test
+deltree stream_xattr_test1
+mkdir stream_xattr_test
+put ${PREFIX}/smbclient_interactive_prompt_commands stream_xattr_test/file.txt
+get stream_xattr_test/file.txt:abcf
+rename stream_xattr_test stream_xattr_test1
+deltree stream_xattr_test
+deltree stream_xattr_test1
+quit
+EOF
+       cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT "$@" -U$USERNAME%$PASSWORD //$SERVER/streams_xattr_nostrict < $tmpfile 2>&1'
+       eval echo "$cmd"
+       out=$(eval $cmd)
+       ret=$?
+       rm -f $tmpfile
+
+       if [ $ret -ne 0 ]; then
+               echo "$out"
+               echo "failed rename on xattr stream test to test1 with error $ret"
+               return 1
+       fi
+
+       echo "$out" | grep "NT_STATUS_ACCESS_DENIED"
+       ret=$?
+       if [ $ret -eq 0 ]; then
+               echo "$out"
+               echo "failed rename on xattr stream with NT_STATUS_ACCESS_DENIED"
+               return 1
+       fi
+}
+
+testit "stream_rename" \
+       test_stream_xattr_rename ||
+       failed=$((failed + 1))
+
+testok "$0" "$failed"
index 76b8ad980ee0ddea3f7c43b389795216f9f2e8af..293882ea69ff47d15b4b4bfea60f8fedf78ed3d8 100755 (executable)
@@ -778,6 +778,10 @@ for env in ["fileserver"]:
                   [os.path.join(samba3srcdir, "script/tests/test_veto_files.sh"),
                   '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$LOCAL_PATH/veto', smbclient3])
 
+    plantestsuite("samba3.blackbox.stream_dir_rename", env,
+                  [os.path.join(samba3srcdir, "script/tests/test_stream_dir_rename.sh"),
+                  '$SERVER', '$USERNAME', '$PASSWORD', '$PREFIX', smbclient3])
+
     #
     # tar command tests
     #