diff options
author | Michael Adam <obnox@samba.org> | 2012-12-10 15:06:27 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2012-12-10 18:18:54 +0100 |
commit | c5b150b33fc54ed97dbd0736cc6f4c15977d6e70 (patch) | |
tree | 4c3c9ea948c9171081dd41baf599607611db1702 /source3 | |
parent | 0770a4c01bef26ec51321cd5b97aea4eab9e00a8 (diff) | |
download | samba-c5b150b33fc54ed97dbd0736cc6f4c15977d6e70.tar.gz samba-c5b150b33fc54ed97dbd0736cc6f4c15977d6e70.tar.bz2 samba-c5b150b33fc54ed97dbd0736cc6f4c15977d6e70.zip |
s3:auth: fix create_token_from_sid() to not fail in the winbindd case
Commit 1c3c5e2156d9096f60bd53a96b88c2f1001d898a which factored
the sid-based variant out of create_token_from_username() broke
the case of a user handled by winbindd in that the "found_username"
was set to NULL which caused the function to fail with
NT_STATUS_NO_MEMORY further down.
This patch fixes the function so that the case of found_username == NULL
is cleanly separated from the NO_MEMORY case and the caller can provide
the username in this case, if required.
This fixes bug #9457.
Signed-off-by: Michael Adam <obnox@samba.org>
Autobuild-User(master): Volker Lendecke <vl@samba.org>
Autobuild-Date(master): Mon Dec 10 18:18:54 CET 2012 on sn-devel-104
Diffstat (limited to 'source3')
-rw-r--r-- | source3/auth/token_util.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/source3/auth/token_util.c b/source3/auth/token_util.c index 7c79ef630b..6f4bce0a85 100644 --- a/source3/auth/token_util.c +++ b/source3/auth/token_util.c @@ -610,6 +610,11 @@ static NTSTATUS create_token_from_sid(TALLOC_CTX *mem_ctx, *found_username = talloc_strdup(mem_ctx, pdb_get_username(sam_acct)); + if (found_username == NULL) { + result = NT_STATUS_NO_MEMORY; + goto done; + } + /* * If the SID from lookup_name() was the guest sid, passdb knows * about the mapping of guest sid to lp_guestaccount() @@ -700,6 +705,10 @@ static NTSTATUS create_token_from_sid(TALLOC_CTX *mem_ctx, /* Ensure we're returning the found_username on the right context. */ *found_username = talloc_strdup(mem_ctx, pass->pw_name); + if (found_username == NULL) { + result = NT_STATUS_NO_MEMORY; + goto done; + } } else { /* This user is from winbind, force the primary gid to the @@ -737,7 +746,6 @@ static NTSTATUS create_token_from_sid(TALLOC_CTX *mem_ctx, gids = gid; - /* Ensure we're returning the found_username on the right context. */ *found_username = NULL; } @@ -770,7 +778,7 @@ static NTSTATUS create_token_from_sid(TALLOC_CTX *mem_ctx, *token = create_local_nt_token(mem_ctx, user_sid, is_guest, num_group_sids, group_sids); - if ((*token == NULL) || (*found_username == NULL)) { + if (*token == NULL) { result = NT_STATUS_NO_MEMORY; goto done; } |