diff options
author | Jeremy Allison <jra@samba.org> | 2023-03-21 10:31:36 -0700 |
---|---|---|
committer | Jule Anger <janger@samba.org> | 2023-04-05 13:10:11 +0000 |
commit | f7e888f78ec86f34ab72640fc805df5bb9e78cbc (patch) | |
tree | 607ee2102af6b2f7fae0a308315f3fcb282023f9 | |
parent | e2df45934ab415732f7f0377601774119b37e7b3 (diff) | |
download | samba-f7e888f78ec86f34ab72640fc805df5bb9e78cbc.tar.gz |
tests: Add samba3.blackbox.zero_readsize test.
smbclient crashes when smbd has "smb2 max read = 0"
in the [global] section of smb.conf.
We should fail the protocol negotiation with
NT_STATUS_INVALID_NETWORK_RESPONSE in this case.
Adds knownfail.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15306
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(Back-ported from commit 006fe806782c42e860ed2cf2bc9f6b1b82c3a307)
-rw-r--r-- | selftest/knownfail.d/smb2_zero_readsize | 1 | ||||
-rwxr-xr-x | source3/script/tests/test_zero_readsize.sh | 101 |
2 files changed, 102 insertions, 0 deletions
diff --git a/selftest/knownfail.d/smb2_zero_readsize b/selftest/knownfail.d/smb2_zero_readsize new file mode 100644 index 00000000000..c7ec92cd629 --- /dev/null +++ b/selftest/knownfail.d/smb2_zero_readsize @@ -0,0 +1 @@ +^samba3.blackbox.zero_readsize.smb2_zero_readsize\(simpleserver:local\) diff --git a/source3/script/tests/test_zero_readsize.sh b/source3/script/tests/test_zero_readsize.sh new file mode 100755 index 00000000000..f859599ba89 --- /dev/null +++ b/source3/script/tests/test_zero_readsize.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +# +# Test setting smb2 max read = 0. +# +# BUG: https://bugzilla.samba.org/show_bug.cgi?id=15306 +# + +if [ $# -lt 6 ]; then + cat <<EOF +Usage: $0 SERVERCONFFILE SMBCLIENT SMBCONTROL SERVER SHARE PREFIX +EOF + exit 1 +fi + +CONF=${1} +shift 1 +SMBCLIENT=${1} +shift 1 +SMBCONTROL=${1} +shift 1 +SERVER=${1} +shift 1 +SHARE=${1} +shift 1 +PREFIX=${1} +shift 1 + +SMBCLIENT="$VALGRIND ${SMBCLIENT}" +ADDARGS="$@" + +incdir=$(dirname "$0")/../../../testprogs/blackbox +. "$incdir"/subunit.sh + +failed=0 + +# +# Setup function +# +do_setup() +{ + rm -f "${PREFIX}/zero_read_testfile" + rm -f "${PREFIX}/zero_read_testfile_get" + dd if=/dev/zero of="${PREFIX}/zero_read_testfile" bs=1024 count=1 + global_inject_conf="$(dirname "${SERVERCONFFILE}")/global_inject.conf" + echo "smb2 max read = 0" >"$global_inject_conf" + ${SMBCONTROL} ${CONF} smbd reload-config +} + +do_cleanup() +{ + rm -f "${PREFIX}/zero_read_testfile" + rm -f "${PREFIX}/zero_read_testfile_get" + global_inject_conf="$(dirname "${SERVERCONFFILE}")/global_inject.conf" + rm "$global_inject_conf" + ${SMBCONTROL} ${CONF} smbd reload-config +} + +test_smb2_zero_readsize() +{ + local tmpfile="$PREFIX/smbclient.in.$$" + + cat >"$tmpfile" <<EOF +lcd $PREFIX +put zero_read_testfile zero_read_testfile_put +get zero_read_testfile_put zero_read_testfile_get +del zero_read_testfile_put +quit +EOF + + local cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT //$SERVER/$SHARE -U$USERNAME%$PASSWORD $ADDARGS < $tmpfile 2>&1' + eval echo "$cmd" + out=$(eval "$cmd") + ret=$? + + # Check for smbclient error. + # We should have failed the protocol negotiation, returning 1. + if [ $ret != 1 ]; then + echo "smbclient protocol negotiation succeeded (should have failed) zero read testfile $ret" + echo "$out" + return 1 + fi + + # We should get NT_STATUS_INVALID_NETWORK_RESPONSE + echo "$out" | grep NT_STATUS_INVALID_NETWORK_RESPONSE + ret=$? + if [ $ret -ne 0 ]; then + echo "Should get NT_STATUS_INVALID_NETWORK_RESPONSE" + echo "$out" + return 1 + fi + rm "$tmpfile" + return 0 +} + +do_setup + +testit "smb2_zero_readsize" test_smb2_zero_readsize || failed=$((failed + 1)) + +do_cleanup + +testok "$0" "$failed" |