Blame SOURCES/0103-Move-sized_output_name-and-sized_domain_name-into-re.patch

bb7cd1
From 84be2901aeb36ac60760cc11c424b717df360e87 Mon Sep 17 00:00:00 2001
956cae
From: Jakub Hrozek <jhrozek@redhat.com>
956cae
Date: Wed, 19 Apr 2017 17:44:40 +0200
bb7cd1
Subject: [PATCH 103/104] Move sized_output_name() and sized_domain_name() into
956cae
 responder common code
956cae
MIME-Version: 1.0
956cae
Content-Type: text/plain; charset=UTF-8
956cae
Content-Transfer-Encoding: 8bit
956cae
956cae
These functions are used to format a name into a format that the user
956cae
configured for output, including case sensitiveness, replacing
956cae
whitespace and qualified format. They were used only in the NSS
956cae
responder, which typically returns strings to the NSS client library and
956cae
then the user.
956cae
956cae
But it makes sense to just reuse the same code in the IFP responder as
956cae
well, since it does essentially the same job.
956cae
956cae
The patch also renames sized_member_name to sized_domain_name.
956cae
Previously, the function was only used to format a group member, the IFP
956cae
responder would use the same function to format a group the user is a
956cae
member of.
956cae
956cae
Related to:
956cae
    https://pagure.io/SSSD/sssd/issue/3268
956cae
956cae
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
956cae
(cherry picked from commit 7c074ba2f923985ab0d4f9d6a5e01ff3f2f0a7a8)
956cae
---
956cae
 src/responder/common/responder.h        | 21 ++++++++
956cae
 src/responder/common/responder_common.c | 90 +++++++++++++++++++++++++++++++++
bb7cd1
 src/responder/nss/nss_private.h         | 11 ----
bb7cd1
 src/responder/nss/nss_protocol_grent.c  |  2 +-
bb7cd1
 src/responder/nss/nss_utils.c           | 87 -------------------------------
bb7cd1
 5 files changed, 112 insertions(+), 99 deletions(-)
956cae
956cae
diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h
bb7cd1
index 4210307489fe25829a1674f254ecc7d185029698..dfe1ec455e355de263c3550306e53fea3ada85df 100644
956cae
--- a/src/responder/common/responder.h
956cae
+++ b/src/responder/common/responder.h
bb7cd1
@@ -393,4 +393,25 @@ char *sss_resp_create_fqname(TALLOC_CTX *mem_ctx,
bb7cd1
 
bb7cd1
 errno_t sss_resp_populate_cr_domains(struct resp_ctx *rctx);
956cae
 
956cae
+/**
956cae
+ * Helper functions to format output names
956cae
+ */
956cae
+
956cae
+/* Format orig_name into a sized_string in output format as prescribed
956cae
+ * by the name_dom domain
956cae
+ */
956cae
+int sized_output_name(TALLOC_CTX *mem_ctx,
956cae
+                      struct resp_ctx *rctx,
956cae
+                      const char *orig_name,
956cae
+                      struct sss_domain_info *name_dom,
956cae
+                      struct sized_string **_name);
956cae
+
956cae
+/* Format orig_name into a sized_string in output format as prescribed
956cae
+ * by the domain read from the fully qualified name.
956cae
+ */
956cae
+int sized_domain_name(TALLOC_CTX *mem_ctx,
956cae
+                      struct resp_ctx *rctx,
956cae
+                      const char *member_name,
956cae
+                      struct sized_string **_name);
956cae
+
956cae
 #endif /* __SSS_RESPONDER_H__ */
956cae
diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c
bb7cd1
index 67e1deefdfde19c95a68029b11099579d851513f..ac6320b08de09bc6c7e8dd1af72e0a493a449f7a 100644
956cae
--- a/src/responder/common/responder_common.c
956cae
+++ b/src/responder/common/responder_common.c
bb7cd1
@@ -1651,3 +1651,93 @@ done:
bb7cd1
 
bb7cd1
     return ret;
956cae
 }
