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 <tri...@samba.org> Date: Mon Jan 17 15:24:52 2011 +1100 ldb: new ABI sigs file Autobuild-User: Andrew Tridgell <tri...@samba.org> Autobuild-Date: Mon Jan 17 06:09:23 CET 2011 on sn-devel-104 commit 8794e6dad906b9cc1eefbe03665a0035b91ac199 Author: Andrew Tridgell <tri...@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 <tri...@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 <abart...@samba.org> commit 633c3e8da5a3a5ee1b61f9045c7dedb39bbb668a Author: Andrew Tridgell <tri...@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 <abart...@samba.org> commit f334cd22101b7ce32b3382fc4d048eadd7385f2e Author: Matthias Dieter Wallnöfer <m...@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