summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2017-05-09 12:21:32 +0200
committerLukas Slebodnik <lslebodn@redhat.com>2017-05-31 14:31:30 +0200
commitc59b7362644efb4546e7fae029b846b53bf48109 (patch)
treec28e8b1d7047963f2cf7508aa4be161380ad2972
parented15b405ff95e521df3028fc40360a1547ba84bd (diff)
downloadsssd-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.c64
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);
}