[SCM] Samba Shared Repository - branch master updated

Matthias Dieter Wallnöfer mdw at samba.org
Fri Nov 19 16:07:01 MST 2010


The branch, master has been updated
       via  8585de8 ldb:rdn_name LDB module - add more RDN name constraints
       via  bb679a4 ldb:ldb_rename on ldap backends - handle the case when the RDN value is empty
      from  d0993e1 s4:netlogon/LogonGetDomainInfo - handle a NULL "dns_hostname"

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 8585de88815490ed3c41571030bf20bff02a67d4
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Nov 11 09:12:17 2010 +0100

    ldb:rdn_name LDB module - add more RDN name constraints
    
    And some small cleanups
    
    Autobuild-User: Matthias Dieter Wallnöfer <mdw at samba.org>
    Autobuild-Date: Sat Nov 20 00:06:35 CET 2010 on sn-devel-104

commit bb679a4da3a32c61529fb56a0cbc9f6d6668146e
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Fri Nov 19 23:01:39 2010 +0100

    ldb:ldb_rename on ldap backends - handle the case when the RDN value is empty
    
    Otherwise we get "<RDN name>=(null),..."

-----------------------------------------------------------------------

Summary of changes:
 source4/dsdb/tests/python/ldap.py   |   52 +++++++++++++++++++++++++++++++++++
 source4/lib/ldb-samba/ldb_ildap.c   |    2 +-
 source4/lib/ldb/ldb_ldap/ldb_ldap.c |    2 +-
 source4/lib/ldb/modules/rdn_name.c  |   22 +++++++++++---
 4 files changed, 71 insertions(+), 7 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/tests/python/ldap.py b/source4/dsdb/tests/python/ldap.py
index d9a4f2a..e148e99 100755
--- a/source4/dsdb/tests/python/ldap.py
+++ b/source4/dsdb/tests/python/ldap.py
@@ -887,6 +887,34 @@ objectClass: bootableDevice
         """Tests the RDN"""
         print "Tests the RDN"""
 
+        # empty RDN
+        try:
+            self.ldb.add({
+                 "dn": "=,cn=users," + self.base_dn,
+                 "objectclass": "group"})
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_INVALID_DN_SYNTAX)
+
+        # empty RDN name
+        try:
+            self.ldb.add({
+                 "dn": "=ldaptestgroup,cn=users," + self.base_dn,
+                 "objectclass": "group"})
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_INVALID_DN_SYNTAX)
+
+        # empty RDN value
+        try:
+            self.ldb.add({
+                 "dn": "cn=,cn=users," + self.base_dn,
+                 "objectclass": "group"})
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_INVALID_DN_SYNTAX)
+
+        # a wrong RDN candidate
         try:
             self.ldb.add({
                  "dn": "description=xyz,cn=users," + self.base_dn,
@@ -910,6 +938,30 @@ objectClass: bootableDevice
         self.assertTrue("name" in res[0])
         self.assertTrue(res[0]["name"][0] == "ldaptestgroup")
 
+        # new empty RDN
+        try:
+            self.ldb.rename("cn=ldaptestgroup,cn=users," + self.base_dn,
+                            "=,cn=users," + self.base_dn)
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_INVALID_DN_SYNTAX)
+
+        # new empty RDN name
+        try:
+            self.ldb.rename("cn=ldaptestgroup,cn=users," + self.base_dn,
+                            "=ldaptestgroup,cn=users," + self.base_dn)
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_INVALID_DN_SYNTAX)
+
+        # new empty RDN value
+        try:
+            self.ldb.rename("cn=ldaptestgroup,cn=users," + self.base_dn,
+                            "cn=,cn=users," + self.base_dn)
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_NAMING_VIOLATION)
+
         m = Message()
         m.dn = Dn(ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
         m["name"] = MessageElement("cn=ldaptestuser", FLAG_MOD_REPLACE,
diff --git a/source4/lib/ldb-samba/ldb_ildap.c b/source4/lib/ldb-samba/ldb_ildap.c
index e2176d6..3c28690 100644
--- a/source4/lib/ldb-samba/ldb_ildap.c
+++ b/source4/lib/ldb-samba/ldb_ildap.c
@@ -633,7 +633,7 @@ static int ildb_rename(struct ildb_context *ac)
 	if ((rdn_name != NULL) && (rdn_val != NULL)) {
 		msg->r.ModifyDNRequest.newrdn =
 			talloc_asprintf(msg, "%s=%s", rdn_name,
-				ldb_dn_escape_value(msg, *rdn_val));
+					rdn_val->length > 0 ? ldb_dn_escape_value(msg, *rdn_val) : "");
 	} else {
 		msg->r.ModifyDNRequest.newrdn = talloc_strdup(msg, "");
 	}
diff --git a/source4/lib/ldb/ldb_ldap/ldb_ldap.c b/source4/lib/ldb/ldb_ldap/ldb_ldap.c
index ee677cc..b328ebf 100644
--- a/source4/lib/ldb/ldb_ldap/ldb_ldap.c
+++ b/source4/lib/ldb/ldb_ldap/ldb_ldap.c
@@ -410,7 +410,7 @@ static int lldb_rename(struct lldb_context *lldb_ac)
 
 	if ((rdn_name != NULL) && (rdn_val != NULL)) {
 		newrdn = talloc_asprintf(lldb_ac, "%s=%s", rdn_name,
-					 ldb_dn_escape_value(lldb, *rdn_val));
+					 rdn_val->length > 0 ? ldb_dn_escape_value(lldb, *rdn_val) : "");
 	} else {
 		newrdn = talloc_strdup(lldb_ac, "");
 	}
