X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fsearch.c;h=73f82a00437f36bf1482e476dcb9e4086f6dd36d;hb=1586a68219cf85e9caaafcf2259c9bc249358077;hp=0a19b3ba3cd102401c5f77a8c949a4296932f3c8;hpb=4dd53084a0141f98d1c8a126e216b255849ed4d0;p=openldap diff --git a/servers/slapd/search.c b/servers/slapd/search.c index 0a19b3ba3c..73f82a0043 100644 --- a/servers/slapd/search.c +++ b/servers/slapd/search.c @@ -1,10 +1,18 @@ /* $OpenLDAP$ */ -/* - * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2003 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ -/* Portions - * Copyright (c) 1995 Regents of the University of Michigan. +/* Portions Copyright (c) 1995 Regents of the University of Michigan. * All rights reserved. * * Redistribution and use in source and binary forms are permitted @@ -28,7 +36,7 @@ #ifdef LDAP_SLAPI #include "slapi.h" -static char **anlist2charray( AttributeName *an ); +static char **anlist2charray( Operation *op, AttributeName *an ); static void initSearchPlugin( Operation *op, char **attrs, int managedsait ); static int doPreSearchPluginFNs( Operation *op ); static int doSearchRewriteFNs( Operation *op ); @@ -43,6 +51,7 @@ do_search( struct berval base = { 0, NULL }; ber_len_t siz, off, i; int manageDSAit; + int be_manageDSAit; #ifdef LDAP_SLAPI char **attrs = NULL; #endif @@ -61,7 +70,8 @@ do_search( * scope ENUMERATED { * baseObject (0), * singleLevel (1), - * wholeSubtree (2) + * wholeSubtree (2), + * subordinate (3) -- OpenLDAP extension * }, * derefAliases ENUMERATED { * neverDerefaliases (0), @@ -79,25 +89,26 @@ do_search( /* baseObject, scope, derefAliases, sizelimit, timelimit, attrsOnly */ if ( ber_scanf( op->o_ber, "{miiiib" /*}*/, - &base, &op->oq_search.rs_scope, &op->oq_search.rs_deref, &op->oq_search.rs_slimit, - &op->oq_search.rs_tlimit, &op->oq_search.rs_attrsonly ) == LBER_ERROR ) + &base, &op->ors_scope, &op->ors_deref, &op->ors_slimit, + &op->ors_tlimit, &op->ors_attrsonly ) == LBER_ERROR ) { send_ldap_discon( op, rs, LDAP_PROTOCOL_ERROR, "decoding error" ); rs->sr_err = SLAPD_DISCONNECT; goto return_results; } - switch( op->oq_search.rs_scope ) { + switch( op->ors_scope ) { case LDAP_SCOPE_BASE: case LDAP_SCOPE_ONELEVEL: case LDAP_SCOPE_SUBTREE: + case LDAP_SCOPE_SUBORDINATE: break; default: send_ldap_error( op, rs, LDAP_PROTOCOL_ERROR, "invalid scope" ); goto return_results; } - switch( op->oq_search.rs_deref ) { + switch( op->ors_deref ) { case LDAP_DEREF_NEVER: case LDAP_DEREF_FINDING: case LDAP_DEREF_SEARCHING: @@ -108,7 +119,7 @@ do_search( goto return_results; } - rs->sr_err = dnPrettyNormal( NULL, &base, &op->o_req_dn, &op->o_req_ndn ); + rs->sr_err = dnPrettyNormal( NULL, &base, &op->o_req_dn, &op->o_req_ndn, op->o_tmpmemctx ); if( rs->sr_err != LDAP_SUCCESS ) { #ifdef NEW_LOGGING LDAP_LOG( OPERATION, ERR, @@ -124,18 +135,18 @@ do_search( #ifdef NEW_LOGGING LDAP_LOG( OPERATION, ARGS, "SRCH \"%s\" %d %d", - base.bv_val, op->oq_search.rs_scope, op->oq_search.rs_deref ); + base.bv_val, op->ors_scope, op->ors_deref ); LDAP_LOG( OPERATION, ARGS, " %d %d %d\n", - op->oq_search.rs_slimit, op->oq_search.rs_tlimit, op->oq_search.rs_attrsonly); + op->ors_slimit, op->ors_tlimit, op->ors_attrsonly); #else Debug( LDAP_DEBUG_ARGS, "SRCH \"%s\" %d %d", - base.bv_val, op->oq_search.rs_scope, op->oq_search.rs_deref ); + base.bv_val, op->ors_scope, op->ors_deref ); Debug( LDAP_DEBUG_ARGS, " %d %d %d\n", - op->oq_search.rs_slimit, op->oq_search.rs_tlimit, op->oq_search.rs_attrsonly); + op->ors_slimit, op->ors_tlimit, op->ors_attrsonly); #endif /* filter - returns a "normalized" version */ - rs->sr_err = get_filter( op->o_conn, op->o_ber, &op->oq_search.rs_filter, &rs->sr_text ); + rs->sr_err = get_filter( op, op->o_ber, &op->ors_filter, &rs->sr_text ); if( rs->sr_err != LDAP_SUCCESS ) { if( rs->sr_err == SLAPD_DISCONNECT ) { rs->sr_err = LDAP_PROTOCOL_ERROR; @@ -145,30 +156,31 @@ do_search( } goto return_results; } - filter2bv( op->oq_search.rs_filter, &op->oq_search.rs_filterstr ); + filter2bv_x( op, op->ors_filter, &op->ors_filterstr ); #ifdef NEW_LOGGING LDAP_LOG( OPERATION, ARGS, "do_search: conn %d filter: %s\n", - op->o_connid, op->oq_search.rs_filterstr.bv_len ? op->oq_search.rs_filterstr.bv_val : "empty", 0 ); + op->o_connid, op->ors_filterstr.bv_len ? op->ors_filterstr.bv_val : "empty", 0 ); #else Debug( LDAP_DEBUG_ARGS, " filter: %s\n", - op->oq_search.rs_filterstr.bv_len ? op->oq_search.rs_filterstr.bv_val : "empty", 0, 0 ); + op->ors_filterstr.bv_len ? op->ors_filterstr.bv_val : "empty", 0, 0 ); #endif /* attributes */ siz = sizeof(AttributeName); - off = 0; - if ( ber_scanf( op->o_ber, "{M}}", &op->oq_search.rs_attrs, &siz, off ) == LBER_ERROR ) { + off = offsetof(AttributeName,an_name); + if ( ber_scanf( op->o_ber, "{M}}", &op->ors_attrs, &siz, off ) == LBER_ERROR ) { send_ldap_discon( op, rs, LDAP_PROTOCOL_ERROR, "decoding attrs error" ); rs->sr_err = SLAPD_DISCONNECT; goto return_results; } for ( i=0; ioq_search.rs_attrs[i].an_desc = NULL; - op->oq_search.rs_attrs[i].an_oc = NULL; - slap_bv2ad(&op->oq_search.rs_attrs[i].an_name, &op->oq_search.rs_attrs[i].an_desc, &dummy); + op->ors_attrs[i].an_desc = NULL; + op->ors_attrs[i].an_oc = NULL; + op->ors_attrs[i].an_oc_exclude = 0; + slap_bv2ad(&op->ors_attrs[i].an_name, &op->ors_attrs[i].an_desc, &dummy); } if( get_ctrls( op, rs, 1 ) != LDAP_SUCCESS ) { @@ -194,9 +206,9 @@ do_search( for ( i = 0; ioq_search.rs_attrs[i].an_name.bv_val, 0, 0 ); + "do_search: %s", op->ors_attrs[i].an_name.bv_val, 0, 0 ); #else - Debug( LDAP_DEBUG_ARGS, " %s", op->oq_search.rs_attrs[i].an_name.bv_val, 0, 0 ); + Debug( LDAP_DEBUG_ARGS, " %s", op->ors_attrs[i].an_name.bv_val, 0, 0 ); #endif } } @@ -211,26 +223,28 @@ do_search( char abuf[BUFSIZ/2], *ptr = abuf; int len = 0, alen; + sprintf(abuf, "scope=%d deref=%d", op->ors_scope, op->ors_deref); Statslog( LDAP_DEBUG_STATS, - "conn=%lu op=%lu SRCH base=\"%s\" scope=%d filter=\"%s\"\n", - op->o_connid, op->o_opid, op->o_req_dn.bv_val, op->oq_search.rs_scope, op->oq_search.rs_filterstr.bv_val ); + "conn=%lu op=%lu SRCH base=\"%s\" %s filter=\"%s\"\n", + op->o_connid, op->o_opid, op->o_req_dn.bv_val, abuf, + op->ors_filterstr.bv_val ); for ( i = 0; ioq_search.rs_attrs[i].an_name.bv_len; + alen = op->ors_attrs[i].an_name.bv_len; if (alen >= sizeof(abuf)) { alen = sizeof(abuf)-1; } if (len && (len + 1 + alen >= sizeof(abuf))) { Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu SRCH attr=%s\n", op->o_connid, op->o_opid, abuf, 0, 0 ); - len = 0; + len = 0; ptr = abuf; } if (len) { *ptr++ = ' '; len++; } - ptr = lutil_strncopy(ptr, op->oq_search.rs_attrs[i].an_name.bv_val, alen); + ptr = lutil_strncopy(ptr, op->ors_attrs[i].an_name.bv_val, alen); len += alen; *ptr = '\0'; } @@ -242,7 +256,8 @@ do_search( manageDSAit = get_manageDSAit( op ); - if ( op->oq_search.rs_scope == LDAP_SCOPE_BASE ) { + /* fake while loop to allow breaking out */ + while ( op->ors_scope == LDAP_SCOPE_BASE ) { Entry *entry = NULL; if ( op->o_req_ndn.bv_len == 0 ) { @@ -259,16 +274,15 @@ do_search( } #ifdef LDAP_SLAPI - attrs = anlist2charray( op->oq_search.rs_attrs ); - initSearchPlugin( op, attrs, manageDSAit ); - rs->sr_err = doPreSearchPluginFNs( op ); - if ( rs->sr_err == LDAP_SUCCESS ) { + if ( op->o_pb ) { + attrs = anlist2charray( op, op->ors_attrs ); + initSearchPlugin( op, attrs, manageDSAit ); + rs->sr_err = doPreSearchPluginFNs( op ); + if ( rs->sr_err ) break; doSearchRewriteFNs( op ); -#endif /* LDAP_SLAPI */ - rs->sr_err = root_dse_info( op->o_conn, &entry, &rs->sr_text ); -#ifdef LDAP_SLAPI } #endif /* LDAP_SLAPI */ + rs->sr_err = root_dse_info( op->o_conn, &entry, &rs->sr_text ); } else if ( bvmatch( &op->o_req_ndn, &global_schemandn ) ) { /* check restrictions */ @@ -278,52 +292,51 @@ do_search( } #ifdef LDAP_SLAPI - attrs = anlist2charray( op->oq_search.rs_attrs ); - initSearchPlugin( op, attrs, manageDSAit ); - rs->sr_err = doPreSearchPluginFNs( op ); - if ( rs->sr_err == LDAP_SUCCESS ) { + if ( op->o_pb ) { + attrs = anlist2charray( op, op->ors_attrs ); + initSearchPlugin( op, attrs, manageDSAit ); + rs->sr_err = doPreSearchPluginFNs( op ); + if ( rs->sr_err ) break; doSearchRewriteFNs( op ); -#endif /* LDAP_SLAPI */ - rs->sr_err = schema_info( &entry, &rs->sr_text ); -#ifdef LDAP_SLAPI } #endif /* LDAP_SLAPI */ + rs->sr_err = schema_info( &entry, &rs->sr_text ); } if( rs->sr_err != LDAP_SUCCESS ) { send_ldap_result( op, rs ); #ifdef LDAP_SLAPI - doPostSearchPluginFNs( op ); + if ( op->o_pb ) doPostSearchPluginFNs( op ); #endif /* LDAP_SLAPI */ goto return_results; } else if ( entry != NULL ) { - rs->sr_err = test_filter( op, entry, op->oq_search.rs_filter ); + rs->sr_err = test_filter( op, entry, op->ors_filter ); if( rs->sr_err == LDAP_COMPARE_TRUE ) { rs->sr_entry = entry; - rs->sr_attrs = op->oq_search.rs_attrs; + rs->sr_attrs = op->ors_attrs; send_search_entry( op, rs ); rs->sr_entry = NULL; } entry_free( entry ); rs->sr_err = LDAP_SUCCESS; - rs->sr_nentries = 1; - send_search_result( op, rs ); + send_ldap_result( op, rs ); #ifdef LDAP_SLAPI - doPostSearchPluginFNs( op ); + if ( op->o_pb ) doPostSearchPluginFNs( op ); #endif /* LDAP_SLAPI */ goto return_results; } + break; } if( !op->o_req_ndn.bv_len && default_search_nbase.bv_len ) { - ch_free( op->o_req_dn.bv_val ); - ch_free( op->o_req_ndn.bv_val ); + sl_free( op->o_req_dn.bv_val, op->o_tmpmemctx ); + sl_free( op->o_req_ndn.bv_val, op->o_tmpmemctx ); - ber_dupbv( &op->o_req_dn, &default_search_base ); - ber_dupbv( &op->o_req_ndn, &default_search_nbase ); + ber_dupbv_x( &op->o_req_dn, &default_search_base, op->o_tmpmemctx ); + ber_dupbv_x( &op->o_req_ndn, &default_search_nbase, op->o_tmpmemctx ); } /* @@ -331,9 +344,23 @@ do_search( * appropriate one, or send a referral to our "referral server" * if we don't hold it. */ - if ( (op->o_bd = select_backend( &op->o_req_ndn, manageDSAit, 1 )) == NULL ) { + + /* Sync control overrides manageDSAit */ + + if ( manageDSAit != SLAP_NO_CONTROL ) { + if ( op->o_sync_mode & SLAP_SYNC_REFRESH ) { + be_manageDSAit = SLAP_NO_CONTROL; + } else { + be_manageDSAit = manageDSAit; + } + } else { + be_manageDSAit = manageDSAit; + } + + op->o_bd = select_backend( &op->o_req_ndn, be_manageDSAit, 1 ); + if ( op->o_bd == NULL ) { rs->sr_ref = referral_rewrite( default_referral, - NULL, &op->o_req_dn, op->oq_search.rs_scope ); + NULL, &op->o_req_dn, op->ors_scope ); if (!rs->sr_ref) rs->sr_ref = default_referral; rs->sr_err = LDAP_REFERRAL; @@ -357,14 +384,16 @@ do_search( } #ifdef LDAP_SLAPI - attrs = anlist2charray( op->oq_search.rs_attrs ); - initSearchPlugin( op, attrs, manageDSAit ); - rs->sr_err = doPreSearchPluginFNs( op ); - if ( rs->sr_err != LDAP_SUCCESS ) { - goto return_results; - } + if ( op->o_pb ) { + attrs = anlist2charray( op, op->ors_attrs ); + initSearchPlugin( op, attrs, manageDSAit ); + rs->sr_err = doPreSearchPluginFNs( op ); + if ( rs->sr_err != LDAP_SUCCESS ) { + goto return_results; + } - doSearchRewriteFNs( op ); + doSearchRewriteFNs( op ); + } #endif /* LDAP_SLAPI */ /* actually do the search and send the result(s) */ @@ -376,31 +405,25 @@ do_search( } #ifdef LDAP_SLAPI - doPostSearchPluginFNs( op ); + if ( op->o_pb ) doPostSearchPluginFNs( op ); #endif /* LDAP_SLAPI */ return_results:; -#ifdef LDAP_CLIENT_UPDATE - if ( ( op->o_clientupdate_type & SLAP_LCUP_PERSIST ) ) - return rs->sr_err; -#endif -#if defined(LDAP_CLIENT_UPDATE) && defined(LDAP_SYNC) - else -#endif -#ifdef LDAP_SYNC if ( ( op->o_sync_mode & SLAP_SYNC_PERSIST ) ) return rs->sr_err; -#endif - if( op->o_req_dn.bv_val != NULL) free( op->o_req_dn.bv_val ); - if( op->o_req_ndn.bv_val != NULL) free( op->o_req_ndn.bv_val ); + if ( ( op->o_sync_slog_size != -1 ) ) + return rs->sr_err; + + if( op->o_req_dn.bv_val != NULL) sl_free( op->o_req_dn.bv_val, op->o_tmpmemctx ); + if( op->o_req_ndn.bv_val != NULL) sl_free( op->o_req_ndn.bv_val, op->o_tmpmemctx ); - if( op->oq_search.rs_filterstr.bv_val != NULL) free( op->oq_search.rs_filterstr.bv_val ); - if( op->oq_search.rs_filter != NULL) filter_free( op->oq_search.rs_filter ); - if( op->oq_search.rs_attrs != NULL ) free( op->oq_search.rs_attrs ); + if( op->ors_filterstr.bv_val != NULL) op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx ); + if( op->ors_filter != NULL) filter_free_x( op, op->ors_filter ); + if( op->ors_attrs != NULL ) op->o_tmpfree( op->ors_attrs, op->o_tmpmemctx ); #ifdef LDAP_SLAPI - if( attrs != NULL) ch_free( attrs ); + if( attrs != NULL) op->o_tmpfree( attrs, op->o_tmpmemctx ); #endif /* LDAP_SLAPI */ return rs->sr_err; @@ -408,7 +431,7 @@ return_results:; #ifdef LDAP_SLAPI -static char **anlist2charray( AttributeName *an ) +static char **anlist2charray( Operation *op, AttributeName *an ) { char **attrs; int i; @@ -416,7 +439,7 @@ static char **anlist2charray( AttributeName *an ) if ( an != NULL ) { for ( i = 0; an[i].an_name.bv_val != NULL; i++ ) ; - attrs = (char **)ch_malloc( (i + 1) * sizeof(char *) ); + attrs = (char **)op->o_tmpalloc( (i + 1) * sizeof(char *), op->o_tmpmemctx ); for ( i = 0; an[i].an_name.bv_val != NULL; i++ ) { attrs[i] = an[i].an_name.bv_val; } @@ -431,18 +454,16 @@ static char **anlist2charray( AttributeName *an ) static void initSearchPlugin( Operation *op, char **attrs, int managedsait ) { - slapi_x_backend_set_pb( op->o_pb, op->o_bd ); - slapi_x_connection_set_pb( op->o_pb, op->o_conn ); - slapi_x_operation_set_pb( op->o_pb, op ); + slapi_int_pblock_set_operation( op->o_pb, op ); slapi_pblock_set( op->o_pb, SLAPI_SEARCH_TARGET, (void *)op->o_req_dn.bv_val ); - slapi_pblock_set( op->o_pb, SLAPI_SEARCH_SCOPE, (void *)op->oq_search.rs_scope ); - slapi_pblock_set( op->o_pb, SLAPI_SEARCH_DEREF, (void *)op->oq_search.rs_deref ); - slapi_pblock_set( op->o_pb, SLAPI_SEARCH_SIZELIMIT, (void *)op->oq_search.rs_slimit ); - slapi_pblock_set( op->o_pb, SLAPI_SEARCH_TIMELIMIT, (void *)op->oq_search.rs_tlimit ); - slapi_pblock_set( op->o_pb, SLAPI_SEARCH_FILTER, (void *)op->oq_search.rs_filter ); - slapi_pblock_set( op->o_pb, SLAPI_SEARCH_STRFILTER, (void *)op->oq_search.rs_filterstr.bv_val ); + slapi_pblock_set( op->o_pb, SLAPI_SEARCH_SCOPE, (void *)op->ors_scope ); + slapi_pblock_set( op->o_pb, SLAPI_SEARCH_DEREF, (void *)op->ors_deref ); + slapi_pblock_set( op->o_pb, SLAPI_SEARCH_SIZELIMIT, (void *)op->ors_slimit ); + slapi_pblock_set( op->o_pb, SLAPI_SEARCH_TIMELIMIT, (void *)op->ors_tlimit ); + slapi_pblock_set( op->o_pb, SLAPI_SEARCH_FILTER, (void *)op->ors_filter ); + slapi_pblock_set( op->o_pb, SLAPI_SEARCH_STRFILTER, (void *)op->ors_filterstr.bv_val ); slapi_pblock_set( op->o_pb, SLAPI_SEARCH_ATTRS, (void *)attrs ); - slapi_pblock_set( op->o_pb, SLAPI_SEARCH_ATTRSONLY, (void *)op->oq_search.rs_attrsonly ); + slapi_pblock_set( op->o_pb, SLAPI_SEARCH_ATTRSONLY, (void *)op->ors_attrsonly ); slapi_pblock_set( op->o_pb, SLAPI_MANAGEDSAIT, (void *)managedsait ); } @@ -451,7 +472,7 @@ static int doPreSearchPluginFNs( Operation *op ) int rc; rc = doPluginFNs( op->o_bd, SLAPI_PLUGIN_PRE_SEARCH_FN, op->o_pb ); - if ( rc != 0 ) { + if ( rc < 0 ) { /* * A preoperation plugin failure will abort the * entire operation. @@ -463,8 +484,10 @@ static int doPreSearchPluginFNs( Operation *op ) Debug(LDAP_DEBUG_TRACE, "doPreSearchPluginFNs: search preoperation plugin " "returned %d.\n", rc, 0, 0); #endif - if ( slapi_pblock_get( op->o_pb, SLAPI_RESULT_CODE, (void *)&rc ) != 0) + if ( ( slapi_pblock_get( op->o_pb, SLAPI_RESULT_CODE, (void *)&rc ) != 0 ) || + rc == LDAP_SUCCESS ) { rc = LDAP_OTHER; + } } else { rc = LDAP_SUCCESS; } @@ -475,20 +498,43 @@ static int doPreSearchPluginFNs( Operation *op ) static int doSearchRewriteFNs( Operation *op ) { if ( doPluginFNs( 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->oq_search.rs_filter); - ch_free( op->oq_search.rs_filterstr.bv_val ); - filter2bv( op->oq_search.rs_filter, &op->oq_search.rs_filterstr ); + 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( op->o_req_ndn.bv_val != NULL) { + 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 ); + #ifdef NEW_LOGGING LDAP_LOG( OPERATION, ARGS, "doSearchRewriteFNs: after compute_rewrite_search filter: %s\n", - op->oq_search.rs_filterstr.bv_len ? op->oq_search.rs_filterstr.bv_val : "empty", 0, 0 ); + op->ors_filterstr.bv_len ? op->ors_filterstr.bv_val : "empty", 0, 0 ); #else Debug( LDAP_DEBUG_ARGS, " after compute_rewrite_search filter: %s\n", - op->oq_search.rs_filterstr.bv_len ? op->oq_search.rs_filterstr.bv_val : "empty", 0, 0 ); + op->ors_filterstr.bv_len ? op->ors_filterstr.bv_val : "empty", 0, 0 ); #endif } @@ -497,7 +543,7 @@ static int doSearchRewriteFNs( Operation *op ) static void doPostSearchPluginFNs( Operation *op ) { - if ( doPluginFNs( op->o_bd, SLAPI_PLUGIN_POST_SEARCH_FN, op->o_pb ) != 0 ) { + if ( doPluginFNs( op->o_bd, SLAPI_PLUGIN_POST_SEARCH_FN, op->o_pb ) < 0 ) { #ifdef NEW_LOGGING LDAP_LOG( OPERATION, INFO, "doPostSearchPluginFNs: search postoperation plugins " "failed\n", 0, 0, 0 );