diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2017-05-09 12:21:32 +0200 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2017-05-31 14:31:30 +0200 |
commit | c59b7362644efb4546e7fae029b846b53bf48109 (patch) | |
tree | c28e8b1d7047963f2cf7508aa4be161380ad2972 | |
parent | ed15b405ff95e521df3028fc40360a1547ba84bd (diff) | |
download | sssd-c59b7362644efb4546e7fae029b846b53bf48109.tar.gz sssd-c59b7362644efb4546e7fae029b846b53bf48109.tar.xz sssd-c59b7362644efb4546e7fae029b846b53bf48109.zip |
IFP: Only format the output name to the short version before output
The ifp_user_get_attr_done() request handler was reused for both
GetUserGroups and GetUserAttrs requests. Yet, it performed output
formatting of name and nameAlias.
This is bad, because the output formatting should really be done only
during output. Also, it broke any post-processing of the returned
message which the request might do later.
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
-rw-r--r-- | src/responder/ifp/ifpsrv_cmd.c | 64 |
1 files changed, 18 insertions, 46 deletions
diff --git a/src/responder/ifp/ifpsrv_cmd.c b/src/responder/ifp/ifpsrv_cmd.c index e4d6c42ef..915f77e38 100644 --- a/src/responder/ifp/ifpsrv_cmd.c +++ b/src/responder/ifp/ifpsrv_cmd.c @@ -181,26 +181,6 @@ 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, @@ -234,6 +214,24 @@ 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) { @@ -243,18 +241,6 @@ 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, @@ -575,20 +561,6 @@ 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); } |