From: Ramil Kalimullin Date: December 7 2010 6:13pm Subject: bzr push into mysql-trunk-bugfixing branch (ramil:3424 to 3425) List-Archive: http://lists.mysql.com/commits/126253 Message-Id: <201012071813.oB7CjHgF017115@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3425 Ramil Kalimullin 2010-12-07 [merge] Auto-merge with mysql-5.5-bugteam. added: mysql-test/r/bug58669.result mysql-test/t/bug58669-master.opt mysql-test/t/bug58669.test modified: sql/mysqld.cc sql/mysqld.h sql/sys_vars.cc 3424 Guilhem Bichot 2010-12-07 [merge] merge from 5.5-bugteam === added file 'mysql-test/r/bug58669.result' --- a/mysql-test/r/bug58669.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/bug58669.result 2010-12-07 17:08:54 +0000 @@ -0,0 +1,17 @@ +# +# Bug#58669: read_only not enforced on 5.5.x +# +CREATE USER user1@localhost; +CREATE DATABASE db1; +GRANT ALL PRIVILEGES ON db1.* TO user1@localhost; +CREATE TABLE db1.t1(a INT); +SELECT CURRENT_USER(); +CURRENT_USER() +user1@localhost +SHOW VARIABLES LIKE "%read_only%"; +Variable_name Value +read_only ON +INSERT INTO db1.t1 VALUES (1); +ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement +DROP DATABASE db1; +DROP USER user1@localhost; === added file 'mysql-test/t/bug58669-master.opt' --- a/mysql-test/t/bug58669-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/bug58669-master.opt 2010-12-07 17:08:54 +0000 @@ -0,0 +1 @@ +--read-only === added file 'mysql-test/t/bug58669.test' --- a/mysql-test/t/bug58669.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/bug58669.test 2010-12-07 17:08:54 +0000 @@ -0,0 +1,22 @@ +--source include/not_embedded.inc + +--echo # +--echo # Bug#58669: read_only not enforced on 5.5.x +--echo # + +CREATE USER user1@localhost; +CREATE DATABASE db1; +GRANT ALL PRIVILEGES ON db1.* TO user1@localhost; +CREATE TABLE db1.t1(a INT); + +connect (con1,localhost,user1,,); +connection con1; +SELECT CURRENT_USER(); +SHOW VARIABLES LIKE "%read_only%"; +--error ER_OPTION_PREVENTS_STATEMENT +INSERT INTO db1.t1 VALUES (1); + +connection default; +disconnect con1; +DROP DATABASE db1; +DROP USER user1@localhost; === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2010-12-07 07:53:39 +0000 +++ b/sql/mysqld.cc 2010-12-07 18:11:49 +0000 @@ -409,7 +409,8 @@ handlerton *heap_hton; handlerton *myisam_hton; handlerton *partition_hton; -my_bool opt_readonly= 0, use_temp_pool, relay_log_purge; +my_bool read_only= 0, opt_readonly= 0; +my_bool use_temp_pool, relay_log_purge; my_bool relay_log_recovery; my_bool opt_sync_frm, opt_allow_suspicious_udfs; my_bool opt_secure_auth= 0; @@ -7573,6 +7574,8 @@ static int get_options(int *argc_ptr, ch test(global_system_variables.optimizer_switch & OPTIMIZER_SWITCH_ENGINE_CONDITION_PUSHDOWN); + opt_readonly= read_only; + return 0; } === modified file 'sql/mysqld.h' --- a/sql/mysqld.h 2010-12-05 22:51:49 +0000 +++ b/sql/mysqld.h 2010-12-07 18:11:49 +0000 @@ -107,7 +107,8 @@ extern my_bool opt_safe_show_db, opt_loc extern my_bool opt_slave_compressed_protocol, use_temp_pool; extern ulong slave_exec_mode_options; extern ulonglong slave_type_conversions_options; -extern my_bool opt_readonly, lower_case_file_system; +extern my_bool read_only, opt_readonly; +extern my_bool lower_case_file_system; extern my_bool opt_enable_named_pipe, opt_sync_frm, opt_allow_suspicious_udfs; extern my_bool opt_secure_auth; extern char* opt_secure_file_priv; === modified file 'sql/sys_vars.cc' --- a/sql/sys_vars.cc 2010-12-07 07:53:39 +0000 +++ b/sql/sys_vars.cc 2010-12-07 18:11:49 +0000 @@ -1527,7 +1527,6 @@ static Sys_var_ulong Sys_read_buff_size( VALID_RANGE(IO_SIZE*2, INT_MAX32), DEFAULT(128*1024), BLOCK_SIZE(IO_SIZE)); -static my_bool read_only; static bool check_read_only(sys_var *self, THD *thd, set_var *var) { /* Prevent self dead-lock */ @@ -1611,6 +1610,16 @@ static bool fix_read_only(sys_var *self, read_only= opt_readonly; DBUG_RETURN(result); } + + +/** + The read_only boolean is always equal to the opt_readonly boolean except + during fix_read_only(); when that function is entered, opt_readonly is + the pre-update value and read_only is the post-update value. + fix_read_only() compares them and runs needed operations for the + transition (especially when transitioning from false to true) and + synchronizes both booleans in the end. +*/ static Sys_var_mybool Sys_readonly( "read_only", "Make all non-temporary tables read-only, with the exception for " No bundle (reason: useless for push emails).