mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-12863 No table can be created after second encryption plugin attempted to load
when deinitializing encryption plugins, disable server-wide encryption only if this plugin is the one that is used for encryption.
This commit is contained in:
7
mysql-test/suite/encryption/r/second_plugin-12863.result
Normal file
7
mysql-test/suite/encryption/r/second_plugin-12863.result
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
call mtr.add_suppression('debug.key.management');
|
||||||
|
install soname 'debug_key_management';
|
||||||
|
ERROR HY000: Can't initialize function 'debug_key_management'; Plugin initialization function failed.
|
||||||
|
create table t1 (a varchar(255)) engine=innodb encrypted=yes;
|
||||||
|
create table t2 (a varchar(255)) engine=innodb;
|
||||||
|
create table t3 (a varchar(255)) engine=innodb encrypted=no;
|
||||||
|
drop table t1, t2, t3;
|
16
mysql-test/suite/encryption/t/second_plugin-12863.test
Normal file
16
mysql-test/suite/encryption/t/second_plugin-12863.test
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# MDEV-12863 No table can be created after second encryption plugin attempted to load
|
||||||
|
#
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_file_key_management_plugin.inc
|
||||||
|
|
||||||
|
call mtr.add_suppression('debug.key.management');
|
||||||
|
|
||||||
|
--error 1123
|
||||||
|
install soname 'debug_key_management';
|
||||||
|
|
||||||
|
create table t1 (a varchar(255)) engine=innodb encrypted=yes;
|
||||||
|
create table t2 (a varchar(255)) engine=innodb;
|
||||||
|
create table t3 (a varchar(255)) engine=innodb encrypted=no;
|
||||||
|
|
||||||
|
drop table t1, t2, t3;
|
@ -98,19 +98,27 @@ int initialize_encryption_plugin(st_plugin_int *plugin)
|
|||||||
|
|
||||||
int finalize_encryption_plugin(st_plugin_int *plugin)
|
int finalize_encryption_plugin(st_plugin_int *plugin)
|
||||||
{
|
{
|
||||||
|
bool used= plugin_ref_to_int(encryption_manager) == plugin;
|
||||||
|
|
||||||
|
if (used)
|
||||||
|
{
|
||||||
encryption_handler.encryption_key_get_func=
|
encryption_handler.encryption_key_get_func=
|
||||||
(uint (*)(uint, uint, uchar*, uint*))no_key;
|
(uint (*)(uint, uint, uchar*, uint*))no_key;
|
||||||
encryption_handler.encryption_key_get_latest_version_func= no_key;
|
encryption_handler.encryption_key_get_latest_version_func= no_key;
|
||||||
encryption_handler.encryption_ctx_size_func= zero_size;
|
encryption_handler.encryption_ctx_size_func= zero_size;
|
||||||
|
}
|
||||||
|
|
||||||
if (plugin && plugin->plugin->deinit && plugin->plugin->deinit(NULL))
|
if (plugin && plugin->plugin->deinit && plugin->plugin->deinit(NULL))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("warning", ("Plugin '%s' deinit function returned error.",
|
DBUG_PRINT("warning", ("Plugin '%s' deinit function returned error.",
|
||||||
plugin->name.str));
|
plugin->name.str));
|
||||||
}
|
}
|
||||||
if (encryption_manager)
|
|
||||||
|
if (used)
|
||||||
|
{
|
||||||
plugin_unlock(NULL, encryption_manager);
|
plugin_unlock(NULL, encryption_manager);
|
||||||
encryption_manager= 0;
|
encryption_manager= 0;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user