[SCM] Samba Shared Repository - branch master updated

Andrew Tridgell tridge at samba.org
Sun Jan 16 22:10:02 MST 2011


The branch, master has been updated
       via  7320f19 ldb: new ABI sigs file
       via  8794e6d s4-dsdb: replaced the calls to ldb_search() in dsdb modules with dsdb_module_search()
       via  87f3151 s4-dsdb: pass parent request to dsdb_module_*() functions
       via  633c3e8 ldb: added ldb_req_mark_trusted()
       via  f334cd2 ldb: inherit parent flags on child requests in modules
      from  e665fce web_server: Display trivial placeholder page if SWAT could not be found.

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


- Log -----------------------------------------------------------------
commit 7320f1988cd937ed27b6612dec742798d8c41501
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Jan 17 15:24:52 2011 +1100

    ldb: new ABI sigs file
    
    Autobuild-User: Andrew Tridgell <tridge at samba.org>
    Autobuild-Date: Mon Jan 17 06:09:23 CET 2011 on sn-devel-104

commit 8794e6dad906b9cc1eefbe03665a0035b91ac199
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Jan 17 13:39:46 2011 +1100

    s4-dsdb: replaced the calls to ldb_search() in dsdb modules with dsdb_module_search()
    
    this ensures we follow the module stack, and set the parent on child
    requests

commit 87f31510475c6debd56ff874130f4f5d48bef9a5
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Jan 17 13:12:15 2011 +1100

    s4-dsdb: pass parent request to dsdb_module_*() functions
    
    this preserves the request hierarchy for dsdb_module_*() calls inside
    dsdb ldb modules
    
    Pair-Programmed-With: Andrew Bartlett <abartlet at samba.org>

commit 633c3e8da5a3a5ee1b61f9045c7dedb39bbb668a
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Jan 17 13:11:08 2011 +1100

    ldb: added ldb_req_mark_trusted()
    
    this is used to mark a ldb child request trusted, if the caller has
    validated all inputs. This will be used when creating new child
    requests with trusted inputs.
    
    Pair-Programmed-With: Andrew Bartlett <abartlet at samba.org>

commit f334cd22101b7ce32b3382fc4d048eadd7385f2e
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Mon Jan 17 11:42:35 2011 +1100

    ldb: inherit parent flags on child requests in modules

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

Summary of changes:
 source4/dsdb/samdb/ldb_modules/acl.c               |   25 ++--
 source4/dsdb/samdb/ldb_modules/acl_read.c          |    6 +-
 source4/dsdb/samdb/ldb_modules/acl_util.c          |   10 +-
 source4/dsdb/samdb/ldb_modules/descriptor.c        |    4 +-
 source4/dsdb/samdb/ldb_modules/linked_attributes.c |   13 +-
 source4/dsdb/samdb/ldb_modules/naming_fsmo.c       |    2 +-
 source4/dsdb/samdb/ldb_modules/objectclass.c       |    8 +-
 source4/dsdb/samdb/ldb_modules/operational.c       |   50 +++++---
 source4/dsdb/samdb/ldb_modules/partition.c         |    6 +-
 source4/dsdb/samdb/ldb_modules/partition_init.c    |   17 ++-
 source4/dsdb/samdb/ldb_modules/password_hash.c     |    4 +-
 source4/dsdb/samdb/ldb_modules/pdc_fsmo.c          |    2 +-
 source4/dsdb/samdb/ldb_modules/repl_meta_data.c    |  101 +++++++++--------
 source4/dsdb/samdb/ldb_modules/ridalloc.c          |   65 ++++++-----
 source4/dsdb/samdb/ldb_modules/rootdse.c           |   48 ++++----
 source4/dsdb/samdb/ldb_modules/samba3sid.c         |    8 +-
 source4/dsdb/samdb/ldb_modules/samba_dsdb.c        |    8 +-
 source4/dsdb/samdb/ldb_modules/samldb.c            |   63 ++++++----
 source4/dsdb/samdb/ldb_modules/schema.c            |    3 +-
 source4/dsdb/samdb/ldb_modules/schema_load.c       |    8 +-
 source4/dsdb/samdb/ldb_modules/schema_util.c       |   27 +++--
 source4/dsdb/samdb/ldb_modules/subtree_delete.c    |    3 +-
 source4/dsdb/samdb/ldb_modules/update_keytab.c     |   13 ++-
 source4/dsdb/samdb/ldb_modules/util.c              |  122 +++++++++++++------
 source4/dsdb/samdb/ldb_modules/util.h              |    2 +-
 source4/dsdb/samdb/ldb_modules/wscript_build       |    2 +-
 .../ldb/ABI/{ldb-0.9.23.sigs => ldb-0.9.24.sigs}   |    1 +
 source4/lib/ldb/common/ldb.c                       |   19 +++
 source4/lib/ldb/include/ldb_module.h               |    5 +
 source4/lib/ldb/wscript                            |    2 +-
 source4/torture/drs/unit/schemainfo_tests.c        |    8 +-
 31 files changed, 393 insertions(+), 262 deletions(-)
 copy source4/lib/ldb/ABI/{ldb-0.9.23.sigs => ldb-0.9.24.sigs} (99%)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/samdb/ldb_modules/acl.c b/source4/dsdb/samdb/ldb_modules/acl.c
