mirror of
https://github.com/samba-team/samba.git
synced 2025-02-23 09:57:40 +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:
parent
2715f52f54
commit
789c89e6ec
@ -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\.user_info\.upn\.jane\.doe.ad_member
|
||||||
^samba3\.wbinfo_user_info\.name_to_sid\.upn\.testdenied_upn.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\.upn\.testdenied_upn.ad_member
|
||||||
^samba3\.wbinfo_user_info\.user_info\.domain\.alice.fl2008r2dc
|
^samba3\.wbinfo_user_info\.user_info\.domain\.alice.fl2008r2dc
|
||||||
^samba3\.wbinfo_user_info\.user_info\.upn\.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\.domain\.jane.fl2008r2dc
|
||||||
^samba3\.wbinfo_user_info\.user_info\.upn\.jane\.doe.fl2008r2dc
|
^samba3\.wbinfo_user_info\.user_info\.upn\.jane\.doe.fl2008r2dc
|
||||||
^samba3\.wbinfo_user_info\.name_to_sid\.upn\.testdenied_upn.fl2008r2dc
|
^samba3\.wbinfo_user_info\.name_to_sid\.upn\.testdenied_upn.fl2008r2dc
|
||||||
|
@ -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_req *wb_lookupname_send(TALLOC_CTX *mem_ctx,
|
||||||
struct tevent_context *ev,
|
struct tevent_context *ev,
|
||||||
const char *dom_name, const char *name,
|
const char *namespace,
|
||||||
|
const char *dom_name,
|
||||||
|
const char *name,
|
||||||
uint32_t flags)
|
uint32_t flags)
|
||||||
{
|
{
|
||||||
struct tevent_req *req, *subreq;
|
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);
|
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) {
|
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);
|
tevent_req_nterror(req, NT_STATUS_NONE_MAPPED);
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
|
@ -185,6 +185,7 @@ static void wb_xids2sids_init_dom_maps_lookupname_next(
|
|||||||
subreq = wb_lookupname_send(state,
|
subreq = wb_lookupname_send(state,
|
||||||
state->ev,
|
state->ev,
|
||||||
dom_maps[state->dom_idx].name,
|
dom_maps[state->dom_idx].name,
|
||||||
|
dom_maps[state->dom_idx].name,
|
||||||
"",
|
"",
|
||||||
LOOKUP_NAME_NO_NSS);
|
LOOKUP_NAME_NO_NSS);
|
||||||
if (tevent_req_nomem(subreq, state->req)) {
|
if (tevent_req_nomem(subreq, state->req)) {
|
||||||
|
@ -76,7 +76,10 @@ struct tevent_req *winbindd_getgrnam_send(TALLOC_CTX *mem_ctx,
|
|||||||
fstrcpy(state->name_domain, get_global_sam_name());
|
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);
|
0);
|
||||||
if (tevent_req_nomem(subreq, req)) {
|
if (tevent_req_nomem(subreq, req)) {
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
|
@ -75,7 +75,10 @@ struct tevent_req *winbindd_getgroups_send(TALLOC_CTX *mem_ctx,
|
|||||||
return tevent_req_post(req, ev);
|
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);
|
LOOKUP_NAME_NO_NSS);
|
||||||
if (tevent_req_nomem(subreq, req)) {
|
if (tevent_req_nomem(subreq, req)) {
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
|
@ -71,7 +71,10 @@ struct tevent_req *winbindd_getpwnam_send(TALLOC_CTX *mem_ctx,
|
|||||||
return tevent_req_post(req, ev);
|
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);
|
LOOKUP_NAME_NO_NSS);
|
||||||
if (tevent_req_nomem(subreq, req)) {
|
if (tevent_req_nomem(subreq, req)) {
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
|
@ -466,6 +466,7 @@ static void wb_irpc_lsa_LookupSids3_done(struct tevent_req *subreq)
|
|||||||
struct wb_irpc_lsa_LookupNames4_name {
|
struct wb_irpc_lsa_LookupNames4_name {
|
||||||
void *state;
|
void *state;
|
||||||
uint32_t idx;
|
uint32_t idx;
|
||||||
|
const char *namespace;
|
||||||
const char *domain;
|
const char *domain;
|
||||||
char *name;
|
char *name;
|
||||||
struct dom_sid sid;
|
struct dom_sid sid;
|
||||||
@ -553,11 +554,12 @@ static NTSTATUS wb_irpc_lsa_LookupNames4_call(struct irpc_message *msg,
|
|||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
*p = 0;
|
*p = 0;
|
||||||
nstate->domain = nstate->name;
|
nstate->domain = nstate->name;
|
||||||
|
nstate->namespace = nstate->domain;
|
||||||
nstate->name = p+1;
|
nstate->name = p+1;
|
||||||
} else if ((p = strchr(nstate->name, '@')) != NULL) {
|
} else if ((p = strchr(nstate->name, '@')) != NULL) {
|
||||||
/* upn */
|
/* upn */
|
||||||
nstate->domain = p + 1;
|
nstate->domain = "";
|
||||||
*p = 0;
|
nstate->namespace = p + 1;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* TODO: select the domain based on
|
* 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,
|
subreq = wb_lookupname_send(msg,
|
||||||
server_event_context(),
|
server_event_context(),
|
||||||
|
nstate->namespace,
|
||||||
nstate->domain,
|
nstate->domain,
|
||||||
nstate->name,
|
nstate->name,
|
||||||
LOOKUP_NAME_NO_NSS);
|
LOOKUP_NAME_NO_NSS);
|
||||||
|
@ -35,8 +35,10 @@ struct tevent_req *winbindd_lookupname_send(TALLOC_CTX *mem_ctx,
|
|||||||
{
|
{
|
||||||
struct tevent_req *req, *subreq;
|
struct tevent_req *req, *subreq;
|
||||||
struct winbindd_lookupname_state *state;
|
struct winbindd_lookupname_state *state;
|
||||||
const char *domname = NULL, *name = NULL;
|
|
||||||
char *p = NULL;
|
char *p = NULL;
|
||||||
|
const char *domname = NULL;
|
||||||
|
const char *name = NULL;
|
||||||
|
const char *namespace = NULL;
|
||||||
|
|
||||||
req = tevent_req_create(mem_ctx, &state,
|
req = tevent_req_create(mem_ctx, &state,
|
||||||
struct winbindd_lookupname_state);
|
struct winbindd_lookupname_state);
|
||||||
@ -56,28 +58,29 @@ struct tevent_req *winbindd_lookupname_send(TALLOC_CTX *mem_ctx,
|
|||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
domname = request->data.name.name;
|
domname = request->data.name.name;
|
||||||
|
namespace = domname;
|
||||||
name = p + 1;
|
name = p + 1;
|
||||||
} else {
|
} else {
|
||||||
p = strchr(request->data.name.name, '@');
|
p = strchr(request->data.name.name, '@');
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
/* upn */
|
/* upn */
|
||||||
domname = p + 1;
|
namespace = p + 1;
|
||||||
*p = '\0';
|
|
||||||
name = request->data.name.name;
|
|
||||||
} else {
|
} else {
|
||||||
domname = "";
|
namespace = "";
|
||||||
name = request->data.name.name;
|
|
||||||
}
|
}
|
||||||
|
domname = "";
|
||||||
|
name = request->data.name.name;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
domname = request->data.name.dom_name;
|
domname = request->data.name.dom_name;
|
||||||
|
namespace = domname;
|
||||||
name = request->data.name.name;
|
name = request->data.name.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG(3, ("lookupname %s%s%s\n", domname, lp_winbind_separator(),
|
DEBUG(3, ("lookupname %s%s%s\n", domname, lp_winbind_separator(),
|
||||||
name));
|
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)) {
|
if (tevent_req_nomem(subreq, req)) {
|
||||||
return tevent_req_post(req, ev);
|
return tevent_req_post(req, ev);
|
||||||
}
|
}
|
||||||
|
@ -561,7 +561,9 @@ NTSTATUS winbindd_lookupsids_recv(struct tevent_req *req,
|
|||||||
|
|
||||||
struct tevent_req *wb_lookupname_send(TALLOC_CTX *mem_ctx,
|
struct tevent_req *wb_lookupname_send(TALLOC_CTX *mem_ctx,
|
||||||
struct tevent_context *ev,
|
struct tevent_context *ev,
|
||||||
const char *dom_name, const char *name,
|
const char *namespace,
|
||||||
|
const char *dom_name,
|
||||||
|
const char *name,
|
||||||
uint32_t flags);
|
uint32_t flags);
|
||||||
NTSTATUS wb_lookupname_recv(struct tevent_req *req, struct dom_sid *sid,
|
NTSTATUS wb_lookupname_recv(struct tevent_req *req, struct dom_sid *sid,
|
||||||
enum lsa_SidType *type);
|
enum lsa_SidType *type);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user