diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2016-06-19 08:25:16 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2016-07-07 10:28:58 +0200 |
commit | c125e741d3111e2f9b56866ba00835ca05c6f349 (patch) | |
tree | babcd3ba23bb731b38d0dea31773edb368671fb2 /src/providers/ipa/ipa_subdomains_id.c | |
parent | 7c083e276ac40aa29bad6f04a950026697ea4f1d (diff) | |
download | sssd-c125e741d3111e2f9b56866ba00835ca05c6f349.tar.gz sssd-c125e741d3111e2f9b56866ba00835ca05c6f349.tar.xz sssd-c125e741d3111e2f9b56866ba00835ca05c6f349.zip |
IPA: Use internal fqname format instead of parsing NSS names
Parsing the extdom plugin output is an "input" operation from the point
of the IPA provider, so we need to parse the name and conversely,
internally use only the qualified name.
Reviewed-by: Sumit Bose <sbose@redhat.com>
Diffstat (limited to 'src/providers/ipa/ipa_subdomains_id.c')
-rw-r--r-- | src/providers/ipa/ipa_subdomains_id.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/providers/ipa/ipa_subdomains_id.c b/src/providers/ipa/ipa_subdomains_id.c index 7e53dd8dd..3f083d3cd 100644 --- a/src/providers/ipa/ipa_subdomains_id.c +++ b/src/providers/ipa/ipa_subdomains_id.c @@ -440,6 +440,7 @@ static void ipa_get_subdom_acct_connected(struct tevent_req *subreq) int ret; char *endptr; struct req_input *req_input; + char *shortname; ret = sdap_id_op_connect_recv(subreq, &dp_error); talloc_zfree(subreq); @@ -498,7 +499,10 @@ 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; - req_input->inp.name = talloc_strdup(req_input, state->filter); + /* 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); if (req_input->inp.name == NULL) { DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup failed.\n"); tevent_req_error(req, ENOMEM); @@ -949,7 +953,6 @@ errno_t get_object_from_cache(TALLOC_CTX *mem_ctx, SYSDB_GHOST, SYSDB_HOMEDIR, NULL }; - char *name; if (ar->filter_type == BE_FILTER_SECID) { ret = sysdb_search_object_by_sid(mem_ctx, dom, ar->filter_value, attrs, @@ -1022,24 +1025,19 @@ errno_t get_object_from_cache(TALLOC_CTX *mem_ctx, goto done; } } else if (ar->filter_type == BE_FILTER_NAME) { - name = sss_get_domain_name(mem_ctx, ar->filter_value, dom); - if (name == NULL) { - DEBUG(SSSDBG_OP_FAILURE, "sss_get_domain_name failed\n"); - ret = ENOMEM; - goto done; - } - switch (ar->entry_type & BE_REQ_TYPE_MASK) { case BE_REQ_GROUP: - ret = sysdb_search_group_by_name(mem_ctx, dom, name, attrs, &msg); + ret = sysdb_search_group_by_name(mem_ctx, dom, ar->filter_value, + attrs, &msg); break; case BE_REQ_INITGROUPS: case BE_REQ_USER: case BE_REQ_USER_AND_GROUP: - ret = sysdb_search_user_by_name(mem_ctx, dom, name, attrs, &msg); + ret = sysdb_search_user_by_name(mem_ctx, dom, ar->filter_value, + attrs, &msg); if (ret == ENOENT && (ar->entry_type & BE_REQ_TYPE_MASK) == BE_REQ_USER_AND_GROUP) { - ret = sysdb_search_group_by_name(mem_ctx, dom, name, + ret = sysdb_search_group_by_name(mem_ctx, dom, ar->filter_value, attrs, &msg); } break; |