Blob Blame History Raw
From 634311d9250903599a61b2f5e205e2568ae92497 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Tue, 12 Jul 2016 12:59:48 +0200
Subject: [PATCH 29/31] sssctl: move filter creation to separate function
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Reviewed-by: Fabiano FidĂȘncio <fabiano@fidencio.org>
(cherry picked from commit 3c6e15e8aa38d9dfa02a7255fad56149bdfb35a6)
---
 src/tools/sssctl/sssctl_cache.c | 81 +++++++++++++++++++++++------------------
 1 file changed, 46 insertions(+), 35 deletions(-)

diff --git a/src/tools/sssctl/sssctl_cache.c b/src/tools/sssctl/sssctl_cache.c
index e23bb89db95217e66a441b7e4d6d32e668486cc8..3e7644e327eb3e5a0e33023e7a3f5f0f15e03cf6 100644
--- a/src/tools/sssctl/sssctl_cache.c
+++ b/src/tools/sssctl/sssctl_cache.c
@@ -285,27 +285,16 @@ done:
     return ret;
 }
 
-static errno_t sssctl_find_object(TALLOC_CTX *mem_ctx,
-                                  struct sss_domain_info *domains,
-                                  struct sss_domain_info *domain,
-                                  sssctl_basedn_fn basedn_fn,
-                                  enum cache_object obj_type,
-                                  const char *attr_name,
-                                  const char *attr_value,
-                                  const char **attrs,
-                                  struct sysdb_attrs **_entry,
-                                  struct sss_domain_info **_dom)
+static const char *sssctl_create_filter(TALLOC_CTX *mem_ctx,
+                                        struct sss_domain_info *dom,
+                                        enum cache_object obj_type,
+                                        const char *attr_name,
+                                        const char *attr_value)
 {
-    TALLOC_CTX *tmp_ctx;
-    struct sss_domain_info *dom;
-    struct sysdb_attrs *entry;
-    struct ldb_dn *base_dn;
-    bool fqn_provided;
-    bool qualify_attr = false;
-    char *filter;
-    errno_t ret;
     const char *class;
+    const char *filter;
     char *filter_value;
+    bool qualify_attr = false;
 
     if (strcmp(attr_name, SYSDB_NAME) == 0 &&
             (obj_type == CACHED_USER ||
@@ -326,9 +315,44 @@ static errno_t sssctl_find_object(TALLOC_CTX *mem_ctx,
     default:
         DEBUG(SSSDBG_FATAL_FAILURE,
               "sssctl doesn't handle this object type (type=%d)\n", obj_type);
-        return EINVAL;
+        return NULL;
     }
 
+    if (qualify_attr) {
+        filter_value = sss_create_internal_fqname(NULL, attr_value, dom->name);
+    } else {
+        filter_value = talloc_strdup(NULL, attr_value);
+    }
+    if (filter_value == NULL) {
+        return NULL;
+    }
+
+    filter = talloc_asprintf(mem_ctx, "(&(objectClass=%s)(%s=%s))",
+                             class, attr_name, filter_value);
+    talloc_free(filter_value);
+
+    return filter;
+}
+
+static errno_t sssctl_find_object(TALLOC_CTX *mem_ctx,
+                                  struct sss_domain_info *domains,
+                                  struct sss_domain_info *domain,
+                                  sssctl_basedn_fn basedn_fn,
+                                  enum cache_object obj_type,
+                                  const char *attr_name,
+                                  const char *attr_value,
+                                  const char **attrs,
+                                  struct sysdb_attrs **_entry,
+                                  struct sss_domain_info **_dom)
+{
+    TALLOC_CTX *tmp_ctx;
+    struct sss_domain_info *dom;
+    struct sysdb_attrs *entry;
+    struct ldb_dn *base_dn;
+    bool fqn_provided;
+    const char *filter;
+    errno_t ret;
+
     tmp_ctx = talloc_new(NULL);
     if (tmp_ctx == NULL) {
         DEBUG(SSSDBG_CRIT_FAILURE, "talloc_new() failed\n");
@@ -349,23 +373,10 @@ static errno_t sssctl_find_object(TALLOC_CTX *mem_ctx,
             goto done;
         }
 
-        if (qualify_attr) {
-            filter_value = sss_create_internal_fqname(tmp_ctx,
-                                                      attr_value,
-                                                      dom->name);
-        } else {
-            filter_value = talloc_strdup(tmp_ctx, attr_value);
-        }
-        if (filter_value == NULL) {
-            ret = ENOMEM;
-            goto done;
-        }
-
-        filter = talloc_asprintf(tmp_ctx, "(&(objectClass=%s)(%s=%s))",
-                                 class, attr_name, filter_value);
-        talloc_free(filter_value);
+        filter = sssctl_create_filter(tmp_ctx, dom, obj_type,
+                                      attr_name, attr_value);
         if (filter == NULL) {
-            DEBUG(SSSDBG_CRIT_FAILURE, "talloc_asprintf() failed\n");
+            DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create filter\n");
             ret = ENOMEM;
             goto done;
         }
-- 
2.4.11