X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb%2Fdn2id.c;h=71ff928a9ad4d7ea61e0b7e3a910ab4eec88ee2f;hb=ca7ba1a3fd778a5547ac0c9b59131af22ca43c78;hp=af380ed06b9dfcb897861ecc1cac5ca1cd552272;hpb=b64782a7c058516198899a3cd8c5a50d30e08220;p=openldap diff --git a/servers/slapd/back-bdb/dn2id.c b/servers/slapd/back-bdb/dn2id.c index af380ed06b..71ff928a9a 100644 --- a/servers/slapd/back-bdb/dn2id.c +++ b/servers/slapd/back-bdb/dn2id.c @@ -11,14 +11,14 @@ #include #include "back-bdb.h" +#include "idl.h" int bdb_dn2id_add( BackendDB *be, DB_TXN *txn, const char *dn, - ID id -) + ID id ) { int rc; DBT key, data; @@ -212,8 +212,13 @@ bdb_dn2id( /* fetch it */ rc = db->get( db, txn, &key, &data, 0 ); - Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: id=0x%08lx: %s (%d)\n", - *id, db_strerror( rc ), rc ); + if( rc != 0 ) { + Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: get failed: %s (%d)\n", + db_strerror( rc ), rc, 0 ); + } else { + Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: got id=0x%08lx\n", + *id, 0, 0 ); + } ch_free( key.data ); return rc; @@ -343,3 +348,47 @@ bdb_dn2id_children( return rc; } + +int +bdb_dn2idl( + BackendDB *be, + const char *dn, + int prefix, + ID *ids ) +{ + int rc; + DBT key, data; + struct bdb_info *bdb = (struct bdb_info *) be->be_private; + DB *db = bdb->bi_dn2id->bdi_db; + + Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2idl( \"%s\" )\n", dn, 0, 0 ); + + DBTzero( &key ); + key.size = strlen( dn ) + 2; + key.data = ch_malloc( key.size ); + ((char *)key.data)[0] = prefix; + AC_MEMCPY( &((char *)key.data)[1], dn, key.size - 1 ); + + /* store the ID */ + DBTzero( &data ); + data.data = ids; + data.ulen = sizeof(ID); + data.flags = DB_DBT_USERMEM; + + /* fetch it */ + rc = db->get( db, NULL, &key, &data, 0 ); + + if( rc != 0 ) { + Debug( LDAP_DEBUG_TRACE, + "<= bdb_dn2idl: get failed: %s (%d)\n", + db_strerror( rc ), rc, 0 ); + } else { + Debug( LDAP_DEBUG_TRACE, + "<= bdb_dn2idl: id=%ld first=%ld last=%ld\n", + ids[0], BDB_IDL_FIRST( ids ), BDB_IDL_LAST( ids ) ); + } + + ch_free( key.data ); + return rc; +} +