From 869b596b7402f1e8f94b3158d8cf155e6fc07bf4 Mon Sep 17 00:00:00 2001 From: "chuck.bell@oracle.com" <> Date: Mon, 17 Oct 2011 15:30:28 -0400 Subject: [PATCH] BUG#12968815: mysql_plugin : disable requires plugin name but doesn't use it This patch corrects a defect in the building of the DELETE commands for disabling a plugin whereby only the original plugin data was deleted. If there were other plugins, the delete did not remove the rows. The code has been changed to remove all rows from the mysql.plugin table that were inserted when the plugin was loaded. The test has also been changed to correctly identify if all rows have been deleted. --- client/mysql_plugin.c | 2 +- mysql-test/r/mysql_plugin.result | 16 +++++++++++++--- mysql-test/t/mysql_plugin.test | 14 +++++++++++--- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/client/mysql_plugin.c b/client/mysql_plugin.c index 825c962c486..dd5c02931c9 100644 --- a/client/mysql_plugin.c +++ b/client/mysql_plugin.c @@ -1081,7 +1081,7 @@ static int build_bootstrap_file(char *operation, char *bootstrap) else { fprintf(file, - "DELETE FROM mysql.plugin WHERE name = '%s';", plugin_data.name); + "DELETE FROM mysql.plugin WHERE dl = '%s';", plugin_data.so_name); if (opt_verbose) { printf("# Disabling %s...\n", plugin_data.name); diff --git a/mysql-test/r/mysql_plugin.result b/mysql-test/r/mysql_plugin.result index 949f3748236..93567e28c3d 100644 --- a/mysql-test/r/mysql_plugin.result +++ b/mysql-test/r/mysql_plugin.result @@ -1,24 +1,34 @@ # # Ensure the plugin isn't loaded. # -SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name; +SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name; name dl # # Enable the plugin... # # +# Simulate loading a plugin libary with multiple entry points. +# This will test the DISABLE to ensure all rows are removed. +# +INSERT INTO mysql.plugin VALUES ('wicky', 'libdaemon_example.so'); +INSERT INTO mysql.plugin VALUES ('wacky', 'libdaemon_example.so'); +INSERT INTO mysql.plugin VALUES ('wonky', 'libdaemon_example.so'); +# # Ensure the plugin is now loaded. # -SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name; +SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name; name dl daemon_example libdaemon_example.so +wacky libdaemon_example.so +wicky libdaemon_example.so +wonky libdaemon_example.so # # Disable the plugin... # # # Ensure the plugin isn't loaded. # -SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name; +SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name; name dl # # Attempt to load non-existant plugin diff --git a/mysql-test/t/mysql_plugin.test b/mysql-test/t/mysql_plugin.test index b7fbe377e31..897e22ddd62 100644 --- a/mysql-test/t/mysql_plugin.test +++ b/mysql-test/t/mysql_plugin.test @@ -105,7 +105,7 @@ let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD --echo # --echo # Ensure the plugin isn't loaded. --echo # -SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name; +SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name; --echo # --echo # Enable the plugin... @@ -138,11 +138,19 @@ EOF --enable_reconnect --source include/wait_until_connected_again.inc +--echo # +--echo # Simulate loading a plugin libary with multiple entry points. +--echo # This will test the DISABLE to ensure all rows are removed. +--echo # +eval INSERT INTO mysql.plugin VALUES ('wicky', '$DAEMONEXAMPLE'); +eval INSERT INTO mysql.plugin VALUES ('wacky', '$DAEMONEXAMPLE'); +eval INSERT INTO mysql.plugin VALUES ('wonky', '$DAEMONEXAMPLE'); + --echo # --echo # Ensure the plugin is now loaded. --echo # --replace_regex /\.dll/.so/ -SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name; +SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name; --echo # --echo # Disable the plugin... @@ -173,7 +181,7 @@ EOF --echo # --echo # Ensure the plugin isn't loaded. --echo # -SELECT * FROM mysql.plugin WHERE name = 'daemon_example' ORDER BY name; +SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name; # # Stop the server for error conditions