From 93f7d8222b52e671ea91ca4e46c8a35a2acabb65 Mon Sep 17 00:00:00 2001
From: Ludwig Krispenz <lkrispen@redhat.com>
Date: Tue, 15 Mar 2016 12:10:21 +0100
Subject: [PATCH] Ticket 48759 - no plugin calls in tombstone purging

Bug Description: BE_TXN plugins are called for tombstone purging

Fix Description: check in delete operation if the deleted enntry is
                 a tombstone, don't call plugins for tombstones

https://fedorahosted.org/389/ticket/48759

Reviewed by: ?
---
 ldap/servers/slapd/back-ldbm/ldbm_delete.c | 44 ++++++++++++++++--------------
 1 file changed, 24 insertions(+), 20 deletions(-)

diff --git a/ldap/servers/slapd/back-ldbm/ldbm_delete.c b/ldap/servers/slapd/back-ldbm/ldbm_delete.c
index 100a71d..5b24af2 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_delete.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_delete.c
@@ -346,24 +346,26 @@ ldbm_back_delete( Slapi_PBlock *pb )
 			   if for some reason they ever do, do not use e->ep_entry since
 			   it could be in the cache and referenced by other search threads -
 			   instead, have them modify a copy of the entry */
-			retval = plugin_call_plugins(pb, SLAPI_PLUGIN_BE_TXN_PRE_DELETE_FN);
-			if (retval) {
-				LDAPDebug1Arg( LDAP_DEBUG_TRACE,
-							   "SLAPI_PLUGIN_BE_TXN_PRE_DELETE_FN plugin "
-							   "returned error code %d\n", retval );
-				if (!ldap_result_code) {
-					slapi_pblock_get(pb, SLAPI_RESULT_CODE, &ldap_result_code);
-				}
-				if (!opreturn) {
-					slapi_pblock_get( pb, SLAPI_PLUGIN_OPRETURN, &opreturn );
-				}
-				if (!opreturn) {
-					slapi_pblock_set( pb, SLAPI_PLUGIN_OPRETURN,
-									  ldap_result_code ?
-									  &ldap_result_code : &retval );
+			if (!delete_tombstone_entry) {
+				retval = plugin_call_plugins(pb, SLAPI_PLUGIN_BE_TXN_PRE_DELETE_FN);
+				if (retval) {
+					LDAPDebug1Arg( LDAP_DEBUG_TRACE,
+								   "SLAPI_PLUGIN_BE_TXN_PRE_DELETE_FN plugin "
+								   "returned error code %d\n", retval );
+					if (!ldap_result_code) {
+						slapi_pblock_get(pb, SLAPI_RESULT_CODE, &ldap_result_code);
+					}
+					if (!opreturn) {
+						slapi_pblock_get( pb, SLAPI_PLUGIN_OPRETURN, &opreturn );
+					}
+					if (!opreturn) {
+						slapi_pblock_set( pb, SLAPI_PLUGIN_OPRETURN,
+										  ldap_result_code ?
+										  &ldap_result_code : &retval );
+					}
+					slapi_pblock_get(pb, SLAPI_PB_RESULT_TEXT, &ldap_result_message);
+					goto error_return;
 				}
-				slapi_pblock_get(pb, SLAPI_PB_RESULT_TEXT, &ldap_result_message);
-				goto error_return;
 			}
 
 			/*
@@ -640,7 +642,7 @@ ldbm_back_delete( Slapi_PBlock *pb )
 				}
 			}
 		} /* if (0 == retry_count) just once */
-		else {
+		else if (!delete_tombstone_entry) {
 			/* call the transaction pre delete plugins not just once
 			 * but every time transaction is restarted. */
 			/* these should not need to modify the entry to be deleted -
@@ -1209,7 +1211,8 @@ ldbm_back_delete( Slapi_PBlock *pb )
     }
 
 	/* call the transaction post delete plugins just before the commit */
-	if (plugin_call_plugins(pb, SLAPI_PLUGIN_BE_TXN_POST_DELETE_FN)) {
+	if (!delete_tombstone_entry &&
+	    plugin_call_plugins(pb, SLAPI_PLUGIN_BE_TXN_POST_DELETE_FN)) {
 		LDAPDebug0Args( LDAP_DEBUG_TRACE, "SLAPI_PLUGIN_BE_TXN_POST_DELETE_FN plugin "
 						"returned error code\n" );
 		if (!ldap_result_code) {
@@ -1361,7 +1364,8 @@ error_return:
 		}
 
 		/* call the transaction post delete plugins just before the abort */
-		if (plugin_call_plugins(pb, SLAPI_PLUGIN_BE_TXN_POST_DELETE_FN)) {
+                if (!delete_tombstone_entry &&
+		    plugin_call_plugins(pb, SLAPI_PLUGIN_BE_TXN_POST_DELETE_FN)) {
 			LDAPDebug1Arg( LDAP_DEBUG_TRACE, "SLAPI_PLUGIN_BE_TXN_POST_DELETE_FN plugin "
 						   "returned error code %d\n", retval );
 			if (!ldap_result_code) {
-- 
2.4.3

