X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldap%2Fchain.c;h=8f37efb236c30ac0f6a80f2ba4f0756f5855fef0;hb=473e2c997f6b1f226d35da186db8033c922001f3;hp=e23aea022f4c1193dd3a7928412217dde145eba1;hpb=33cab9b7ed697f8d0501d4b6be83359a2b0ba2d7;p=openldap diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c index e23aea022f..8f37efb236 100644 --- a/servers/slapd/back-ldap/chain.c +++ b/servers/slapd/back-ldap/chain.c @@ -1270,7 +1270,7 @@ static ConfigOCs chainocs[] = { { "( OLcfgOvOc:3.2 " "NAME 'olcChainDatabase' " "DESC 'Chain remote server configuration' " - "SUP olcLDAPConfig )", + "AUXILIARY )", Cft_Misc, olcDatabaseDummy, chain_ldadd #ifdef SLAP_CONFIG_DELETE , NULL, chain_lddel @@ -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;