Blame SOURCES/0198-ipa-make-sure-view-name-is-initialized-at-startup.patch

ecf709
From 2d39f46386fb36b5a68f41644ce22c15bf6ccb67 Mon Sep 17 00:00:00 2001
ecf709
From: Sumit Bose <sbose@redhat.com>
ecf709
Date: Thu, 31 Aug 2017 22:30:25 +0200
ecf709
Subject: [PATCH 198/199] ipa: make sure view name is initialized at startup
ecf709
ecf709
sysdb_master_domain_update() can only set the view name properly if it was not
ecf709
set before but it might be called multiple times before the view name is
ecf709
available if the cache is empty. Since ipa_apply_view() keeps track if
ecf709
the view name was already set at startup or not the name can safely be
ecf709
cleaned here before sysdb_master_domain_update() is called.
ecf709
ecf709
Resolves:
ecf709
https://pagure.io/SSSD/sssd/issue/3501
ecf709
ecf709
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
ecf709
(cherry picked from commit f00591a4615720640cf01b1c408315b57dd397dc)
ecf709
---
ecf709
 src/providers/ipa/ipa_subdomains.c | 19 ++++++++++++++++++-
ecf709
 1 file changed, 18 insertions(+), 1 deletion(-)
ecf709
ecf709
diff --git a/src/providers/ipa/ipa_subdomains.c b/src/providers/ipa/ipa_subdomains.c
ecf709
index 6f0ff50bde234f72d62f43635d9a787316c78430..0cb4d405e45689e9548ad3652e7260f2265bd1fe 100644
ecf709
--- a/src/providers/ipa/ipa_subdomains.c
ecf709
+++ b/src/providers/ipa/ipa_subdomains.c
ecf709
@@ -739,6 +739,18 @@ done:
ecf709
     return ret;
ecf709
 }
ecf709
 
ecf709
+static void clean_view_name(struct sss_domain_info *domain)
ecf709
+{
ecf709
+    struct sss_domain_info *dom = domain;
ecf709
+
ecf709
+    while (dom) {
ecf709
+        dom->has_views = false;
ecf709
+        talloc_free(discard_const(dom->view_name));
ecf709
+        dom->view_name = NULL;
ecf709
+        dom = get_next_domain(dom, SSS_GND_DESCEND);
ecf709
+    }
ecf709
+}
ecf709
+
ecf709
 static errno_t ipa_apply_view(struct sss_domain_info *domain,
ecf709
                               struct ipa_id_ctx *ipa_id_ctx,
ecf709
                               const char *view_name,
ecf709
@@ -831,7 +843,12 @@ static errno_t ipa_apply_view(struct sss_domain_info *domain,
ecf709
     }
ecf709
 
ecf709
     if (!read_at_init) {
ecf709
-        /* refresh view data of all domains at startup */
ecf709
+        /* refresh view data of all domains at startup, since
ecf709
+         * sysdb_master_domain_update and sysdb_update_subdomains might have
ecf709
+         * been called earlier without the proper view name the name is
ecf709
+         * cleaned here before the calls. This is acceptable because this is
ecf709
+         * the initial setup (!read_at_init).  */
ecf709
+        clean_view_name(domain);
ecf709
         ret = sysdb_master_domain_update(domain);
ecf709
         if (ret != EOK) {
ecf709
             DEBUG(SSSDBG_OP_FAILURE, "sysdb_master_domain_update failed "
ecf709
-- 
ecf709
2.13.5
ecf709