From fcdc06656970784465fae8636e48e76ba6496728 Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Mon, 7 Nov 2011 12:44:58 -0800 Subject: [PATCH] unregister controls when removing syncprov, ppolicy, valsort, chain or sssvlv overlay --- servers/slapd/back-ldap/chain.c | 5 +++++ servers/slapd/overlays/ppolicy.c | 4 ++++ servers/slapd/overlays/sssvlv.c | 5 +++++ servers/slapd/overlays/syncprov.c | 14 ++++++++++++++ servers/slapd/overlays/valsort.c | 4 ++++ 5 files changed, 32 insertions(+) diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c index 41bb6ef1d3..8f37efb236 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 fad0648580..b5b8102723 100644 --- a/servers/slapd/overlays/ppolicy.c +++ b/servers/slapd/overlays/ppolicy.c @@ -2311,6 +2311,10 @@ 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/sssvlv.c b/servers/slapd/overlays/sssvlv.c index 0cb7a7e845..d59b758d1e 100644 --- a/servers/slapd/overlays/sssvlv.c +++ b/servers/slapd/overlays/sssvlv.c @@ -1336,6 +1336,11 @@ static int sssvlv_db_destroy( ldap_pvt_thread_mutex_destroy( &sort_conns_mutex ); } +#ifdef SLAP_CONFIG_DELETE + overlay_unregister_control( be, LDAP_CONTROL_SORTREQUEST ); + overlay_unregister_control( be, LDAP_CONTROL_VLVREQUEST ); +#endif /* SLAP_CONFIG_DELETE */ + if ( si ) { ch_free( si ); on->on_bi.bi_private = NULL; diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c index a081dd7769..cc5d4b7ee4 100644 --- a/servers/slapd/overlays/syncprov.c +++ b/servers/slapd/overlays/syncprov.c @@ -3162,6 +3162,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 80d938238c..033cbf6d8c 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 ); -- 2.39.5