956cae
+
956cae
+/**
956cae
+ * Helper functions to format output names
956cae
+ */
956cae
+int sized_output_name(TALLOC_CTX *mem_ctx,
956cae
+                      struct resp_ctx *rctx,
956cae
+                      const char *orig_name,
956cae
+                      struct sss_domain_info *name_dom,
956cae
+                      struct sized_string **_name)
956cae
+{
956cae
+    TALLOC_CTX *tmp_ctx = NULL;
956cae
+    errno_t ret;
956cae
+    char *username;
956cae
+    struct sized_string *name;
956cae
+
956cae
+    tmp_ctx = talloc_new(NULL);
956cae
+    if (tmp_ctx == NULL) {
956cae
+        return ENOMEM;
956cae
+    }
956cae
+
956cae
+    username = sss_output_name(tmp_ctx, orig_name, name_dom->case_preserve,
956cae
+                               rctx->override_space);
956cae
+    if (username == NULL) {
956cae
+        ret = EIO;
956cae
+        goto done;
956cae
+    }
956cae
+
956cae
+    if (name_dom->fqnames) {
956cae
+        username = sss_tc_fqname(tmp_ctx, name_dom->names, name_dom, username);
956cae
+        if (username == NULL) {
956cae
+            DEBUG(SSSDBG_CRIT_FAILURE, "sss_replace_space failed\n");
956cae
+            ret = EIO;
956cae
+            goto done;
956cae
+        }
956cae
+    }
956cae
+
956cae
+    name = talloc_zero(tmp_ctx, struct sized_string);
956cae
+    if (name == NULL) {
956cae
+        ret = ENOMEM;
956cae
+        goto done;
956cae
+    }
956cae
+
956cae
+    to_sized_string(name, username);
956cae
+    name->str = talloc_steal(name, username);
956cae
+    *_name = talloc_steal(mem_ctx, name);
956cae
+    ret = EOK;
956cae
+done:
956cae
+    talloc_zfree(tmp_ctx);
956cae
+    return ret;
956cae
+}
956cae
+
956cae
+int sized_domain_name(TALLOC_CTX *mem_ctx,
956cae
+                      struct resp_ctx *rctx,
956cae
+                      const char *member_name,
956cae
+                      struct sized_string **_name)
956cae
+{
956cae
+    TALLOC_CTX *tmp_ctx = NULL;
956cae
+    errno_t ret;
956cae
+    char *domname;
956cae
+    struct sss_domain_info *member_dom;
956cae
+
956cae
+    tmp_ctx = talloc_new(NULL);
956cae
+    if (tmp_ctx == NULL) {
956cae
+        return ENOMEM;
956cae
+    }
956cae
+
956cae
+    ret = sss_parse_internal_fqname(tmp_ctx, member_name, NULL, &domname);
956cae
+    if (ret != EOK) {
956cae
+        DEBUG(SSSDBG_CRIT_FAILURE, "sss_parse_internal_fqname failed\n");
956cae
+        goto done;
956cae
+    }
956cae
+
956cae
+    if (domname == NULL) {
956cae
+        ret = ERR_WRONG_NAME_FORMAT;
956cae
+        goto done;
956cae
+    }
956cae
+
956cae
+    member_dom = find_domain_by_name(get_domains_head(rctx->domains),
956cae
+                                     domname, true);
956cae
+    if (member_dom == NULL) {
956cae
+        ret = ERR_DOMAIN_NOT_FOUND;
956cae
+        goto done;
956cae
+    }
956cae
+
956cae
+    ret = sized_output_name(mem_ctx, rctx, member_name,
956cae
+                            member_dom, _name);
956cae
+done:
956cae
+    talloc_free(tmp_ctx);
956cae
+    return ret;
956cae
+}
bb7cd1
diff --git a/src/responder/nss/nss_private.h b/src/responder/nss/nss_private.h
bb7cd1
index acb3c4aa504e538ca56dca8d43ee04b0f60954a9..13de83226177bbaa8b8237e3e27b7e72da369194 100644
bb7cd1
--- a/src/responder/nss/nss_private.h
bb7cd1
+++ b/src/responder/nss/nss_private.h
bb7cd1
@@ -140,17 +140,6 @@ const char *
bb7cd1
 nss_get_name_from_msg(struct sss_domain_info *domain,
bb7cd1
                       struct ldb_message *msg);
bb7cd1
 
bb7cd1
-int sized_output_name(TALLOC_CTX *mem_ctx,
bb7cd1
-                      struct resp_ctx *rctx,
bb7cd1
-                      const char *orig_name,
bb7cd1
-                      struct sss_domain_info *name_dom,
bb7cd1
-                      struct sized_string **_name);
bb7cd1
-
bb7cd1
-int sized_member_name(TALLOC_CTX *mem_ctx,
bb7cd1
-                      struct resp_ctx *rctx,
bb7cd1
-                      const char *member_name,
bb7cd1
-                      struct sized_string **_name);
bb7cd1
-
bb7cd1
 const char *
bb7cd1
 nss_get_pwfield(struct nss_ctx *nctx,
bb7cd1
                 struct sss_domain_info *dom);
bb7cd1
diff --git a/src/responder/nss/nss_protocol_grent.c b/src/responder/nss/nss_protocol_grent.c
bb7cd1
index 283ab9f6731bc4c8261ca79075ab030005bf70db..fae1d47d7b217beafba75740e2e6d9cb8cdbc1d0 100644
bb7cd1
--- a/src/responder/nss/nss_protocol_grent.c
bb7cd1
+++ b/src/responder/nss/nss_protocol_grent.c
bb7cd1
@@ -163,7 +163,7 @@ nss_protocol_fill_members(struct sss_packet *packet,
bb7cd1
                 }
bb7cd1
             }
bb7cd1
 
