s4:repl_meta_data LDB module - allow also special DNs to be renamed correctly
authorMatthias Dieter Wallnöfer <mdw@samba.org>
Thu, 18 Nov 2010 09:44:52 +0000 (10:44 +0100)
committerMatthias Dieter Wallnöfer <mdw@samba.org>
Thu, 18 Nov 2010 10:43:40 +0000 (10:43 +0000)
Do always escape RDN values - this fixes bug #7794

Autobuild-User: Matthias Dieter Wallnöfer <mdw@samba.org>
Autobuild-Date: Thu Nov 18 10:43:40 UTC 2010 on sn-devel-104

source4/dsdb/samdb/ldb_modules/repl_meta_data.c
source4/dsdb/tests/python/sam.py

index 3db1fe95909d77ddcc1477e528f4041ae1e1aab3..f05d83ebaa34a40cc53c3852b222f75dff3f1601 100644 (file)
@@ -2609,7 +2609,7 @@ static int replmd_delete(struct ldb_module *module, struct ldb_request *req)
                /* Add a formatted child */
                retb = ldb_dn_add_child_fmt(new_dn, "%s=%s\\0ADEL:%s",
                                                rdn_name,
-                                               rdn_value->data,
+                                               ldb_dn_escape_value(tmp_ctx, *rdn_value),
                                                GUID_string(tmp_ctx, &guid));
                if (!retb) {
                        DEBUG(0,(__location__ ": Unable to add a formatted child to dn: %s",
index b64cce1c3f5b92742342081e4eff96dd718537aa..c3490dae677c7421ee3d28b1fd617f7fb612f4d6 100755 (executable)
@@ -92,6 +92,7 @@ class SamTests(unittest.TestCase):
 
         self.delete_force(self.ldb, "cn=ldaptestuser,cn=users," + self.base_dn)
         self.delete_force(self.ldb, "cn=ldaptestuser2,cn=users," + self.base_dn)
+        self.delete_force(self.ldb, "cn=ldaptest\,specialuser,cn=users," + self.base_dn)
         self.delete_force(self.ldb, "cn=ldaptestcomputer,cn=computers," + self.base_dn)
         self.delete_force(self.ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
         self.delete_force(self.ldb, "cn=ldaptestgroup2,cn=users," + self.base_dn)
@@ -595,6 +596,12 @@ class SamTests(unittest.TestCase):
         self.delete_force(self.ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
         self.delete_force(self.ldb, "cn=ldaptestgroup2,cn=users," + self.base_dn)
 
+        # Make also a small test for accounts with special DNs ("," in this case)
+        ldb.add({
+            "dn": "cn=ldaptest\,specialuser,cn=users," + self.base_dn,
+            "objectclass": "user"})
+        self.delete_force(self.ldb, "cn=ldaptest\,specialuser,cn=users," + self.base_dn)
+
     def test_sam_attributes(self):
         """Test the behaviour of special attributes of SAM objects"""
         print "Testing the behaviour of special attributes of SAM objects\n"""