From 720a7f1aeac9ef6e9a203aa90057115903783de6 Mon Sep 17 00:00:00 2001 From: Hamdy Khalil Date: Wed, 17 Aug 2011 01:31:29 +0300 Subject: [PATCH 1/3] Adding encryption support --- ext/bdb.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ext/bdb.c b/ext/bdb.c index fefe1c0..e17c752 100644 --- a/ext/bdb.c +++ b/ext/bdb.c @@ -2873,6 +2873,30 @@ VALUE env_set_verbose(VALUE obj, VALUE which, VALUE onoff) return Qtrue; } +/* + * call-seq: + * env.set_encrypt(passwd) + * + * set encrypt + */ +VALUE env_set_encrypt(VALUE obj, VALUE vpasswd) +{ + t_envh *eh; + const char *passwd; + int rv; + + passwd = StringValueCStr(vpasswd); + Data_Get_Struct(obj, t_envh, eh); + u_int32_t flags=0x00000001; //DB_ENCRYPT_AES + + rv = eh->env->set_encrypt(eh->env, passwd, flags); + if ( rv != 0 ) { + raise_error(rv, "env_set_encrypt: %s",db_strerror(rv)); + } + + return vpasswd; +} + /* * call-seq: * env.rep_priority = int @@ -3387,6 +3411,9 @@ EXCEPTIONS_CREATE rb_define_method(cEnv,"home",env_get_home,0); rb_define_method(cEnv,"set_verbose",env_set_verbose,2); + rb_define_method(cEnv,"encrypt=",env_set_encrypt,1); + //rb_define_method(cEnv,"encrypt",env_get_encrypt,0); + rb_define_method(cEnv,"rep_priority=", env_rep_set_priority, 1); rb_define_method(cEnv,"rep_priority", env_rep_get_priority, 0); rb_define_method(cEnv,"rep_nsites=", env_rep_set_nsites, 1); From 813bffbd4ef933696ccf0000f17afe5566e8ebeb Mon Sep 17 00:00:00 2001 From: Hamdy Khalil Date: Wed, 17 Aug 2011 01:34:55 +0300 Subject: [PATCH 2/3] Adding encryption support --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2b179ea..bbb279c 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Sample Usage Bdb::DB_INIT_LOCK | # Initialize locking. Bdb::DB_INIT_LOG | # Initialize logging Bdb::DB_INIT_MPOOL # Initialize the in-memory cache. + env.encrypt = 'yourpassword' env.open(File.join(File.dirname(__FILE__), 'tmp'), env_flags, 0); db = env.db From 1251a82c7b4237c4586a9916348bc2f86ba9a1fb Mon Sep 17 00:00:00 2001 From: Hamdy Khalil Date: Wed, 17 Aug 2011 03:16:47 +0300 Subject: [PATCH 3/3] Adding Encryption support to Db --- ext/bdb.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/ext/bdb.c b/ext/bdb.c index e17c752..97c7381 100644 --- a/ext/bdb.c +++ b/ext/bdb.c @@ -1058,6 +1058,28 @@ VALUE db_truncate(VALUE obj, VALUE vtxn) return INT2FIX(count); } +/** + * call-seq: + * db.set_encrypt(db, passwd) + * + * Set encrypt + */ +VALUE db_set_encrypt(VALUE obj, VALUE vpasswd) { + int rv; + t_dbh *dbh; + const char *passwd; + + passwd = StringValueCStr(vpasswd); + Data_Get_Struct(obj,t_dbh,dbh); + u_int32_t flags=0x00000001; //DB_ENCRYPT_AES + + rv = dbh->db->set_encrypt(dbh->db, passwd, flags); + + if ( rv != 0 ) + raise_error(rv, "set_encrypt failure: %s",db_strerror(rv)); + return vpasswd; +} + /* * call-seq: * db.key_range(txn,vkey,flags) -> [#less,#same,#greater] @@ -3355,6 +3377,8 @@ EXCEPTIONS_CREATE rb_define_method(cDb,"sync",db_sync,0); rb_define_method(cDb,"truncate",db_truncate,1); + rb_define_method(cDb,"encrypt=",db_set_encrypt,1); + #if DB_VERSION_MAJOR == 5 || DB_VERSION_MINOR > 3 rb_define_method(cDb,"compact",db_compact,5); #endif