diff options
author | Jeremy Allison <jra@samba.org> | 2002-04-04 02:39:57 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-04-04 02:39:57 +0000 |
commit | 5de792e7e9c2ad1422ac146caba632baa3f4e5c5 (patch) | |
tree | c017aa1bb1bde03c1a1faa4eff7ad074ecbdc5f0 /source/nsswitch/winbindd_rpc.c | |
parent | 5c4ce2129f30112d7df1e5f0afd60ae6a96cd807 (diff) | |
download | samba-5de792e7e9c2ad1422ac146caba632baa3f4e5c5.tar.gz samba-5de792e7e9c2ad1422ac146caba632baa3f4e5c5.tar.xz samba-5de792e7e9c2ad1422ac146caba632baa3f4e5c5.zip |
Fixed the handle leak in the connection management code (this code is crap
and should be rewritten, just not now... :-).
Jeremy.
Diffstat (limited to 'source/nsswitch/winbindd_rpc.c')
-rw-r--r-- | source/nsswitch/winbindd_rpc.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/source/nsswitch/winbindd_rpc.c b/source/nsswitch/winbindd_rpc.c index c56b553bdca..53c39b2f570 100644 --- a/source/nsswitch/winbindd_rpc.c +++ b/source/nsswitch/winbindd_rpc.c @@ -67,7 +67,10 @@ static NTSTATUS query_user_list(struct winbindd_domain *domain, ctr.sam.info1 = &info1; ctx2 = talloc_init_named("winbindd dispinfo"); - if (!ctx2) return NT_STATUS_NO_MEMORY; + if (!ctx2) { + result = NT_STATUS_NO_MEMORY; + goto done; + } /* Query display info level 1 */ result = cli_samr_query_dispinfo(hnd->cli, ctx2, @@ -83,7 +86,9 @@ static NTSTATUS query_user_list(struct winbindd_domain *domain, (*info) = talloc_realloc(mem_ctx, *info, (*num_entries)*sizeof(WINBIND_USERINFO)); if (!(*info)) { - return NT_STATUS_NO_MEMORY; + result = NT_STATUS_NO_MEMORY; + talloc_destroy(ctx2); + goto done; } for (j=0;j<count;i++, j++) { @@ -157,6 +162,7 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain, sizeof(**info) * ((*num_entries) + count)); if (! *info) { talloc_destroy(mem_ctx2); + cli_samr_close(hnd->cli, mem_ctx, &dom_pol); return NT_STATUS_NO_MEMORY; } @@ -286,11 +292,14 @@ static NTSTATUS query_user(struct winbindd_domain *domain, if (!NT_STATUS_IS_OK(result)) goto done; + got_user_pol = True; + /* Get user info */ result = cli_samr_query_userinfo(hnd->cli, mem_ctx, &user_pol, 0x15, &ctr); cli_samr_close(hnd->cli, mem_ctx, &user_pol); + got_user_pol = False; user_info->group_rid = ctr->info.id21->group_rid; user_info->acct_name = unistr2_tdup(mem_ctx, |