mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-01 20:49:35 -05:00
ITS#8146 fix mdb_filter_candidates for unindexed attr
Change result of MDB_IDL_ALL() to use the last entryID in the DB instead of NOID.
This commit is contained in:
parent
fc05c63b63
commit
1e768c1cda
1 changed files with 25 additions and 0 deletions
|
|
@ -211,6 +211,31 @@ mdb_filter_candidates(
|
|||
/* Must not return NULL, otherwise extended filters break */
|
||||
MDB_IDL_ALL( ids );
|
||||
}
|
||||
if ( MDB_IDL_IS_RANGE( ids ) && ids[2] == NOID ) {
|
||||
struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private;
|
||||
ID last;
|
||||
|
||||
if ( mdb->mi_nextid ) {
|
||||
last = mdb->mi_nextid - 1;
|
||||
} else {
|
||||
MDB_cursor *mc;
|
||||
MDB_val key;
|
||||
|
||||
last = 0;
|
||||
rc = mdb_cursor_open( rtxn, mdb->mi_id2entry, &mc );
|
||||
if ( !rc ) {
|
||||
rc = mdb_cursor_get( mc, &key, NULL, MDB_LAST );
|
||||
if ( !rc )
|
||||
memcpy( &last, key.mv_data, sizeof( last ));
|
||||
mdb_cursor_close( mc );
|
||||
}
|
||||
}
|
||||
if ( last ) {
|
||||
ids[2] = last;
|
||||
} else {
|
||||
MDB_IDL_ZERO( ids );
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
Debug( LDAP_DEBUG_FILTER,
|
||||
|
|
|
|||
Loading…
Reference in a new issue