[SCM] Samba Shared Repository - branch master updated

Matthias Dieter Wallnöfer mdw at samba.org
Sat Aug 7 06:23:07 MDT 2010


The branch, master has been updated
       via  390bfed... s4:kcc_connection.c - fix typo in error message
       via  bc702a3... s4:ldap.py - comment a test part which fails with another error code on Windows
       via  8243272... s4:ldap.py - test the new "systemFlags" constraint
       via  f99d672... s4:objectclass LDB module - "add operation" - enhance and clean the "systemFlags" section
       via  e009d02... s4:ldap.py - test for an invalid "objectCategory" attribute
       via  6e6af9c... s4:objectclass LDB module - "add operation" - implement "objectCategory" validation
       via  299b59b... s4:ldap.py - proof for the impossibility to add a LSA-specific object over LDAP
       via  89c71a8... s4:urgent_replication.py - relax also here the add of a secrets object
       via  67b1e1b... s3:dcesrv_lsa.c - use the RELAX control in order to create LSA objects
       via  25e973d... s4:dsdb/common/util.c - add a function "dsdb_add"
       via  7d62128... s4:objectclass LDB module - "add operation" - reject creation of LSA specific objects
       via  a3c6d4c... s4:objectclass LDB module - "add operation" - move two checks
       via  ace6f52... s4:objectclass LDB module - "add operation" - deny multiple "objectclass" message elements
       via  9f0cbe1... s4:objectclass LDB module - "add" operation - free "mem_ctx" as soon as possible
      from  92282a8... s3: Remove references to smbd_messaging_context() from the spoolss server

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


- Log -----------------------------------------------------------------
commit 390bfed7b7d9edfa61e6d3b1f79ba33fbd44c42d
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Sat Aug 7 13:32:52 2010 +0200

    s4:kcc_connection.c - fix typo in error message

commit bc702a394ddd1912c621054acbc75f29166fd17a
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Sat Aug 7 12:30:33 2010 +0200

    s4:ldap.py - comment a test part which fails with another error code on Windows

commit 8243272fa071dadd62199f84d7caf608d90ea6ed
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Sat Aug 7 11:59:57 2010 +0200

    s4:ldap.py - test the new "systemFlags" constraint

commit f99d672b138e17e6b40f286a527812f75b65c3d7
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Sat Aug 7 11:50:10 2010 +0200

    s4:objectclass LDB module - "add operation" - enhance and clean the "systemFlags" section
    
    Also here we have to test for single-valueness.

commit e009d02bd5718fb5e9f636a616ff3b622d68325d
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Sat Aug 7 11:07:03 2010 +0200

    s4:ldap.py - test for an invalid "objectCategory" attribute

commit 6e6af9c14c1a421b8c3323982e5bd8bbb69589bb
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Sat Aug 7 11:04:53 2010 +0200

    s4:objectclass LDB module - "add operation" - implement "objectCategory" validation

commit 299b59b7c3603642154d78a5e3251926c8ce6e62
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Aug 5 22:23:22 2010 +0200

    s4:ldap.py - proof for the impossibility to add a LSA-specific object over LDAP

commit 89c71a8f06414a62c04d3460e9b4c9348bfb7fd1
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Aug 5 22:22:57 2010 +0200

    s4:urgent_replication.py - relax also here the add of a secrets object

commit 67b1e1b8f3314f49d028a11df5ccda1e81986cda
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Aug 5 22:00:27 2010 +0200

    s3:dcesrv_lsa.c - use the RELAX control in order to create LSA objects

commit 25e973d5db9ffa6d4138cdbe7c3dd1880149ad2a
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Aug 5 21:58:57 2010 +0200

    s4:dsdb/common/util.c - add a function "dsdb_add"

commit 7d62128e2cce540043df84d51967e43bdca4c493
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Aug 5 21:40:11 2010 +0200

    s4:objectclass LDB module - "add operation" - reject creation of LSA specific objects
    
    (only using the RELAX flag allowed)

commit a3c6d4c4d52c174d7fcac73fb315dc7e7c03fdd9
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Aug 5 21:02:29 2010 +0200

    s4:objectclass LDB module - "add operation" - move two checks
    
    To be more consistent with the MS-ADTS doc.

