forked from pool/openldap2
50 lines
1.6 KiB
Plaintext
50 lines
1.6 KiB
Plaintext
|
Index: servers/slapd/bconfig.c
|
||
|
===================================================================
|
||
|
RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/bconfig.c,v
|
||
|
retrieving revision 1.342
|
||
|
retrieving revision 1.344
|
||
|
diff -u -r1.342 -r1.344
|
||
|
--- servers/slapd/bconfig.c 4 Sep 2008 11:56:31 -0000 1.342
|
||
|
+++ servers/slapd/bconfig.c 4 Sep 2008 15:12:07 -0000 1.344
|
||
|
@@ -5245,15 +5245,28 @@
|
||
|
if ( last )
|
||
|
rs->sr_matched = last->ce_entry->e_name.bv_val;
|
||
|
rs->sr_err = LDAP_NO_SUCH_OBJECT;
|
||
|
- } if ( ce->ce_kids ) {
|
||
|
+ } else if ( ce->ce_kids ) {
|
||
|
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
|
||
|
- } else if ( ce->ce_type == Cft_Overlay ){
|
||
|
+ } else if ( ce->ce_type == Cft_Overlay || ce->ce_type == Cft_Database ){
|
||
|
char *iptr;
|
||
|
int count, ixold, rc;
|
||
|
|
||
|
ldap_pvt_thread_pool_pause( &connection_pool );
|
||
|
-
|
||
|
- overlay_remove( ce->ce_be, (slap_overinst *)ce->ce_bi );
|
||
|
+
|
||
|
+ if ( ce->ce_type == Cft_Overlay ){
|
||
|
+ overlay_remove( ce->ce_be, (slap_overinst *)ce->ce_bi );
|
||
|
+ } else { /* Cft_Database*/
|
||
|
+ if ( ce->ce_be == frontendDB || ce->ce_be == op->o_bd ){
|
||
|
+ rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
|
||
|
+ rs->sr_text = "Cannot delete config or frontend database";
|
||
|
+ ldap_pvt_thread_pool_resume( &connection_pool );
|
||
|
+ goto out;
|
||
|
+ }
|
||
|
+ if ( ce->ce_be->bd_info->bi_db_close ) {
|
||
|
+ ce->ce_be->bd_info->bi_db_close( ce->ce_be, NULL );
|
||
|
+ }
|
||
|
+ backend_destroy_one( ce->ce_be, 1);
|
||
|
+ }
|
||
|
|
||
|
/* remove CfEntryInfo from the siblings list */
|
||
|
if ( ce->ce_parent->ce_kids == ce ) {
|
||
|
@@ -5315,6 +5328,7 @@
|
||
|
#else
|
||
|
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
|
||
|
#endif /* SLAP_CONFIG_DELETE */
|
||
|
+out:
|
||
|
send_ldap_result( op, rs );
|
||
|
return rs->sr_err;
|
||
|
}
|