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 <[email protected]>
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 <[email protected]>
Autobuild-Date: Mon Oct 25 17:42:33 UTC 2010 on sn-devel-104
commit fd7943bc80f0e96b70d4f851ea4e3f8f7689bead
Author: Matthias Dieter Wallnöfer <[email protected]>
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