[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