Pass a talloc_ctx to pdb_enum_aliasmem
authorVolker Lendecke <vl@samba.org>
Mon, 8 Jun 2009 17:43:01 +0000 (19:43 +0200)
committerVolker Lendecke <vl@samba.org>
Mon, 8 Jun 2009 19:14:10 +0000 (21:14 +0200)
13 files changed:
source3/groupdb/mapping.c
source3/groupdb/mapping.h
source3/groupdb/mapping_ldb.c
source3/groupdb/mapping_tdb.c
source3/include/passdb.h
source3/include/proto.h
source3/passdb/pdb_interface.c
source3/passdb/pdb_ldap.c
source3/passdb/pdb_wbc_sam.c
source3/rpc_server/srv_samr_nt.c
source3/utils/net_groupmap.c
source3/utils/net_sam.c
source3/winbindd/winbindd_group.c

index 4f05d732f14b41cae3f6d8b3c96a4f0382c6f18c..12d0bd365cf2dbf2cfcc1fe9d9f0533f688ff3d6 100644 (file)
@@ -606,14 +606,15 @@ NTSTATUS pdb_default_del_aliasmem(struct pdb_methods *methods,
 }
 
 NTSTATUS pdb_default_enum_aliasmem(struct pdb_methods *methods,
-                                  const DOM_SID *alias, DOM_SID **pp_members,
-                                  size_t *p_num_members)
+                                  const DOM_SID *alias, TALLOC_CTX *mem_ctx,
+                                  DOM_SID **pp_members, size_t *p_num_members)
 {
        if (!init_group_mapping()) {
                DEBUG(0,("failed to initialize group mapping\n"));
                return NT_STATUS_UNSUCCESSFUL;
        }
-       return backend->enum_aliasmem(alias, pp_members, p_num_members);
+       return backend->enum_aliasmem(alias, mem_ctx, pp_members,
+                                     p_num_members);
 }
 
 NTSTATUS pdb_default_alias_memberships(struct pdb_methods *methods,
index c37ae84b872230a1161be2c300121eba8be00f11..519b0ae08ae46301713375705d366d7da02ef95e 100644 (file)
@@ -29,5 +29,6 @@ struct mapping_backend {
                                         DOM_SID **sids, size_t *num);
        NTSTATUS (*add_aliasmem)(const DOM_SID *alias, const DOM_SID *member);
        NTSTATUS (*del_aliasmem)(const DOM_SID *alias, const DOM_SID *member);
-       NTSTATUS (*enum_aliasmem)(const DOM_SID *alias, DOM_SID **sids, size_t *num);
+       NTSTATUS (*enum_aliasmem)(const DOM_SID *alias, TALLOC_CTX *mem_ctx,
+                                 DOM_SID **sids, size_t *num);
 };
index cc06282aeea0551e8945698adb0a937ad75b78e5..89966e1986e779c506e83a842f3577e682f42ac6 100644 (file)
@@ -488,7 +488,8 @@ static NTSTATUS del_aliasmem(const DOM_SID *alias, const DOM_SID *member)
 /*
   enumerate sids that have the given alias set in member
 */
