Blame SOURCES/0050-BE-Pass-in-attribute-to-look-up-with-instead-of-hard.patch

5cd47f
From f035dee4d63ebe96a8435778e4c8ce413e8c025b Mon Sep 17 00:00:00 2001
5cd47f
From: Jakub Hrozek <jhrozek@redhat.com>
5cd47f
Date: Tue, 21 May 2019 12:09:24 +0200
5cd47f
Subject: [PATCH 50/64] BE: Pass in attribute to look up with instead of
5cd47f
 hardcoding SYSDB_NAME
5cd47f
5cd47f
In later patches, we will implement refreshes for AD or IPA which might
5cd47f
refresh objects that do not have a name yet, but always do have a different
5cd47f
attribute, like a SID or a uniqueID. In this case, it's better to use that
5cd47f
different attribute instead of name.
5cd47f
5cd47f
This patch allows the caller to tell the refresh module which attribute
5cd47f
to use.
5cd47f
5cd47f
Related:
5cd47f
https://pagure.io/SSSD/sssd/issue/4012
5cd47f
5cd47f
Reviewed-by: Sumit Bose <sbose@redhat.com>
5cd47f
(cherry picked from commit d1eb0a70de3c98ca9dc03a0b79287f4ce6ee4855)
5cd47f
5cd47f
Reviewed-by: Sumit Bose <sbose@redhat.com>
5cd47f
---
5cd47f
 src/providers/be_refresh.c        | 12 ++++++++----
5cd47f
 src/providers/be_refresh.h        |  3 ++-
5cd47f
 src/providers/ldap/sdap_refresh.c |  2 +-
5cd47f
 3 files changed, 11 insertions(+), 6 deletions(-)
5cd47f
5cd47f
diff --git a/src/providers/be_refresh.c b/src/providers/be_refresh.c
5cd47f
index c7b048a95..66cc4cf98 100644
5cd47f
--- a/src/providers/be_refresh.c
5cd47f
+++ b/src/providers/be_refresh.c
5cd47f
@@ -89,6 +89,7 @@ done:
5cd47f
 
5cd47f
 static errno_t be_refresh_get_values(TALLOC_CTX *mem_ctx,
5cd47f
                                      enum be_refresh_type type,
5cd47f
+                                     const char *attr_name,
5cd47f
                                      struct sss_domain_info *domain,
5cd47f
                                      time_t period,
5cd47f
                                      char ***_values)
5cd47f
@@ -116,7 +117,7 @@ static errno_t be_refresh_get_values(TALLOC_CTX *mem_ctx,
5cd47f
     }
5cd47f
 
5cd47f
     ret = be_refresh_get_values_ex(mem_ctx, domain, period,
5cd47f
-                                   base_dn, SYSDB_NAME, _values);
5cd47f
+                                   base_dn, attr_name, _values);
5cd47f
 
5cd47f
     talloc_free(base_dn);
5cd47f
     return ret;
5cd47f
@@ -131,10 +132,12 @@ struct be_refresh_cb {
5cd47f
 };
5cd47f
 
5cd47f
 struct be_refresh_ctx {
5cd47f
+    const char *attr_name;
5cd47f
     struct be_refresh_cb callbacks[BE_REFRESH_TYPE_SENTINEL];
5cd47f
 };
5cd47f
 
5cd47f
-struct be_refresh_ctx *be_refresh_ctx_init(struct be_ctx *be_ctx)
5cd47f
+struct be_refresh_ctx *be_refresh_ctx_init(struct be_ctx *be_ctx,
5cd47f
+                                           const char *attr_name)
5cd47f
 {
5cd47f
     struct be_refresh_ctx *ctx = NULL;
5cd47f
     uint32_t refresh_interval;
5cd47f
@@ -145,6 +148,7 @@ struct be_refresh_ctx *be_refresh_ctx_init(struct be_ctx *be_ctx)
5cd47f
         return NULL;
5cd47f
     }
5cd47f
 
5cd47f
+    ctx->attr_name = attr_name;
5cd47f
     ctx->callbacks[BE_REFRESH_TYPE_USERS].name = "users";
5cd47f
     ctx->callbacks[BE_REFRESH_TYPE_GROUPS].name = "groups";
5cd47f
     ctx->callbacks[BE_REFRESH_TYPE_NETGROUPS].name = "netgroups";
5cd47f
@@ -284,8 +288,8 @@ static errno_t be_refresh_step(struct tevent_req *req)
5cd47f
             goto done;
5cd47f
         }
5cd47f
 
5cd47f
-        ret = be_refresh_get_values(state, state->index, state->domain,
5cd47f
-                                    state->period, &values);
5cd47f
+        ret = be_refresh_get_values(state, state->index, state->ctx->attr_name,
5cd47f
+                                    state->domain, state->period, &values);
5cd47f
         if (ret != EOK) {
5cd47f
             DEBUG(SSSDBG_CRIT_FAILURE, "Unable to obtain DN list [%d]: %s\n",
5cd47f
                                         ret, sss_strerror(ret));
5cd47f
diff --git a/src/providers/be_refresh.h b/src/providers/be_refresh.h
5cd47f
index 664f01816..8c7b1d0ba 100644
5cd47f
--- a/src/providers/be_refresh.h
5cd47f
+++ b/src/providers/be_refresh.h
5cd47f
@@ -52,7 +52,8 @@ enum be_refresh_type {
5cd47f
 
5cd47f
 struct be_refresh_ctx;
5cd47f
 
5cd47f
-struct be_refresh_ctx *be_refresh_ctx_init(struct be_ctx *be_ctx);
5cd47f
+struct be_refresh_ctx *be_refresh_ctx_init(struct be_ctx *be_ctx,
5cd47f
+                                           const char *attr_name);
5cd47f
 
5cd47f
 errno_t be_refresh_add_cb(struct be_refresh_ctx *ctx,
5cd47f
                           enum be_refresh_type type,
5cd47f
diff --git a/src/providers/ldap/sdap_refresh.c b/src/providers/ldap/sdap_refresh.c
5cd47f
index 457df8be2..ed04da36a 100644
5cd47f
--- a/src/providers/ldap/sdap_refresh.c
5cd47f
+++ b/src/providers/ldap/sdap_refresh.c
5cd47f
@@ -260,7 +260,7 @@ errno_t sdap_refresh_init(struct be_ctx *be_ctx,
5cd47f
 {
5cd47f
     errno_t ret;
5cd47f
 
5cd47f
-    be_ctx->refresh_ctx = be_refresh_ctx_init(be_ctx);
5cd47f
+    be_ctx->refresh_ctx = be_refresh_ctx_init(be_ctx, SYSDB_NAME);
5cd47f
     if (be_ctx->refresh_ctx == NULL) {
5cd47f
         DEBUG(SSSDBG_FATAL_FAILURE, "Unable to initialize refresh_ctx\n");
5cd47f
         return ENOMEM;
5cd47f
-- 
5cd47f
2.20.1
5cd47f