index 00dc565..2db4de5 100644
--- a/source4/dsdb/samdb/ldb_modules/acl.c
+++ b/source4/dsdb/samdb/ldb_modules/acl.c
@@ -107,7 +107,7 @@ static int acl_module_init(struct ldb_module *module)
 	ret = dsdb_module_search_dn(module, mem_ctx, &res,
 				    ldb_dn_new(mem_ctx, ldb, "@KLUDGEACL"),
 				    attrs,
-				    DSDB_FLAG_NEXT_MODULE);
+				    DSDB_FLAG_NEXT_MODULE, NULL);
 	if (ret != LDB_SUCCESS) {
 		goto done;
 	}
@@ -591,7 +591,7 @@ static int acl_check_spn(TALLOC_CTX *mem_ctx,
 				    &acl_res, req->op.mod.message->dn,
 				    acl_attrs,
 				    DSDB_FLAG_NEXT_MODULE |
-				    DSDB_SEARCH_SHOW_DELETED);
+				    DSDB_SEARCH_SHOW_DELETED, req);
 	if (ret != LDB_SUCCESS) {
 		talloc_free(tmp_ctx);
 		return ret;
@@ -606,6 +606,7 @@ static int acl_check_spn(TALLOC_CTX *mem_ctx,
 				 LDB_SCOPE_ONELEVEL,
 				 netbios_attrs,
 				 DSDB_FLAG_NEXT_MODULE,
+				 req,
 				 "(ncName=%s)",
 				 ldb_dn_get_linearized(ldb_get_default_basedn(ldb)));
 
@@ -686,7 +687,7 @@ static int acl_add(struct ldb_module *module, struct ldb_request *req)
 
 	guid = class_schemaid_guid_by_lDAPDisplayName(schema,
 						      (char *)oc_el->values[oc_el->num_values-1].data);
-	ret = dsdb_module_check_access_on_dn(module, req, parent, SEC_ADS_CREATE_CHILD, guid);
+	ret = dsdb_module_check_access_on_dn(module, req, parent, SEC_ADS_CREATE_CHILD, guid, req);
 	if (ret != LDB_SUCCESS) {
 		return ret;
 	}
@@ -850,7 +851,7 @@ static int acl_modify(struct ldb_module *module, struct ldb_request *req)
 	struct security_descriptor *sd;
 	struct dom_sid *sid = NULL;
 	struct ldb_control *as_system = ldb_request_get_control(req, LDB_CONTROL_AS_SYSTEM_OID);
-	bool userPassword = dsdb_user_password_support(module, req);
+	bool userPassword = dsdb_user_password_support(module, req, req);
 	TALLOC_CTX *tmp_ctx = talloc_new(req);
 	static const char *acl_attrs[] = {
 		"nTSecurityDescriptor",
@@ -876,7 +877,7 @@ static int acl_modify(struct ldb_module *module, struct ldb_request *req)
 	}
 	ret = dsdb_module_search_dn(module, tmp_ctx, &acl_res, req->op.mod.message->dn,
 				    acl_attrs,
-				    DSDB_FLAG_NEXT_MODULE);
+				    DSDB_FLAG_NEXT_MODULE, req);
 
 	if (ret != LDB_SUCCESS) {
 		goto fail;
@@ -1075,7 +1076,7 @@ static int acl_delete(struct ldb_module *module, struct ldb_request *req)
 
 	/* First check if we have delete object right */
 	ret = dsdb_module_check_access_on_dn(module, req, req->op.del.dn,
-					     SEC_STD_DELETE, NULL);
+					     SEC_STD_DELETE, NULL, req);
 	if (ret == LDB_SUCCESS) {
 		return ldb_next_request(module, req);
 	}
