Blame SOURCES/0177-SYSDB-Make-the-usage-of-the-filter-more-generic-for-.patch

ecf709
From 7d926fb2e8fe21e3fa51bc341189d33658600daf Mon Sep 17 00:00:00 2001
ecf709
From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <fidencio@redhat.com>
ecf709
Date: Wed, 24 May 2017 11:52:23 +0200
ecf709
Subject: [PATCH 177/181] SYSDB: Make the usage of the filter more generic for
ecf709
 search_ts_matches()
ecf709
MIME-Version: 1.0
ecf709
Content-Type: text/plain; charset=UTF-8
ecf709
Content-Transfer-Encoding: 8bit
ecf709
ecf709
In order to make this function re-usable in different parts of our code,
ecf709
let's start passing an already built filter to it instead of having the
ecf709
specific code building the name filter there.
ecf709
ecf709
Related:
ecf709
https://pagure.io/SSSD/sssd/issue/3369
ecf709
ecf709
Signed-off-by: Fabiano FidĂȘncio <fidencio@redhat.com>
ecf709
ecf709
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
ecf709
(cherry picked from commit 8ad57e17779b3ec60246ac58c1691ee15745084c)
ecf709
---
ecf709
 src/db/sysdb_search.c | 67 +++++++++++++++++++++++++++++++++++++++++----------
ecf709
 1 file changed, 54 insertions(+), 13 deletions(-)
ecf709
ecf709
diff --git a/src/db/sysdb_search.c b/src/db/sysdb_search.c
ecf709
index 0c04b84a584e047a0ba8243c9216547ea2791e60..f488442afcc6eef114437a7110722759f86fe19e 100644
ecf709
--- a/src/db/sysdb_search.c
ecf709
+++ b/src/db/sysdb_search.c
ecf709
@@ -489,7 +489,6 @@ errno_t sysdb_search_ts_matches(TALLOC_CTX *mem_ctx,
ecf709
                                 const char *filter,
ecf709
                                 struct ldb_result **_res)
