File 0006-assorted-fixes-for-back-config-DELETE-support.dif of Package openldap2

From a998fdc90747f222d261e714ea7e757ad0345f56 Mon Sep 17 00:00:00 2001
From: Ralf Haferkamp <rhafer@suse.de>
Date: Wed, 16 Jun 2010 14:08:56 +0200
Subject: assorted fixes for back-config DELETE support


 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c
index 8626f21..4ec085f 100644
--- a/servers/slapd/bconfig.c
+++ b/servers/slapd/bconfig.c
@@ -5924,13 +5924,26 @@ config_back_delete( Operation *op, SlapReply *rs )
 		rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
 	} else if ( op->o_abandon ) {
 		rs->sr_err = SLAPD_ABANDON;
-	} else if ( ce->ce_type == Cft_Overlay ){
+	} else if ( ce->ce_type == Cft_Overlay || ce->ce_type == Cft_Database){
 		char *iptr;
 		int count, ixold;
 
 		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 ) {
@@ -5992,6 +6005,7 @@ config_back_delete( Operation *op, SlapReply *rs )
 #else
 	rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
 #endif /* SLAP_CONFIG_DELETE */
+out:
 	send_ldap_result( op, rs );
 	return rs->sr_err;
 }
-- 
1.7.1

openSUSE Build Service is sponsored by