/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2000-2008 The OpenLDAP Foundation.
+ * Copyright 2000-2012 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
return rc;
}
-static int
-dn_equality_candidate(
- Operation *op,
- DB_TXN *rtxn,
- struct berval *ndn,
- ID *ids )
-{
- struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
- EntryInfo ei = { 0 };
- DB_LOCK lock;
- int rc;
-
- lock.mode = DB_LOCK_NG;
- rc = bdb_dn2id( op, ndn, &ei, rtxn, &lock );
- if ( rc == 0 ) {
- BDB_IDL_RANGE( ids, ei.bei_id, ei.bei_id );
- bdb_cache_entry_db_unlock( bdb, &lock );
- }
-
- return rc;
-}
-
static int
equality_candidates(
Operation *op,
ava->aa_desc->ad_cname.bv_val, 0, 0 );
if ( ava->aa_desc == slap_schema.si_ad_entryDN ) {
- return dn_equality_candidate( op, rtxn, &ava->aa_value, ids );
+ EntryInfo *ei = NULL;
+ rc = bdb_cache_find_ndn( op, rtxn, &ava->aa_value, &ei );
+ if ( rc == LDAP_SUCCESS ) {
+ /* exactly one ID can match */
+ ids[0] = 1;
+ ids[1] = ei->bei_id;
+ }
+ if ( ei ) {
+ bdb_cache_entryinfo_unlock( ei );
+ }
+ return rc;
}
BDB_IDL_ALL( bdb, ids );