From f4e5030c224df3224768a3986751c63f9df1057e Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Tue, 22 Mar 2011 16:14:02 +0000 Subject: [PATCH] First underlying LDAP database needs special treatment upon deletion --- servers/slapd/back-ldap/chain.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c index e23aea022f..1d44250378 100644 --- a/servers/slapd/back-ldap/chain.c +++ b/servers/slapd/back-ldap/chain.c @@ -1448,10 +1448,18 @@ chain_lddel( CfEntryInfo *ce, Operation *op ) ldap_chain_t *lc = (ldap_chain_t *)on->on_bi.bi_private; ldapinfo_t *li = (ldapinfo_t *) ce->ce_be->be_private; - if (! avl_delete( &lc->lc_lai.lai_tree, li, ldap_chain_uri_cmp ) ) { - Debug( LDAP_DEBUG_ANY, "slapd-chain: avl_delete failed. " - "\"%s\" not found.\n", li->li_uri, 0, 0 ); + if ( li != lc->lc_common_li ) { + if (! avl_delete( &lc->lc_lai.lai_tree, li, ldap_chain_uri_cmp ) ) { + Debug( LDAP_DEBUG_ANY, "slapd-chain: avl_delete failed. " + "\"%s\" not found.\n", li->li_uri, 0, 0 ); + return -1; + } + } else if ( lc->lc_lai.lai_tree ) { + Debug( LDAP_DEBUG_ANY, "slapd-chain: cannot delete first underlying " + "LDAP database when other databases are still present.\n", 0, 0, 0 ); return -1; + } else { + lc->lc_common_li = NULL; } ce->ce_be->bd_info = lback; -- 2.39.5