[SCM] Samba Shared Repository - branch master updated
Matthias Dieter Wallnöfer
mdw at samba.org
Thu Nov 18 03:44:01 MST 2010
The branch, master has been updated
via ae272ac s4:repl_meta_data LDB module - allow also special DNs to be renamed correctly
via 732ef93 s4:api.py - DN tests - test a bit more special DNs and merge the comparison tests
via ca7979e ldb:ldb_dn_explode - point out that on error cases "data" is implicitly free'd
from 1c4807a s4-test: added greater control over tests to run
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit ae272acbdba5a8682dcdac98a59636863c129c8a
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Thu Nov 18 10:44:52 2010 +0100
s4:repl_meta_data LDB module - allow also special DNs to be renamed correctly
Do always escape RDN values - this fixes bug #7794
Autobuild-User: Matthias Dieter Wallnöfer <mdw at samba.org>
Autobuild-Date: Thu Nov 18 10:43:40 UTC 2010 on sn-devel-104
commit 732ef9353dff56384e8bb01aa20d2a371cd995c2
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Thu Nov 18 09:22:07 2010 +0100
s4:api.py - DN tests - test a bit more special DNs and merge the comparison tests
commit ca7979e1a31ae33a99105fe821493fbded8c845f
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date: Thu Nov 18 08:57:00 2010 +0100
ldb:ldb_dn_explode - point out that on error cases "data" is implicitly free'd
-----------------------------------------------------------------------
Summary of changes:
source4/dsdb/samdb/ldb_modules/repl_meta_data.c | 2 +-
source4/dsdb/tests/python/sam.py | 7 +++
source4/lib/ldb/common/ldb_dn.c | 2 +-
source4/lib/ldb/tests/python/api.py | 58 ++++++++++++++++++----
4 files changed, 56 insertions(+), 13 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
index 3db1fe9..f05d83e 100644
--- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
+++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c
@@ -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",
diff --git a/source4/dsdb/tests/python/sam.py b/source4/dsdb/tests/python/sam.py
index b64cce1..c3490da 100755
--- a/source4/dsdb/tests/python/sam.py
+++ b/source4/dsdb/tests/python/sam.py
@@ -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"""
diff --git a/source4/lib/ldb/common/ldb_dn.c b/source4/lib/ldb/common/ldb_dn.c
index a17d516..9bf8658 100644
--- a/source4/lib/ldb/common/ldb_dn.c
+++ b/source4/lib/ldb/common/ldb_dn.c
@@ -729,7 +729,7 @@ static bool ldb_dn_explode(struct ldb_dn *dn)
return true;
failed:
- LDB_FREE(dn->components);
+ LDB_FREE(dn->components); /* "data" is implicitly free'd */
dn->comp_num = 0;
LDB_FREE(dn->ext_components);
dn->ext_comp_num = 0;
diff --git a/source4/lib/ldb/tests/python/api.py b/source4/lib/ldb/tests/python/api.py
index b8adbaa..efb9791 100755
--- a/source4/lib/ldb/tests/python/api.py
+++ b/source4/lib/ldb/tests/python/api.py
@@ -342,49 +342,74 @@ class DnTests(unittest.TestCase):
x = ldb.Dn(self.ldb, "dc=foo11,bar=bloe")
y = ldb.Dn(self.ldb, "dc=foo11,bar=bloe")
self.assertEquals(x, y)
+ y = ldb.Dn(self.ldb, "dc=foo11,bar=blie")
+ self.assertNotEquals(x, y)
+ x = ldb.Dn(self.ldb, "")
+ y = ldb.Dn(self.ldb, "")
+ self.assertEquals(x, y)
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ y = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertEquals(x, y)
def test_str(self):
x = ldb.Dn(self.ldb, "dc=foo12,bar=bloe")
self.assertEquals(x.__str__(), "dc=foo12,bar=bloe")
+ x = ldb.Dn(self.ldb, "")
+ self.assertEquals(x.__str__(), "")
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertEquals(x.__str__(), "cn=foo\, bar\, bar,dc=test,dc=bloe")
def test_repr(self):
x = ldb.Dn(self.ldb, "dc=foo13,bla=blie")
self.assertEquals(x.__repr__(), "Dn('dc=foo13,bla=blie')")
+ x = ldb.Dn(self.ldb, "")
+ self.assertEquals(x.__repr__(), "Dn('')")
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertEquals(x.__repr__(), "Dn('cn=foo\\\\, bar\\\\, bar,dc=test,dc=bloe')")
def test_get_casefold(self):
x = ldb.Dn(self.ldb, "dc=foo14,bar=bloe")
self.assertEquals(x.get_casefold(), "DC=FOO14,BAR=bloe")
+ x = ldb.Dn(self.ldb, "")
+ self.assertEquals(x.get_casefold(), "")
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertEquals(x.get_casefold(), "CN=FOO\, BAR\, BAR,DC=TEST,DC=BLOE")
def test_validate(self):
x = ldb.Dn(self.ldb, "dc=foo15,bar=bloe")
self.assertTrue(x.validate())
+ x = ldb.Dn(self.ldb, "")
+ self.assertTrue(x.validate()) # the empty DN is valid (rootDSE)
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertTrue(x.validate())
def test_parent(self):
x = ldb.Dn(self.ldb, "dc=foo16,bar=bloe")
self.assertEquals("bar=bloe", x.parent().__str__())
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertEquals("dc=test,dc=bloe", x.parent().__str__())
def test_parent_nonexistant(self):
x = ldb.Dn(self.ldb, "@BLA")
self.assertEquals(None, x.parent())
-
- def test_compare(self):
- x = ldb.Dn(self.ldb, "dc=foo17,bar=bloe")
- y = ldb.Dn(self.ldb, "dc=foo17,bar=bloe")
- self.assertEquals(x, y)
- z = ldb.Dn(self.ldb, "dc=foo17,bar=blie")
- self.assertNotEquals(z, y)
+ x = ldb.Dn(self.ldb, "")
+ self.assertEquals(None, x.parent())
def test_is_valid(self):
x = ldb.Dn(self.ldb, "dc=foo18,dc=bloe")
self.assertTrue(x.is_valid())
x = ldb.Dn(self.ldb, "")
- # is_valid()'s return values appears to be a side effect of
- # some other ldb functions. yuck.
- # self.assertFalse(x.is_valid())
+ self.assertTrue(x.is_valid()) # the empty DN is valid (rootDSE)
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertTrue(x.is_valid())
def test_is_special(self):
x = ldb.Dn(self.ldb, "dc=foo19,bar=bloe")
self.assertFalse(x.is_special())
+ x = ldb.Dn(self.ldb, "")
+ self.assertFalse(x.is_special())
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertFalse(x.is_special())
x = ldb.Dn(self.ldb, "@FOOBAR")
self.assertTrue(x.is_special())
@@ -399,6 +424,10 @@ class DnTests(unittest.TestCase):
self.assertEquals(2, len(x))
x = ldb.Dn(self.ldb, "dc=foo21")
self.assertEquals(1, len(x))
+ x = ldb.Dn(self.ldb, "")
+ self.assertEquals(0, len(x)) # the empty DN has length 0
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertEquals(3, len(x))
def test_add_child(self):
x = ldb.Dn(self.ldb, "dc=foo22,bar=bloe")
@@ -434,11 +463,18 @@ class DnTests(unittest.TestCase):
def test_canonical_string(self):
x = ldb.Dn(self.ldb, "dc=foo25,bar=bloe")
self.assertEquals("/bloe/foo25", x.canonical_str())
+ x = ldb.Dn(self.ldb, "")
+ self.assertEquals("/", x.canonical_str())
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertEquals("test.bloe/foo\, bar\, bar", x.canonical_str())
def test_canonical_ex_string(self):
x = ldb.Dn(self.ldb, "dc=foo26,bar=bloe")
self.assertEquals("/bloe\nfoo26", x.canonical_ex_str())
-
+ x = ldb.Dn(self.ldb, "")
+ self.assertEquals("\n", x.canonical_ex_str())
+ x = ldb.Dn(self.ldb, "cn=foo\, bar\, bar,dc=test,dc=bloe")
+ self.assertEquals("test.bloe\nfoo\, bar\, bar", x.canonical_ex_str())
class LdbMsgTests(unittest.TestCase):
--
Samba Shared Repository
More information about the samba-cvs
mailing list