List:Commits« Previous MessageNext Message »
From:Ramil Kalimullin Date:December 7 2010 5:09pm
Subject:bzr push into mysql-5.5-bugteam branch (ramil:3175 to 3176) Bug#58669
View as plain text  
 3176 Ramil Kalimullin	2010-12-07
      Fix for bug #58669: read_only not enforced on 5.5.x
      merged from mysql-5.5.8-release tree,
      revision: ramil@stripped

    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
 3175 Guilhem Bichot	2010-12-07 [merge]
      merge from latest 5.5-bugteam

    modified:
      mysql-test/t/plugin_auth.test
=== 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-03 01:06:56 +0000
+++ b/sql/mysqld.cc	2010-12-07 17:08:54 +0000
@@ -410,7 +410,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;
@@ -7349,6 +7350,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-03 01:06:56 +0000
+++ b/sql/mysqld.h	2010-12-07 17:08:54 +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-11-05 17:42:37 +0000
+++ b/sql/sys_vars.cc	2010-12-07 17:08:54 +0000
@@ -1452,7 +1452,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 */
@@ -1536,6 +1535,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).
Thread
bzr push into mysql-5.5-bugteam branch (ramil:3175 to 3176) Bug#58669Ramil Kalimullin7 Dec