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

Reply via email to