r16187: Fix memleak.
authorGünther Deschner <gd@samba.org>
Tue, 13 Jun 2006 11:37:51 +0000 (11:37 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:17:23 +0000 (11:17 -0500)
Guenther
(This used to be commit e7d2b84aba2f2f5d844ba6a5fdcce35c3750d0b2)

source3/nsswitch/winbindd_ads.c

index f777b2ae18b445d16fcdfe036afde2951318ea42..a8eb6f86d0d6cf543c9f0b163fe66a92252e5cd5 100644 (file)
@@ -723,7 +723,7 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
        ADS_STATUS rc;
        int count;
        LDAPMessage *msg = NULL;
-       char *user_dn;
+       char *user_dn = NULL;
        DOM_SID *sids;
        int i;
        DOM_SID primary_group;
@@ -791,9 +791,6 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
 
        count = ads_pull_sids(ads, mem_ctx, msg, "tokenGroups", &sids);
 
-       if (msg) 
-               ads_msgfree(ads, msg);
-
        /* there must always be at least one group in the token, 
           unless we are talking to a buggy Win2k server */
 
@@ -811,15 +808,16 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
                                                    &primary_group,
                                                    p_num_groups, user_sids);
                if (NT_STATUS_IS_OK(status)) {
-                       return status;
+                       goto done;
                }
 
                /* lookup what groups this user is a member of by DN search on
                 * "member" */
 
-               return lookup_usergroups_member(domain, mem_ctx, user_dn, 
-                                               &primary_group,
-                                               p_num_groups, user_sids);
+               status = lookup_usergroups_member(domain, mem_ctx, user_dn, 
+                                                 &primary_group,
+                                                 p_num_groups, user_sids);
+               goto done;
        }
 
        *user_sids = NULL;
@@ -844,6 +842,8 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
        DEBUG(3,("ads lookup_usergroups (tokenGroups) succeeded for sid=%s\n",
                 sid_to_string(sid_string, sid)));
 done:
+       ads_memfree(ads, user_dn);
+       ads_msgfree(ads, msg);
        return status;
 }
 
@@ -885,7 +885,10 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
                goto done;
        }
 
-       sidstr = sid_binstring(group_sid);
+       if ((sidstr = sid_binstring(group_sid)) == NULL) {
+               status = NT_STATUS_NO_MEMORY;
+               goto done;
+       }
 
        /* search for all members of the group */
        if (!(ldap_exp = talloc_asprintf(mem_ctx, "(objectSid=%s)",sidstr))) {