+ if( !mr->smr_filter ) {
+ return idl;
+ }
+
+ rc = (mr->smr_filter)(
+ LDAP_FILTER_EQUALITY,
+ mask,
+ ava->aa_desc->ad_type->sat_syntax,
+ mr,
+ &prefix,
+ &ava->aa_value,
+ &keys, op->o_tmpmemctx );
+
+ if( rc != LDAP_SUCCESS ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG( FILTER, ERR,
+ "equality_candidates: (%s%s) MR filter failed (%d\n",
+ dbname, LDBM_SUFFIX, rc );
+#else
+ Debug( LDAP_DEBUG_TRACE,
+ "<= equality_candidates: (%s%s) MR filter failed (%d)\n",
+ dbname, LDBM_SUFFIX, rc );
+#endif
+
+ return idl;
+ }
+
+ if( keys == NULL ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG( FILTER, ERR,
+ "equality_candidates: no keys (%s%s)\n", dbname, LDBM_SUFFIX, 0 );
+#else
+ Debug( LDAP_DEBUG_TRACE,
+ "<= equality_candidates: no keys (%s%s)\n",
+ dbname, LDBM_SUFFIX, 0 );
+#endif
+
+ return idl;
+ }
+
+ db = ldbm_cache_open( op->o_bd, dbname, LDBM_SUFFIX, LDBM_WRCREAT );
+
+ if ( db == NULL ) {
+#ifdef NEW_LOGGING
+ LDAP_LOG( FILTER, ERR, "equality_candidates: db open failed (%s%s)\n",
+ dbname, LDBM_SUFFIX, 0 );
+#else
+ Debug( LDAP_DEBUG_ANY,
+ "<= equality_candidates db open failed (%s%s)\n",
+ dbname, LDBM_SUFFIX, 0 );
+#endif
+
+ return idl;
+ }
+
+ for ( i= 0; keys[i].bv_val != NULL; i++ ) {
+ ID_BLOCK *save;
+ ID_BLOCK *tmp;
+
+ rc = key_read( op->o_bd, db, &keys[i], &tmp );
+
+ if( rc != LDAP_SUCCESS ) {
+ idl_free( idl );
+ idl = NULL;
+#ifdef NEW_LOGGING
+ LDAP_LOG( FILTER, ERR,
+ "equality_candidates: key read failed (%d)\n", rc, 0, 0 );
+#else
+ Debug( LDAP_DEBUG_TRACE,
+ "<= equality_candidates key read failed (%d)\n",
+ rc, 0, 0 );
+#endif
+
+ break;
+ }
+
+ if( tmp == NULL ) {
+ idl_free( idl );
+ idl = NULL;
+#ifdef NEW_LOGGING
+ LDAP_LOG( FILTER, INFO, "equality_candidates NULL\n", 0, 0, 0 );
+#else
+ Debug( LDAP_DEBUG_TRACE,
+ "<= equality_candidates NULL\n",
+ 0, 0, 0 );
+#endif
+
+ break;
+ }
+
+ save = idl;
+ idl = idl_intersection( op->o_bd, idl, tmp );
+ idl_free( save );
+ idl_free( tmp );
+
+ if( idl == NULL ) break;
+ }
+
+ ber_bvarray_free_x( keys, op->o_tmpmemctx );
+
+ ldbm_cache_close( op->o_bd, db );
+
+
+#ifdef NEW_LOGGING
+ LDAP_LOG( FILTER, ENTRY,
+ "equality_candidates: return %ld\n",
+ idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
+#else
+ Debug( LDAP_DEBUG_TRACE, "<= equality_candidates %ld\n",
+ idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
+#endif