diff --git a/selftest/knownfail b/selftest/knownfail index 710fd33894e..10e368a1084 100644 --- a/selftest/knownfail +++ b/selftest/knownfail @@ -343,3 +343,4 @@ # Disabling NTLM means you can't use samr to change the password ^samba.tests.ntlmdisabled.python\(ktest\).ntlmdisabled.NtlmDisabledTests.test_samr_change_password\(ktest\) ^samba.tests.ntlmdisabled.python\(ad_dc_no_ntlm\).ntlmdisabled.NtlmDisabledTests.test_ntlm_connection\(ad_dc_no_ntlm\) +^samba3.blackbox.smbd_error.check_panic_2 diff --git a/source3/script/tests/test_smbd_error.sh b/source3/script/tests/test_smbd_error.sh new file mode 100755 index 00000000000..e9af47aea51 --- /dev/null +++ b/source3/script/tests/test_smbd_error.sh @@ -0,0 +1,56 @@ +#!/bin/sh +# +# Test smbd with failing chdir system call. +# +# Verify that smbd does not panic when the chdir system call is +# returning an error. ensure that the output format for ACL entries +# +# Copyright (C) 2017 Christof Schmitt + +. $(dirname $0)/../../../testprogs/blackbox/subunit.sh +failed=0 +error_inject_conf=$(dirname $SMB_CONF_PATH)/error_inject.conf + +panic_count_0=$(grep -c PANIC $SMBD_TEST_LOG) + +# +# Verify that a panic in smbd will result in a PANIC message in the log +# + +# As a panic is expected here, also overwrite the default "panic +# action" in selftest to not start a debugger +echo 'error_inject:chdir = panic' > $error_inject_conf +echo '[global]' >> $error_inject_conf +echo 'panic action = ""' >> $error_inject_conf + +testit_expect_failure "smbclient" $VALGRIND \ + $BINDIR/smbclient //$SERVER_IP/error_inject \ + -U$USERNAME%$PASSWORD -c dir || + failed=$(expr $failed + 1) + +rm $error_inject_conf + +panic_count_1=$(grep -c PANIC $SMBD_TEST_LOG) + +testit "check_panic_1" test $(expr $panic_count_0 + 1) -eq $panic_count_1 || + failed=$(expr $failed + 1) + +# +# Verify that a failing chdir vfs call does not result in a smbd panic +# + +echo 'error_inject:chdir = ESTALE' > $error_inject_conf + +testit_expect_failure "smbclient" $VALGRIND \ + $BINDIR/smbclient //$SERVER_IP/error_inject \ + -U$USERNAME%$PASSWORD -c dir || + failed=$(expr $failed + 1) + +panic_count_2=$(grep -c PANIC $SMBD_TEST_LOG) + +testit "check_panic_2" test $panic_count_1 -eq $panic_count_2 || + failed=$(expr $failed + 1) + +rm $error_inject_conf + +testok $0 $failed diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index f8d2a4de9ba..4bb37077ff7 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -585,6 +585,9 @@ plantestsuite("samba3.blackbox.net_tdb", "simpleserver:local", smbclient3, '$SERVER', 'tmp', '$USERNAME', '$PASSWORD', configuration, '$LOCAL_PATH', '$LOCK_DIR' ]) +plantestsuite("samba3.blackbox.smbd_error", "simpleserver:local", + [ os.path.join(samba3srcdir, "script/tests/test_smbd_error.sh") ]) + plantestsuite("samba3.blackbox.net_cache_samlogon", "ad_member:local", [ os.path.join(samba3srcdir, "script/tests/test_net_cache_samlogon.sh"), '$SERVER', 'tmp', '$DC_USERNAME', '$DC_PASSWORD'])