- if ( be->be_compare ) {
- (*be->be_compare)( be, conn, op, dn, ndn, &ava );
+#if defined( LDAP_SLAPI )
+#define pb op->o_pb
+ if ( pb ) {
+ slapi_x_pblock_set_operation( pb, op );
+ slapi_pblock_set( pb, SLAPI_COMPARE_TARGET, (void *)dn.bv_val );
+ slapi_pblock_set( pb, SLAPI_MANAGEDSAIT, (void *)manageDSAit );
+ slapi_pblock_set( pb, SLAPI_COMPARE_TYPE, (void *)desc.bv_val );
+ slapi_pblock_set( pb, SLAPI_COMPARE_VALUE, (void *)&value );
+
+ rs->sr_err = doPluginFNs( op->o_bd, SLAPI_PLUGIN_PRE_COMPARE_FN, pb );
+ if ( rs->sr_err < 0 ) {
+ /*
+ * A preoperation plugin failure will abort the
+ * entire operation.
+ */
+#ifdef NEW_LOGGING
+ LDAP_LOG( OPERATION, INFO, "do_compare: compare preoperation plugin "
+ "failed\n", 0, 0, 0);
+#else
+ Debug(LDAP_DEBUG_TRACE, "do_compare: compare preoperation plugin "
+ "failed.\n", 0, 0, 0);
+#endif
+ if ( ( slapi_pblock_get( op->o_pb, SLAPI_RESULT_CODE, (void *)&rs->sr_err ) != 0 ) ||
+ rs->sr_err == LDAP_SUCCESS ) {
+ rs->sr_err = LDAP_OTHER;
+ }
+ goto cleanup;
+ }
+ }
+#endif /* defined( LDAP_SLAPI ) */
+
+ if ( op->o_bd->be_compare ) {
+ op->orc_ava = &ava;
+ op->o_bd->be_compare( op, rs );