From 6f2deb01fa1c6e81f101df49990dadcbc9c31226 Mon Sep 17 00:00:00 2001 From: Garming Sam Date: Wed, 22 Feb 2017 17:43:21 +1300 Subject: tests/dbcheck: Add a test for two live objects, with a dangling forward link Handling backlinks appears to be rather non-deterministic, so the forward link hangs off of the RODC replication group (which has no other valid forward links). In other situations, it either won't delete the memberOf, or the expected output order will vary. Signed-off-by: Garming Sam Reviewed-by: Andrew Bartlett BUG: https://bugzilla.samba.org/show_bug.cgi?id=12600 --- .../add-dangling-forwardlink-user.ldif | 3 +++ .../add-initially-normal-link.ldif | 4 ++++ .../release-4-5-0-pre1/delete-only-backlink.ldif | 4 ++++ .../expected-dbcheck-link-output.txt | 7 +++++-- testprogs/blackbox/dbcheck-links.sh | 22 ++++++++++++++++++++++ 5 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 source4/selftest/provisions/release-4-5-0-pre1/add-dangling-forwardlink-user.ldif create mode 100644 source4/selftest/provisions/release-4-5-0-pre1/add-initially-normal-link.ldif create mode 100644 source4/selftest/provisions/release-4-5-0-pre1/delete-only-backlink.ldif diff --git a/source4/selftest/provisions/release-4-5-0-pre1/add-dangling-forwardlink-user.ldif b/source4/selftest/provisions/release-4-5-0-pre1/add-dangling-forwardlink-user.ldif new file mode 100644 index 00000000000..db4a68ccb59 --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/add-dangling-forwardlink-user.ldif @@ -0,0 +1,3 @@ +dn: CN=dangling-forward,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp +objectclass: user +samaccountname: dangling-forward diff --git a/source4/selftest/provisions/release-4-5-0-pre1/add-initially-normal-link.ldif b/source4/selftest/provisions/release-4-5-0-pre1/add-initially-normal-link.ldif new file mode 100644 index 00000000000..35b282bf392 --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/add-initially-normal-link.ldif @@ -0,0 +1,4 @@ +dn: CN=Allowed RODC Password Replication Group,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp +changetype: modify +add: member +member: cn=dangling-forward,cn=users,DC=release-4-5-0-pre1,DC=samba,DC=corp diff --git a/source4/selftest/provisions/release-4-5-0-pre1/delete-only-backlink.ldif b/source4/selftest/provisions/release-4-5-0-pre1/delete-only-backlink.ldif new file mode 100644 index 00000000000..d97550c5ed9 --- /dev/null +++ b/source4/selftest/provisions/release-4-5-0-pre1/delete-only-backlink.ldif @@ -0,0 +1,4 @@ +dn: CN=dangling-forward,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp +changetype: modify +delete: memberOf +memberOf: ;;CN=Allowed RODC Password Replication Group,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp diff --git a/source4/selftest/provisions/release-4-5-0-pre1/expected-dbcheck-link-output.txt b/source4/selftest/provisions/release-4-5-0-pre1/expected-dbcheck-link-output.txt index e6370a479d9..ea2ef233802 100644 --- a/source4/selftest/provisions/release-4-5-0-pre1/expected-dbcheck-link-output.txt +++ b/source4/selftest/provisions/release-4-5-0-pre1/expected-dbcheck-link-output.txt @@ -1,4 +1,4 @@ -Checking 222 objects +Checking 223 objects ERROR: linked attribute 'member' to ';;;;;;;;;CN=User UT. Tester,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp' is present on deleted object CN=gsg\0ADEL:91aa85cc-fc19-4b8c-9fc7-aaba425439c7,CN=Deleted Objects,DC=release-4-5-0-pre1,DC=samba,DC=corp Remove linked attribute member [YES] Fixed undead forward link member @@ -11,6 +11,9 @@ Fixed undead forward link member ERROR: linked attribute 'member' to ';;;;;;;;;CN=User1 UT. Tester,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp' is present on deleted object CN=udg\0ADEL:7cff5537-51b1-4d26-a295-0225dbea8525,CN=Deleted Objects,DC=release-4-5-0-pre1,DC=samba,DC=corp Remove linked attribute member [YES] Fixed undead forward link member +ERROR: missing backlink attribute 'memberOf' in CN=dangling-forward,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp for link member in CN=Allowed RODC Password Replication Group,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp +Fix missing backlink memberOf [YES] +Fixed missing backlink memberOf ERROR: target DN is deleted for member in object CN=swimmers,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp - ;;;;;;;;;CN=fred,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp Target GUID points at deleted DN 'CN=fred\\0ADEL:2301a64c-5b42-4ca8-851e-12d4a711cfb4,CN=Deleted Objects,DC=release-4-5-0-pre1,DC=samba,DC=corp' Remove stale DN link? [YES] @@ -42,4 +45,4 @@ Fixed undead forward link member ERROR: linked attribute 'member' to ';;;;;;;;;CN=User1 UT. Tester,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp' is present on deleted object CN=ddg\0ADEL:fb8c2fe3-5448-43de-99f9-e1d3b9357cfc,CN=Deleted Objects,DC=release-4-5-0-pre1,DC=samba,DC=corp Remove linked attribute member [YES] Fixed undead forward link member -Checked 222 objects (14 errors) +Checked 223 objects (15 errors) diff --git a/testprogs/blackbox/dbcheck-links.sh b/testprogs/blackbox/dbcheck-links.sh index f6c6a76d8f4..2a1bfbace02 100755 --- a/testprogs/blackbox/dbcheck-links.sh +++ b/testprogs/blackbox/dbcheck-links.sh @@ -91,6 +91,27 @@ dbcheck_clean() { fi } +add_dangling_link() { + ldif=$release_dir/add-dangling-forwardlink-user.ldif + TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif + if [ "$?" != "0" ]; then + return 1 + fi + + ldif=$release_dir/add-initially-normal-link.ldif + TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif + if [ "$?" != "0" ]; then + return 1 + fi + sleep 6 + + ldif=$release_dir/delete-only-backlink.ldif + TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb.d/DC%3DRELEASE-4-5-0-PRE1,DC%3DSAMBA,DC%3DCORP.ldb $ldif + if [ "$?" != "0" ]; then + return 1 + fi +} + add_dangling_backlink() { ldif=$release_dir/add-dangling-backlink-user.ldif TZ=UTC $ldbadd -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb $ldif @@ -186,6 +207,7 @@ if [ -d $release_dir ]; then testit "remove_one_link" remove_one_link testit "remove_one_user" remove_one_user testit "move_one_user" move_one_user + testit "add_dangling_link" add_dangling_link testit "add_dangling_backlink" add_dangling_backlink testit "dbcheck" dbcheck testit "dbcheck_clean" dbcheck_clean -- cgit v1.2.1