diff options
author | Stefan Metzmacher <metze@samba.org> | 2018-10-16 15:16:18 +0200 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2018-10-30 07:30:20 +0100 |
commit | 364ed537e0bcb3a97cae0f2d1ff72de9423ce0e6 (patch) | |
tree | 745782137e3cfad2f902a0d5a5bc36e54490b606 | |
parent | 60131b4452d43b3792e7f27a4190c88e7aabb1b4 (diff) | |
download | samba-364ed537e0bcb3a97cae0f2d1ff72de9423ce0e6.tar.gz |
testprogs/blackbox: add samba4.blackbox.test_primary_group test
This demonstrates the bug, that happens when the primaryGroupID
of a user is changed.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13418
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
-rw-r--r-- | selftest/knownfail.d/samba4.blackbox.test_primary_group | 2 | ||||
-rwxr-xr-x | source4/selftest/tests.py | 2 | ||||
-rwxr-xr-x | testprogs/blackbox/test_primary_group.sh | 86 |
3 files changed, 90 insertions, 0 deletions
diff --git a/selftest/knownfail.d/samba4.blackbox.test_primary_group b/selftest/knownfail.d/samba4.blackbox.test_primary_group new file mode 100644 index 00000000000..779f6808c97 --- /dev/null +++ b/selftest/knownfail.d/samba4.blackbox.test_primary_group @@ -0,0 +1,2 @@ +^samba4.blackbox.test_primary_group.dbcheck.*run1 +^samba4.blackbox.test_primary_group.dbcheck.*run2 diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 6b5ceb556c9..24817e40fb5 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -430,6 +430,8 @@ for env in ["ad_member", "s4member", "ad_dc_ntvfs", "chgdcpass"]: plantestsuite("samba4.blackbox.samba_tool(ad_dc_ntvfs:local)", "ad_dc_ntvfs:local", [os.path.join(samba4srcdir, "utils/tests/test_samba_tool.sh"), '$SERVER', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$DOMAIN', smbclient4]) plantestsuite("samba4.blackbox.net_rpc_user(ad_dc)", "ad_dc", [os.path.join(bbdir, "test_net_rpc_user.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$DOMAIN']) +plantestsuite("samba4.blackbox.test_primary_group", "ad_dc:local", [os.path.join(bbdir, "test_primary_group.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$DOMAIN', '$PREFIX_ABS']) + if have_heimdal_support: for env in ["ad_dc_ntvfs", "ad_dc"]: plantestsuite("samba4.blackbox.pkinit(%s:local)" % env, "%s:local" % env, [os.path.join(bbdir, "test_pkinit_heimdal.sh"), '$SERVER', 'pkinit', '$PASSWORD', '$REALM', '$DOMAIN', '$PREFIX/%s' % env, "aes256-cts-hmac-sha1-96", smbclient4, configuration]) diff --git a/testprogs/blackbox/test_primary_group.sh b/testprogs/blackbox/test_primary_group.sh new file mode 100755 index 00000000000..c2d803e1d15 --- /dev/null +++ b/testprogs/blackbox/test_primary_group.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +if [ $# -lt 5 ]; then +cat <<EOF +Usage: test_primary_group.sh SERVER USERNAME PASSWORD DOMAIN PREFIX_ABS +EOF +exit 1; +fi + +TMPDIR="$PREFIX_ABS/$(basename $0)" +export TMPDIR + +SERVER=$1 +USERNAME=$2 +PASSWORD=$3 +DOMAIN=$4 +PREFIX_ABS=$5 +shift 5 +failed=0 + +. `dirname $0`/subunit.sh +. `dirname $0`/common_test_fns.inc + +TZ=UTC +export TZ + +N=$(date +%H%M%S) + +testuser="testuser$N" +testgroup="testgroup$N" + +echo "testuser: $testuser" +echo "testgroup: $testgroup" + +testit "mkdir -p '${TMPDIR}'" mkdir -p ${TMPDIR} || failed=`expr $failed + 1` + +testit "create '$testuser'" $VALGRIND $PYTHON $BINDIR/samba-tool user create "$testuser" Password.1 || failed=`expr $failed + 1` +testit "add '$testgroup'" $VALGRIND $PYTHON $BINDIR/samba-tool group add "$testgroup" || failed=`expr $failed + 1` +testit "addmembers '$testgroup' '$testuser'" $VALGRIND $PYTHON $BINDIR/samba-tool group addmembers "$testgroup" "$testuser" || failed=`expr $failed + 1` + +testit "search1" $VALGRIND $BINDIR/ldbsearch -H ldap://$SERVER_IP -U$USERNAME%$PASSWORD -d0 sAMAccountName="$testgroup" objectSid || failed=`expr $failed + 1` +ldif="${TMPDIR}/search1.ldif" +$VALGRIND $BINDIR/ldbsearch -H ldap://$SERVER_IP -U$USERNAME%$PASSWORD -d0 sAMAccountName=$testgroup objectSid > $ldif +rid=$(cat $ldif | sed -n 's/^objectSid: S-1-5-21-.*-.*-.*-//p') + +testit "search2" $VALGRIND $BINDIR/ldbsearch -H ldap://$SERVER_IP -U$USERNAME%$PASSWORD -d0 sAMAccountName="$testuser" dn || failed=`expr $failed + 1` +ldif="${TMPDIR}/search2.ldif" +$VALGRIND $BINDIR/ldbsearch -H ldap://$SERVER_IP -U$USERNAME%$PASSWORD -d0 sAMAccountName=$testuser dn > $ldif +user_dn=$(cat $ldif | sed -n 's/^dn: //p') + +ldif="${TMPDIR}/modify1.ldif" +cat > $ldif <<EOF +dn: $user_dn +changetype: modify +replace: primaryGroupID +primaryGroupID: $rid +EOF +testit "Change primaryGroupID to $rid" $VALGRIND $BINDIR/ldbmodify -H ldap://$SERVER_IP -U$USERNAME%$PASSWORD -d0 --verbose < $ldif || failed=`expr $failed + 1` + +testit "dbcheck run1" $VALGRIND $PYTHON $BINDIR/samba-tool dbcheck --attrs=member || failed=`expr $failed + 1` + +ldif="${TMPDIR}/modify2.ldif" +cat > $ldif <<EOF +dn: $user_dn +changetype: modify +replace: primaryGroupID +primaryGroupID: 513 +EOF +testit "Change primaryGroupID to 513" $VALGRIND $BINDIR/ldbmodify -H ldap://$SERVER_IP -U$USERNAME%$PASSWORD -d0 < $ldif || failed=`expr $failed + 1` + +testit "dbcheck run2" $VALGRIND $PYTHON $BINDIR/samba-tool dbcheck --attrs=member || failed=`expr $failed + 1` + +testit "delete '$testuser'" $VALGRIND $PYTHON $BINDIR/samba-tool user delete "$testuser" || failed=`expr $failed + 1` +testit "delete '$testgroup'" $VALGRIND $PYTHON $BINDIR/samba-tool group delete "$testgroup" || failed=`expr $failed + 1` + +# +# As we don't support phantom objects and virtual backlinks +# the deletion of the user and group cause dangling links, +# which are detected like this: +# +# WARNING: target DN is deleted for member in object +# +testit_expect_failure "dbcheck run3" $VALGRIND $PYTHON $BINDIR/samba-tool dbcheck --attrs=member --fix --yes || failed=`expr $failed + 1` +testit "dbcheck run4" $VALGRIND $PYTHON $BINDIR/samba-tool dbcheck --attrs=member || failed=`expr $failed + 1` + +exit $failed |