1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-22 05:57:43 +03:00

winbind: Pass upn unmodified to lookup names

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

Pair-Programmed-With: Andreas Schneider <asn@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
Stefan Metzmacher 2018-02-22 14:10:28 +01:00 committed by Andreas Schneider
parent 2715f52f54
commit 789c89e6ec
9 changed files with 36 additions and 18 deletions

View File

@ -1,10 +1,8 @@
^samba3\.wbinfo_user_info\.name_to_sid\.upn\.jane\.doe.ad_member
^samba3\.wbinfo_user_info\.user_info\.upn\.jane\.doe.ad_member
^samba3\.wbinfo_user_info\.name_to_sid\.upn\.testdenied_upn.ad_member
^samba3\.wbinfo_user_info\.user_info\.upn\.testdenied_upn.ad_member
^samba3\.wbinfo_user_info\.user_info\.domain\.alice.fl2008r2dc
^samba3\.wbinfo_user_info\.user_info\.upn\.alice.fl2008r2dc
^samba3\.wbinfo_user_info\.name_to_sid\.upn\.jane\.doe.fl2008r2dc
^samba3\.wbinfo_user_info\.user_info\.domain\.jane.fl2008r2dc
^samba3\.wbinfo_user_info\.user_info\.upn\.jane\.doe.fl2008r2dc
^samba3\.wbinfo_user_info\.name_to_sid\.upn\.testdenied_upn.fl2008r2dc

View File

@ -35,7 +35,9 @@ static void wb_lookupname_done(struct tevent_req *subreq);
struct tevent_req *wb_lookupname_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
const char *dom_name, const char *name,
const char *namespace,
const char *dom_name,
const char *name,
uint32_t flags)
{
struct tevent_req *req, *subreq;
@ -61,9 +63,9 @@ struct tevent_req *wb_lookupname_send(TALLOC_CTX *mem_ctx,
return tevent_req_post(req, ev);
}
domain = find_lookup_domain_from_name(state->dom_name);
domain = find_lookup_domain_from_name(namespace);
if (domain == NULL) {
DEBUG(5, ("Could not find domain for %s\n", state->dom_name));
DEBUG(5, ("Could not find domain for %s\n", namespace));
tevent_req_nterror(req, NT_STATUS_NONE_MAPPED);
return tevent_req_post(req, ev);
}

View File

@ -185,6 +185,7 @@ static void wb_xids2sids_init_dom_maps_lookupname_next(
subreq = wb_lookupname_send(state,
state->ev,
dom_maps[state->dom_idx].name,
dom_maps[state->dom_idx].name,
"",
LOOKUP_NAME_NO_NSS);
if (tevent_req_nomem(subreq, state->req)) {

View File

@ -76,7 +76,10 @@ struct tevent_req *winbindd_getgrnam_send(TALLOC_CTX *mem_ctx,
fstrcpy(state->name_domain, get_global_sam_name());
}
subreq = wb_lookupname_send(state, ev, state->name_domain, state->name_group,
subreq = wb_lookupname_send(state, ev,
state->name_domain,
state->name_domain,
state->name_group,
0);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);

View File

@ -75,7 +75,10 @@ struct tevent_req *winbindd_getgroups_send(TALLOC_CTX *mem_ctx,
return tevent_req_post(req, ev);
}
subreq = wb_lookupname_send(state, ev, state->domname, state->username,
subreq = wb_lookupname_send(state, ev,
state->domname,
state->domname,
state->username,
LOOKUP_NAME_NO_NSS);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);

View File

@ -71,7 +71,10 @@ struct tevent_req *winbindd_getpwnam_send(TALLOC_CTX *mem_ctx,
return tevent_req_post(req, ev);
}
subreq = wb_lookupname_send(state, ev, state->domname, state->username,
subreq = wb_lookupname_send(state, ev,
state->domname,
state->domname,
state->username,
LOOKUP_NAME_NO_NSS);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);

View File

@ -466,6 +466,7 @@ static void wb_irpc_lsa_LookupSids3_done(struct tevent_req *subreq)
struct wb_irpc_lsa_LookupNames4_name {
void *state;
uint32_t idx;
const char *namespace;
const char *domain;
char *name;
struct dom_sid sid;
@ -553,11 +554,12 @@ static NTSTATUS wb_irpc_lsa_LookupNames4_call(struct irpc_message *msg,
if (p != NULL) {
*p = 0;
nstate->domain = nstate->name;
nstate->namespace = nstate->domain;
nstate->name = p+1;
} else if ((p = strchr(nstate->name, '@')) != NULL) {
/* upn */
nstate->domain = p + 1;
*p = 0;
nstate->domain = "";
nstate->namespace = p + 1;
} else {
/*
* TODO: select the domain based on
@ -572,6 +574,7 @@ static NTSTATUS wb_irpc_lsa_LookupNames4_call(struct irpc_message *msg,
subreq = wb_lookupname_send(msg,
server_event_context(),
nstate->namespace,
nstate->domain,
nstate->name,
LOOKUP_NAME_NO_NSS);

View File

@ -35,8 +35,10 @@ struct tevent_req *winbindd_lookupname_send(TALLOC_CTX *mem_ctx,
{
struct tevent_req *req, *subreq;
struct winbindd_lookupname_state *state;
const char *domname = NULL, *name = NULL;
char *p = NULL;
const char *domname = NULL;
const char *name = NULL;
const char *namespace = NULL;
req = tevent_req_create(mem_ctx, &state,
struct winbindd_lookupname_state);
@ -56,28 +58,29 @@ struct tevent_req *winbindd_lookupname_send(TALLOC_CTX *mem_ctx,
if (p != NULL) {
*p = '\0';
domname = request->data.name.name;
namespace = domname;
name = p + 1;
} else {
p = strchr(request->data.name.name, '@');
if (p != NULL) {
/* upn */
domname = p + 1;
*p = '\0';
name = request->data.name.name;
namespace = p + 1;
} else {
domname = "";
name = request->data.name.name;
namespace = "";
}
domname = "";
name = request->data.name.name;
}
} else {
domname = request->data.name.dom_name;
namespace = domname;
name = request->data.name.name;
}
DEBUG(3, ("lookupname %s%s%s\n", domname, lp_winbind_separator(),
name));
subreq = wb_lookupname_send(state, ev, domname, name, 0);
subreq = wb_lookupname_send(state, ev, namespace, domname, name, 0);
if (tevent_req_nomem(subreq, req)) {
return tevent_req_post(req, ev);
}

View File

@ -561,7 +561,9 @@ NTSTATUS winbindd_lookupsids_recv(struct tevent_req *req,
struct tevent_req *wb_lookupname_send(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
const char *dom_name, const char *name,
const char *namespace,
const char *dom_name,
const char *name,
uint32_t flags);
NTSTATUS wb_lookupname_recv(struct tevent_req *req, struct dom_sid *sid,
enum lsa_SidType *type);