From fca02ff716215f952f84191be73cced61b151024 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Thu, 2 Oct 2014 16:13:34 +0200
Subject: [PATCH 1/5] Add sysdb_search_[user|group]_override_attrs_by_name

---
 src/db/sysdb.h       | 14 ++++++++++++
 src/db/sysdb_views.c | 62 +++++++++++++++++++++++++++++++---------------------
 2 files changed, 51 insertions(+), 25 deletions(-)

diff --git a/src/db/sysdb.h b/src/db/sysdb.h
index fc88d81eeb03f836e3ff7237b9c1c64b5500abb7..1f21f151d860eafc56c0970b23bbed25b239b157 100644
--- a/src/db/sysdb.h
+++ b/src/db/sysdb.h
@@ -436,6 +436,20 @@ errno_t sysdb_apply_default_override(struct sss_domain_info *domain,
                                      struct sysdb_attrs *override_attrs,
                                      struct ldb_dn *obj_dn);
 
+errno_t sysdb_search_user_override_attrs_by_name(TALLOC_CTX *mem_ctx,
+                                            struct sss_domain_info *domain,
+                                            const char *name,
+                                            const char **attrs,
+                                            struct ldb_result **override_obj,
+                                            struct ldb_result **orig_obj);
+
+errno_t sysdb_search_group_override_attrs_by_name(TALLOC_CTX *mem_ctx,
+                                            struct sss_domain_info *domain,
+                                            const char *name,
+                                            const char **attrs,
+                                            struct ldb_result **override_obj,
+                                            struct ldb_result **orig_obj);
+
 errno_t sysdb_search_user_override_by_name(TALLOC_CTX *mem_ctx,
                                            struct sss_domain_info *domain,
                                            const char *name,
diff --git a/src/db/sysdb_views.c b/src/db/sysdb_views.c
index f4f9eabe7b3ad370371d112646861cefe2a9d377..f539e6566e4ea908aec2db30913204c1a710fe3b 100644
--- a/src/db/sysdb_views.c
+++ b/src/db/sysdb_views.c
@@ -667,14 +667,12 @@ enum override_object_type {
 static errno_t sysdb_search_override_by_name(TALLOC_CTX *mem_ctx,
                                              struct sss_domain_info *domain,
                                              const char *name,
-                                             enum override_object_type type,
+                                             const char *filter,
+                                             const char **attrs,
                                              struct ldb_result **override_obj,
                                              struct ldb_result **orig_obj)
 {
     TALLOC_CTX *tmp_ctx;
-    static const char *user_attrs[] = SYSDB_PW_ATTRS;
-    static const char *group_attrs[] = SYSDB_GRSRC_ATTRS;
-    const char **attrs;
     struct ldb_dn *base_dn;
     struct ldb_result *override_res;
     struct ldb_result *orig_res;
@@ -683,7 +681,6 @@ static errno_t sysdb_search_override_by_name(TALLOC_CTX *mem_ctx,
     const char *src_name;
     int ret;
     const char *orig_obj_dn;
-    const char *filter;
 
     tmp_ctx = talloc_new(NULL);
     if (!tmp_ctx) {
@@ -714,22 +711,6 @@ static errno_t sysdb_search_override_by_name(TALLOC_CTX *mem_ctx,
         goto done;
     }
 
-    switch(type) {
-    case OO_TYPE_USER:
-        filter = SYSDB_USER_NAME_OVERRIDE_FILTER;
-        attrs = user_attrs;
-        break;
-    case OO_TYPE_GROUP:
-        filter = SYSDB_GROUP_NAME_OVERRIDE_FILTER;
-        attrs = group_attrs;
-        break;
-    default:
-        DEBUG(SSSDBG_CRIT_FAILURE, "Unexpected override object type [%d].\n",
-                                   type);
-        ret = EINVAL;
-        goto done;
-    }
-
     ret = ldb_search(domain->sysdb->ldb, tmp_ctx, &override_res, base_dn,
                      LDB_SCOPE_SUBTREE, attrs, filter,
                      lc_sanitized_name,
@@ -790,14 +771,42 @@ done:
     return ret;
 }
 
+errno_t sysdb_search_user_override_attrs_by_name(TALLOC_CTX *mem_ctx,
+                                             struct sss_domain_info *domain,
+                                             const char *name,
+                                             const char **attrs,
+                                             struct ldb_result **override_obj,
+                                             struct ldb_result **orig_obj)
+{
+
+    return sysdb_search_override_by_name(mem_ctx, domain, name,
+                                         SYSDB_USER_NAME_OVERRIDE_FILTER,
+                                         attrs, override_obj, orig_obj);
+}
+
+errno_t sysdb_search_group_override_attrs_by_name(TALLOC_CTX *mem_ctx,
+                                            struct sss_domain_info *domain,
+                                            const char *name,
+                                            const char **attrs,
+                                            struct ldb_result **override_obj,
+                                            struct ldb_result **orig_obj)
+{
+    return sysdb_search_override_by_name(mem_ctx, domain, name,
+                                         SYSDB_GROUP_NAME_OVERRIDE_FILTER,
+                                         attrs, override_obj, orig_obj);
+}
+
 errno_t sysdb_search_user_override_by_name(TALLOC_CTX *mem_ctx,
                                            struct sss_domain_info *domain,
                                            const char *name,
                                            struct ldb_result **override_obj,
                                            struct ldb_result **orig_obj)
 {
-    return sysdb_search_override_by_name(mem_ctx, domain, name, OO_TYPE_USER,
-                                         override_obj, orig_obj);
+    const char *attrs[] = SYSDB_PW_ATTRS;
+
+    return sysdb_search_override_by_name(mem_ctx, domain, name,
+                                         SYSDB_USER_NAME_OVERRIDE_FILTER,
+                                         attrs, override_obj, orig_obj);
 }
 
 errno_t sysdb_search_group_override_by_name(TALLOC_CTX *mem_ctx,
@@ -806,8 +815,11 @@ errno_t sysdb_search_group_override_by_name(TALLOC_CTX *mem_ctx,
                                             struct ldb_result **override_obj,
                                             struct ldb_result **orig_obj)
 {
-    return sysdb_search_override_by_name(mem_ctx, domain, name, OO_TYPE_GROUP,
-                                         override_obj, orig_obj);
+    const char *attrs[] = SYSDB_GRSRC_ATTRS;
+
+    return sysdb_search_override_by_name(mem_ctx, domain, name,
+                                         SYSDB_GROUP_NAME_OVERRIDE_FILTER,
+                                         attrs, override_obj, orig_obj);
 }
 
 static errno_t sysdb_search_override_by_id(TALLOC_CTX *mem_ctx,
-- 
1.7.11.7

