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;