+
+static int call_search_rewrite_plugins( Operation *op )
+{
+ if ( slapi_int_call_plugins( op->o_bd, SLAPI_PLUGIN_COMPUTE_SEARCH_REWRITER_FN, op->o_pb ) == 0 ) {
+ int rc;
+
+ /*
+ * The plugin can set the SLAPI_SEARCH_FILTER.
+ * SLAPI_SEARCH_STRFILER is not normative.
+ */
+ slapi_pblock_get( op->o_pb, SLAPI_SEARCH_FILTER, (void *)&op->ors_filter );
+ op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx );
+ filter2bv_x( op, op->ors_filter, &op->ors_filterstr );
+
+ /*
+ * Also permit other search parameters to be reset. One thing
+ * this doesn't (yet) deal with is plugins that change a root
+ * DSE search to a non-root DSE search...
+ */
+ slapi_pblock_get( op->o_pb, SLAPI_SEARCH_TARGET, (void **)&op->o_req_dn.bv_val );
+ op->o_req_dn.bv_len = strlen( op->o_req_dn.bv_val );
+
+ if( !BER_BVISNULL( &op->o_req_ndn ) ) {
+ slap_sl_free( op->o_req_ndn.bv_val, op->o_tmpmemctx );
+ }
+ rc = dnNormalize( 0, NULL, NULL, &op->o_req_dn, &op->o_req_ndn,
+ op->o_tmpmemctx );
+ if ( rc != LDAP_SUCCESS ) {
+ return rc;
+ }
+
+ slapi_pblock_get( op->o_pb, SLAPI_SEARCH_SCOPE, (void **)&op->ors_scope );
+ slapi_pblock_get( op->o_pb, SLAPI_SEARCH_DEREF, (void **)&op->ors_deref );
+
+ Debug( LDAP_DEBUG_ARGS, " after compute_rewrite_search filter: %s\n",
+ !BER_BVISEMPTY( &op->ors_filterstr ) ? op->ors_filterstr.bv_val : "empty", 0, 0 );
+ }
+
+ return LDAP_SUCCESS;
+}
+
+static void call_search_postop_plugins( Operation *op )
+{
+ if ( slapi_int_call_plugins( op->o_bd, SLAPI_PLUGIN_POST_SEARCH_FN, op->o_pb ) < 0 ) {
+ Debug(LDAP_DEBUG_TRACE, "call_search_postop_plugins: search postoperation plugins "
+ "failed.\n", 0, 0, 0);
+ }
+}
+
+void slapi_int_dummy(void)
+{
+ /*
+ * XXX slapi_search_internal() was no getting pulled
+ * in; all manner of linker flags failed to link it.
+ * FIXME
+ */
+ slapi_search_internal( NULL, 0, NULL, NULL, NULL, 0 );
+}
+#endif /* LDAP_SLAPI */
+