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:
parent
d7ccf0d977
commit
8a2bbba5cd
@ -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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user