dsdb: Add test for the case of a link pointing back at its own object
authorAndrew Bartlett <abartlet@samba.org>
Mon, 2 Mar 2020 04:44:10 +0000 (17:44 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Sun, 22 Mar 2020 04:39:36 +0000 (04:39 +0000)
This type of object was not possible to delete in Samba without first removing
the link.

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/dsdb-link-to-self [new file with mode: 0644]
source4/dsdb/tests/python/linked_attributes.py

diff --git a/selftest/knownfail.d/dsdb-link-to-self b/selftest/knownfail.d/dsdb-link-to-self
new file mode 100644 (file)
index 0000000..2d4383a
--- /dev/null
@@ -0,0 +1 @@
+^samba4.ldap.linked_attributes.python\(.*\).__main__.LATests.test_self_link
\ No newline at end of file
index d015065ab04a43db59206dbcb5ee46767135f5c5..533fa9437365e6fc18a51a88d891f85b21a6fb5b 100644 (file)
@@ -721,6 +721,31 @@ class LATests(samba.tests.TestCase):
                                   show_deactivated_link=0)
 
 
+    def test_self_link(self):
+        e1, = self.add_objects(1, 'group',
+                              'e_self_link')
+
+        guid = self.get_object_guid(e1)
+        self.add_linked_attribute(e1, e1, attr="member")
+        self.assert_forward_links(e1, [e1], attr='member')
+        self.assert_back_links(e1, [e1], attr='memberOf')
+
+        try:
+            self.samdb.delete(e1)
+        except ldb.LdbError:
+            # Cope with the current bug to make this a failure
+            self.remove_linked_attribute(e1, e1, attr="member")
+            self.samdb.delete(e1)
+            self.fail("could not delete object with link to itself")
+
+        self.assert_forward_links('<GUID=%s>' % guid, [], attr='member',
+                                  show_deleted=1)
+        self.assert_forward_links('<GUID=%s>' % guid, [], attr='member',
+                                  show_deactivated_link=0,
+                                  show_deleted=1)
+        self.assert_back_links('<GUID=%s>' % guid, [], attr='memberOf',
+                               show_deleted=1)
+
 if "://" not in host:
     if os.path.isfile(host):
         host = "tdb://%s" % host