From 7bbba73b30f06304e9a2ad48e853d9ec8171dd30 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 19 Feb 2020 15:25:38 +0100 Subject: test: Show that smbd does not handle EINTR from open() correctly Bug: https://bugzilla.samba.org/show_bug.cgi?id=14285 Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- selftest/knownfail.d/open_eintr | 1 + source3/script/tests/test_open_eintr.sh | 66 +++++++++++++++++++++++++++++++++ source3/selftest/tests.py | 9 +++++ 3 files changed, 76 insertions(+) create mode 100644 selftest/knownfail.d/open_eintr create mode 100755 source3/script/tests/test_open_eintr.sh diff --git a/selftest/knownfail.d/open_eintr b/selftest/knownfail.d/open_eintr new file mode 100644 index 00000000000..e5b42ed6bcd --- /dev/null +++ b/selftest/knownfail.d/open_eintr @@ -0,0 +1 @@ +samba3.blackbox.open-eintr.*\(simpleserver:local\) diff --git a/source3/script/tests/test_open_eintr.sh b/source3/script/tests/test_open_eintr.sh new file mode 100755 index 00000000000..d08f7fcfc23 --- /dev/null +++ b/source3/script/tests/test_open_eintr.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# +# Test smbd handling when open returns EINTR +# +# Copyright (C) 2020 Volker Lendecke + +if [ $# -lt 5 ]; then + echo Usage: test_open_eintr.sh \ + --configfile=SERVERCONFFILE SMBCLIENT SMBCONTROL SERVER SHARE +exit 1 +fi + +CONF=$1; shift 1 +SMBCLIENT=$1; shift 1 +SMBCONTROL=$1; shift 1 +SERVER=$1; shift 1 +SHARE=$1; shift 1 + +error_inject_conf=$(dirname ${SERVERCONFFILE})/error_inject.conf +> ${error_inject_conf} + +incdir=$(dirname $0)/../../../testprogs/blackbox +. $incdir/subunit.sh + +failed=0 + +rm -f smbclient-stdin smbclient-stdout smbclient-stderr +mkfifo smbclient-stdin smbclient-stdout smbclient-stderr + +CLI_FORCE_INTERACTIVE=1; export CLI_FORCE_INTERACTIVE + +${SMBCLIENT} //${SERVER}/${SHARE} ${CONF} -U${USER}%${PASSWORD} \ + < smbclient-stdin > smbclient-stdout 2>smbclient-stderr & +CLIENT_PID=$! + +sleep 1 + +exec 100>smbclient-stdin 101 ${error_inject_conf} +${SMBCONTROL} ${CONF} 0 reload-config + +sleep 1 +> ${error_inject_conf} + +echo 'get badnames/blank.txt -' >&100 + +sleep 1 + +> ${error_inject_conf} +${SMBCONTROL} ${CONF} 0 reload-config + +head -n 1 <&102 | grep 'getting file' > /dev/null +GREP_RET=$? + +kill ${CLIENT_PID} +rm -f smbclient-stdin smbclient-stdout smbclient-stderr + +testit "Verify that we could get the file" \ + test $GREP_RET -eq 0 || failed=$(expr $failed + 1) + +testok $0 $failed diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index d486e40c5a7..6060cec49c3 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -814,6 +814,15 @@ plantestsuite("samba3.blackbox.close-denied-share", "simpleserver:local", '$SERVER_IP', "tmp"]) +plantestsuite("samba3.blackbox.open-eintr", "simpleserver:local", + [os.path.join(samba3srcdir, + "script/tests/test_open_eintr.sh"), + configuration, + os.path.join(bindir(), "smbclient"), + os.path.join(bindir(), "smbcontrol"), + '$SERVER_IP', + "error_inject"]) + plantestsuite("samba3.blackbox.net_tdb", "simpleserver:local", [os.path.join(samba3srcdir, "script/tests/test_net_tdb.sh"), smbclient3, '$SERVER', 'tmp', '$USERNAME', '$PASSWORD', -- cgit v1.2.1