summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2020-07-08 15:00:49 +0200
committerVolker Lendecke <vl@samba.org>2020-07-09 20:16:40 +0000
commit04eafce653afcff517317d2b190acc4f0cbf4c61 (patch)
tree634b2546ef99cd9b6e824b45ecc691d823b42fb8
parent10ea0e0b3cf6cb4479f12cf85e1ae7fc7b217bd6 (diff)
downloadsamba-04eafce653afcff517317d2b190acc4f0cbf4c61.tar.gz
winbind: Add test for lookuprids cache problem
When reading entries from gencache, wb_cache_rids_to_names() can return STATUS_SOME_UNMAPPED, which _wbint_LookupRids() does not handle correctly. This test enforces this situation by filling gencache with one wbinfo -R and then erasing the winbindd_cache.tdb. This forces winbind to enter the domain helper process, which will then read from gencache filled with the previous wbinfo -R. Without having the entries cached this does not happen because wb_cache_rids_to_names() via the do_query: path calls deep inside calls dcerpc_lsa_lookup_sids_noalloc(), which hides the STATUS_SOME_UNMAPPED that came in as lsa_LookupSids result value. Bug: https://bugzilla.samba.org/show_bug.cgi?id=14435 Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
-rw-r--r--selftest/knownfail.d/lookuprids_cache1
-rwxr-xr-xsource3/script/tests/test_wbinfo_lookuprids_cache.sh21
-rwxr-xr-xsource3/selftest/tests.py5
3 files changed, 27 insertions, 0 deletions
diff --git a/selftest/knownfail.d/lookuprids_cache b/selftest/knownfail.d/lookuprids_cache
new file mode 100644
index 00000000000..d3c40a62b45
--- /dev/null
+++ b/selftest/knownfail.d/lookuprids_cache
@@ -0,0 +1 @@
+^samba.wbinfo_lookuprids_cache.lookuprids2\(nt4_member:local\) \ No newline at end of file
diff --git a/source3/script/tests/test_wbinfo_lookuprids_cache.sh b/source3/script/tests/test_wbinfo_lookuprids_cache.sh
new file mode 100755
index 00000000000..0b21ffcd7c9
--- /dev/null
+++ b/source3/script/tests/test_wbinfo_lookuprids_cache.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+WBINFO="$VALGRIND ${WBINFO:-$BINDIR/wbinfo}"
+TDBTOOL="${TDBTOOL:-$BINDIR/tdbtool}"
+TDBDUMP="${TDBDUMP:-$BINDIR/tdbdump}"
+NET="$VALGRIND ${NET:-$BINDIR/net}"
+
+cache="$LOCK_DIR"/winbindd_cache.tdb
+
+incdir=`dirname $0`/../../../testprogs/blackbox
+. $incdir/subunit.sh
+
+testit "flush" "$NET" "cache" "flush" || failed=`expr $failed + 1`
+testit "lookuprids1" "$WBINFO" "-R" "512,12345" || failed=`expr $failed + 1`
+
+key=$("$TDBDUMP" "$cache" | grep ^key.*NDR.*/16/ | cut -d\" -f2)
+
+testit "delete" "$TDBTOOL" "$cache" delete "$key"
+testit "lookuprids2" "$WBINFO" "-R" "512,12345" || failed=`expr $failed + 1`
+
+testok $0 $failed
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index cfdfaa98c84..e2aebdcb6e2 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -365,6 +365,11 @@ env = "nt4_member:local"
plantestsuite("samba3.wbinfo_sids_to_xids", env,
[os.path.join(srcdir(),
"nsswitch/tests/test_wbinfo_sids_to_xids.sh")])
+plantestsuite(
+ "samba.wbinfo_lookuprids_cache",
+ env,
+ [os.path.join(samba3srcdir,
+ "script/tests/test_wbinfo_lookuprids_cache.sh")])
env = "ad_member"
t = "WBCLIENT-MULTI-PING"