- slapi_pblock_set( pb, SLAPI_BACKEND, (void *)be );
- slapi_pblock_set( pb, SLAPI_CONNECTION, (void *)conn );
- slapi_pblock_set( pb, SLAPI_OPERATION, (void *)op );
- slapi_pblock_set( pb, SLAPI_BIND_TARGET, (void *)dn.bv_val );
- slapi_pblock_set( pb, SLAPI_MANAGEDSAIT, (void *)(1) );
- slapi_pblock_set( pb, SLAPI_REQCONTROLS, (void *)op->o_ctrls );
-
- rc = doPluginFNs( be, SLAPI_PLUGIN_PRE_DELETE_FN, pb );
- if ( rc != 0 && rc != LDAP_OTHER ) {
- /*
- * either there is no preOp (delete) plugins
- * or a plugin failed. Just log it
- *
- * FIXME: is this correct?
- */
-#ifdef NEW_LOGGING
- LDAP_LOG( OPERATION, INFO, "do_delete: delete preOps "
- "failed\n", 0, 0, 0 );
-#else
- Debug (LDAP_DEBUG_TRACE, "do_delete: delete preOps failed.\n",
- 0, 0, 0);
-#endif
+#define pb op->o_pb
+ if ( pb ) {
+ slapi_int_pblock_set_operation( pb, op );
+ slapi_pblock_set( pb, SLAPI_DELETE_TARGET, (void *)op->o_req_dn.bv_val );
+ slapi_pblock_set( pb, SLAPI_MANAGEDSAIT, (void *)manageDSAit );
+
+ rs->sr_err = slapi_int_call_plugins( op->o_bd,
+ SLAPI_PLUGIN_PRE_DELETE_FN, pb );
+ if ( rs->sr_err < 0 ) {
+ /*
+ * A preoperation plugin failure will abort the
+ * entire operation.
+ */
+ Debug (LDAP_DEBUG_TRACE, "do_delete: "
+ "delete preoperation plugin failed.\n", 0, 0, 0);
+ if ( ( slapi_pblock_get( pb, SLAPI_RESULT_CODE,
+ (void *)&rs->sr_err ) != 0 ) ||
+ rs->sr_err == LDAP_SUCCESS )
+ {
+ rs->sr_err = LDAP_OTHER;
+ }
+ goto cleanup;
+ }