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

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