-static NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
+static NTSTATUS enum_aliasmem(const DOM_SID *alias, TALLOC_CTX *mem_ctx,
+                             DOM_SID **sids, size_t *num)
 {
        const char *attrs[] = {
                "member",
@@ -529,7 +530,7 @@ static NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
        for (i=0;i<el->num_values;i++) {
                DOM_SID sid;
                string_to_sid(&sid, (const char *)el->values[i].data);
-               status = add_sid_to_array_unique(NULL, &sid, sids, num);
+               status = add_sid_to_array_unique(mem_ctx, &sid, sids, num);
                if (!NT_STATUS_IS_OK(status)) {
                        goto done;
                }
index 29927eb592b7230a6a4617fb11d94e041d7d66e9..8498f0c82106879149392880f50b88bb857054f3 100644 (file)
@@ -535,6 +535,7 @@ static NTSTATUS add_aliasmem(const DOM_SID *alias, const DOM_SID *member)
 }
 
 struct aliasmem_state {
+       TALLOC_CTX *mem_ctx;
        const DOM_SID *alias;
        DOM_SID **sids;
        size_t *num;
@@ -580,7 +581,7 @@ static int collect_aliasmem(struct db_record *rec, void *priv)
                if (!string_to_sid(&member, member_string))
                        continue;
 
-               if (!NT_STATUS_IS_OK(add_sid_to_array(NULL, &member,
+               if (!NT_STATUS_IS_OK(add_sid_to_array(state->mem_ctx, &member,
                                                      state->sids,
                                                      state->num)))
                {
@@ -593,7 +594,8 @@ static int collect_aliasmem(struct db_record *rec, void *priv)
        return 0;
 }
 
-static NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
+static NTSTATUS enum_aliasmem(const DOM_SID *alias, TALLOC_CTX *mem_ctx,
+                             DOM_SID **sids, size_t *num)
 {
        GROUP_MAP map;
        struct aliasmem_state state;
@@ -611,6 +613,7 @@ static NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
        state.alias = alias;
        state.sids = sids;
        state.num = num;
+       state.mem_ctx = mem_ctx;
 
        db->traverse_read(db, collect_aliasmem, &state);
        return NT_STATUS_OK;
index 03d9f56c5a9b0246bcd908aa37d1d3c80beff0ff..d67c2842a6f3e294a8dff3b9ce6e8b58b5fc798b 100644 (file)
@@ -311,8 +311,8 @@ struct pdb_methods
        NTSTATUS (*del_aliasmem)(struct pdb_methods *methods,
                                 const DOM_SID *alias, const DOM_SID *member);
        NTSTATUS (*enum_aliasmem)(struct pdb_methods *methods,
-                                 const DOM_SID *alias, DOM_SID **members,
-                                 size_t *p_num_members);
+                                 const DOM_SID *alias, TALLOC_CTX *mem_ctx,
+                                 DOM_SID **members, size_t *p_num_members);
        NTSTATUS (*enum_alias_memberships)(struct pdb_methods *methods,
                                           TALLOC_CTX *mem_ctx,
                                           const DOM_SID *domain_sid,
index 19314e06c776196a0dbf23aa3578d8d274a9da19..40855a06501a213198b870f4f0d8067287897272 100644 (file)
@@ -231,7 +231,8 @@ NTSTATUS pdb_default_add_aliasmem(struct pdb_methods *methods,
 NTSTATUS pdb_default_del_aliasmem(struct pdb_methods *methods,
                                  const DOM_SID *alias, const DOM_SID *member);
 NTSTATUS pdb_default_enum_aliasmem(struct pdb_methods *methods,
-                                  const DOM_SID *alias, DOM_SID **pp_members,
+                                  const DOM_SID *alias, TALLOC_CTX *mem_ctx,
+                                  DOM_SID **pp_members,
                                   size_t *p_num_members);
 NTSTATUS pdb_default_alias_memberships(struct pdb_methods *methods,
                                       TALLOC_CTX *mem_ctx,
@@ -4547,7 +4548,7 @@ NTSTATUS pdb_get_aliasinfo(const DOM_SID *sid, struct acct_info *info);
 NTSTATUS pdb_set_aliasinfo(const DOM_SID *sid, struct acct_info *info);
 NTSTATUS pdb_add_aliasmem(const DOM_SID *alias, const DOM_SID *member);
 NTSTATUS pdb_del_aliasmem(const DOM_SID *alias, const DOM_SID *member);
-NTSTATUS pdb_enum_aliasmem(const DOM_SID *alias,
+NTSTATUS pdb_enum_aliasmem(const DOM_SID *alias, TALLOC_CTX *mem_ctx,
                           DOM_SID **pp_members, size_t *p_num_members);
 NTSTATUS pdb_enum_alias_memberships(TALLOC_CTX *mem_ctx,
                                    const DOM_SID *domain_sid,
index fdf09ae13b872c3e087a7b97749b756da1c85d02..a61dcb19d32750a76ecc110466dd9577595550c1 100644 (file)
@@ -933,11 +933,12 @@ NTSTATUS pdb_del_aliasmem(const DOM_SID *alias, const DOM_SID *member)
        return pdb->del_aliasmem(pdb, alias, member);
 }
 
-NTSTATUS pdb_enum_aliasmem(const DOM_SID *alias,
+NTSTATUS pdb_enum_aliasmem(const DOM_SID *alias, TALLOC_CTX *mem_ctx,
                           DOM_SID **pp_members, size_t *p_num_members)
 {
        struct pdb_methods *pdb = pdb_get_methods();
-       return pdb->enum_aliasmem(pdb, alias, pp_members, p_num_members);
+       return pdb->enum_aliasmem(pdb, alias, mem_ctx, pp_members,
+                                 p_num_members);
 }
 
 NTSTATUS pdb_enum_alias_memberships(TALLOC_CTX *mem_ctx,
index 2272aedf134d4334e812e8fdda0186b57113a69d..dddde75a4eab30c186b069166a626c24e18ebf82 100644 (file)
@@ -3564,6 +3564,7 @@ static NTSTATUS ldapsam_del_aliasmem(struct pdb_methods *methods,
 
 static NTSTATUS ldapsam_enum_aliasmem(struct pdb_methods *methods,
                                      const DOM_SID *alias,
+                                     TALLOC_CTX *mem_ctx,
                                      DOM_SID **pp_members,
                                      size_t *p_num_members)
 {
@@ -3656,7 +3657,7 @@ static NTSTATUS ldapsam_enum_aliasmem(struct pdb_methods *methods,
                if (!string_to_sid(&member, values[i]))
                        continue;
 
-               status = add_sid_to_array(NULL, &member, pp_members,
+               status = add_sid_to_array(mem_ctx, &member, pp_members,
                                          &num_members);
                if (!NT_STATUS_IS_OK(status)) {
                        ldap_value_free(values);
index 9c31a0d75caa3ae53c690a90dd637f6dfdcdf8e6..ec54d553d1d932153e0b2fd3d691319aafa1606a 100644 (file)
@@ -366,8 +366,10 @@ static NTSTATUS pdb_wbc_sam_get_aliasinfo(struct pdb_methods *methods,
 }
 
 static NTSTATUS pdb_wbc_sam_enum_aliasmem(struct pdb_methods *methods,
-                                  const DOM_SID *alias, DOM_SID **pp_members,
-                                  size_t *p_num_members)
+                                         const DOM_SID *alias,
+                                         TALLOC_CTX *mem_ctx,
+                                         DOM_SID **pp_members,
+                                         size_t *p_num_members)
 {
        return NT_STATUS_NOT_IMPLEMENTED;
 }
index fba1fc6fa133608a6d8df2746b862a7d4401d8d1..da649f98d9f63cce8dc93f0b75bb823160a4bc26 100644 (file)
@@ -5265,7 +5265,8 @@ NTSTATUS _samr_GetMembersInAlias(pipes_struct *p,
        DEBUG(10, ("sid is %s\n", sid_string_dbg(&ainfo->sid)));
 
        become_root();
-       status = pdb_enum_aliasmem(&ainfo->sid, &pdb_sids, &num_sids);
+       status = pdb_enum_aliasmem(&ainfo->sid, talloc_tos(), &pdb_sids,
+                                  &num_sids);
        unbecome_root();
 
        if (!NT_STATUS_IS_OK(status)) {
index 061ffea029e885ed1367356e52f9f2c8bae868fc..a00784e133b9474adc2a6aa3a53185f7f2b0ddbe 100644 (file)
@@ -732,7 +732,8 @@ static int net_groupmap_listmem(struct net_context *c, int argc, const char **ar
        members = NULL;
        num = 0;
 
-       if (!NT_STATUS_IS_OK(pdb_enum_aliasmem(&alias, &members, &num))) {
+       if (!NT_STATUS_IS_OK(pdb_enum_aliasmem(&alias, talloc_tos(),
+                                              &members, &num))) {
                d_fprintf(stderr, "Could not list members for sid %s\n", argv[0]);
                return -1;
        }
index 45dfb61cef123b2d4e8e2d3bd3f99c037a315428..5f41f21aaa95edc1ebe440d6e7a9577dcfca8701 100644 (file)
@@ -1233,7 +1233,8 @@ static int net_sam_listmem(struct net_context *c, int argc, const char **argv)
                DOM_SID *members = NULL;
                size_t i, num_members = 0;
 
-               status = pdb_enum_aliasmem(&group, &members, &num_members);
+               status = pdb_enum_aliasmem(&group, talloc_tos(), &members,
+                                          &num_members);
 
                if (!NT_STATUS_IS_OK(status)) {
                        d_fprintf(stderr, "Listing group members failed with "
index e31a55b0cf17944856913ac912551cb071102de5..4db2c56b8f573b97b6bab7e95d547e1e040c1c88 100644 (file)
@@ -157,8 +157,8 @@ static bool fill_passdb_alias_grmem(struct winbindd_domain *domain,
        *gr_mem = NULL;
        *gr_mem_len = 0;
 
-       if (!NT_STATUS_IS_OK(pdb_enum_aliasmem(group_sid, &members,
-                                              &num_members)))
+       if (!NT_STATUS_IS_OK(pdb_enum_aliasmem(group_sid, talloc_tos(),
+                                              &members, &num_members)))
                return True;
 
        for (i=0; i<num_members; i++) {