svn commit: samba r16187 - branches/SAMBA_3_0/source/nsswitch trunk/source/nsswitch

gd at samba.org gd at samba.org
Tue Jun 13 11:37:51 GMT 2006


Author: gd
Date: 2006-06-13 11:37:51 +0000 (Tue, 13 Jun 2006)
New Revision: 16187

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16187

Log:
Fix memleak.

Guenther

Modified:
   branches/SAMBA_3_0/source/nsswitch/winbindd_ads.c
   trunk/source/nsswitch/winbindd_ads.c


Changeset:
Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_ads.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_ads.c	2006-06-13 10:47:08 UTC (rev 16186)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_ads.c	2006-06-13 11:37:51 UTC (rev 16187)
@@ -723,7 +723,7 @@
 	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 @@
 
 	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 @@
 						    &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 @@
 	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 @@
 		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))) {

Modified: trunk/source/nsswitch/winbindd_ads.c
===================================================================
--- trunk/source/nsswitch/winbindd_ads.c	2006-06-13 10:47:08 UTC (rev 16186)
+++ trunk/source/nsswitch/winbindd_ads.c	2006-06-13 11:37:51 UTC (rev 16187)
@@ -723,7 +723,7 @@
 	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 @@
 
 	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 @@
 						    &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 @@
 	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 @@
 		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))) {



More information about the samba-cvs mailing list