From: Howard Chu Date: Wed, 25 Sep 2024 17:23:31 +0000 (+0100) Subject: LMDB: Add a separate mlm_setup0() to separate loading from setup X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=acab3df034144e4792e5ac6c11e1317ac4581954;p=thirdparty%2Fopenldap.git LMDB: Add a separate mlm_setup0() to separate loading from setup --- diff --git a/libraries/liblmdb/module.c b/libraries/liblmdb/module.c index 52a24eb019..16fefa96c0 100644 --- a/libraries/liblmdb/module.c +++ b/libraries/liblmdb/module.c @@ -76,26 +76,31 @@ void mlm_unload(void *mlm) #endif } +void mlm_setup0(MDB_env *env, MDB_crypto_funcs *cf, const char *password) +{ + MDB_val enckey = {0}; + if (cf->mcf_sumfunc) { + mdb_env_set_checksum(env, cf->mcf_sumfunc, cf->mcf_sumsize); + } + if (cf->mcf_encfunc && password) { + char keybuf[2048]; + enckey.mv_data = keybuf; + enckey.mv_size = cf->mcf_keysize; + if (cf->mcf_str2key) + cf->mcf_str2key(password, &enckey); + else + strncpy(enckey.mv_data, password, enckey.mv_size); + mdb_env_set_encrypt(env, cf->mcf_encfunc, &enckey, cf->mcf_esumsize); + memset(enckey.mv_data, 0, enckey.mv_size); + } +} + void *mlm_setup(MDB_env *env, const char *file, const char *password, char **errmsg) { MDB_crypto_funcs *cf; - MDB_val enckey = {0}; void *mlm = mlm_load(file, NULL, &cf, errmsg); if (mlm) { - if (cf->mcf_sumfunc) { - mdb_env_set_checksum(env, cf->mcf_sumfunc, cf->mcf_sumsize); - } - if (cf->mcf_encfunc && password) { - char keybuf[2048]; - enckey.mv_data = keybuf; - enckey.mv_size = cf->mcf_keysize; - if (cf->mcf_str2key) - cf->mcf_str2key(password, &enckey); - else - strncpy(enckey.mv_data, password, enckey.mv_size); - mdb_env_set_encrypt(env, cf->mcf_encfunc, &enckey, cf->mcf_esumsize); - memset(enckey.mv_data, 0, enckey.mv_size); - } + mlm_setup0(env, cf, password); } return mlm; } diff --git a/libraries/liblmdb/module.h b/libraries/liblmdb/module.h index 13d4494dd8..bd5fb3ff14 100644 --- a/libraries/liblmdb/module.h +++ b/libraries/liblmdb/module.h @@ -14,3 +14,4 @@ void *mlm_load(const char *file, const char *name, MDB_crypto_funcs **mcf_ptr, char **errmsg); void mlm_unload(void *lm); void *mlm_setup(MDB_env *env, const char *file, const char *password, char **errmsg); +void mlm_setup0(MDB_env *env, MDB_crypto_funcs *cf, const char *password);