Blame SOURCES/0064-Ticket-49257-only-register-modify-callbacks.patch

61f723
From bbe3403a88f9adecbd5d4187ceeb080fb51d9d14 Mon Sep 17 00:00:00 2001
61f723
From: Mark Reynolds <mreynolds@redhat.com>
61f723
Date: Wed, 31 May 2017 11:15:13 -0400
61f723
Subject: [PATCH] Ticket 49257 - only register modify callbacks
61f723
61f723
Bug Description:  Regression.  In the previous fix we called
61f723
                  ldbm_instance_config_load_dse_info() to register all
61f723
                  the dse preop callbacks.  Previously this was only done
61f723
                  when creating an instance.  It was not designed to be
61f723
                  used outside of that context, and it caused error 53's
61f723
                  when trying to add a backend after instance creation.
61f723
61f723
Fix Description:  Just register the "modify" DSE preop callbacks.
61f723
61f723
https://pagure.io/389-ds-base/issue/49257
61f723
61f723
Reviewed by: ?
61f723
61f723
(cherry picked from commit 75a32a8829297a5cab303590d049f581740cf87e)
61f723
---
61f723
 ldap/servers/slapd/back-ldbm/instance.c             | 12 +++---------
61f723
 ldap/servers/slapd/back-ldbm/ldbm_config.h          |  2 +-
61f723
 ldap/servers/slapd/back-ldbm/ldbm_instance_config.c | 13 +++++++++++++
61f723
 3 files changed, 17 insertions(+), 10 deletions(-)
61f723
61f723
diff --git a/ldap/servers/slapd/back-ldbm/instance.c b/ldap/servers/slapd/back-ldbm/instance.c
61f723
index 8b38644..f067d22 100644
61f723
--- a/ldap/servers/slapd/back-ldbm/instance.c
61f723
+++ b/ldap/servers/slapd/back-ldbm/instance.c
61f723
@@ -305,15 +305,9 @@ ldbm_instance_startall(struct ldbminfo *li)
61f723
         if (rc1 != 0) {
61f723
             rc = rc1;
61f723
         } else {
61f723
-            if(ldbm_instance_config_load_dse_info(inst) != 0){
61f723
-                slapi_log_err(SLAPI_LOG_ERR, "ldbm_instance_startall",
61f723
-                    "Loading database instance configuration failed for (%s)\n",
61f723
-                    inst->inst_name);
61f723
-                rc = -1;
61f723
-            } else {
61f723
-                vlv_init(inst);
61f723
-                slapi_mtn_be_started(inst->inst_be);
61f723
-            }
61f723
+            ldbm_instance_register_modify_callback(inst);
61f723
+            vlv_init(inst);
61f723
+            slapi_mtn_be_started(inst->inst_be);
61f723
         }
61f723
         inst_obj = objset_next_obj(li->li_instance_set, inst_obj);
61f723
     }
61f723
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_config.h b/ldap/servers/slapd/back-ldbm/ldbm_config.h
61f723
index ddec3a8..ea59739 100644
61f723
--- a/ldap/servers/slapd/back-ldbm/ldbm_config.h
61f723
+++ b/ldap/servers/slapd/back-ldbm/ldbm_config.h
61f723
@@ -157,6 +157,6 @@ int
61f723
 ldbm_instance_index_config_enable_index(ldbm_instance *inst, Slapi_Entry* e);
61f723
 int ldbm_instance_create_default_user_indexes(ldbm_instance *inst);
61f723
 void ldbm_config_destroy(struct ldbminfo *li);
61f723
-
61f723
+void ldbm_instance_register_modify_callback(ldbm_instance *inst);
61f723
 
61f723
 #endif /* _LDBM_CONFIG_H_ */
61f723
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c b/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
61f723
index 49a6cac..8fb4119 100644
61f723
--- a/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
61f723
+++ b/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
61f723
@@ -554,6 +554,19 @@ static int ldbm_instance_deny_config(Slapi_PBlock *pb, Slapi_Entry *e,
61f723
     return SLAPI_DSE_CALLBACK_ERROR;
61f723
 }
61f723
 
61f723
+void
61f723
+ldbm_instance_register_modify_callback(ldbm_instance *inst)
61f723
+{
61f723
+    struct ldbminfo *li = inst->inst_li;
61f723
+    char *dn = NULL;
61f723
+
61f723
+    dn = slapi_create_dn_string("cn=%s,cn=%s,cn=plugins,cn=config",
61f723
+                                inst->inst_name, li->li_plugin->plg_name);
61f723
+    slapi_config_register_callback(SLAPI_OPERATION_MODIFY, DSE_FLAG_PREOP, dn,
61f723
+        LDAP_SCOPE_BASE, "(objectclass=*)",
61f723
+        ldbm_instance_modify_config_entry_callback, (void *) inst);
61f723
+    slapi_ch_free_string(&dn;;
61f723
+}
61f723
 /* Reads in any config information held in the dse for the given
61f723
  * entry.  Creates dse entries used to configure the given instance
61f723
  * if they don't already exist.  Registers dse callback functions to
61f723
-- 
61f723
2.9.5
61f723