List:Commits« Previous MessageNext Message »
From:Dao-Gang.Qu Date:November 28 2009 5:27am
Subject:bzr commit into mysql-pe branch (Dao-Gang.Qu:3724) Bug#43913
View as plain text  
#At file:///home/daogangqu/mysql/bzrwork/bug43913/mysql-pe/ based on revid:joro@stripped

 3724 Dao-Gang.Qu@stripped	2009-11-28 [merge]
      Bug #43913  	rpl_cross_version can't pass on conflicts complainig clash with --slave-load-tm
            
      The 'slave_patternload_file' is assigned to the real path of the load data file 
      when initializing the object of Relay_log_info. But the path of the load data
      file is not formatted to real path when executing event from relay log. So the 
      error will be encountered if the path of the load data file is a symbolic link.
      
      Actually the global 'opt_secure_file_priv' is not formatted to real path when 
      loading data from file. So the same thing will happen too.
      
      To fix these errors, the path of the load data file should be formatted to 
      real path when executing event from relay log. And the 'opt_secure_file_priv' 
      should be formatted to real path when loading data infile.
     @ mysql-test/suite/rpl/r/rpl_loaddata_symlink.result
        Test result for bug#43913.
     @ mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.sh
        Added the test file to create a link from $MYSQLTEST_VARDIR/std_data 
        to $MYSQLTEST_VARDIR/std_data_master_link
     @ mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.sh
        Added the test file to create a link from $MYSQLTEST_VARDIR/std_data 
        to $MYSQLTEST_VARDIR/std_data_slave_link
     @ mysql-test/suite/rpl/t/rpl_loaddata_symlink.test
        Added the test file to verify if loading data infile will work fine 
        if the path of the load data file is a symbolic link.
     @ sql/rpl_rli.cc
        Added call 'my_realpath' function for avoiding sometimes the 'fn_format' 
        function can't format real path rightly.

    added:
      mysql-test/suite/rpl/r/rpl_loaddata_symlink.result
      mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.opt
      mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.sh
      mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.opt
      mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.sh
      mysql-test/suite/rpl/t/rpl_loaddata_symlink.test
    modified:
      sql/rpl_rli.cc
      sql/sql_load.cc
=== added file 'mysql-test/suite/rpl/r/rpl_loaddata_symlink.result'
--- a/mysql-test/suite/rpl/r/rpl_loaddata_symlink.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/r/rpl_loaddata_symlink.result	2009-11-28 04:43:16 +0000
@@ -0,0 +1,17 @@
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+create table t1(a int not null auto_increment, b int, primary key(a) );
+load data infile '../../std_data/rpl_loaddata.dat' into table t1;
+select * from t1;
+a	b
+1	10
+2	15
+select * from t1;
+a	b
+1	10
+2	15
+drop table t1;

=== added file 'mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.opt'
--- a/mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.opt	2009-11-28 04:43:16 +0000
@@ -0,0 +1 @@
+--secure-file-priv=$MYSQLTEST_VARDIR/std_data_master_link

=== added file 'mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.sh'
--- a/mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.sh	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_symlink-master.sh	2009-11-28 04:43:16 +0000
@@ -0,0 +1 @@
+ln -s $MYSQLTEST_VARDIR/std_data $MYSQLTEST_VARDIR/std_data_master_link

=== added file 'mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.opt'
--- a/mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.opt	2009-11-28 04:43:16 +0000
@@ -0,0 +1 @@
+--slave-load-tmpdir=$MYSQLTEST_VARDIR/std_data_slave_link

=== added file 'mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.sh'
--- a/mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.sh	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_symlink-slave.sh	2009-11-28 04:43:16 +0000
@@ -0,0 +1 @@
+ln -s $MYSQLTEST_VARDIR/std_data $MYSQLTEST_VARDIR/std_data_slave_link

=== added file 'mysql-test/suite/rpl/t/rpl_loaddata_symlink.test'
--- a/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test	2009-11-28 04:43:16 +0000
@@ -0,0 +1,20 @@
+#
+# BUG#43913
+# This test verifies if loading data infile will work fine 
+# if the path of the load data file is a symbolic link.
+#
+--source include/master-slave.inc
+--source include/have_binlog_format_statement.inc
+
+create table t1(a int not null auto_increment, b int, primary key(a) );
+load data infile '../../std_data/rpl_loaddata.dat' into table t1;
+select * from t1;
+
+sync_slave_with_master;
+connection slave;
+select * from t1;
+
+connection master;
+drop table t1;
+sync_slave_with_master;
+

=== modified file 'sql/rpl_rli.cc'
--- a/sql/rpl_rli.cc	2009-11-05 06:33:12 +0000
+++ b/sql/rpl_rli.cc	2009-11-28 05:23:28 +0000
@@ -994,7 +994,8 @@ int Relay_log_info::init_info(bool abort
   tables_to_lock_count= 0;
 
   char pattern[FN_REFLEN];
-  if (fn_format(pattern, PREFIX_SQL_LOAD, slave_load_tmpdir, "",
+  (void) my_realpath(pattern, slave_load_tmpdir, 0);
+  if (fn_format(pattern, PREFIX_SQL_LOAD, pattern, "",
             MY_SAFE_PATH | MY_RETURN_REAL_PATH) == NullS)
   {
     pthread_mutex_unlock(&data_lock);

=== modified file 'sql/sql_load.cc'
--- a/sql/sql_load.cc	2009-11-09 10:27:46 +0000
+++ b/sql/sql_load.cc	2009-11-28 05:23:28 +0000
@@ -337,7 +337,8 @@ int mysql_load(THD *thd,sql_exchange *ex
     else
     {
       (void) fn_format(name, ex->file_name, mysql_real_data_home, "",
-		       MY_RELATIVE_PATH | MY_UNPACK_FILENAME);
+                       MY_RELATIVE_PATH | MY_UNPACK_FILENAME |
+                       MY_RETURN_REAL_PATH);
 
       if (thd->slave_thread)
       {
@@ -362,12 +363,16 @@ int mysql_load(THD *thd,sql_exchange *ex
         DBUG_ASSERT(FALSE);
 #endif
       }
-      else if (opt_secure_file_priv &&
-               strncmp(opt_secure_file_priv, name, strlen(opt_secure_file_priv)))
+      else if (opt_secure_file_priv)
       {
-        /* Read only allowed from within dir specified by secure_file_priv */
-        my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--secure-file-priv");
-        DBUG_RETURN(TRUE);
+        char secure_file_real_path[FN_REFLEN];
+        (void) my_realpath(secure_file_real_path, opt_secure_file_priv, 0);
+        if (strncmp(secure_file_real_path, name, strlen(secure_file_real_path)))
+        {
+          /* Read only allowed from within dir specified by secure_file_priv */
+          my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--secure-file-priv");
+          DBUG_RETURN(TRUE);
+        }
       }
 
 #if !defined(__WIN__) && ! defined(__NETWARE__)


Attachment: [text/bzr-bundle] bzr/dao-gang.qu@sun.com-20091128052328-3n25c9amvx2njgq8.bundle
Thread
bzr commit into mysql-pe branch (Dao-Gang.Qu:3724) Bug#43913Dao-Gang.Qu28 Nov