selftest: Add test for dangling backlinks to objects that do not exist
authorAndrew Bartlett <abartlet@samba.org>
Mon, 2 Mar 2020 23:36:42 +0000 (12:36 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Sun, 22 Mar 2020 04:39:36 +0000 (04:39 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14306

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
selftest/knownfail.d/dbcheck-links [new file with mode: 0644]
testprogs/blackbox/dbcheck-links.sh

diff --git a/selftest/knownfail.d/dbcheck-links b/selftest/knownfail.d/dbcheck-links
new file mode 100644 (file)
index 0000000..99156e3
--- /dev/null
@@ -0,0 +1 @@
+^samba4.blackbox.dbcheck-links.release-4-5-0-pre1.dangling_link_to_unknown_does_not_prevent_delete
index d82d0b1dabcb13a836a42248e6aab4fd24f7983d..450faaf594ebc7aa49b7dfbb3d4f12297b14d6ea 100755 (executable)
@@ -777,6 +777,52 @@ EOF
     fi
 }
     
+dangling_link_to_unknown_does_not_prevent_delete() {
+
+    #
+    # Step1: add user "dangling"
+    #
+    ldif=$PREFIX_ABS/${RELEASE}/backlink_can_be_vanished1.ldif
+    dn='CN=dangling-for-vanish,CN=users,DC=release-4-5-0-pre1,DC=samba,DC=corp'
+    cat > $ldif <<EOF
+dn: $dn
+changetype: add
+objectclass: user
+samaccountname: dangling-v
+objectGUID: a4090081-ac2a-410c-8924-b255375160e8
+EOF
+
+    out=$(TZ=UTC $ldbmodify -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb --relax $ldif)
+    if [ "$?" != "0" ]; then
+       echo "ldbmodify returned:\n$out"
+       return 1
+    fi
+
+    #
+    # Step2: add a dangling backlink from
+    # "CN=dangling-for-vanish" to "CN=NOT Enterprise Admins"
+    #
+    ldif=$PREFIX_ABS/${RELEASE}/backlink_can_be_vanished2.ldif
+    {
+       echo "dn: $dn"
+       echo "changetype: modify"
+       echo "add: memberOf"
+       echo "memberOf: <GUID=09a47bff-0227-44e1-a8e4-63f9e726515d>;<SID=S-1-5-21-4177067393-1453636373-93818738-588>;CN=NOT Enterprise Admins,CN=Users,DC=release-4-5-0-pre1,DC=samba,DC=corp"
+    } > $ldif
+
+    out=$(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
+       echo "ldbmodify returned:\n$out"
+       return 1
+    fi
+
+    out=$(TZ=UTC $ldbdel -H tdb://$PREFIX_ABS/${RELEASE}/private/sam.ldb "$dn")
+    if [ "$?" != "0" ]; then
+       echo "ldbdel returned:\n$out"
+       return 1
+    fi
+}
+
 if [ -d $release_dir ]; then
     testit $RELEASE undump
     testit "add_two_more_users" add_two_more_users
@@ -837,6 +883,7 @@ if [ -d $release_dir ]; then
     # Currently this cannot pass
     testit "dbcheck_dangling_multi_valued_clean" dbcheck_clean
     testit "dangling_link_does_not_prevent_delete" dangling_link_does_not_prevent_delete
+    testit "dangling_link_to_unknown_does_not_prevent_delete" dangling_link_to_unknown_does_not_prevent_delete
 else
     subunit_start_test $RELEASE
     subunit_skip_test $RELEASE <<EOF