aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-04-24 06:55:25 -0400
committerJeff Garzik <jeff@garzik.org>2006-04-24 06:55:25 -0400
commit48152a4a764ece743d6f51b75601bc34cc9ad832 (patch)
tree218020518fde625168bd49fa16651285a8e46ce0
parent95e90ee71799bf2099be2906ff23a6503de57109 (diff)
downloaddbfs-48152a4a764ece743d6f51b75601bc34cc9ad832.tar.gz
dbfs: database creation features
- support encryption, if desired - force byte order to little endian - force page size to 512
-rw-r--r--dbfs-backend.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/dbfs-backend.c b/dbfs-backend.c
index 506fec7..34a477f 100644
--- a/dbfs-backend.c
+++ b/dbfs-backend.c
@@ -31,8 +31,9 @@ static DB *db_meta;
int init_db(void)
{
- const char *db_home;
+ const char *db_home, *db_password;
int rc;
+ unsigned int flags = 0;
/*
* open DB environment
@@ -44,6 +45,12 @@ int init_db(void)
return 1;
}
+ db_password = getenv("DB_PASSWORD");
+ if (db_password) {
+ if (putenv("DB_PASSWORD=X"))
+ perror("putenv (SECURITY WARNING)");
+ }
+
rc = db_env_create(&db_env, 0);
if (rc) {
fprintf(stderr, "db_env_create failed: %d\n", rc);
@@ -53,12 +60,21 @@ int init_db(void)
db_env->set_errfile(db_env, stderr);
db_env->set_errpfx(db_env, "dbfs");
+ if (db_password) {
+ flags |= DB_ENCRYPT;
+ rc = db_env->set_encrypt(db_env, db_password, DB_ENCRYPT_AES);
+ if (rc) {
+ db_env->err(db_env, rc, "db_env->set_encrypt");
+ goto err_out;
+ }
+ }
+
rc = db_env->open(db_env, db_home,
DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL |
- DB_INIT_TXN | DB_RECOVER | DB_CREATE, 0666);
+ DB_INIT_TXN | DB_RECOVER | DB_CREATE | flags, 0666);
if (rc) {
db_env->err(db_env, rc, "db_env->open");
- return 1;
+ goto err_out;
}
/*
@@ -72,12 +88,24 @@ int init_db(void)
}
rc = db_meta->open(db_meta, NULL, "metadata", NULL,
- DB_HASH, DB_AUTO_COMMIT | DB_CREATE, 0666);
+ DB_HASH, DB_AUTO_COMMIT | DB_CREATE | flags, 0666);
if (rc) {
db_meta->err(db_meta, rc, "db_meta->open");
goto err_out_meta;
}
+ rc = db_meta->set_pagesize(db_meta, 512);
+ if (rc) {
+ db_meta->err(db_meta, rc, "db_meta->set_pagesize");
+ goto err_out_meta;
+ }
+
+ rc = db_meta->set_lorder(db_meta, 1234);
+ if (rc) {
+ db_meta->err(db_meta, rc, "db_meta->set_lorder");
+ goto err_out_meta;
+ }
+
return 0;
err_out_meta: