|
|
ecf709 |
From f5bee70057370c72ed111b50937e3252e36ccefb Mon Sep 17 00:00:00 2001
|
|
|
ecf709 |
From: Jakub Hrozek <jhrozek@redhat.com>
|
|
|
ecf709 |
Date: Tue, 9 May 2017 12:21:32 +0200
|
|
|
ecf709 |
Subject: [PATCH 162/166] IFP: Only format the output name to the short version
|
|
|
ecf709 |
before output
|
|
|
ecf709 |
MIME-Version: 1.0
|
|
|
ecf709 |
Content-Type: text/plain; charset=UTF-8
|
|
|
ecf709 |
Content-Transfer-Encoding: 8bit
|
|
|
ecf709 |
|
|
|
ecf709 |
The ifp_user_get_attr_done() request handler was reused for both
|
|
|
ecf709 |
GetUserGroups and GetUserAttrs requests. Yet, it performed output
|
|
|
ecf709 |
formatting of name and nameAlias.
|
|
|
ecf709 |
|
|
|
ecf709 |
This is bad, because the output formatting should really be done only
|
|
|
ecf709 |
during output. Also, it broke any post-processing of the returned
|
|
|
ecf709 |
message which the request might do later.
|
|
|
ecf709 |
|
|
|
ecf709 |
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
|
|
|
ecf709 |
---
|
|
|
ecf709 |
src/responder/ifp/ifpsrv_cmd.c | 64 ++++++++++++------------------------------
|
|
|
ecf709 |
1 file changed, 18 insertions(+), 46 deletions(-)
|
|
|
ecf709 |
|
|
|
ecf709 |
diff --git a/src/responder/ifp/ifpsrv_cmd.c b/src/responder/ifp/ifpsrv_cmd.c
|
|
|
ecf709 |
index e4d6c42ef35ef372472803d3d26b17d4181021a8..915f77e38e94c703f6c67e8d5fdcc59d189943be 100644
|
|
|
ecf709 |
--- a/src/responder/ifp/ifpsrv_cmd.c
|
|
|
ecf709 |
+++ b/src/responder/ifp/ifpsrv_cmd.c
|
|
|
ecf709 |
@@ -181,26 +181,6 @@ static void ifp_user_get_attr_process(struct tevent_req *req)
|
|
|
ecf709 |
}
|
|
|
ecf709 |
|
|
|
ecf709 |
static errno_t
|
|
|
ecf709 |
-ifp_user_get_attr_replace_space(TALLOC_CTX *mem_ctx,
|
|
|
ecf709 |
- struct ldb_message_element *el,
|
|
|
ecf709 |
- const char sub)
|
|
|
ecf709 |
-{
|
|
|
ecf709 |
- int i;
|
|
|
ecf709 |
-
|
|
|
ecf709 |
- for (i = 0; i < el->num_values; i++) {
|
|
|
ecf709 |
- el->values[i].data = (uint8_t *) sss_replace_space(mem_ctx,
|
|
|
ecf709 |
- (const char *) el->values[i].data,
|
|
|
ecf709 |
- sub);
|
|
|
ecf709 |
- if (el->values[i].data == NULL) {
|
|
|
ecf709 |
- DEBUG(SSSDBG_CRIT_FAILURE, "sss_replace_space failed, skipping\n");
|
|
|
ecf709 |
- return ENOMEM;
|
|
|
ecf709 |
- }
|
|
|
ecf709 |
- }
|
|
|
ecf709 |
-
|
|
|
ecf709 |
- return EOK;
|
|
|
ecf709 |
-}
|
|
|
ecf709 |
-
|
|
|
ecf709 |
-static errno_t
|
|
|
ecf709 |
ifp_user_get_attr_handle_reply(struct sss_domain_info *domain,
|
|
|
ecf709 |
struct ifp_req *ireq,
|
|
|
ecf709 |
const char **attrs,
|
|
|
ecf709 |
@@ -234,6 +214,24 @@ ifp_user_get_attr_handle_reply(struct sss_domain_info *domain,
|
|
|
ecf709 |
}
|
|
|
ecf709 |
|
|
|
ecf709 |
if (res->count > 0) {
|
|
|
ecf709 |
+ ret = ifp_ldb_el_output_name(ireq->ifp_ctx->rctx, res->msgs[0],
|
|
|
ecf709 |
+ SYSDB_NAME, domain);
|
|
|
ecf709 |
+ if (ret != EOK) {
|
|
|
ecf709 |
+ DEBUG(SSSDBG_CRIT_FAILURE,
|
|
|
ecf709 |
+ "Cannot convert SYSDB_NAME to output format [%d]: %s\n",
|
|
|
ecf709 |
+ ret, sss_strerror(ret));
|
|
|
ecf709 |
+ return sbus_request_finish(ireq->dbus_req, NULL);
|
|
|
ecf709 |
+ }
|
|
|
ecf709 |
+
|
|
|
ecf709 |
+ ret = ifp_ldb_el_output_name(ireq->ifp_ctx->rctx, res->msgs[0],
|
|
|
ecf709 |
+ SYSDB_NAME_ALIAS, domain);
|
|
|
ecf709 |
+ if (ret != EOK) {
|
|
|
ecf709 |
+ DEBUG(SSSDBG_CRIT_FAILURE,
|
|
|
ecf709 |
+ "Cannot convert SYSDB_NAME_ALIAS to output format [%d]: %s\n",
|
|
|
ecf709 |
+ ret, sss_strerror(ret));
|
|
|
ecf709 |
+ return sbus_request_finish(ireq->dbus_req, NULL);
|
|
|
ecf709 |
+ }
|
|
|
ecf709 |
+
|
|
|
ecf709 |
for (ai = 0; attrs[ai]; ai++) {
|
|
|
ecf709 |
el = sss_view_ldb_msg_find_element(domain, res->msgs[0], attrs[ai]);
|
|
|
ecf709 |
if (el == NULL || el->num_values == 0) {
|
|
|
ecf709 |
@@ -243,18 +241,6 @@ ifp_user_get_attr_handle_reply(struct sss_domain_info *domain,
|
|
|
ecf709 |
continue;
|
|
|
ecf709 |
}
|
|
|
ecf709 |
|
|
|
ecf709 |
- /* Normalize white space in user names */
|
|
|
ecf709 |
- if (ireq->ifp_ctx->rctx->override_space != '\0' &&
|
|
|
ecf709 |
- strcmp(attrs[ai], SYSDB_NAME) == 0) {
|
|
|
ecf709 |
- ret = ifp_user_get_attr_replace_space(ireq, el,
|
|
|
ecf709 |
- ireq->ifp_ctx->rctx->override_space);
|
|
|
ecf709 |
- if (ret != EOK) {
|
|
|
ecf709 |
- DEBUG(SSSDBG_MINOR_FAILURE, "Cannot normalize %s\n",
|
|
|
ecf709 |
- attrs[ai]);
|
|
|
ecf709 |
- continue;
|
|
|
ecf709 |
- }
|
|
|
ecf709 |
- }
|
|
|
ecf709 |
-
|
|
|
ecf709 |
ret = ifp_add_ldb_el_to_dict(&iter_dict, el);
|
|
|
ecf709 |
if (ret != EOK) {
|
|
|
ecf709 |
DEBUG(SSSDBG_MINOR_FAILURE,
|
|
|
ecf709 |
@@ -575,20 +561,6 @@ static void ifp_user_get_attr_done(struct tevent_req *subreq)
|
|
|
ecf709 |
}
|
|
|
ecf709 |
}
|
|
|
ecf709 |
|
|
|
ecf709 |
- ret = ifp_ldb_el_output_name(state->rctx, state->res->msgs[0],
|
|
|
ecf709 |
- SYSDB_NAME, state->dom);
|
|
|
ecf709 |
- if (ret != EOK) {
|
|
|
ecf709 |
- tevent_req_error(req, ret);
|
|
|
ecf709 |
- return;
|
|
|
ecf709 |
- }
|
|
|
ecf709 |
-
|
|
|
ecf709 |
- ret = ifp_ldb_el_output_name(state->rctx, state->res->msgs[0],
|
|
|
ecf709 |
- SYSDB_NAME_ALIAS, state->dom);
|
|
|
ecf709 |
- if (ret != EOK) {
|
|
|
ecf709 |
- tevent_req_error(req, ret);
|
|
|
ecf709 |
- return;
|
|
|
ecf709 |
- }
|
|
|
ecf709 |
-
|
|
|
ecf709 |
tevent_req_done(req);
|
|
|
ecf709 |
}
|
|
|
ecf709 |
|
|
|
ecf709 |
--
|
|
|
ecf709 |
2.9.4
|
|
|
ecf709 |
|