The branch, master has been updated via 6fb64b9 s4:"samdb_search_count" - introduce a "mem_ctx" parameter via fd7943b ldb:gendb_* calls: support a "NULL" resultset parameter from 8bc2b54 s4-test: Extend DRS-msDSIntId test to verify Configuration NC replica also
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 6fb64b9c7a281c2d148238390fccc08dce962f92 Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Mon Oct 25 18:14:02 2010 +0200 s4:"samdb_search_count" - introduce a "mem_ctx" parameter All other "samdb_search_*" calls do have one - why "samdb_search_count" doesn't? Autobuild-User: Matthias Dieter Wallnöfer <m...@samba.org> Autobuild-Date: Mon Oct 25 17:42:33 UTC 2010 on sn-devel-104 commit fd7943bc80f0e96b70d4f851ea4e3f8f7689bead Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Mon Oct 25 18:10:04 2010 +0200 ldb:gendb_* calls: support a "NULL" resultset parameter This is useful for "samdb_search_count" where only the amount of entries matters. ----------------------------------------------------------------------- Summary of changes: lib/util/util_ldb.c | 9 +++++---- source4/dsdb/common/util.c | 10 ++++------ source4/dsdb/samdb/ldb_modules/samldb.c | 4 ++-- source4/rpc_server/samr/dcesrv_samr.c | 9 ++++++--- 4 files changed, 17 insertions(+), 15 deletions(-) Changeset truncated at 500 lines: diff --git a/lib/util/util_ldb.c b/lib/util/util_ldb.c index 5a23ce4..a928245 100644 --- a/lib/util/util_ldb.c +++ b/lib/util/util_ldb.c @@ -55,22 +55,23 @@ int gendb_search_v(struct ldb_context *ldb, expr?"%s":NULL, expr); if (ret == LDB_SUCCESS) { - talloc_steal(mem_ctx, res->msgs); - DEBUG(6,("gendb_search_v: %s %s -> %d\n", basedn?ldb_dn_get_linearized(basedn):"NULL", expr?expr:"NULL", res->count)); ret = res->count; - *msgs = res->msgs; + if (msgs != NULL) { + *msgs = talloc_steal(mem_ctx, res->msgs); + } talloc_free(res); } else if (scope == LDB_SCOPE_BASE && ret == LDB_ERR_NO_SUCH_OBJECT) { ret = 0; - *msgs = NULL; + if (msgs != NULL) *msgs = NULL; } else { DEBUG(4,("gendb_search_v: search failed: %s\n", ldb_errstring(ldb))); ret = -1; + if (msgs != NULL) *msgs = NULL; } talloc_free(expr); diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c index 9b813d1..39589e5 100644 --- a/source4/dsdb/common/util.c +++ b/source4/dsdb/common/util.c @@ -192,19 +192,17 @@ struct dom_sid *samdb_search_dom_sid(struct ldb_context *sam_ldb, return the count of the number of records in the sam matching the query */ int samdb_search_count(struct ldb_context *sam_ldb, + TALLOC_CTX *mem_ctx, struct ldb_dn *basedn, - const char *format, ...) _PRINTF_ATTRIBUTE(3,4) + const char *format, ...) _PRINTF_ATTRIBUTE(4,5) { va_list ap; - struct ldb_message **res; const char *attrs[] = { NULL }; int ret; - TALLOC_CTX *tmp_ctx = talloc_new(sam_ldb); va_start(ap, format); - ret = gendb_search_v(sam_ldb, tmp_ctx, basedn, &res, attrs, format, ap); + ret = gendb_search_v(sam_ldb, mem_ctx, basedn, NULL, attrs, format, ap); va_end(ap); - talloc_free(tmp_ctx); return ret; } @@ -1871,7 +1869,7 @@ const char *samdb_client_site_name(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, * is for sure the same as our server site). If more sites do * exist then we don't know which one to use and set the site * name to "". */ - cnt = samdb_search_count(ldb, sites_container_dn, + cnt = samdb_search_count(ldb, mem_ctx, sites_container_dn, "(objectClass=site)"); if (cnt == 1) { site_name = samdb_server_site_name(ldb, mem_ctx); diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c b/source4/dsdb/samdb/ldb_modules/samldb.c index 780491f..26022b7 100644 --- a/source4/dsdb/samdb/ldb_modules/samldb.c +++ b/source4/dsdb/samdb/ldb_modules/samldb.c @@ -180,7 +180,7 @@ static int samldb_check_sAMAccountName(struct samldb_ctx *ac) return ldb_operr(ldb); } - ret = samdb_search_count(ldb, NULL, "(sAMAccountName=%s)", + ret = samdb_search_count(ldb, ac, NULL, "(sAMAccountName=%s)", ldb_binary_encode_string(ac, name)); if ((ret < 0) || (ret > 1)) { return ldb_operr(ldb); @@ -1523,7 +1523,7 @@ static int samldb_prim_group_users_check(struct samldb_ctx *ac) } /* Deny delete requests from groups which are primary ones */ - count = samdb_search_count(ldb, NULL, + count = samdb_search_count(ldb, ac, NULL, "(&(primaryGroupID=%u)(objectClass=user))", rid); if (count < 0) { diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c index ac75b41..cef580e 100644 --- a/source4/rpc_server/samr/dcesrv_samr.c +++ b/source4/rpc_server/samr/dcesrv_samr.c @@ -520,12 +520,15 @@ static NTSTATUS dcesrv_samr_info_DomGeneralInformation(struct samr_domain_state } /* No users in BUILTIN, and the LOCAL group types are only in builtin, and the global group type is never in BUILTIN */ - info->num_users = samdb_search_count(state->sam_ctx, state->domain_dn, + info->num_users = samdb_search_count(state->sam_ctx, mem_ctx, + state->domain_dn, "(objectClass=user)"); - info->num_groups = samdb_search_count(state->sam_ctx, state->domain_dn, + info->num_groups = samdb_search_count(state->sam_ctx, mem_ctx, + state->domain_dn, "(&(objectClass=group)(groupType=%u))", GTYPE_SECURITY_GLOBAL_GROUP); - info->num_aliases = samdb_search_count(state->sam_ctx, state->domain_dn, + info->num_aliases = samdb_search_count(state->sam_ctx, mem_ctx, + state->domain_dn, "(&(objectClass=group)(groupType=%u))", GTYPE_SECURITY_DOMAIN_LOCAL_GROUP); -- Samba Shared Repository