1 /* init.c - initialize bdb backend */
4 * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
5 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
12 #include <ac/string.h>
13 #include <ac/socket.h>
17 int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *out )
19 struct bdb_info *bdb = (struct bdb_info *) be->be_private;
26 rc = txn_begin( bdb->bi_dbenv, tid, <id, 0 );
32 key.data = (char *) &kid;
33 key.size = sizeof( kid );
36 data.data = (char *) &id;
37 data.ulen = sizeof( id );
38 data.flags = DB_DBT_USERMEM;
40 /* get exiting value (with write lock) */
41 rc = bdb->bi_entries->bdi_db->get( bdb->bi_nextid->bdi_db,
42 ltid, &key, &data, DB_RMW );
44 if( rc == DB_NOTFOUND ) {
45 /* must be first add */
48 } else if( rc != 0 ) {
51 } else if ( data.size != sizeof(ID) ) {
60 rc = bdb->bi_entries->bdi_db->put( bdb->bi_nextid->bdi_db,
61 ltid, &key, &data, 0 );
67 (void) txn_abort( ltid );
69 rc = txn_commit( ltid, 0 );