[SCM] Samba Shared Repository - branch master updated

Matthias Dieter Wallnöfer mdw at samba.org
Mon Oct 25 05:50:01 MDT 2010


The branch, master has been updated
       via  c3fa990 s4:ldap.py - prove the denied multi-valued replace requests
       via  fedd4aa s4:objectclass_attrs LDB module - deny multi-valued replace requests
       via  6e407a3 s4:provision_*_references.ldif - "add" and do not "replace" the "wellKnownObjects"
      from  e24cd13 s4:samldb LDB module - fix indentations

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


- Log -----------------------------------------------------------------
commit c3fa990f216e68a4b36d064f8a34e93d951b9201
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Sun Oct 24 21:32:30 2010 +0200

    s4:ldap.py - prove the denied multi-valued replace requests
    
    Autobuild-User: Matthias Dieter Wallnöfer <mdw at samba.org>
    Autobuild-Date: Mon Oct 25 11:49:19 UTC 2010 on sn-devel-104

commit fedd4aa3cb7a0d4b895ec040d74cfbfbee42cac5
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Tue Oct 19 15:14:53 2010 +0200

    s4:objectclass_attrs LDB module - deny multi-valued replace requests
    
    This is the AD behaviour. But on attributes with the flag
    "FLAG_ATTR_REQ_PARTIAL_SET_MEMBER" it is allowed.

commit 6e407a3c1c7166801bcec364186c487c27b18550
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Mon Oct 25 11:28:09 2010 +0200

    s4:provision_*_references.ldif - "add" and do not "replace" the "wellKnownObjects"
    
    This is the correct AD operation in this case. Multi-valued replaces are
    generally denied most of the time.

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

Summary of changes:
 source4/dsdb/samdb/ldb_modules/objectclass_attrs.c |   13 +++++++
 source4/dsdb/tests/python/ldap.py                  |   36 ++++++++++----------
 source4/setup/provision_basedn_references.ldif     |    2 +-
 .../setup/provision_configuration_references.ldif  |    2 +-
 4 files changed, 33 insertions(+), 20 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c b/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c
index 2024a33..b3f7048 100644
--- a/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c
+++ b/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c
@@ -139,6 +139,19 @@ static int attr_handler(struct oc_context *ac)
 			}
 		}
 
+		/* Multi-valued replace operations are generally denied but
+		 * there do exist exceptions where attributes have the flag
+		 * "FLAG_ATTR_REQ_PARTIAL_SET_MEMBER" set. */
+		if ((ac->req->operation == LDB_MODIFY) &&
+		    (LDB_FLAG_MOD_TYPE(msg->elements[i].flags) == LDB_FLAG_MOD_REPLACE) &&
+		    (msg->elements[i].num_values > 1) &&
+		    ((attr->systemFlags & DS_FLAG_ATTR_REQ_PARTIAL_SET_MEMBER) == 0)) {
+			ldb_asprintf_errstring(ldb, "objectclass_attrs: attribute '%s' on entry '%s' is replaced multi-valued!",
+					       msg->elements[i].name,
+					       ldb_dn_get_linearized(msg->dn));
+			return LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS;
+		}
+
 		/* Substitute the attribute name to match in case */
 		msg->elements[i].name = attr->lDAPDisplayName;
 	}
diff --git a/source4/dsdb/tests/python/ldap.py b/source4/dsdb/tests/python/ldap.py
index c02f567..a7e718e 100755
--- a/source4/dsdb/tests/python/ldap.py
+++ b/source4/dsdb/tests/python/ldap.py
@@ -613,15 +613,15 @@ class BasicTests(unittest.TestCase):
             "objectclass": "group",
             "description": ["desc1", "desc2"]})
 
-#        m = Message()
-#        m.dn = Dn(ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
-#        m["description"] = MessageElement(["desc1","desc2"], FLAG_MOD_REPLACE,
-#          "description")
-#        try:
-#            ldb.modify(m)
-#            self.fail()
-#        except LdbError, (num, _):
-#            self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS)
+        m = Message()
+        m.dn = Dn(ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
+        m["description"] = MessageElement(["desc1","desc2"], FLAG_MOD_REPLACE,
+          "description")
+        try:
+            ldb.modify(m)
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS)
 
         m = Message()
         m.dn = Dn(ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
@@ -655,15 +655,15 @@ class BasicTests(unittest.TestCase):
           "description")
         ldb.modify(m)
 
-#        m = Message()
-#        m.dn = Dn(ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
-#        m["description"] = MessageElement(["desc1","desc2"], FLAG_MOD_REPLACE,
-#          "description")
-#        try:
-#            ldb.modify(m)
-#            self.fail()
-#        except LdbError, (num, _):
-#            self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS)
+        m = Message()
+        m.dn = Dn(ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
+        m["description"] = MessageElement(["desc1","desc2"], FLAG_MOD_REPLACE,
+          "description")
+        try:
+            ldb.modify(m)
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS)
 
 #        m = Message()
 #        m.dn = Dn(ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)
diff --git a/source4/setup/provision_basedn_references.ldif b/source4/setup/provision_basedn_references.ldif
index a71c11c..188982a 100644
--- a/source4/setup/provision_basedn_references.ldif
+++ b/source4/setup/provision_basedn_references.ldif
@@ -7,7 +7,7 @@ changetype: modify
 replace: rIDManagerReference
 rIDManagerReference: CN=RID Manager$,CN=System,${DOMAINDN}
 -
-replace: wellKnownObjects
+add: wellKnownObjects
 wellKnownObjects: B:32:6227f0af1fc2410d8e3bb10615bb5b0f:CN=NTDS Quotas,${DOMAINDN}
 wellKnownObjects: B:32:f4be92a4c777485e878e9421d53087db:CN=Microsoft,CN=Program Data,${DOMAINDN}
 wellKnownObjects: B:32:09460c08ae1e4a4ea0f64aee7daa1e5a:CN=Program Data,${DOMAINDN}
diff --git a/source4/setup/provision_configuration_references.ldif b/source4/setup/provision_configuration_references.ldif
index 6e31fb7..febe436 100644
--- a/source4/setup/provision_configuration_references.ldif
+++ b/source4/setup/provision_configuration_references.ldif
@@ -8,7 +8,7 @@ changetype: modify
 replace: subRefs
 subRefs: ${SCHEMADN}
 -
-replace: wellKnownObjects
+add: wellKnownObjects
 wellKnownObjects: B:32:6227f0af1fc2410d8e3bb10615bb5b0f:CN=NTDS Quotas,${CONFIGDN}
 wellKnownObjects: B:32:ab8153b7768811d1aded00c04fd8d5cd:CN=LostAndFoundConfig,${CONFIGDN}
 wellKnownObjects: B:32:18e2ea80684f11d2b9aa00c04f79f805:CN=Deleted Objects,${CONFIGDN}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list