From 8794e6dad906b9cc1eefbe03665a0035b91ac199 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 17 Jan 2011 13:39:46 +1100 Subject: [PATCH] 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 --- source4/dsdb/samdb/ldb_modules/rootdse.c | 22 +++++++++---------- source4/dsdb/samdb/ldb_modules/samldb.c | 21 +++++++++--------- .../dsdb/samdb/ldb_modules/update_keytab.c | 13 +++++++---- source4/dsdb/samdb/ldb_modules/wscript_build | 2 +- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/source4/dsdb/samdb/ldb_modules/rootdse.c b/source4/dsdb/samdb/ldb_modules/rootdse.c index 157a8c0ae5f..007af57d540 100644 --- a/source4/dsdb/samdb/ldb_modules/rootdse.c +++ b/source4/dsdb/samdb/ldb_modules/rootdse.c @@ -802,9 +802,9 @@ static int rootdse_init(struct ldb_module *module) Then stuff these values into an opaque */ - ret = ldb_search(ldb, mem_ctx, &res, - ldb_get_default_basedn(ldb), - LDB_SCOPE_BASE, attrs, NULL); + ret = dsdb_module_search(module, mem_ctx, &res, + ldb_get_default_basedn(ldb), + LDB_SCOPE_BASE, attrs, DSDB_FLAG_NEXT_MODULE, NULL, NULL); if (ret == LDB_SUCCESS && res->count == 1) { int domain_behaviour_version = ldb_msg_find_attr_as_int(res->msgs[0], @@ -824,9 +824,9 @@ static int rootdse_init(struct ldb_module *module) } } - ret = ldb_search(ldb, mem_ctx, &res, - samdb_partitions_dn(ldb, mem_ctx), - LDB_SCOPE_BASE, attrs, NULL); + ret = dsdb_module_search(module, mem_ctx, &res, + samdb_partitions_dn(ldb, mem_ctx), + LDB_SCOPE_BASE, attrs, DSDB_FLAG_NEXT_MODULE, NULL, NULL); if (ret == LDB_SUCCESS && res->count == 1) { int forest_behaviour_version = ldb_msg_find_attr_as_int(res->msgs[0], @@ -846,16 +846,16 @@ static int rootdse_init(struct ldb_module *module) } } - ret = ldb_search(ldb, mem_ctx, &res, - ldb_dn_new(mem_ctx, ldb, ""), - LDB_SCOPE_BASE, ds_attrs, NULL); + ret = dsdb_module_search(module, mem_ctx, &res, + ldb_dn_new(mem_ctx, ldb, ""), + LDB_SCOPE_BASE, ds_attrs, DSDB_FLAG_NEXT_MODULE, NULL, NULL); if (ret == LDB_SUCCESS && res->count == 1) { struct ldb_dn *ds_dn = ldb_msg_find_attr_as_dn(ldb, mem_ctx, res->msgs[0], "dsServiceName"); if (ds_dn) { - ret = ldb_search(ldb, mem_ctx, &res, ds_dn, - LDB_SCOPE_BASE, attrs, NULL); + ret = dsdb_module_search(module, mem_ctx, &res, ds_dn, + LDB_SCOPE_BASE, attrs, DSDB_FLAG_NEXT_MODULE, NULL, NULL); if (ret == LDB_SUCCESS && res->count == 1) { int domain_controller_behaviour_version = ldb_msg_find_attr_as_int(res->msgs[0], diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c b/source4/dsdb/samdb/ldb_modules/samldb.c index 53c45e62bc0..ee0d66cc049 100644 --- a/source4/dsdb/samdb/ldb_modules/samldb.c +++ b/source4/dsdb/samdb/ldb_modules/samldb.c @@ -1075,8 +1075,8 @@ static int samldb_prim_group_change(struct samldb_ctx *ac) /* Fetch informations from the existing object */ - ret = ldb_search(ldb, ac, &res, ac->msg->dn, LDB_SCOPE_BASE, attrs, - NULL); + ret = dsdb_module_search(ac->module, ac, &res, ac->msg->dn, LDB_SCOPE_BASE, attrs, + DSDB_FLAG_NEXT_MODULE, ac->req, NULL); if (ret != LDB_SUCCESS) { return ret; } @@ -1432,8 +1432,9 @@ static int samldb_sam_accountname_check(struct samldb_ctx *ac) /* Make sure that a "sAMAccountName" is only used once */ - ret = ldb_search(ldb, ac, &res, NULL, LDB_SCOPE_SUBTREE, no_attrs, - "(sAMAccountName=%s)", enc_str); + ret = dsdb_module_search(ac->module, ac, &res, NULL, LDB_SCOPE_SUBTREE, no_attrs, + DSDB_FLAG_NEXT_MODULE, ac->req, + "(sAMAccountName=%s)", enc_str); if (ret != LDB_SUCCESS) { return ret; } @@ -1467,8 +1468,8 @@ static int samldb_member_check(struct samldb_ctx *ac) /* Fetch informations from the existing object */ - ret = ldb_search(ldb, ac, &res, ac->msg->dn, LDB_SCOPE_BASE, attrs, - NULL); + ret = dsdb_module_search(ac->module, ac, &res, ac->msg->dn, LDB_SCOPE_BASE, attrs, + DSDB_FLAG_NEXT_MODULE, ac->req, NULL); if (ret != LDB_SUCCESS) { return ret; } @@ -1582,8 +1583,8 @@ static int samldb_description_check(struct samldb_ctx *ac) /* Fetch informations from the existing object */ - ret = ldb_search(ldb, ac, &res, ac->msg->dn, LDB_SCOPE_BASE, attrs, - NULL); + ret = dsdb_module_search(ac->module, ac, &res, ac->msg->dn, LDB_SCOPE_BASE, attrs, + DSDB_FLAG_NEXT_MODULE, ac->req, NULL); if (ret != LDB_SUCCESS) { return ret; } @@ -1782,8 +1783,8 @@ static int samldb_service_principal_names_change(struct samldb_ctx *ac) } /* Fetch the "servicePrincipalName"s if any */ - ret = ldb_search(ldb, ac, &res, ac->msg->dn, LDB_SCOPE_BASE, attrs, - NULL); + ret = dsdb_module_search(ac->module, ac, &res, ac->msg->dn, LDB_SCOPE_BASE, attrs, + DSDB_FLAG_NEXT_MODULE, ac->req, NULL); if (ret != LDB_SUCCESS) { return ret; } diff --git a/source4/dsdb/samdb/ldb_modules/update_keytab.c b/source4/dsdb/samdb/ldb_modules/update_keytab.c index 6a9245f89e0..81d672b5ec3 100644 --- a/source4/dsdb/samdb/ldb_modules/update_keytab.c +++ b/source4/dsdb/samdb/ldb_modules/update_keytab.c @@ -34,6 +34,7 @@ #include "auth/credentials/credentials_krb5.h" #include "system/kerberos.h" #include "auth/kerberos/kerberos.h" +#include "util.h" struct dn_list { struct ldb_message *msg; @@ -78,7 +79,9 @@ static struct update_kt_ctx *update_kt_ctx_init(struct ldb_module *module, * Just hope we are lucky and nothing breaks (using the tdb backend masks a lot * of async issues). -SSS */ -static int add_modified(struct ldb_module *module, struct ldb_dn *dn, bool do_delete) { +static int add_modified(struct ldb_module *module, struct ldb_dn *dn, bool do_delete, + struct ldb_request *parent) +{ struct ldb_context *ldb = ldb_module_get_ctx(module); struct update_kt_private *data = talloc_get_type(ldb_module_get_private(module), struct update_kt_private); struct dn_list *item; @@ -92,8 +95,10 @@ static int add_modified(struct ldb_module *module, struct ldb_dn *dn, bool do_de return ldb_oom(ldb); } - ret = ldb_search(ldb, data, &res, - dn, LDB_SCOPE_BASE, NULL, "%s", filter); + ret = dsdb_module_search(module, data, &res, + dn, LDB_SCOPE_BASE, NULL, + DSDB_FLAG_NEXT_MODULE, parent, + "%s", filter); talloc_free(filter); if (ret != LDB_SUCCESS) { return ret; @@ -214,7 +219,7 @@ static int ukt_search_modified_callback(struct ldb_request *req, if (ac->found) { /* do the dirty sync job here :/ */ - ret = add_modified(ac->module, ac->dn, ac->do_delete); + ret = add_modified(ac->module, ac->dn, ac->do_delete, ac->req); } if (ac->do_delete) { diff --git a/source4/dsdb/samdb/ldb_modules/wscript_build b/source4/dsdb/samdb/ldb_modules/wscript_build index 4cf1cfe19ab..0b269007e46 100644 --- a/source4/dsdb/samdb/ldb_modules/wscript_build +++ b/source4/dsdb/samdb/ldb_modules/wscript_build @@ -240,7 +240,7 @@ bld.SAMBA_MODULE('ldb_update_keytab', init_function='ldb_update_keytab_module_init', module_init_name='ldb_init_module', internal_module=False, - deps='talloc events credentials ldb com_err KERBEROS_UTIL' + deps='talloc events credentials ldb com_err KERBEROS_UTIL DSDB_MODULE_HELPERS' ) -- 2.34.1