]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-mdb/dn2entry.c
dn2id fixes, slapadd working
[openldap] / servers / slapd / back-mdb / dn2entry.c
index fb9e18c2d85a569b3d37bbcef7b974d8af8ad429..e2da3dca9a16c3ee20cc8a560cde09c40690fd41 100644 (file)
 int
 mdb_dn2entry(
        Operation *op,
-       DB_TXN *tid,
+       MDB_txn *tid,
        struct berval *dn,
-       EntryInfo **e,
-       int matched,
-       DB_LOCK *lock )
+       Entry **e,
+       struct berval *matched )
 {
-       EntryInfo *ei = NULL;
        int rc, rc2;
+       ID id;
 
        Debug(LDAP_DEBUG_TRACE, "mdb_dn2entry(\"%s\")\n",
                dn->bv_val, 0, 0 );
 
        *e = NULL;
 
-       rc = mdb_cache_find_ndn( op, tid, dn, &ei );
+       rc = mdb_dn2id( op, tid, dn, &id, matched );
        if ( rc ) {
-               if ( matched && rc == DB_NOTFOUND ) {
-                       /* Set the return value, whether we have its entry
-                        * or not.
-                        */
-                       *e = ei;
-                       if ( ei && ei->bei_id ) {
-                               rc2 = mdb_cache_find_id( op, tid, ei->bei_id,
-                                       &ei, ID_LOCKED, lock );
-                               if ( rc2 ) rc = rc2;
-                       } else if ( ei ) {
-                               mdb_cache_entryinfo_unlock( ei );
-                               memset( lock, 0, sizeof( *lock ));
-                               lock->mode = DB_LOCK_NG;
-                       }
-               } else if ( ei ) {
-                       mdb_cache_entryinfo_unlock( ei );
-               }
+               *e = NULL;
        } else {
-               rc = mdb_cache_find_id( op, tid, ei->bei_id, &ei, ID_LOCKED,
-                       lock );
-               if ( rc == 0 ) {
-                       *e = ei;
-               } else if ( matched && rc == DB_NOTFOUND ) {
-                       /* always return EntryInfo */
-                       if ( ei->bei_parent ) {
-                               ei = ei->bei_parent;
-                               rc2 = mdb_cache_find_id( op, tid, ei->bei_id, &ei, 0,
-                                       lock );
-                               if ( rc2 ) rc = rc2;
-                       }
-                       *e = ei;
-               }
+               rc = mdb_id2entry( op, tid, id, e );
        }
 
        return rc;