1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-12 09:18:10 +03:00

s3:winbind: Fix 'winbind normalize names' in wb_getpwsid()

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12851

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
This commit is contained in:
Andreas Schneider 2017-06-20 10:27:07 +02:00 committed by Volker Lendecke
parent d7ccf0d977
commit 8a2bbba5cd

View File

@ -63,7 +63,9 @@ static void wb_getpwsid_queryuser_done(struct tevent_req *subreq)
req, struct wb_getpwsid_state);
struct winbindd_pw *pw = state->pw;
struct wbint_userinfo *info;
struct winbindd_domain *domain = NULL;
fstring acct_name, output_username;
char *mapped_name = NULL;
char *tmp;
NTSTATUS status;
@ -83,8 +85,34 @@ static void wb_getpwsid_queryuser_done(struct tevent_req *subreq)
return;
}
fill_domain_username(output_username, info->domain_name,
acct_name, true);
domain = find_domain_from_name_noinit(info->domain_name);
if (tevent_req_nomem(domain, req)) {
return;
}
/*
* TODO:
* This function should be called in 'idmap winbind child'. It shouldn't
* be a blocking call, but for this we need to add a new function for
* winbind.idl. This is a fix which can be backported for now.
*/
status = normalize_name_map(state,
domain,
acct_name,
&mapped_name);
if (NT_STATUS_IS_OK(status)) {
fill_domain_username(output_username,
info->domain_name,
mapped_name, true);
fstrcpy(acct_name, mapped_name);
} else if (NT_STATUS_EQUAL(status, NT_STATUS_FILE_RENAMED)) {
fstrcpy(acct_name, mapped_name);
} else {
fill_domain_username(output_username,
info->domain_name,
acct_name, true);
}
strlcpy(pw->pw_name, output_username, sizeof(pw->pw_name));
strlcpy(pw->pw_gecos, info->full_name ? info->full_name : "",
@ -101,7 +129,7 @@ static void wb_getpwsid_queryuser_done(struct tevent_req *subreq)
TALLOC_FREE(tmp);
tmp = talloc_sub_specified(
state, info->shell, info->acct_name,
state, info->shell, acct_name,
info->primary_group_name, info->domain_name,
pw->pw_uid, pw->pw_gid);
if (tevent_req_nomem(tmp, req)) {