From 1ffb8cf32fb84bee1d3f5472369c83ff4d20e1c0 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: May 31 2017 14:58:11 +0000 Subject: Revert "IFP: Only format the output name to the short version before output" This reverts commit 2f6e3330f644f53033045aa5c4abb313d9f8bd43. --- diff --git a/src/responder/ifp/ifpsrv_cmd.c b/src/responder/ifp/ifpsrv_cmd.c index 742c3af..f14a41d 100644 --- a/src/responder/ifp/ifpsrv_cmd.c +++ b/src/responder/ifp/ifpsrv_cmd.c @@ -181,6 +181,26 @@ static void ifp_user_get_attr_process(struct tevent_req *req) } static errno_t +ifp_user_get_attr_replace_space(TALLOC_CTX *mem_ctx, + struct ldb_message_element *el, + const char sub) +{ + int i; + + for (i = 0; i < el->num_values; i++) { + el->values[i].data = (uint8_t *) sss_replace_space(mem_ctx, + (const char *) el->values[i].data, + sub); + if (el->values[i].data == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, "sss_replace_space failed, skipping\n"); + return ENOMEM; + } + } + + return EOK; +} + +static errno_t ifp_user_get_attr_handle_reply(struct sss_domain_info *domain, struct ifp_req *ireq, const char **attrs, @@ -214,24 +234,6 @@ ifp_user_get_attr_handle_reply(struct sss_domain_info *domain, } if (res->count > 0) { - ret = ifp_ldb_el_output_name(ireq->ifp_ctx->rctx, res->msgs[0], - SYSDB_NAME, domain); - if (ret != EOK) { - DEBUG(SSSDBG_CRIT_FAILURE, - "Cannot convert SYSDB_NAME to output format [%d]: %s\n", - ret, sss_strerror(ret)); - return sbus_request_finish(ireq->dbus_req, NULL); - } - - ret = ifp_ldb_el_output_name(ireq->ifp_ctx->rctx, res->msgs[0], - SYSDB_NAME_ALIAS, domain); - if (ret != EOK) { - DEBUG(SSSDBG_CRIT_FAILURE, - "Cannot convert SYSDB_NAME_ALIAS to output format [%d]: %s\n", - ret, sss_strerror(ret)); - return sbus_request_finish(ireq->dbus_req, NULL); - } - for (ai = 0; attrs[ai]; ai++) { el = sss_view_ldb_msg_find_element(domain, res->msgs[0], attrs[ai]); if (el == NULL || el->num_values == 0) { @@ -241,6 +243,18 @@ ifp_user_get_attr_handle_reply(struct sss_domain_info *domain, continue; } + /* Normalize white space in user names */ + if (ireq->ifp_ctx->rctx->override_space != '\0' && + strcmp(attrs[ai], SYSDB_NAME) == 0) { + ret = ifp_user_get_attr_replace_space(ireq, el, + ireq->ifp_ctx->rctx->override_space); + if (ret != EOK) { + DEBUG(SSSDBG_MINOR_FAILURE, "Cannot normalize %s\n", + attrs[ai]); + continue; + } + } + ret = ifp_add_ldb_el_to_dict(&iter_dict, el); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, @@ -553,6 +567,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); }