static const struct bdbi_database {
char *file;
- char *name;
+ struct berval name;
int type;
int flags;
} bdbi_databases[] = {
- { "id2entry" BDB_SUFFIX, "id2entry", DB_BTREE, 0 },
- { "dn2id" BDB_SUFFIX, "dn2id", DB_BTREE, 0 },
- { NULL, NULL, 0, 0 }
+ { "id2entry" BDB_SUFFIX, BER_BVC("id2entry"), DB_BTREE, 0 },
+ { "dn2id" BDB_SUFFIX, BER_BVC("dn2id"), DB_BTREE, 0 },
+ { NULL, BER_BVNULL, 0, 0 }
};
typedef void * db_malloc(size_t);
bdb->bi_dbenv->set_lk_detect( bdb->bi_dbenv, bdb->bi_lock_detect );
+ if ( !BER_BVISNULL( &bdb->bi_db_crypt_key )) {
+ rc = bdb->bi_dbenv->set_encrypt( bdb->bi_dbenv, bdb->bi_db_crypt_key.bv_val,
+ DB_ENCRYPT_AES );
+ if ( rc ) {
+ Debug( LDAP_DEBUG_ANY,
+ LDAP_XSTRING(bdb_db_open) ": database \"%s\": "
+ "dbenv set_encrypt failed: %s (%d).\n",
+ be->be_suffix[0].bv_val, db_strerror(rc), rc );
+ goto fail;
+ }
+ }
+
/* One long-lived TXN per thread, two TXNs per write op */
bdb->bi_dbenv->set_tx_max( bdb->bi_dbenv, connection_pool_max * 3 );
BDB_INDICES * sizeof(struct bdb_db_info *) );
/* open (and create) main database */
- for( i = 0; bdbi_databases[i].name; i++ ) {
+ for( i = 0; bdbi_databases[i].name.bv_val; i++ ) {
struct bdb_db_info *db;
db = (struct bdb_db_info *) ch_calloc(1, sizeof(struct bdb_db_info));
goto fail;
}
+ if( !BER_BVISNULL( &bdb->bi_db_crypt_key )) {
+ rc = db->bdi_db->set_flags( db->bdi_db, DB_ENCRYPT );
+ if ( rc ) {
+ snprintf(cr->msg, sizeof(cr->msg),
+ "database \"%s\": db set_flags(DB_ENCRYPT)(%s) failed: %s (%d).",
+ be->be_suffix[0].bv_val,
+ bdb->bi_dbenv_home, db_strerror(rc), rc );
+ Debug( LDAP_DEBUG_ANY,
+ LDAP_XSTRING(bdb_db_open) ": %s\n",
+ cr->msg, 0, 0 );
+ goto fail;
+ }
+ }
+
if( i == BDB_ID2ENTRY ) {
if ( slapMode & SLAP_TOOL_MODE )
db->bdi_db->mpf->set_priority( db->bdi_db->mpf,
flags |= DB_CREATE;
}
#else
+ rc = db->bdi_db->set_dup_compare( db->bdi_db,
+ bdb_dup_compare );
if ( slapMode & (SLAP_TOOL_READONLY|SLAP_TOOL_READMAIN) ) {
flags |= DB_RDONLY;
} else {
rc = db->bdi_db->close( db->bdi_db, 0 );
/* Lower numbered names are not strdup'd */
if( bdb->bi_ndatabases >= BDB_NDB )
- free( db->bdi_name );
+ free( db->bdi_name.bv_val );
free( db );
}
free( bdb->bi_databases );