diff --git a/source4/lib/ldb/modules/rdn_name.c b/source4/lib/ldb/modules/rdn_name.c
index 38d87b0..313d999 100644
--- a/source4/lib/ldb/modules/rdn_name.c
+++ b/source4/lib/ldb/modules/rdn_name.c
@@ -121,8 +121,13 @@ static int rdn_name_add(struct ldb_module *module, struct ldb_request *req)
 	if (rdn_val_p == NULL) {
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
+	if (rdn_val_p->length == 0) {
+		ldb_asprintf_errstring(ldb, "Empty RDN value on %s not permitted!",
+				       ldb_dn_get_linearized(req->op.add.message->dn));
+		return LDB_ERR_INVALID_DN_SYNTAX;
+	}
 	rdn_val = ldb_val_dup(msg, rdn_val_p);
-	
+
 	/* Perhaps someone above us tried to set this? Then ignore it */
 	ldb_msg_remove_attr(msg, "name");
 
@@ -275,16 +280,24 @@ static int rdn_rename_callback(struct ldb_request *req, struct ldb_reply *ares)
 	if (msg->dn == NULL) {
 		goto error;
 	}
+
 	rdn_name = ldb_dn_get_rdn_name(ac->req->op.rename.newdn);
 	if (rdn_name == NULL) {
 		goto error;
 	}
+
 	rdn_val_p = ldb_dn_get_rdn_val(msg->dn);
 	if (rdn_val_p == NULL) {
-		return LDB_ERR_OPERATIONS_ERROR;
+		goto error;
+	}
+	if (rdn_val_p->length == 0) {
+		ldb_asprintf_errstring(ldb, "Empty RDN value on %s not permitted!",
+				       ldb_dn_get_linearized(req->op.rename.olddn));
+		return ldb_module_done(ac->req, NULL, NULL,
+				       LDB_ERR_NAMING_VIOLATION);
 	}
 	rdn_val = ldb_val_dup(msg, rdn_val_p);
-	
+
 	if (ldb_msg_add_empty(msg, rdn_name, LDB_FLAG_MOD_REPLACE, NULL) != 0) {
 		goto error;
 	}
@@ -311,8 +324,7 @@ static int rdn_rename_callback(struct ldb_request *req, struct ldb_reply *ares)
 	return ldb_next_request(ac->module, mod_req);
 
 error:
-	return ldb_module_done(ac->req, NULL, NULL,
-						 LDB_ERR_OPERATIONS_ERROR);
+	return ldb_module_done(ac->req, NULL, NULL, LDB_ERR_OPERATIONS_ERROR);
 }
 
 static int rdn_name_rename(struct ldb_module *module, struct ldb_request *req)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list