ecf709
 {
ecf709
-    char *dn_filter;
ecf709
     TALLOC_CTX *tmp_ctx = NULL;
ecf709
     struct ldb_result *res;
ecf709
     errno_t ret;
ecf709
@@ -501,7 +500,7 @@ errno_t sysdb_search_ts_matches(TALLOC_CTX *mem_ctx,
ecf709
     }
ecf709
 
ecf709
     tmp_ctx = talloc_new(NULL);
ecf709
-    if (!tmp_ctx) {
ecf709
+    if (tmp_ctx == NULL) {
ecf709
         return ENOMEM;
ecf709
     }
ecf709
 
ecf709
@@ -511,7 +510,43 @@ errno_t sysdb_search_ts_matches(TALLOC_CTX *mem_ctx,
ecf709
         goto done;
ecf709
     }
ecf709
 
ecf709
-    dn_filter = talloc_asprintf(tmp_ctx, "(&(%s=%s)(|", SYSDB_NAME, filter);
ecf709
+    ret = ldb_search(sysdb->ldb, tmp_ctx, &res, NULL,
ecf709
+                     LDB_SCOPE_SUBTREE, attrs, "%s", filter);
ecf709
+    if (ret) {
ecf709
+        ret = sysdb_error_to_errno(ret);
ecf709
+        goto done;
ecf709
+    }
ecf709
+
ecf709
+    *_res = talloc_steal(mem_ctx, res);
ecf709
+    ret = EOK;
ecf709
+
ecf709
+done:
ecf709
+    talloc_zfree(tmp_ctx);
ecf709
+    return ret;
ecf709
+}
ecf709
+
ecf709
+static errno_t sysdb_enum_dn_filter(TALLOC_CTX *mem_ctx,
ecf709
+                                    struct ldb_result *ts_res,
ecf709
+                                    const char *name_filter,
ecf709
+                                    char **_dn_filter)
ecf709
+{
ecf709
+    TALLOC_CTX *tmp_ctx = NULL;
ecf709
+    char *dn_filter;
ecf709
+    errno_t ret;
ecf709
+
ecf709
+    if (ts_res->count == 0) {
ecf709
+        *_dn_filter = NULL;
ecf709
+        ret = EOK;
ecf709
+        goto done;
ecf709
+    }
ecf709
+
ecf709
+    tmp_ctx = talloc_new(NULL);
ecf709
+    if (tmp_ctx == NULL) {
ecf709
+        return ENOMEM;
ecf709
+    }
ecf709
+
ecf709
+    dn_filter = talloc_asprintf(tmp_ctx, "(&(%s=%s)(|", SYSDB_NAME,
ecf709
+                                name_filter);
ecf709
     if (dn_filter == NULL) {
ecf709
         ret = ENOMEM;
ecf709
         goto done;
ecf709
@@ -535,15 +570,9 @@ errno_t sysdb_search_ts_matches(TALLOC_CTX *mem_ctx,
ecf709
         goto done;
ecf709
     }
ecf709
 
ecf709
-    ret = ldb_search(sysdb->ldb, tmp_ctx, &res, NULL,
ecf709
-                     LDB_SCOPE_SUBTREE, attrs, "%s", dn_filter);
ecf709
-    if (ret) {
ecf709
-        ret = sysdb_error_to_errno(ret);
ecf709
-        goto done;
ecf709
-    }
ecf709
-
ecf709
+    *_dn_filter = talloc_steal(mem_ctx, dn_filter);
ecf709
     ret = EOK;
ecf709
-    *_res = talloc_steal(mem_ctx, res);
ecf709
+
ecf709
 done:
ecf709
     talloc_zfree(tmp_ctx);
ecf709
     return ret;
ecf709
@@ -558,6 +587,7 @@ int sysdb_enumpwent_filter(TALLOC_CTX *mem_ctx,
ecf709
     TALLOC_CTX *tmp_ctx;
ecf709
     static const char *attrs[] = SYSDB_PW_ATTRS;
ecf709
     char *filter = NULL;
ecf709
+    char *dn_filter = NULL;
ecf709
     const char *ts_filter = NULL;
ecf709
     struct ldb_dn *base_dn;
ecf709
     struct ldb_result *res;
ecf709
@@ -595,8 +625,13 @@ int sysdb_enumpwent_filter(TALLOC_CTX *mem_ctx,
ecf709
         goto done;
ecf709
     }
ecf709
 
ecf709
+    ret = sysdb_enum_dn_filter(tmp_ctx, &ts_res, name_filter, &dn_filter);
ecf709
+    if (ret != EOK) {
ecf709
+        goto done;
ecf709
+    }
ecf709
+
ecf709
     ret = sysdb_search_ts_matches(tmp_ctx, domain->sysdb, attrs, &ts_res,
ecf709
-                                  name_filter, &ts_cache_res);
ecf709
+                                  dn_filter, &ts_cache_res);
ecf709
     if (ret != EOK && ret != ENOENT) {
ecf709
         goto done;
ecf709
     }
ecf709
@@ -1052,6 +1087,7 @@ int sysdb_enumgrent_filter(TALLOC_CTX *mem_ctx,
ecf709
     const char *filter = NULL;
ecf709
     const char *ts_filter = NULL;
ecf709
     const char *base_filter;
ecf709
+    char *dn_filter = NULL;
ecf709
     struct ldb_dn *base_dn;
ecf709
     struct ldb_result *res;
ecf709
     struct ldb_result ts_res;
ecf709
@@ -1100,8 +1136,13 @@ int sysdb_enumgrent_filter(TALLOC_CTX *mem_ctx,
ecf709
         goto done;
ecf709
     }
ecf709
 
ecf709
+    ret = sysdb_enum_dn_filter(tmp_ctx, &ts_res, name_filter, &dn_filter);
ecf709
+    if (ret != EOK) {
ecf709
+        goto done;
ecf709
+    }
ecf709
+
ecf709
     ret = sysdb_search_ts_matches(tmp_ctx, domain->sysdb, attrs, &ts_res,
ecf709
-                                  name_filter, &ts_cache_res);
ecf709
+                                  dn_filter, &ts_cache_res);
ecf709
     if (ret != EOK && ret != ENOENT) {
ecf709
         goto done;
ecf709
     }
ecf709
-- 
ecf709
2.9.4
ecf709