X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-meta%2Fsearch.c;h=eec9d5823448b64004c6aef8d8697adbecfa83c5;hb=bfd8b3a42aa44d317acd686e786ed4be681b2337;hp=9aabda0b233971555e1fed5337ea9335e78094d5;hpb=1c581612f72f59ec485b6128575afe697a2b5870;p=openldap diff --git a/servers/slapd/back-meta/search.c b/servers/slapd/back-meta/search.c index 9aabda0b23..eec9d58234 100644 --- a/servers/slapd/back-meta/search.c +++ b/servers/slapd/back-meta/search.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2013 The OpenLDAP Foundation. + * Copyright 1999-2014 The OpenLDAP Foundation. * Portions Copyright 2001-2003 Pierangelo Masarati. * Portions Copyright 1999-2003 Howard Chu. * All rights reserved. @@ -548,6 +548,20 @@ meta_back_search_start( } } + /* check filter expression */ + if ( mt->mt_filter ) { + metafilter_t *mf; + for ( mf = mt->mt_filter; mf; mf = mf->mf_next ) { + if ( regexec( &mf->mf_regex, op->ors_filterstr.bv_val, 0, NULL, 0 ) == 0 ) + break; + } + /* nothing matched, this target is no longer a candidate */ + if ( !mf ) { + retcode = META_SEARCH_NOT_CANDIDATE; + goto doreturn; + } + } + /* initiate dobind */ retcode = meta_search_dobind_init( op, rs, mcp, candidate, candidates );