#include <ac/string.h>
#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;
/* 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;
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;
+}
+