]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-mdb/dn2entry.c
Merge remote branch 'origin/mdb.master'
[openldap] / servers / slapd / back-mdb / dn2entry.c
index 3aa81675343cd2f54ba616ba4955d6268b985d0c..26bf8464376b26012b75d940e4b0ab3c501d1fbe 100644 (file)
@@ -31,26 +31,38 @@ int
 mdb_dn2entry(
        Operation *op,
        MDB_txn *tid,
+       MDB_cursor *m2,
        struct berval *dn,
        Entry **e,
        int matched )
 {
+       struct mdb_info *mdb = (struct mdb_info *) op->o_bd->be_private;
        int rc, rc2;
        ID id = NOID;
        struct berval mbv, nmbv;
+       MDB_cursor *mc;
 
        Debug(LDAP_DEBUG_TRACE, "mdb_dn2entry(\"%s\")\n",
                dn->bv_val, 0, 0 );
 
        *e = NULL;
 
-       rc = mdb_dn2id( op, tid, dn, &id, &mbv, &nmbv );
+       rc = mdb_dn2id( op, tid, m2, dn, &id, &mbv, &nmbv );
        if ( rc ) {
-               if ( matched )
-                       rc2 = mdb_id2entry( op, tid, id, e );
+               if ( matched ) {
+                       rc2 = mdb_cursor_open( tid, mdb->mi_id2entry, &mc );
+                       if ( rc2 == MDB_SUCCESS ) {
+                               rc2 = mdb_id2entry( op, mc, id, e );
+                               mdb_cursor_close( mc );
+                       }
+               }
 
        } else {
-               rc = mdb_id2entry( op, tid, id, e );
+               rc = mdb_cursor_open( tid, mdb->mi_id2entry, &mc );
+               if ( rc == MDB_SUCCESS ) {
+                       rc = mdb_id2entry( op, mc, id, e );
+                       mdb_cursor_close(mc);
+               }
        }
        if ( *e ) {
                (*e)->e_name = mbv;