diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2016-06-28 14:43:33 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2016-07-07 10:29:30 +0200 |
commit | d0faaf01fd24a935d9779032886d228b3861fa48 (patch) | |
tree | f787b185d9e5b8bacd031acb1c1da6b575a9776b /src/responder/ifp/ifpsrv_cmd.c | |
parent | bd769a08d18c791a18e913cf92f7f1651f56d3ff (diff) | |
download | sssd-d0faaf01fd24a935d9779032886d228b3861fa48.tar.gz sssd-d0faaf01fd24a935d9779032886d228b3861fa48.tar.xz sssd-d0faaf01fd24a935d9779032886d228b3861fa48.zip |
IFP: Amend the InfoPipe responder for fqdns
Parses the internal sysdb names and puts them on the bus using the
sss_output_name() helper. Previously, the raw sysdb names were used.
Reviewed-by: Sumit Bose <sbose@redhat.com>
Diffstat (limited to 'src/responder/ifp/ifpsrv_cmd.c')
-rw-r--r-- | src/responder/ifp/ifpsrv_cmd.c | 63 |
1 files changed, 43 insertions, 20 deletions
diff --git a/src/responder/ifp/ifpsrv_cmd.c b/src/responder/ifp/ifpsrv_cmd.c index fd9ad8230..97fad47e9 100644 --- a/src/responder/ifp/ifpsrv_cmd.c +++ b/src/responder/ifp/ifpsrv_cmd.c @@ -372,7 +372,7 @@ ifp_user_get_groups_reply(struct sss_domain_info *domain, int i, num; const char *name; const char **groupnames; - const char *tmpstr; + char *out_name; /* one less, the first one is the user entry */ num = res->count - 1; @@ -390,23 +390,21 @@ ifp_user_get_groups_reply(struct sss_domain_info *domain, continue; } - if (ireq->ifp_ctx->rctx->override_space != '\0') { - tmpstr = sss_replace_space(ireq, name, - ireq->ifp_ctx->rctx->override_space); - if (tmpstr == NULL) { - DEBUG(SSSDBG_MINOR_FAILURE, "Cannot normalize %s\n", name); + out_name = sss_output_name(ireq, name, domain->case_preserve, + ireq->ifp_ctx->rctx->override_space); + if (out_name == NULL) { + continue; + } + + if (domain->fqnames) { + groupnames[i] = sss_tc_fqname(groupnames, domain->names, + domain, out_name); + if (out_name == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, "sss_tc_fqname failed\n"); continue; } } else { - tmpstr = name; - } - - groupnames[i] = sss_get_cased_name(groupnames, tmpstr, - domain->case_preserve); - if (groupnames[i] == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, - "sss_get_cased_name failed, skipping\n"); - continue; + groupnames[i] = talloc_steal(groupnames, out_name); } DEBUG(SSSDBG_TRACE_FUNC, "Adding group %s\n", groupnames[i]); @@ -422,7 +420,7 @@ struct ifp_user_get_attr_state { enum sss_dp_acct_type search_type; - char *name; + char *inp_name; char *domname; struct sss_domain_info *dom; @@ -483,7 +481,8 @@ ifp_user_get_attr_lookup(struct tevent_req *subreq) req = tevent_req_callback_data(subreq, struct tevent_req); state = tevent_req_data(req, struct ifp_user_get_attr_state); - ret = sss_parse_inp_recv(subreq, state, &state->name, &state->domname); + ret = sss_parse_inp_recv(subreq, state, + &state->inp_name, &state->domname); talloc_zfree(subreq); if (ret != EOK) { tevent_req_error(req, ret); @@ -492,10 +491,12 @@ ifp_user_get_attr_lookup(struct tevent_req *subreq) switch (state->search_type) { case SSS_DP_USER: - data = cache_req_data_name(state, CACHE_REQ_USER_BY_NAME, state->name); + data = cache_req_data_name(state, CACHE_REQ_USER_BY_NAME, + state->inp_name); break; case SSS_DP_INITGROUPS: - data = cache_req_data_name(state, CACHE_REQ_INITGROUPS, state->name); + data = cache_req_data_name(state, CACHE_REQ_INITGROUPS, + state->inp_name); break; default: DEBUG(SSSDBG_CRIT_FAILURE, "Unsupported search type [%d]!\n", @@ -524,6 +525,7 @@ static void ifp_user_get_attr_done(struct tevent_req *subreq) struct ifp_user_get_attr_state *state = NULL; struct tevent_req *req = NULL; errno_t ret; + char *fqdn; req = tevent_req_callback_data(subreq, struct tevent_req); state = tevent_req_data(req, struct ifp_user_get_attr_state); @@ -535,11 +537,18 @@ static void ifp_user_get_attr_done(struct tevent_req *subreq) return; } + fqdn = sss_create_internal_fqname(state, state->inp_name, + state->dom->name); + if (fqdn == NULL) { + tevent_req_error(req, ENOMEM); + return; + } + if (state->search_type == SSS_DP_USER) { /* throw away the result and perform attr search */ talloc_zfree(state->res); - ret = sysdb_get_user_attr_with_views(state, state->dom, state->name, + ret = sysdb_get_user_attr_with_views(state, state->dom, fqdn, state->attrs, &state->res); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "sysdb_get_user_attr_with_views() " @@ -557,6 +566,20 @@ static void ifp_user_get_attr_done(struct tevent_req *subreq) } } + ret = ifp_ldb_el_output_name(state->rctx, state->res->msgs[0], + SYSDB_NAME, state->dom); + if (ret != EOK) { + tevent_req_error(req, ret); + return; + } + + ret = ifp_ldb_el_output_name(state->rctx, state->res->msgs[0], + SYSDB_NAME_ALIAS, state->dom); + if (ret != EOK) { + tevent_req_error(req, ret); + return; + } + tevent_req_done(req); } |