commit ace6f52d57e40d3e198f844fd3f2f35392ffc620
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Aug 5 21:01:38 2010 +0200

    s4:objectclass LDB module - "add operation" - deny multiple "objectclass" message elements
    
    Requested by MS-ADTS 3.1.1.5.2.2

commit 9f0cbe1558ec473f0a75b662bbc123473aa0a7aa
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Thu Aug 5 20:59:56 2010 +0200

    s4:objectclass LDB module - "add" operation - free "mem_ctx" as soon as possible
    
    We don't need to have it around until the end of the function.

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

Summary of changes:
 source4/dsdb/common/util.c                      |   30 ++++++
 source4/dsdb/kcc/kcc_connection.c               |    4 +-
 source4/dsdb/samdb/ldb_modules/objectclass.c    |  127 ++++++++++++++++-------
 source4/dsdb/tests/python/ldap.py               |   44 +++++++-
 source4/dsdb/tests/python/urgent_replication.py |    3 +-
 source4/rpc_server/lsa/dcesrv_lsa.c             |    6 +-
 6 files changed, 163 insertions(+), 51 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c
index b8d7278..52ba81d 100644
--- a/source4/dsdb/common/util.c
+++ b/source4/dsdb/common/util.c
@@ -3528,6 +3528,36 @@ int dsdb_request_add_controls(struct ldb_request *req, uint32_t dsdb_flags)
 }
 
 /*
+  an add with a set of controls
+*/
+int dsdb_add(struct ldb_context *ldb, const struct ldb_message *message,
+	     uint32_t dsdb_flags)
+{
+	struct ldb_request *req;
+	int ret;
+
+	ret = ldb_build_add_req(&req, ldb, ldb,
+				message,
+				NULL,
+				NULL,
+				ldb_op_default_callback,
+				NULL);
+
+	if (ret != LDB_SUCCESS) return ret;
+
+	ret = dsdb_request_add_controls(req, dsdb_flags);
+	if (ret != LDB_SUCCESS) {
+		talloc_free(req);
+		return ret;
+	}
+
+	ret = dsdb_autotransaction_request(ldb, req);
+
+	talloc_free(req);
+	return ret;
+}
+
+/*
   a modify with a set of controls
 */
 int dsdb_modify(struct ldb_context *ldb, const struct ldb_message *message,
diff --git a/source4/dsdb/kcc/kcc_connection.c b/source4/dsdb/kcc/kcc_connection.c
index e8f2e59..76b07b6 100644
--- a/source4/dsdb/kcc/kcc_connection.c
+++ b/source4/dsdb/kcc/kcc_connection.c
@@ -216,8 +216,8 @@ struct kcc_connection_list *kccsrv_find_connections(struct kccsrv_service *s,
 		ret = dsdb_find_guid_by_dn(s->samdb, server_dn,
 					   &list->servers[i].dsa_guid);
 		if (ret != LDB_SUCCESS) {
-			DEBUG(0, ("failed to find connection server's GUID"
-				  "by DN=%s: %s\n",
+			DEBUG(0, ("Failed to find connection server's GUID by "
+				  "DN=%s: %s\n",
 				  ldb_dn_get_linearized(server_dn),
 				  ldb_strerror(ret)));
 			continue;
diff --git a/source4/dsdb/samdb/ldb_modules/objectclass.c b/source4/dsdb/samdb/ldb_modules/objectclass.c
index 44d8889..9c2e416 100644
--- a/source4/dsdb/samdb/ldb_modules/objectclass.c
+++ b/source4/dsdb/samdb/ldb_modules/objectclass.c
@@ -401,13 +401,6 @@ static int objectclass_add(struct ldb_module *module, struct ldb_request *req)
 		}
 	}
 
-	/* the various objectclasses must be specified on add operations */
-	if (ldb_msg_find_element(req->op.add.message, "objectClass") == NULL) {
-		ldb_asprintf_errstring(ldb, "objectclass: Cannot add %s, no objectclass specified!",
-				       ldb_dn_get_linearized(req->op.add.message->dn));
-		return LDB_ERR_OBJECT_CLASS_VIOLATION;
-	}
-
 	ac = oc_init_context(module, req);
 	if (ac == NULL) {
 		return ldb_operr(ldb);
@@ -450,6 +443,7 @@ static int objectclass_do_add(struct oc_context *ac)
 	const char *rdn_name = NULL;
 	char *value;
 	const struct dsdb_class *objectclass;
+	struct ldb_dn *objectcategory;
 	int32_t systemFlags = 0;
 	int ret;
 
@@ -494,14 +488,16 @@ static int objectclass_do_add(struct oc_context *ac)
 	}
 
 	if (ac->schema != NULL) {
-		/* This is now the objectClass list from the database */
 		objectclass_element = ldb_msg_find_element(msg, "objectClass");
-
 		if (!objectclass_element) {
-			/* Where did it go?  bail now... */
+			ldb_asprintf_errstring(ldb, "objectclass: Cannot add %s, no objectclass specified!",
+					       ldb_dn_get_linearized(msg->dn));
 			talloc_free(mem_ctx);
-			return ldb_operr(ldb);
+			return LDB_ERR_OBJECT_CLASS_VIOLATION;
 		}
+
+		/* Here we do now get the "objectClass" list from the
+		 * database. */
 		ret = objectclass_sort(ac->module, ac->schema, mem_ctx,
 				       objectclass_element, &sorted);
 		if (ret != LDB_SUCCESS) {
@@ -509,17 +505,26 @@ static int objectclass_do_add(struct oc_context *ac)
 			return ret;
 		}
 		
-		ldb_msg_remove_attr(msg, "objectClass");
+		ldb_msg_remove_element(msg, objectclass_element);
+
+		/* Well, now we shouldn't find any additional "objectClass"
+		 * message element (required by the AD specification). */
+		objectclass_element = ldb_msg_find_element(msg, "objectClass");
+		if (objectclass_element != NULL) {
+			ldb_asprintf_errstring(ldb, "objectclass: Cannot add %s, only one 'objectclass' attribute specification is allowed!",
+					       ldb_dn_get_linearized(msg->dn));
+			talloc_free(mem_ctx);
+			return LDB_ERR_OBJECT_CLASS_VIOLATION;
+		}
+
+		/* We must completely replace the existing objectClass entry,
+		 * because we need it sorted. */
 		ret = ldb_msg_add_empty(msg, "objectClass", 0, NULL);
-		
 		if (ret != LDB_SUCCESS) {
 			talloc_free(mem_ctx);
 			return ret;
 		}
 
-		/* We must completely replace the existing objectClass entry,
-		 * because we need it sorted */
-
 		/* Move from the linked list back into an ldb msg */
 		for (current = sorted; current; current = current->next) {
 			value = talloc_strdup(msg, current->objectclass->lDAPDisplayName);
@@ -537,6 +542,8 @@ static int objectclass_do_add(struct oc_context *ac)
 			}
 		}
 
+		talloc_free(mem_ctx);
+
 		/* Retrive the message again so get_last_structural_class works */
 		objectclass_element = ldb_msg_find_element(msg, "objectClass");
 
@@ -559,6 +566,20 @@ static int objectclass_do_add(struct oc_context *ac)
 			return LDB_ERR_NAMING_VIOLATION;
 		}
 
+		if (objectclass->systemOnly && !ldb_request_get_control(ac->req, LDB_CONTROL_RELAX_OID)) {
+			ldb_asprintf_errstring(ldb, "objectClass %s is systemOnly, rejecting creation of %s",
+						objectclass->lDAPDisplayName, ldb_dn_get_linearized(msg->dn));
+			return LDB_ERR_UNWILLING_TO_PERFORM;
+		}
+
+		if (((strcmp(objectclass->lDAPDisplayName, "secret") == 0) ||
+		     (strcmp(objectclass->lDAPDisplayName, "trustedDomain") == 0)) &&
+                    !ldb_request_get_control(ac->req, LDB_CONTROL_RELAX_OID)) {
+			ldb_asprintf_errstring(ldb, "objectClass %s is LSA-specific, rejecting creation of %s",
+						objectclass->lDAPDisplayName, ldb_dn_get_linearized(msg->dn));
+			return LDB_ERR_UNWILLING_TO_PERFORM;
+		}
+
 		if (ac->search_res && ac->search_res->message) {
 			struct ldb_message_element *oc_el
 				= ldb_msg_find_element(ac->search_res->message, "objectClass");
@@ -589,43 +610,72 @@ static int objectclass_do_add(struct oc_context *ac)
 			}
 		}
 
-		if (objectclass->systemOnly && !ldb_request_get_control(ac->req, LDB_CONTROL_RELAX_OID)) {
-			ldb_asprintf_errstring(ldb, "objectClass %s is systemOnly, rejecting creation of %s",
-						objectclass->lDAPDisplayName, ldb_dn_get_linearized(msg->dn));
-			return LDB_ERR_UNWILLING_TO_PERFORM;
-		}
-
-		if (!ldb_msg_find_element(msg, "objectCategory")) {
-			struct dsdb_extended_dn_store_format *dn_format = talloc_get_type(ldb_module_get_private(ac->module), struct dsdb_extended_dn_store_format);
+		objectcategory = ldb_msg_find_attr_as_dn(ldb, ac, msg,
+							 "objectCategory");
+		if (objectcategory == NULL) {
+			struct dsdb_extended_dn_store_format *dn_format =
+					talloc_get_type(ldb_module_get_private(ac->module),
+							struct dsdb_extended_dn_store_format);
 			if (dn_format && dn_format->store_extended_dn_in_ldb == false) {
 				/* Strip off extended components */
-				struct ldb_dn *dn = ldb_dn_new(msg, ldb, objectclass->defaultObjectCategory);
+				struct ldb_dn *dn = ldb_dn_new(ac, ldb,
+							       objectclass->defaultObjectCategory);
 				value = ldb_dn_alloc_linearized(msg, dn);
 				talloc_free(dn);
 			} else {
-				value = talloc_strdup(msg, objectclass->defaultObjectCategory);
+				value = talloc_strdup(msg,
+						      objectclass->defaultObjectCategory);
 			}
 			if (value == NULL) {
-				talloc_free(mem_ctx);
 				return ldb_oom(ldb);
 			}
-			ldb_msg_add_string(msg, "objectCategory", value);
+
+			ret = ldb_msg_add_string(msg, "objectCategory", value);
+			if (ret != LDB_SUCCESS) {
+				return ret;
+			}
+		} else {
+			const struct dsdb_class *ocClass =
+					dsdb_class_by_cn_ldb_val(ac->schema,
+								 ldb_dn_get_rdn_val(objectcategory));
+			if (ocClass != NULL) {
+				struct ldb_dn *dn = ldb_dn_new(ac, ldb,
+							       ocClass->defaultObjectCategory);
+				if (ldb_dn_compare(objectcategory, dn) != 0) {
+					ocClass = NULL;
+				}
+			}
+			talloc_free(objectcategory);
+			if (ocClass == NULL) {
+				ldb_asprintf_errstring(ldb, "objectclass: Cannot add %s, 'objectCategory' attribute invalid!",
+						       ldb_dn_get_linearized(msg->dn));
+				return LDB_ERR_OBJECT_CLASS_VIOLATION;
+			}
 		}
+
 		if (!ldb_msg_find_element(msg, "showInAdvancedViewOnly") && (objectclass->defaultHidingValue == true)) {
 			ldb_msg_add_string(msg, "showInAdvancedViewOnly",
 						"TRUE");
 		}
 
-		/* There are very special rules for systemFlags, see MS-ADTS 3.1.1.5.2.4 */
+		/* There are very special rules for systemFlags, see MS-ADTS
+		 * MS-ADTS 3.1.1.5.2.4 */
+
 		el = ldb_msg_find_element(msg, "systemFlags");
+		if ((el != NULL) && (el->num_values > 1)) {
+			ldb_asprintf_errstring(ldb, "objectclass: Cannot add %s, 'systemFlags' attribute multivalued!",
+					       ldb_dn_get_linearized(msg->dn));
+			return LDB_ERR_CONSTRAINT_VIOLATION;
+		}
 
 		systemFlags = ldb_msg_find_attr_as_int(msg, "systemFlags", 0);
 
-		if (el) {
-			/* Only these flags may be set by a client, but we can't tell between a client and our provision at this point */
-			/* systemFlags &= ( SYSTEM_FLAG_CONFIG_ALLOW_RENAME | SYSTEM_FLAG_CONFIG_ALLOW_MOVE | SYSTEM_FLAG_CONFIG_LIMITED_MOVE); */
-			ldb_msg_remove_element(msg, el);
-		}
+		ldb_msg_remove_attr(msg, "systemFlags");
+
+		/* Only these flags may be set by a client, but we can't tell
+		 * between a client and our provision at this point
+		 * systemFlags &= ( SYSTEM_FLAG_CONFIG_ALLOW_RENAME | SYSTEM_FLAG_CONFIG_ALLOW_MOVE | SYSTEM_FLAG_CONFIG_LIMITED_MOVE);
+		 */
 
 		/* This flag is only allowed on attributeSchema objects */
 		if (ldb_attr_cmp(objectclass->lDAPDisplayName, "attributeSchema") == 0) {
@@ -648,14 +698,15 @@ static int objectclass_do_add(struct oc_context *ac)
 		/* TODO: If parent object is site or subnet, also add (SYSTEM_FLAG_CONFIG_ALLOW_RENAME) */
 
 		if (el || systemFlags != 0) {
-			samdb_msg_add_int(ldb, msg, msg, "systemFlags", systemFlags);
+			ret = samdb_msg_add_int(ldb, msg, msg, "systemFlags",
+						systemFlags);
+			if (ret != LDB_SUCCESS) {
+				return ret;
+			}
 		}
 	}
 
-	talloc_free(mem_ctx);
 	ret = ldb_msg_sanity_check(ldb, msg);
-
-
 	if (ret != LDB_SUCCESS) {
 		return ret;
 	}
diff --git a/source4/dsdb/tests/python/ldap.py b/source4/dsdb/tests/python/ldap.py
index 6ef8b6c..864b7fa 100755
--- a/source4/dsdb/tests/python/ldap.py
+++ b/source4/dsdb/tests/python/ldap.py
@@ -29,7 +29,7 @@ from ldb import FLAG_MOD_ADD, FLAG_MOD_REPLACE, FLAG_MOD_DELETE
 from samba import Ldb
 from samba.dsdb import (UF_NORMAL_ACCOUNT, UF_WORKSTATION_TRUST_ACCOUNT, 
     UF_PASSWD_NOTREQD, UF_ACCOUNTDISABLE, ATYPE_NORMAL_ACCOUNT,
-    ATYPE_WORKSTATION_TRUST)
+    ATYPE_WORKSTATION_TRUST, SYSTEM_FLAG_DOMAIN_DISALLOW_MOVE)
 
 from subunit.run import SubunitTestRunner
 import unittest
@@ -118,11 +118,21 @@ class BasicTests(unittest.TestCase):
         self.delete_force(self.ldb, "cn=ldaptestobject," + self.base_dn)
         self.delete_force(self.ldb, "description=xyz,cn=users," + self.base_dn)
         self.delete_force(self.ldb, "ou=testou,cn=users," + self.base_dn)
+        self.delete_force(self.ldb, "cn=testsecret,cn=system," + self.base_dn)
 
     def test_objectclasses(self):
         """Test objectClass behaviour"""
         print "Test objectClass behaviour"""
 
+        # We cannot create LSA-specific objects (oc "secret" or "trustedDomain")
+        try:
+            self.ldb.add({
+                "dn": "cn=testsecret,cn=system," + self.base_dn,
+                "objectClass": "secret" })
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_UNWILLING_TO_PERFORM)
+
         # Invalid objectclass specified
         try:
             self.ldb.add({
@@ -132,6 +142,26 @@ class BasicTests(unittest.TestCase):
         except LdbError, (num, _):
             self.assertEquals(num, ERR_NO_SUCH_ATTRIBUTE)
 
+        # Invalid objectCategory specified
+        try:
+            self.ldb.add({
+                "dn": "cn=ldaptestuser,cn=users," + self.base_dn,
+                "objectClass": "person",
+                "objectCategory": self.base_dn })
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_OBJECT_CLASS_VIOLATION)
+
+        # Multi-valued "systemFlags"
+        try:
+            self.ldb.add({
+                "dn": "cn=ldaptestuser,cn=users," + self.base_dn,
+                "objectClass": "person",
+                "systemFlags": ["0", str(SYSTEM_FLAG_DOMAIN_DISALLOW_MOVE)] })
+            self.fail()
+        except LdbError, (num, _):
+            self.assertEquals(num, ERR_CONSTRAINT_VIOLATION)
+
         # We cannot instanciate from an abstract objectclass
         try:
             self.ldb.add({
@@ -322,6 +352,7 @@ class BasicTests(unittest.TestCase):
             self.assertEquals(num, ERR_UNWILLING_TO_PERFORM)
 
         self.delete_force(self.ldb, "cn=ldaptestobject," + self.base_dn)
+        self.delete_force(self.ldb, "cn=testsecret,cn=system," + self.base_dn)
 
     def test_invalid_parent(self):
         """Test adding an object with invalid parent"""
@@ -1664,11 +1695,12 @@ objectClass: container
         except LdbError, (num, _):
             self.assertEquals(num, ERR_UNWILLING_TO_PERFORM)
 
-        try:
-            ldb.delete("cn=Enterprise Configuration,cn=Partitions," + self.configuration_dn)
-            self.fail()
-        except LdbError, (num, _):
-            self.assertEquals(num, ERR_UNWILLING_TO_PERFORM)
+# TODO: This fails with LDB_ERR_NOT_ALLOWED_ON_NON_LEAF on Windows
+#        try:
+#            ldb.delete("cn=Enterprise Configuration,cn=Partitions," + self.configuration_dn)
+#            self.fail()
+#        except LdbError, (num, _):
+#            self.assertEquals(num, ERR_UNWILLING_TO_PERFORM)
 
         # Performs some "systemFlags" testing
 
diff --git a/source4/dsdb/tests/python/urgent_replication.py b/source4/dsdb/tests/python/urgent_replication.py
index 42f3cd0..3c35af6 100755
--- a/source4/dsdb/tests/python/urgent_replication.py
+++ b/source4/dsdb/tests/python/urgent_replication.py
@@ -254,8 +254,7 @@ defaultHidingValue: TRUE""");
             "objectClass":"secret",
             "cn":"test secret",
             "name":"test secret",
-            "currentValue":"xxxxxxx"});
-
+            "currentValue":"xxxxxxx"}, ["relax:0"]);
 
         # urgent replication should be enabled when creating
         res = self.ldb.load_partition_usn(self.base_dn)
diff --git a/source4/rpc_server/lsa/dcesrv_lsa.c b/source4/rpc_server/lsa/dcesrv_lsa.c
index 37e807b..7c7bdfd 100644
--- a/source4/rpc_server/lsa/dcesrv_lsa.c
+++ b/source4/rpc_server/lsa/dcesrv_lsa.c
@@ -27,8 +27,8 @@
 #include "auth/kerberos/kerberos.h"
 #include "librpc/gen_ndr/ndr_drsblobs.h"
 #include "librpc/gen_ndr/ndr_lsa.h"
-#include "../lib/crypto/crypto.h"
 #include "lib/util/tsort.h"
+#include "dsdb/common/util.c"
 
 /*
   this type allows us to distinguish handle types
@@ -1084,7 +1084,7 @@ static NTSTATUS dcesrv_lsa_CreateTrustedDomain_base(struct dcesrv_call_state *dc
 	trusted_domain_state->trusted_domain_dn = talloc_reference(trusted_domain_state, msg->dn);
 
 	/* create the trusted_domain */
-	ret = ldb_add(sam_ldb, msg);
+	ret = dsdb_add(sam_ldb, msg, DSDB_MODIFY_RELAX);
 	switch (ret) {
 	case  LDB_SUCCESS:
 		break;
@@ -2966,7 +2966,7 @@ static NTSTATUS dcesrv_lsa_CreateSecret(struct dcesrv_call_state *dce_call, TALL
 	secret_state->secret_dn = talloc_reference(secret_state, msg->dn);
 
 	/* create the secret */
-	ret = ldb_add(secret_state->sam_ldb, msg);
+	ret = dsdb_add(secret_state->sam_ldb, msg, DSDB_MODIFY_RELAX);
 	if (ret != LDB_SUCCESS) {
 		DEBUG(0,("Failed to create secret record %s: %s\n",
 			 ldb_dn_get_linearized(msg->dn), 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list