@@ -1083,7 +1084,7 @@ static int acl_delete(struct ldb_module *module, struct ldb_request *req)
 	/* Nope, we don't have delete object. Lets check if we have delete
 	 * child on the parent */
 	ret = dsdb_module_check_access_on_dn(module, req, parent,
-					     SEC_ADS_DELETE_CHILD, NULL);
+					     SEC_ADS_DELETE_CHILD, NULL, req);
 	if (ret != LDB_SUCCESS) {
 		return ret;
 	}
@@ -1151,7 +1152,7 @@ static int acl_rename(struct ldb_module *module, struct ldb_request *req)
 	ret = dsdb_module_search_dn(module, tmp_ctx, &acl_res,
 				    req->op.rename.olddn, acl_attrs,
 				    DSDB_FLAG_NEXT_MODULE |
-				    DSDB_SEARCH_SHOW_RECYCLED);
+				    DSDB_SEARCH_SHOW_RECYCLED, req);
 	/* we sould be able to find the parent */
 	if (ret != LDB_SUCCESS) {
 		DEBUG(10,("acl: failed to find object %s\n",
@@ -1240,7 +1241,7 @@ static int acl_rename(struct ldb_module *module, struct ldb_request *req)
 		return ldb_module_done(req, NULL, NULL,  LDB_ERR_OPERATIONS_ERROR);
 	}
 
-	ret = dsdb_module_check_access_on_dn(module, req, newparent, SEC_ADS_CREATE_CHILD, guid);
+	ret = dsdb_module_check_access_on_dn(module, req, newparent, SEC_ADS_CREATE_CHILD, guid, req);
 	if (ret != LDB_SUCCESS) {
 		DEBUG(10,("acl:access_denied renaming %s", ldb_dn_get_linearized(req->op.rename.olddn)));
 		talloc_free(tmp_ctx);
@@ -1259,7 +1260,7 @@ static int acl_rename(struct ldb_module *module, struct ldb_request *req)
 		return ldb_next_request(module, req);
 	}
 	/* what about delete child on the current parent */
-	ret = dsdb_module_check_access_on_dn(module, req, oldparent, SEC_ADS_DELETE_CHILD, NULL);
+	ret = dsdb_module_check_access_on_dn(module, req, oldparent, SEC_ADS_DELETE_CHILD, NULL, req);
 	if (ret != LDB_SUCCESS) {
 		DEBUG(10,("acl:access_denied renaming %s", ldb_dn_get_linearized(req->op.rename.olddn)));
 		talloc_free(tmp_ctx);
@@ -1308,7 +1309,7 @@ static int acl_search_callback(struct ldb_request *req, struct ldb_reply *ares)
 		    || ac->sDRightsEffective) {
 			ret = dsdb_module_search_dn(ac->module, ac, &acl_res, ares->message->dn, 
 						    acl_attrs,
-						    DSDB_FLAG_NEXT_MODULE);
+						    DSDB_FLAG_NEXT_MODULE, req);
 			if (ret != LDB_SUCCESS) {
 				return ldb_module_done(ac->req, NULL, NULL, ret);
 			}
@@ -1390,7 +1391,7 @@ static int acl_search(struct ldb_module *module, struct ldb_request *req)
 	ac->allowedChildClasses = ldb_attr_in_list(req->op.search.attrs, "allowedChildClasses");
 	ac->allowedChildClassesEffective = ldb_attr_in_list(req->op.search.attrs, "allowedChildClassesEffective");
 	ac->sDRightsEffective = ldb_attr_in_list(req->op.search.attrs, "sDRightsEffective");
-	ac->userPassword = dsdb_user_password_support(module, ac);
+	ac->userPassword = dsdb_user_password_support(module, ac, req);
 	ac->schema = dsdb_get_schema(ldb, ac);
 
 	/* replace any attributes in the parse tree that are private,
diff --git a/source4/dsdb/samdb/ldb_modules/acl_read.c b/source4/dsdb/samdb/ldb_modules/acl_read.c
index 27cc1e7..4ed057c 100644
--- a/source4/dsdb/samdb/ldb_modules/acl_read.c
+++ b/source4/dsdb/samdb/ldb_modules/acl_read.c
@@ -105,7 +105,7 @@ static int aclread_callback(struct ldb_request *req, struct ldb_reply *ares)
 							     tmp_ctx,
 							     parent_dn,
 							     SEC_ADS_LIST,
-							     NULL);
+							     NULL, req);
 			if (ret == LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS) {
 				talloc_free(tmp_ctx);
 				return LDB_SUCCESS;
@@ -253,7 +253,7 @@ static int aclread_search(struct ldb_module *module, struct ldb_request *req)
 		ret = dsdb_module_search_dn(module, req, &res, req->op.search.base,
 					    acl_attrs,
 					    DSDB_FLAG_NEXT_MODULE |
-					    DSDB_SEARCH_SHOW_DELETED);
+					    DSDB_SEARCH_SHOW_DELETED, req);
 		if (ret != LDB_SUCCESS) {
 			return ldb_error(ldb, ret,
 					 "acl_read: Error retrieving instanceType for base.");
@@ -268,7 +268,7 @@ static int aclread_search(struct ldb_module *module, struct ldb_request *req)
 							     req,
 							     parent_dn,
 							     SEC_ADS_LIST,
-							     NULL);
+							     NULL, req);
 			if (ret == LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS) {
 				return ldb_module_done(req, NULL, NULL, LDB_ERR_NO_SUCH_OBJECT);
 			} else if (ret != LDB_SUCCESS) {
diff --git a/source4/dsdb/samdb/ldb_modules/acl_util.c b/source4/dsdb/samdb/ldb_modules/acl_util.c
index 1fb8b9a..a7bc331 100644
--- a/source4/dsdb/samdb/ldb_modules/acl_util.c
+++ b/source4/dsdb/samdb/ldb_modules/acl_util.c
@@ -55,7 +55,8 @@ int dsdb_module_check_access_on_dn(struct ldb_module *module,
 				   TALLOC_CTX *mem_ctx,
 				   struct ldb_dn *dn,
 				   uint32_t access_mask,
-				   const struct GUID *guid)
+				   const struct GUID *guid,
+				   struct ldb_request *parent)
 {
 	int ret;
 	struct ldb_result *acl_res;
@@ -73,7 +74,8 @@ int dsdb_module_check_access_on_dn(struct ldb_module *module,
 	ret = dsdb_module_search_dn(module, mem_ctx, &acl_res, dn,
 				    acl_attrs,
 				    DSDB_FLAG_NEXT_MODULE |
-				    DSDB_SEARCH_SHOW_RECYCLED);
+				    DSDB_SEARCH_SHOW_RECYCLED,
+				    parent);
 	if (ret != LDB_SUCCESS) {
 		DEBUG(0,("access_check: failed to find object %s\n", ldb_dn_get_linearized(dn)));
 		return ret;
@@ -90,7 +92,8 @@ int dsdb_module_check_access_on_guid(struct ldb_module *module,
 				     TALLOC_CTX *mem_ctx,
 				     struct GUID *guid,
 				     uint32_t access_mask,
-				     const struct GUID *oc_guid)
+				     const struct GUID *oc_guid,
+				     struct ldb_request *parent)
 {
 	int ret;
 	struct ldb_result *acl_res;
@@ -109,6 +112,7 @@ int dsdb_module_check_access_on_guid(struct ldb_module *module,
 				 acl_attrs,
 				 DSDB_FLAG_NEXT_MODULE |
 				 DSDB_SEARCH_SHOW_RECYCLED,
+				 parent,
 				 "objectGUID=%s", GUID_string(mem_ctx, guid));
 
 	if (ret != LDB_SUCCESS || acl_res->count == 0) {
diff --git a/source4/dsdb/samdb/ldb_modules/descriptor.c b/source4/dsdb/samdb/ldb_modules/descriptor.c
index 0ea91ba..dfbfdf6 100644
--- a/source4/dsdb/samdb/ldb_modules/descriptor.c
+++ b/source4/dsdb/samdb/ldb_modules/descriptor.c
@@ -572,7 +572,7 @@ static int descriptor_do_mod(struct descriptor_context *ac)
 		return ldb_operr(ldb);
 	}
 
-	objectclass = get_last_structural_class(schema, objectclass_element);
+	objectclass = get_last_structural_class(schema, objectclass_element, ac->req);
 	if (objectclass == NULL) {
 		return ldb_operr(ldb);
 	}
@@ -667,7 +667,7 @@ static int descriptor_do_add(struct descriptor_context *ac)
 		}
 
 		objectclass = get_last_structural_class(schema,
-							objectclass_element);
+							objectclass_element, ac->req);
 		if (objectclass == NULL) {
 			return ldb_operr(ldb);
 		}
diff --git a/source4/dsdb/samdb/ldb_modules/linked_attributes.c b/source4/dsdb/samdb/ldb_modules/linked_attributes.c
index ebbc7c6..324faa2 100644
--- a/source4/dsdb/samdb/ldb_modules/linked_attributes.c
+++ b/source4/dsdb/samdb/ldb_modules/linked_attributes.c
@@ -594,7 +594,8 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques
 static int linked_attributes_fix_links(struct ldb_module *module,
 				       struct ldb_dn *old_dn, struct ldb_dn *new_dn,
 				       struct ldb_message_element *el, struct dsdb_schema *schema,
-				       const struct dsdb_attribute *schema_attr)
+				       const struct dsdb_attribute *schema_attr,
+				       struct ldb_request *parent)
 {
 	unsigned int i, j;
 	TALLOC_CTX *tmp_ctx = talloc_new(module);
@@ -629,7 +630,7 @@ static int linked_attributes_fix_links(struct ldb_module *module,
 					    DSDB_FLAG_NEXT_MODULE |
 					    DSDB_SEARCH_SHOW_RECYCLED |
 					    DSDB_SEARCH_SHOW_DN_IN_STORAGE_FORMAT |
-					    DSDB_SEARCH_REVEAL_INTERNALS);
+					    DSDB_SEARCH_REVEAL_INTERNALS, parent);
 		if (ret != LDB_SUCCESS) {
 			ldb_asprintf_errstring(ldb, "Linked attribute %s->%s between %s and %s - remote not found - %s",
 					       el->name, target->lDAPDisplayName,
@@ -690,7 +691,7 @@ static int linked_attributes_fix_links(struct ldb_module *module,
 		   disable checking for this attribute */
 		el2->flags |= LDB_FLAG_INTERNAL_DISABLE_SINGLE_VALUE_CHECK;
 
-		ret = dsdb_module_modify(module, msg, DSDB_FLAG_NEXT_MODULE);
+		ret = dsdb_module_modify(module, msg, DSDB_FLAG_NEXT_MODULE, parent);
 		if (ret != LDB_SUCCESS) {
 			ldb_asprintf_errstring(ldb, "Linked attribute %s->%s between %s and %s - update failed - %s",
 					       el->name, target->lDAPDisplayName,
@@ -725,7 +726,7 @@ static int linked_attributes_rename(struct ldb_module *module, struct ldb_reques
 	ret = dsdb_module_search_dn(module, req, &res, req->op.rename.olddn,
 				    NULL,
 				    DSDB_FLAG_NEXT_MODULE |
-				    DSDB_SEARCH_SHOW_RECYCLED);
+				    DSDB_SEARCH_SHOW_RECYCLED, req);
 	if (ret != LDB_SUCCESS) {
 		return ret;
 	}
@@ -745,7 +746,7 @@ static int linked_attributes_rename(struct ldb_module *module, struct ldb_reques
 			continue;
 		}
 		ret = linked_attributes_fix_links(module, msg->dn, req->op.rename.newdn, el,
-						  schema, schema_attr);
+						  schema, schema_attr, req);
 		if (ret != LDB_SUCCESS) {
 			talloc_free(res);
 			return ret;
@@ -986,7 +987,7 @@ static int la_do_op_request(struct ldb_module *module, struct la_context *ac, st
 			 ldb_ldif_message_string(ldb, op, LDB_CHANGETYPE_MODIFY, new_msg)));
 	}
 
-	ret = dsdb_module_modify(module, new_msg, DSDB_FLAG_NEXT_MODULE);
+	ret = dsdb_module_modify(module, new_msg, DSDB_FLAG_NEXT_MODULE, ac->req);
 	if (ret != LDB_SUCCESS) {
 		ldb_debug(ldb, LDB_DEBUG_WARNING, "Failed to apply linked attribute change '%s'\n%s\n",
 			  ldb_errstring(ldb),
diff --git a/source4/dsdb/samdb/ldb_modules/naming_fsmo.c b/source4/dsdb/samdb/ldb_modules/naming_fsmo.c
index b309035..f59919c 100644
--- a/source4/dsdb/samdb/ldb_modules/naming_fsmo.c
+++ b/source4/dsdb/samdb/ldb_modules/naming_fsmo.c
@@ -67,7 +67,7 @@ static int naming_fsmo_init(struct ldb_module *module)
 	ret = dsdb_module_search_dn(module, mem_ctx, &naming_res,
 				    naming_dn,
 				    naming_attrs,
-				    DSDB_FLAG_NEXT_MODULE);
+				    DSDB_FLAG_NEXT_MODULE, NULL);
 	if (ret == LDB_ERR_NO_SUCH_OBJECT) {
 		ldb_debug(ldb, LDB_DEBUG_TRACE,
 			  "naming_fsmo_init: no partitions dn present: (skip loading of naming contexts details)");
diff --git a/source4/dsdb/samdb/ldb_modules/objectclass.c b/source4/dsdb/samdb/ldb_modules/objectclass.c
index 48813e5..b72b9bb 100644
--- a/source4/dsdb/samdb/ldb_modules/objectclass.c
+++ b/source4/dsdb/samdb/ldb_modules/objectclass.c
@@ -613,7 +613,7 @@ static int objectclass_do_add(struct oc_context *ac)
 
 		/* Make sure its valid to add an object of this type */
 		objectclass = get_last_structural_class(ac->schema,
-							objectclass_element);
+							objectclass_element, ac->req);
 		if(objectclass == NULL) {
 			ldb_asprintf_errstring(ldb,
 					       "Failed to find a structural class for %s",
@@ -1039,7 +1039,7 @@ static int objectclass_do_mod(struct oc_context *ac)
 			}
 
 			objectclass = get_last_structural_class(ac->schema,
-								oc_el_change);
+								oc_el_change, ac->req);
 			if (objectclass != NULL) {
 				ldb_asprintf_errstring(ldb,
 						       "objectclass: cannot add a new top-most structural objectclass '%s'!",
@@ -1075,7 +1075,7 @@ static int objectclass_do_mod(struct oc_context *ac)
 		case LDB_FLAG_MOD_DELETE:
 			/* get the actual top-most structural objectclass */
 			objectclass = get_last_structural_class(ac->schema,
-								oc_el_entry);
+								oc_el_entry, ac->req);
 			if (objectclass == NULL) {
 				/* no structural objectclass? */
 				talloc_free(mem_ctx);
@@ -1352,7 +1352,7 @@ static int objectclass_do_rename2(struct oc_context *ac)
 			/* existing entry without a valid object class? */
 			return ldb_operr(ldb);
 		}
-		objectclass = get_last_structural_class(ac->schema, oc_el_entry);
+		objectclass = get_last_structural_class(ac->schema, oc_el_entry, ac->req);
 		if (objectclass == NULL) {
 			/* existing entry without a valid object class? */
 			return ldb_operr(ldb);
diff --git a/source4/dsdb/samdb/ldb_modules/operational.c b/source4/dsdb/samdb/ldb_modules/operational.c
index a1b5a2e..ae61089 100644
--- a/source4/dsdb/samdb/ldb_modules/operational.c
+++ b/source4/dsdb/samdb/ldb_modules/operational.c
@@ -89,7 +89,8 @@ struct operational_data {
   construct a canonical name from a message
 */
 static int construct_canonical_name(struct ldb_module *module,
-	struct ldb_message *msg, enum ldb_scope scope)
+				    struct ldb_message *msg, enum ldb_scope scope,
+				    struct ldb_request *parent)
 {
 	char *canonicalName;
 	canonicalName = ldb_dn_canonical_string(msg, msg->dn);
@@ -103,7 +104,8 @@ static int construct_canonical_name(struct ldb_module *module,
   construct a primary group token for groups from a message
 */
 static int construct_primary_group_token(struct ldb_module *module,
-					 struct ldb_message *msg, enum ldb_scope scope)
+					 struct ldb_message *msg, enum ldb_scope scope,
+					 struct ldb_request *parent)
 {
 	struct ldb_context *ldb;
 	uint32_t primary_group_token;
@@ -127,7 +129,8 @@ static int construct_primary_group_token(struct ldb_module *module,
   construct the token groups for SAM objects from a message
 */
 static int construct_token_groups(struct ldb_module *module,
-				  struct ldb_message *msg, enum ldb_scope scope)
+				  struct ldb_message *msg, enum ldb_scope scope,
+				  struct ldb_request *parent)
 {
 	struct ldb_context *ldb = ldb_module_get_ctx(module);;
 	TALLOC_CTX *tmp_ctx = talloc_new(msg);
@@ -265,7 +268,8 @@ static int construct_token_groups(struct ldb_module *module,
   construct the parent GUID for an entry from a message
 */
 static int construct_parent_guid(struct ldb_module *module,
-				 struct ldb_message *msg, enum ldb_scope scope)
+				 struct ldb_message *msg, enum ldb_scope scope,
+				 struct ldb_request *parent)
 {
 	struct ldb_result *res, *parent_res;
 	const struct ldb_val *parent_guid;
@@ -279,7 +283,7 @@ static int construct_parent_guid(struct ldb_module *module,
 	/* determine if the object is NC by instance type */
 	ret = dsdb_module_search_dn(module, msg, &res, msg->dn, attrs,
 	                            DSDB_FLAG_NEXT_MODULE |
-	                            DSDB_SEARCH_SHOW_RECYCLED);
+	                            DSDB_SEARCH_SHOW_RECYCLED, parent);
 
 	instanceType = ldb_msg_find_attr_as_uint(res->msgs[0],
 						 "instanceType", 0);
@@ -298,7 +302,7 @@ static int construct_parent_guid(struct ldb_module *module,
 	}
 	ret = dsdb_module_search_dn(module, msg, &parent_res, parent_dn, attrs2,
 	                            DSDB_FLAG_NEXT_MODULE |
-	                            DSDB_SEARCH_SHOW_RECYCLED);
+	                            DSDB_SEARCH_SHOW_RECYCLED, parent);
 	talloc_free(parent_dn);
 
 	/* not NC, so the object should have a parent*/
@@ -330,7 +334,8 @@ static int construct_parent_guid(struct ldb_module *module,
   construct a subSchemaSubEntry
 */
 static int construct_subschema_subentry(struct ldb_module *module,
-					struct ldb_message *msg, enum ldb_scope scope)
+					struct ldb_message *msg, enum ldb_scope scope,
+					struct ldb_request *parent)
 {
 	struct operational_data *data = talloc_get_type(ldb_module_get_private(module), struct operational_data);
 	char *subSchemaSubEntry;
@@ -394,7 +399,8 @@ static int construct_msds_isrodc_with_dn(struct ldb_module *module,
 
 static int construct_msds_isrodc_with_server_dn(struct ldb_module *module,
 						struct ldb_message *msg,
-						struct ldb_dn *dn)
+						struct ldb_dn *dn,
+						struct ldb_request *parent)
 {
 	struct ldb_dn *server_dn;
 	const char *attr_obj_cat[] = { "objectCategory", NULL };
@@ -410,7 +416,7 @@ static int construct_msds_isrodc_with_server_dn(struct ldb_module *module,
 	}
 
 	ret = dsdb_module_search_dn(module, msg, &res, server_dn, attr_obj_cat,
-	                            DSDB_FLAG_NEXT_MODULE);
+	                            DSDB_FLAG_NEXT_MODULE, parent);
 	if (ret == LDB_ERR_NO_SUCH_OBJECT) {
 		DEBUG(4,(__location__ ": Can't get objectCategory for %s \n",
 					 ldb_dn_get_linearized(server_dn)));
@@ -429,7 +435,8 @@ static int construct_msds_isrodc_with_server_dn(struct ldb_module *module,
 }
 
 static int construct_msds_isrodc_with_computer_dn(struct ldb_module *module,
-						  struct ldb_message *msg)
+						  struct ldb_message *msg,
+						  struct ldb_request *parent)
 {
 	struct ldb_context *ldb;
 	const char *attr[] = { "serverReferenceBL", NULL };
@@ -438,7 +445,7 @@ static int construct_msds_isrodc_with_computer_dn(struct ldb_module *module,
 	struct ldb_dn *server_dn;
 
 	ret = dsdb_module_search_dn(module, msg, &res, msg->dn, attr,
-	                            DSDB_FLAG_NEXT_MODULE);
+	                            DSDB_FLAG_NEXT_MODULE, parent);
 	if (ret == LDB_ERR_NO_SUCH_OBJECT) {
 		DEBUG(4,(__location__ ": Can't get serverReferenceBL for %s \n",
 			 ldb_dn_get_linearized(msg->dn)));
@@ -458,14 +465,15 @@ static int construct_msds_isrodc_with_computer_dn(struct ldb_module *module,
 			 ldb_dn_get_linearized(res->msgs[0]->dn)));
 		return LDB_SUCCESS;
 	}
-	return construct_msds_isrodc_with_server_dn(module, msg, server_dn);
+	return construct_msds_isrodc_with_server_dn(module, msg, server_dn, parent);
 }
 
 /*
   construct msDS-isRODC attr
 */
 static int construct_msds_isrodc(struct ldb_module *module,
-				 struct ldb_message *msg, enum ldb_scope scope)
+				 struct ldb_message *msg, enum ldb_scope scope,
+				 struct ldb_request *parent)
 {
 	struct ldb_message_element * object_class;
 	struct ldb_message_element * object_category;
@@ -496,13 +504,13 @@ static int construct_msds_isrodc(struct ldb_module *module,
 			 * the DN of TO. Apply the previous rule for the "TO is an nTDSDSA  object" case,
 			 * substituting TN for TO.
 			 */
-			return construct_msds_isrodc_with_server_dn(module, msg, msg->dn);
+			return construct_msds_isrodc_with_server_dn(module, msg, msg->dn, parent);
 		}
 		if (strequal((const char*)object_class->values[i].data, "computer")) {
 			/* Let TS be the server  object named by TO!serverReferenceBL. Apply the previous
 			 * rule for the "TO is a server  object" case, substituting TS for TO.
 			 */
-			return construct_msds_isrodc_with_computer_dn(module, msg);
+			return construct_msds_isrodc_with_computer_dn(module, msg, parent);
 		}
 	}
 
@@ -518,7 +526,8 @@ static int construct_msds_isrodc(struct ldb_module *module,
 */
 static int construct_msds_keyversionnumber(struct ldb_module *module,
 					   struct ldb_message *msg,
-					   enum ldb_scope scope)
+					   enum ldb_scope scope,
+					   struct ldb_request *parent)
 {
 	uint32_t i;
 	enum ndr_err_code ndr_err;
@@ -605,7 +614,7 @@ static const struct {
 	const char *attr;
 	const char *replace;
 	const char *extra_attr;
-	int (*constructor)(struct ldb_module *, struct ldb_message *, enum ldb_scope);
+	int (*constructor)(struct ldb_module *, struct ldb_message *, enum ldb_scope, struct ldb_request *);
 } search_sub[] = {
 	{ "createTimestamp", "whenCreated", NULL , NULL },
 	{ "modifyTimestamp", "whenChanged", NULL , NULL },
@@ -657,7 +666,8 @@ static int operational_search_post_process(struct ldb_module *module,
 					   enum ldb_scope scope,
 					   const char * const *attrs_from_user,
 					   const char * const *attrs_searched_for,
-					   struct op_controls_flags* controls_flags)
+					   struct op_controls_flags* controls_flags,
+					   struct ldb_request *parent)
 {
 	struct ldb_context *ldb;
 	unsigned int i, a = 0;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list