dpward / rpms / sssd

Forked from rpms/sssd 3 years ago
Clone

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

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