]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
r22647: Avoid leaking a full info3 structure on each winbindd cached login by making
authorGünther Deschner <gd@samba.org>
Thu, 3 May 2007 12:29:32 +0000 (12:29 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:19:52 +0000 (12:19 -0500)
netsamlogon_cache_get() return a talloc'ed structure.

Guenther

source/libsmb/samlogon_cache.c
source/nsswitch/winbindd_rpc.c
source/nsswitch/winbindd_util.c

index 3edbbaa2c1db81b9a8b70201c291cfb1a7d72b7d..0791cd80e4884f460461a4cbbad01bb214d10b58 100644 (file)
@@ -192,10 +192,13 @@ NET_USER_INFO_3* netsamlogon_cache_get( TALLOC_CTX *mem_ctx, const DOM_SID *user
        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 @@ BOOL netsamlogon_cache_have(const DOM_SID *user_sid)
        result = (user != NULL);
 
        talloc_destroy(mem_ctx);
-       SAFE_FREE(user);
 
        return result;
 }
index 44326764149199e57290a12be6bc2c3124f727a3..f408e1e15eef6e761300e519e85cd03db9743462 100644 (file)
@@ -422,7 +422,7 @@ static NTSTATUS query_user(struct winbindd_domain *domain,
                user_info->shell = NULL;
                user_info->primary_gid = (gid_t)-1;
                                                
-               SAFE_FREE(user);
+               TALLOC_FREE(user);
                                
                return NT_STATUS_OK;
        }
index 67f00e99bdecb7a7cb06dcedf6394b63a71d3407..d8d7249c2da38027f1835b7b5ca3bbb726218dc9 100644 (file)
@@ -984,7 +984,7 @@ NTSTATUS lookup_usergroups_cached(struct winbindd_domain *domain,
        }
 
        if (info3->num_groups == 0) {
-               SAFE_FREE(info3);
+               TALLOC_FREE(info3);
                return NT_STATUS_UNSUCCESSFUL;
        }
        
@@ -992,7 +992,7 @@ NTSTATUS lookup_usergroups_cached(struct winbindd_domain *domain,
        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 @@ NTSTATUS lookup_usergroups_cached(struct winbindd_domain *domain,
 
                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;