LMDB: Add a separate mlm_setup0() to separate loading from setup

This commit is contained in:
Howard Chu 2024-09-25 18:23:31 +01:00
parent 6cbb42aae0
commit acab3df034
2 changed files with 21 additions and 15 deletions

View file

@ -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;
}

View file

@ -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);