svn commit: samba r22647 - in branches: SAMBA_3_0/source/libsmb SAMBA_3_0/source/nsswitch SAMBA_3_0_25/source/libsmb SAMBA_3_0_25/source/nsswitch

gd at samba.org gd at samba.org
Thu May 3 12:29:33 GMT 2007


Author: gd
Date: 2007-05-03 12:29:32 +0000 (Thu, 03 May 2007)
New Revision: 22647

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

Log:
Avoid leaking a full info3 structure on each winbindd cached login by making
netsamlogon_cache_get() return a talloc'ed structure.

Guenther

Modified:
   branches/SAMBA_3_0/source/libsmb/samlogon_cache.c
   branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c
   branches/SAMBA_3_0/source/nsswitch/winbindd_util.c
   branches/SAMBA_3_0_25/source/libsmb/samlogon_cache.c
   branches/SAMBA_3_0_25/source/nsswitch/winbindd_rpc.c
   branches/SAMBA_3_0_25/source/nsswitch/winbindd_util.c


Changeset:
Modified: branches/SAMBA_3_0/source/libsmb/samlogon_cache.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/samlogon_cache.c	2007-05-03 12:28:25 UTC (rev 22646)
+++ branches/SAMBA_3_0/source/libsmb/samlogon_cache.c	2007-05-03 12:29:32 UTC (rev 22647)
@@ -192,10 +192,13 @@
 	data = tdb_fetch_bystring( netsamlogon_tdb, keystr );
 	
 	if ( data.dptr ) {
-		
-		if ( (user = SMB_MALLOC_P(NET_USER_INFO_3)) == NULL )
+
+
+		user = TALLOC_ZERO_P(mem_ctx, NET_USER_INFO_3);
+		if (user == NULL) {
 			return NULL;
-			
+		}
+
 		prs_init( &ps, 0, mem_ctx, UNMARSHALL );
 		prs_give_memory( &ps, (char *)data.dptr, data.dsize, True );
 		
@@ -247,7 +250,6 @@
 	result = (user != NULL);
 
 	talloc_destroy(mem_ctx);
-	SAFE_FREE(user);
 
 	return result;
 }

Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c	2007-05-03 12:28:25 UTC (rev 22646)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_rpc.c	2007-05-03 12:29:32 UTC (rev 22647)
@@ -422,7 +422,7 @@
 		user_info->shell = NULL;
 		user_info->primary_gid = (gid_t)-1;
 						
-		SAFE_FREE(user);
+		TALLOC_FREE(user);
 				
 		return NT_STATUS_OK;
 	}

Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_util.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_util.c	2007-05-03 12:28:25 UTC (rev 22646)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_util.c	2007-05-03 12:29:32 UTC (rev 22647)
@@ -984,7 +984,7 @@
 	}
 
 	if (info3->num_groups == 0) {
-		SAFE_FREE(info3);
+		TALLOC_FREE(info3);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 	
@@ -992,7 +992,7 @@
 	sid_compose(&primary_group, &info3->dom_sid.sid, info3->user_rid);
 	
 	if (!add_sid_to_array(mem_ctx, &primary_group, user_sids, &num_groups)) {
-		SAFE_FREE(info3);
+		TALLOC_FREE(info3);
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -1002,12 +1002,12 @@
 
 		if (!add_sid_to_array(mem_ctx, &group_sid, user_sids,
 				 &num_groups)) {
-			SAFE_FREE(info3);
+			TALLOC_FREE(info3);
 			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
-	SAFE_FREE(info3);
+	TALLOC_FREE(info3);
 	*p_num_groups = num_groups;
 	status = (user_sids != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
 	

Modified: branches/SAMBA_3_0_25/source/libsmb/samlogon_cache.c
===================================================================
--- branches/SAMBA_3_0_25/source/libsmb/samlogon_cache.c	2007-05-03 12:28:25 UTC (rev 22646)
+++ branches/SAMBA_3_0_25/source/libsmb/samlogon_cache.c	2007-05-03 12:29:32 UTC (rev 22647)
@@ -194,10 +194,13 @@
 	data = tdb_fetch( netsamlogon_tdb, key );
 	
 	if ( data.dptr ) {
-		
-		if ( (user = SMB_MALLOC_P(NET_USER_INFO_3)) == NULL )
+
+
+		user = TALLOC_ZERO_P(mem_ctx, NET_USER_INFO_3);
+		if (user == NULL) {
 			return NULL;
-			
+		}
+
 		prs_init( &ps, 0, mem_ctx, UNMARSHALL );
 		prs_give_memory( &ps, data.dptr, data.dsize, True );
 		
@@ -249,7 +252,6 @@
 	result = (user != NULL);
 
 	talloc_destroy(mem_ctx);
-	SAFE_FREE(user);
 
 	return result;
 }

Modified: branches/SAMBA_3_0_25/source/nsswitch/winbindd_rpc.c
===================================================================
--- branches/SAMBA_3_0_25/source/nsswitch/winbindd_rpc.c	2007-05-03 12:28:25 UTC (rev 22646)
+++ branches/SAMBA_3_0_25/source/nsswitch/winbindd_rpc.c	2007-05-03 12:29:32 UTC (rev 22647)
@@ -422,7 +422,7 @@
 		user_info->shell = NULL;
 		user_info->primary_gid = (gid_t)-1;
 						
-		SAFE_FREE(user);
+		TALLOC_FREE(user);
 				
 		return NT_STATUS_OK;
 	}

Modified: branches/SAMBA_3_0_25/source/nsswitch/winbindd_util.c
===================================================================
--- branches/SAMBA_3_0_25/source/nsswitch/winbindd_util.c	2007-05-03 12:28:25 UTC (rev 22646)
+++ branches/SAMBA_3_0_25/source/nsswitch/winbindd_util.c	2007-05-03 12:29:32 UTC (rev 22647)
@@ -1040,7 +1040,7 @@
 	}
 
 	if (info3->num_groups == 0) {
-		SAFE_FREE(info3);
+		TALLOC_FREE(info3);
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 	
@@ -1048,7 +1048,7 @@
 	sid_compose(&primary_group, &info3->dom_sid.sid, info3->user_rid);
 	
 	if (!add_sid_to_array(mem_ctx, &primary_group, user_sids, &num_groups)) {
-		SAFE_FREE(info3);
+		TALLOC_FREE(info3);
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -1058,12 +1058,12 @@
 
 		if (!add_sid_to_array(mem_ctx, &group_sid, user_sids,
 				 &num_groups)) {
-			SAFE_FREE(info3);
+			TALLOC_FREE(info3);
 			return NT_STATUS_NO_MEMORY;
 		}
 	}
 
-	SAFE_FREE(info3);
+	TALLOC_FREE(info3);
 	*p_num_groups = num_groups;
 	status = (user_sids != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
 	



More information about the samba-cvs mailing list