summaryrefslogtreecommitdiffstats
path: root/src/responder/ifp/ifpsrv_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/responder/ifp/ifpsrv_cmd.c')
-rw-r--r--src/responder/ifp/ifpsrv_cmd.c63
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);
}