X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fsearch.c;h=816df11c40041e09535737d48ae5f8bc0e8d92a3;hb=7fd21ada0706629379885d9cd30770ce8b63098b;hp=ea93719e23cbb689e2296c1d96567ea4acb8a23e;hpb=262f8bf11fb4c5188d040b8f8ba79d0a48cba3f0;p=openldap diff --git a/servers/slapd/search.c b/servers/slapd/search.c index ea93719e23..816df11c40 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 @@ -159,7 +167,7 @@ do_search( /* attributes */ siz = sizeof(AttributeName); - off = 0; + 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; @@ -245,7 +253,8 @@ do_search( manageDSAit = get_manageDSAit( op ); - if ( op->ors_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 ) { @@ -262,16 +271,15 @@ do_search( } #ifdef LDAP_SLAPI - attrs = anlist2charray( op, op->ors_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 */ @@ -281,22 +289,21 @@ do_search( } #ifdef LDAP_SLAPI - attrs = anlist2charray( op, op->ors_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; @@ -314,10 +321,11 @@ do_search( 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; } + break; } if( !op->o_req_ndn.bv_len && default_search_nbase.bv_len ) { @@ -337,12 +345,9 @@ do_search( /* Sync control overrides manageDSAit */ if ( manageDSAit != SLAP_NO_CONTROL ) { -#ifdef LDAP_SYNC if ( op->o_sync_mode & SLAP_SYNC_REFRESH ) { be_manageDSAit = SLAP_NO_CONTROL; - } else -#endif - { + } else { be_manageDSAit = manageDSAit; } } else { @@ -375,14 +380,16 @@ do_search( } #ifdef LDAP_SLAPI - attrs = anlist2charray( op, op->ors_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) */ @@ -394,15 +401,16 @@ do_search( } #ifdef LDAP_SLAPI - doPostSearchPluginFNs( op ); + if ( op->o_pb ) doPostSearchPluginFNs( op ); #endif /* LDAP_SLAPI */ return_results:; -#ifdef LDAP_SYNC if ( ( op->o_sync_mode & SLAP_SYNC_PERSIST ) ) return rs->sr_err; -#endif + + 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 );