6c4e197
From 67c8b8702a249cb0ef1ebf49b6e87056cd5339f6 Mon Sep 17 00:00:00 2001
6c4e197
From: Mark Reynolds <mreynolds@redhat.com>
6c4e197
Date: Tue, 27 Oct 2020 13:14:55 -0400
6c4e197
Subject: [PATCH] Issue 2526 - retrocl backend created out of order
6c4e197
6c4e197
Bug Description:  A recent change verified that you do not create
6c4e197
                  a mappingtree entry before the backend entry was
6c4e197
                  created.  The server created the retrocl backend
6c4e197
                  in the opposite order which broke the retrocl.
6c4e197
6c4e197
Fix Description:  Create the retrocl backend entry before creating
6c4e197
                  the mapping tree entry.
6c4e197
6c4e197
Relates: https://github.com/389ds/389-ds-base/issues/2526
6c4e197
6c4e197
Reviewed by: viktor(Thanks!)
6c4e197
---
6c4e197
 ldap/servers/plugins/retrocl/retrocl.c        | 10 ++---
6c4e197
 ldap/servers/plugins/retrocl/retrocl_create.c | 38 +++++++++----------
6c4e197
 2 files changed, 22 insertions(+), 26 deletions(-)
6c4e197
6c4e197
diff --git a/ldap/servers/plugins/retrocl/retrocl.c b/ldap/servers/plugins/retrocl/retrocl.c
6c4e197
index 4af4d752b..8d6135dad 100644
6c4e197
--- a/ldap/servers/plugins/retrocl/retrocl.c
6c4e197
+++ b/ldap/servers/plugins/retrocl/retrocl.c
6c4e197
@@ -222,15 +222,11 @@ retrocl_select_backend(void)
6c4e197
     slapi_entry_free(referral);
6c4e197
 
6c4e197
     if (err != LDAP_SUCCESS || be == NULL || be == defbackend_get_backend()) {
6c4e197
-        slapi_log_err(SLAPI_LOG_ERR, RETROCL_PLUGIN_NAME,
6c4e197
+        /* Could not find the backend for cn=changelog, either because
6c4e197
+         * it doesn't exist mapping tree not registered. */
6c4e197
+        slapi_log_err(SLAPI_LOG_PLUGIN, RETROCL_PLUGIN_NAME,
6c4e197
                       "retrocl_select_backend - Mapping tree select failed (%d) %s.\n", err, errbuf);
6c4e197
-
6c4e197
-        /* could not find the backend for cn=changelog, either because
6c4e197
-         * it doesn't exist
6c4e197
-         * mapping tree not registered.
6c4e197
-         */
6c4e197
         err = retrocl_create_config();
6c4e197
-
6c4e197
         if (err != LDAP_SUCCESS)
6c4e197
             return err;
6c4e197
     } else {
6c4e197
diff --git a/ldap/servers/plugins/retrocl/retrocl_create.c b/ldap/servers/plugins/retrocl/retrocl_create.c
6c4e197
index fb1503520..571e6899f 100644
6c4e197
--- a/ldap/servers/plugins/retrocl/retrocl_create.c
6c4e197
+++ b/ldap/servers/plugins/retrocl/retrocl_create.c
6c4e197
@@ -192,6 +192,25 @@ retrocl_create_config(void)
6c4e197
     vals[0] = &val;
6c4e197
     vals[1] = NULL;
6c4e197
 
6c4e197
+    retrocl_be_changelog = slapi_be_select_by_instance_name("changelog");
6c4e197
+
6c4e197
+    if (retrocl_be_changelog == NULL) {
6c4e197
+        /* This is not the nsslapd-changelogdir from cn=changelog4,cn=config */
6c4e197
+        char *bedir;
6c4e197
+
6c4e197
+        bedir = retrocl_get_config_str(CONFIG_CHANGELOG_DIRECTORY_ATTRIBUTE);
6c4e197
+        if (bedir == NULL) {
6c4e197
+            /* none specified */
6c4e197
+        }
6c4e197
+
6c4e197
+        rc = retrocl_create_be(bedir);
6c4e197
+        slapi_ch_free_string(&bedir);
6c4e197
+        if (rc != LDAP_SUCCESS && rc != LDAP_ALREADY_EXISTS) {
6c4e197
+            return rc;
6c4e197
+        }
6c4e197
+        retrocl_be_changelog = slapi_be_select_by_instance_name("changelog");
6c4e197
+    }
6c4e197
+
6c4e197
     /* Assume the mapping tree node is missing.  It doesn't hurt to
6c4e197
      * attempt to add it if it already exists.  You will see a warning
6c4e197
      * in the errors file when the referenced backend does not exist.
6c4e197
@@ -256,25 +275,6 @@ retrocl_create_config(void)
6c4e197
         return rc;
6c4e197
     }
6c4e197
 
6c4e197
-    retrocl_be_changelog = slapi_be_select_by_instance_name("changelog");
6c4e197
-
6c4e197
-    if (retrocl_be_changelog == NULL) {
6c4e197
-        /* This is not the nsslapd-changelogdir from cn=changelog4,cn=config */
6c4e197
-        char *bedir;
6c4e197
-
6c4e197
-        bedir = retrocl_get_config_str(CONFIG_CHANGELOG_DIRECTORY_ATTRIBUTE);
6c4e197
-        if (bedir == NULL) {
6c4e197
-            /* none specified */
6c4e197
-        }
6c4e197
-
6c4e197
-        rc = retrocl_create_be(bedir);
6c4e197
-        slapi_ch_free_string(&bedir);
6c4e197
-        if (rc != LDAP_SUCCESS && rc != LDAP_ALREADY_EXISTS) {
6c4e197
-            return rc;
6c4e197
-        }
6c4e197
-        retrocl_be_changelog = slapi_be_select_by_instance_name("changelog");
6c4e197
-    }
6c4e197
-
6c4e197
     return LDAP_SUCCESS;
6c4e197
 }
6c4e197
 
6c4e197
-- 
6c4e197
2.28.0
6c4e197