Back to index

openldap  2.4.31
Functions
dn2entry.c File Reference
#include "portable.h"
#include <stdio.h>
#include <ac/string.h>
#include "back-bdb.h"

Go to the source code of this file.

Functions

int bdb_dn2entry (Operation *op, DB_TXN *tid, struct berval *dn, EntryInfo **e, int matched, DB_LOCK *lock)

Function Documentation

int bdb_dn2entry ( Operation op,
DB_TXN *  tid,
struct berval dn,
EntryInfo **  e,
int  matched,
DB_LOCK *  lock 
)

Definition at line 31 of file dn2entry.c.

{
       EntryInfo *ei = NULL;
       int rc, rc2;

       Debug(LDAP_DEBUG_TRACE, "bdb_dn2entry(\"%s\")\n",
              dn->bv_val, 0, 0 );

       *e = NULL;

       rc = bdb_cache_find_ndn( op, tid, dn, &ei );
       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 = bdb_cache_find_id( op, tid, ei->bei_id,
                                   &ei, ID_LOCKED, lock );
                            if ( rc2 ) rc = rc2;
                     } else if ( ei ) {
                            bdb_cache_entryinfo_unlock( ei );
                            memset( lock, 0, sizeof( *lock ));
                            lock->mode = DB_LOCK_NG;
                     }
              } else if ( ei ) {
                     bdb_cache_entryinfo_unlock( ei );
              }
       } else {
              rc = bdb_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 = bdb_cache_find_id( op, tid, ei->bei_id, &ei, 0,
                                   lock );
                            if ( rc2 ) rc = rc2;
                     }
                     *e = ei;
              }
       }

       return rc;
}

Here is the caller graph for this function: