diff options
author | Volker Lendecke <vl@samba.org> | 2020-07-08 15:00:49 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2020-07-09 20:16:40 +0000 |
commit | 04eafce653afcff517317d2b190acc4f0cbf4c61 (patch) | |
tree | 634b2546ef99cd9b6e824b45ecc691d823b42fb8 | |
parent | 10ea0e0b3cf6cb4479f12cf85e1ae7fc7b217bd6 (diff) | |
download | samba-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_cache | 1 | ||||
-rwxr-xr-x | source3/script/tests/test_wbinfo_lookuprids_cache.sh | 21 | ||||
-rwxr-xr-x | source3/selftest/tests.py | 5 |
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" |