bb7cd1
-            ret = sized_member_name(tmp_ctx, rctx, member_name, &name);
bb7cd1
+            ret = sized_domain_name(tmp_ctx, rctx, member_name, &name);
bb7cd1
             if (ret != EOK) {
bb7cd1
                 DEBUG(SSSDBG_OP_FAILURE, "Unable to get sized name [%d]: %s\n",
bb7cd1
                       ret, sss_strerror(ret));
bb7cd1
diff --git a/src/responder/nss/nss_utils.c b/src/responder/nss/nss_utils.c
bb7cd1
index f839930a275db56e8d729888af870562d7b6f260..2cd9c33b42f7e018ea89d2df206637f35646489e 100644
bb7cd1
--- a/src/responder/nss/nss_utils.c
bb7cd1
+++ b/src/responder/nss/nss_utils.c
bb7cd1
@@ -53,93 +53,6 @@ nss_get_name_from_msg(struct sss_domain_info *domain,
bb7cd1
     return ldb_msg_find_attr_as_string(msg, SYSDB_NAME, NULL);
956cae
 }
956cae
 
bb7cd1
-int sized_output_name(TALLOC_CTX *mem_ctx,
bb7cd1
-                      struct resp_ctx *rctx,
bb7cd1
-                      const char *orig_name,
bb7cd1
-                      struct sss_domain_info *name_dom,
bb7cd1
-                      struct sized_string **_name)
956cae
-{
956cae
-    TALLOC_CTX *tmp_ctx = NULL;
956cae
-    errno_t ret;
956cae
-    char *username;
956cae
-    struct sized_string *name;
956cae
-
956cae
-    tmp_ctx = talloc_new(NULL);
956cae
-    if (tmp_ctx == NULL) {
956cae
-        return ENOMEM;
956cae
-    }
956cae
-
956cae
-    username = sss_output_name(tmp_ctx, orig_name, name_dom->case_preserve,
956cae
-                               rctx->override_space);
956cae
-    if (username == NULL) {
956cae
-        ret = EIO;
956cae
-        goto done;
956cae
-    }
956cae
-
956cae
-    if (name_dom->fqnames) {
956cae
-        username = sss_tc_fqname(tmp_ctx, name_dom->names, name_dom, username);
956cae
-        if (username == NULL) {
956cae
-            DEBUG(SSSDBG_CRIT_FAILURE, "sss_replace_space failed\n");
956cae
-            ret = EIO;
956cae
-            goto done;
956cae
-        }
956cae
-    }
956cae
-
956cae
-    name = talloc_zero(tmp_ctx, struct sized_string);
956cae
-    if (name == NULL) {
956cae
-        ret = ENOMEM;
956cae
-        goto done;
956cae
-    }
956cae
-
956cae
-    to_sized_string(name, username);
956cae
-    name->str = talloc_steal(name, username);
956cae
-    *_name = talloc_steal(mem_ctx, name);
956cae
-    ret = EOK;
956cae
-done:
956cae
-    talloc_zfree(tmp_ctx);
956cae
-    return ret;
956cae
-}
956cae
-
bb7cd1
-int sized_member_name(TALLOC_CTX *mem_ctx,
bb7cd1
-                      struct resp_ctx *rctx,
bb7cd1
-                      const char *member_name,
bb7cd1
-                      struct sized_string **_name)
956cae
-{
956cae
-    TALLOC_CTX *tmp_ctx = NULL;
956cae
-    errno_t ret;
956cae
-    char *domname;
956cae
-    struct sss_domain_info *member_dom;
956cae
-
956cae
-    tmp_ctx = talloc_new(NULL);
956cae
-    if (tmp_ctx == NULL) {
956cae
-        return ENOMEM;
956cae
-    }
956cae
-
956cae
-    ret = sss_parse_internal_fqname(tmp_ctx, member_name, NULL, &domname);
956cae
-    if (ret != EOK) {
956cae
-        DEBUG(SSSDBG_CRIT_FAILURE, "sss_parse_internal_fqname failed\n");
956cae
-        goto done;
956cae
-    }
956cae
-
956cae
-    if (domname == NULL) {
956cae
-        ret = ERR_WRONG_NAME_FORMAT;
956cae
-        goto done;
956cae
-    }
956cae
-
956cae
-    member_dom = find_domain_by_name(get_domains_head(rctx->domains),
956cae
-                                     domname, true);
956cae
-    if (member_dom == NULL) {
956cae
-        ret = ERR_DOMAIN_NOT_FOUND;
956cae
-        goto done;
956cae
-    }
956cae
-
956cae
-    ret = sized_output_name(mem_ctx, rctx, member_name,
956cae
-                            member_dom, _name);
956cae
-done:
956cae
-    talloc_free(tmp_ctx);
956cae
-    return ret;
956cae
-}
956cae
-
bb7cd1
 const char *
bb7cd1
 nss_get_pwfield(struct nss_ctx *nctx,
bb7cd1
                struct sss_domain_info *dom)
956cae
-- 
956cae
2.9.3
956cae