summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/providers/ipa/ipa_subdomains_id.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/providers/ipa/ipa_subdomains_id.c b/src/providers/ipa/ipa_subdomains_id.c
index 0a89ef5a6..4a237ca4e 100644
--- a/src/providers/ipa/ipa_subdomains_id.c
+++ b/src/providers/ipa/ipa_subdomains_id.c
@@ -344,6 +344,7 @@ struct ipa_get_subdom_acct {
int entry_type;
const char *filter;
int filter_type;
+ const char *extra_value;
bool use_pac;
struct ldb_message *user_msg;
@@ -393,6 +394,7 @@ struct tevent_req *ipa_get_subdom_acct_send(TALLOC_CTX *memctx,
state->entry_type = (ar->entry_type & BE_REQ_TYPE_MASK);
state->filter = ar->filter_value;
state->filter_type = ar->filter_type;
+ state->extra_value = ar->extra_value;
switch (state->entry_type) {
case BE_REQ_USER:
@@ -499,10 +501,16 @@ static void ipa_get_subdom_acct_connected(struct tevent_req *subreq)
switch (state->filter_type) {
case BE_FILTER_NAME:
req_input->type = REQ_INP_NAME;
- /* The extdom plugin expects the shortname and domain separately */
- ret = sss_parse_internal_fqname(req_input, state->filter,
- &shortname, NULL);
- req_input->inp.name = talloc_steal(req_input, shortname);
+ /* The extdom plugin expects the shortname and domain separately,
+ * but for UPN/email lookup we need to send the raw name */
+ if (state->extra_value != NULL
+ && strcmp(state->extra_value, EXTRA_NAME_IS_UPN) == 0) {
+ req_input->inp.name = talloc_strdup(req_input, state->filter);
+ } else {
+ ret = sss_parse_internal_fqname(req_input, state->filter,
+ &shortname, NULL);
+ req_input->inp.name = talloc_steal(req_input, shortname);
+ }
if (req_input->inp.name == NULL) {
DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup failed.\n");
tevent_req_error(req, ENOMEM);