111 lines
3.6 KiB
Plaintext
111 lines
3.6 KiB
Plaintext
|
From 0ca1fbc64f2f02cbdff0827e4ca1bbe312bebc2f Mon Sep 17 00:00:00 2001
|
||
|
From: Ralf Haferkamp <rhafer@suse.de>
|
||
|
Date: Fri, 22 Jan 2010 11:18:46 +0100
|
||
|
Subject: config-delete overlay fixes
|
||
|
|
||
|
- unregister controls when removing overlays from cn=config (syncprov,
|
||
|
ppolicy, valsort, chain and sssvlv)
|
||
|
- Send error to active psearches upon syncprov overlay removal
|
||
|
- syncprov: reset BackendInfo to original value after checkpoint. Leaks memory
|
||
|
otherwise (with -DSLAP_CONFIG_DELETE)
|
||
|
|
||
|
bnc#548773
|
||
|
|
||
|
diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c
|
||
|
index 41bb6ef..8f37efb 100644
|
||
|
--- a/servers/slapd/back-ldap/chain.c
|
||
|
+++ b/servers/slapd/back-ldap/chain.c
|
||
|
@@ -1979,6 +1979,11 @@ ldap_chain_db_close(
|
||
|
BackendDB *be,
|
||
|
ConfigReply *cr )
|
||
|
{
|
||
|
+#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
|
||
|
+#ifdef SLAP_CONFIG_DELETE
|
||
|
+ overlay_unregister_control( be, LDAP_CONTROL_X_CHAINING_BEHAVIOR );
|
||
|
+#endif /* SLAP_CONFIG_DELETE */
|
||
|
+#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
|
||
|
return ldap_chain_db_func( be, db_close );
|
||
|
}
|
||
|
|
||
|
diff --git a/servers/slapd/overlays/ppolicy.c b/servers/slapd/overlays/ppolicy.c
|
||
|
index 43cc345..048bf89 100644
|
||
|
--- a/servers/slapd/overlays/ppolicy.c
|
||
|
+++ b/servers/slapd/overlays/ppolicy.c
|
||
|
@@ -2308,6 +2308,11 @@ ppolicy_close(
|
||
|
slap_overinst *on = (slap_overinst *) be->bd_info;
|
||
|
pp_info *pi = on->on_bi.bi_private;
|
||
|
|
||
|
+
|
||
|
+#ifdef SLAP_CONFIG_DELETE
|
||
|
+ overlay_unregister_control( be, LDAP_CONTROL_PASSWORDPOLICYREQUEST );
|
||
|
+#endif /* SLAP_CONFIG_DELETE */
|
||
|
+
|
||
|
/* Perhaps backover should provide bi_destroy hooks... */
|
||
|
ov_count--;
|
||
|
if ( ov_count <=0 && pwcons ) {
|
||
|
diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c
|
||
|
index 1100de7..814f95e 100644
|
||
|
--- a/servers/slapd/overlays/syncprov.c
|
||
|
+++ b/servers/slapd/overlays/syncprov.c
|
||
|
@@ -3143,6 +3143,7 @@ syncprov_db_close(
|
||
|
{
|
||
|
slap_overinst *on = (slap_overinst *) be->bd_info;
|
||
|
syncprov_info_t *si = (syncprov_info_t *)on->on_bi.bi_private;
|
||
|
+ syncops *so, *sonext;
|
||
|
|
||
|
if ( slapMode & SLAP_TOOL_MODE ) {
|
||
|
return 0;
|
||
|
@@ -3162,6 +3163,20 @@ syncprov_db_close(
|
||
|
syncprov_checkpoint( op, on );
|
||
|
}
|
||
|
|
||
|
+#ifdef SLAP_CONFIG_DELETE
|
||
|
+ ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
|
||
|
+ for ( so=si->si_ops, sonext=so; so; so=sonext ) {
|
||
|
+ SlapReply rs = {REP_RESULT};
|
||
|
+ rs.sr_err = LDAP_UNAVAILABLE;
|
||
|
+ send_ldap_result( so->s_op, &rs );
|
||
|
+ sonext=so->s_next;
|
||
|
+ syncprov_drop_psearch( so, 0);
|
||
|
+ }
|
||
|
+ si->si_ops=NULL;
|
||
|
+ ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
|
||
|
+ overlay_unregister_control( be, LDAP_CONTROL_SYNC );
|
||
|
+#endif /* SLAP_CONFIG_DELETE */
|
||
|
+
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
diff --git a/servers/slapd/overlays/valsort.c b/servers/slapd/overlays/valsort.c
|
||
|
index 80d9382..033cbf6 100644
|
||
|
--- a/servers/slapd/overlays/valsort.c
|
||
|
+++ b/servers/slapd/overlays/valsort.c
|
||
|
@@ -490,6 +490,10 @@ valsort_destroy(
|
||
|
slap_overinst *on = (slap_overinst *)be->bd_info;
|
||
|
valsort_info *vi = on->on_bi.bi_private, *next;
|
||
|
|
||
|
+#ifdef SLAP_CONFIG_DELETE
|
||
|
+ overlay_unregister_control( be, LDAP_CONTROL_VALSORT );
|
||
|
+#endif /* SLAP_CONFIG_DELETE */
|
||
|
+
|
||
|
for (; vi; vi = next) {
|
||
|
next = vi->vi_next;
|
||
|
ch_free( vi->vi_dn.bv_val );
|
||
|
diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h
|
||
|
index 1aebece..bb0dd63 100644
|
||
|
--- a/servers/slapd/proto-slap.h
|
||
|
+++ b/servers/slapd/proto-slap.h
|
||
|
@@ -484,6 +484,9 @@ LDAP_SLAPD_F (void) overlay_move LDAP_P((
|
||
|
#ifdef SLAP_CONFIG_DELETE
|
||
|
LDAP_SLAPD_F (void) overlay_remove LDAP_P((
|
||
|
BackendDB *be, slap_overinst *on ));
|
||
|
+LDAP_SLAPD_F (void) overlay_unregister_control LDAP_P((
|
||
|
+ BackendDB *be,
|
||
|
+ const char *oid ));
|
||
|
#endif /* SLAP_CONFIG_DELETE */
|
||
|
LDAP_SLAPD_F (int) overlay_callback_after_backover LDAP_P((
|
||
|
Operation *op, slap_callback *sc, int append ));
|
||
|
--
|
||
|
1.7.3.4
|
||
|
|