diff options
Diffstat (limited to 'src/third_party/wiredtiger/src/btree/bt_handle.c')
-rw-r--r-- | src/third_party/wiredtiger/src/btree/bt_handle.c | 70 |
1 files changed, 44 insertions, 26 deletions
diff --git a/src/third_party/wiredtiger/src/btree/bt_handle.c b/src/third_party/wiredtiger/src/btree/bt_handle.c index f179fa38d91..168a0152f17 100644 --- a/src/third_party/wiredtiger/src/btree/bt_handle.c +++ b/src/third_party/wiredtiger/src/btree/bt_handle.c @@ -93,6 +93,7 @@ __wt_btree_open(WT_SESSION_IMPL *session, const char *op_cfg[]) WT_CKPT ckpt; WT_CONFIG_ITEM cval; WT_DATA_HANDLE *dhandle; + WT_DECL_ITEM(tmp); WT_DECL_RET; size_t root_addr_size; uint8_t root_addr[WT_BTREE_MAX_ADDR_COOKIE]; @@ -239,6 +240,7 @@ err: WT_TRET(__wt_btree_close(session)); } __wt_meta_checkpoint_free(session, &ckpt); + __wt_scr_free(session, &tmp); return (ret); } @@ -324,6 +326,44 @@ __wt_btree_discard(WT_SESSION_IMPL *session) } /* + * __wt_btree_config_encryptor -- + * Return an encryptor handle based on the configuration. + */ +int +__wt_btree_config_encryptor(WT_SESSION_IMPL *session, + const char **cfg, WT_KEYED_ENCRYPTOR **kencryptorp) +{ + WT_CONFIG_ITEM cval, enc, keyid; + WT_DECL_RET; + const char *enc_cfg[] = { NULL, NULL }; + + /* + * We do not use __wt_config_gets_none here because "none" and the empty + * string have different meanings. The empty string means inherit the + * system encryption setting and "none" means this table is in the clear + * even if the database is encrypted. + */ + WT_RET(__wt_config_gets(session, cfg, "encryption.name", &cval)); + if (cval.len == 0) + *kencryptorp = S2C(session)->kencryptor; + else if (WT_STRING_MATCH("none", cval.str, cval.len)) + *kencryptorp = NULL; + else { + WT_RET(__wt_config_gets_none( + session, cfg, "encryption.keyid", &keyid)); + WT_RET(__wt_config_gets(session, cfg, "encryption", &enc)); + if (enc.len != 0) + WT_RET(__wt_strndup(session, enc.str, enc.len, + &enc_cfg[0])); + ret = __wt_encryptor_config(session, &cval, &keyid, + (WT_CONFIG_ARG *)enc_cfg, kencryptorp); + __wt_free(session, enc_cfg[0]); + WT_RET(ret); + } + return (0); +} + +/* * __btree_conf -- * Configure a WT_BTREE structure. */ @@ -331,12 +371,11 @@ static int __btree_conf(WT_SESSION_IMPL *session, WT_CKPT *ckpt) { WT_BTREE *btree; - WT_CONFIG_ITEM cval, enc, keyid, metadata; + WT_CONFIG_ITEM cval, metadata; WT_CONNECTION_IMPL *conn; - WT_DECL_RET; int64_t maj_version, min_version; uint32_t bitcnt; - const char **cfg, *enc_cfg[] = { NULL, NULL }; + const char **cfg; bool fixed; btree = S2BT(session); @@ -548,29 +587,8 @@ __btree_conf(WT_SESSION_IMPL *session, WT_CKPT *ckpt) } } - /* - * We do not use __wt_config_gets_none here because "none" and the empty - * string have different meanings. The empty string means inherit the - * system encryption setting and "none" means this table is in the clear - * even if the database is encrypted. - */ - WT_RET(__wt_config_gets(session, cfg, "encryption.name", &cval)); - if (cval.len == 0) - btree->kencryptor = conn->kencryptor; - else if (WT_STRING_MATCH("none", cval.str, cval.len)) - btree->kencryptor = NULL; - else { - WT_RET(__wt_config_gets_none( - session, cfg, "encryption.keyid", &keyid)); - WT_RET(__wt_config_gets(session, cfg, "encryption", &enc)); - if (enc.len != 0) - WT_RET(__wt_strndup(session, enc.str, enc.len, - &enc_cfg[0])); - ret = __wt_encryptor_config(session, &cval, &keyid, - (WT_CONFIG_ARG *)enc_cfg, &btree->kencryptor); - __wt_free(session, enc_cfg[0]); - WT_RET(ret); - } + /* Configure encryption. */ + WT_RET(__wt_btree_config_encryptor(session, cfg, &btree->kencryptor)); /* Initialize locks. */ WT_RET(__wt_rwlock_init(session, &btree->ovfl_lock)); |