Commit a6def1f4 authored by svoj@mysql.com/june.mysql.com's avatar svoj@mysql.com/june.mysql.com
Browse files

Merge mysql.com:/home/svoj/devel/mysql/BUG32111/mysql-4.0

into  mysql.com:/home/svoj/devel/mysql/BUG32111/mysql-4.1-engines
parents 377f1870 d06e2f92
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -90,6 +90,12 @@ t1 CREATE TABLE `t1` (
  `b` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
CREATE TABLE t1(a INT)
DATA DIRECTORY='TEST_DIR/var/master-data/mysql'
INDEX DIRECTORY='TEST_DIR/var/master-data/mysql';
RENAME TABLE t1 TO user;
Can't create/write to file 'TEST_DIR/var/master-data/mysql/user.MYI' (Errcode: 17)
DROP TABLE t1;
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
+12 −0
Original line number Diff line number Diff line
@@ -118,6 +118,18 @@ enable_query_log;
show create table t1;
drop table t1;

#
# BUG#32111 - Security Breach via DATA/INDEX DIRECORY and RENAME TABLE
#
--replace_result $MYSQL_TEST_DIR TEST_DIR
eval CREATE TABLE t1(a INT)
DATA DIRECTORY='$MYSQL_TEST_DIR/var/master-data/mysql'
INDEX DIRECTORY='$MYSQL_TEST_DIR/var/master-data/mysql';
--replace_result $MYSQL_TEST_DIR TEST_DIR
--error 1
RENAME TABLE t1 TO user;
DROP TABLE t1;

#
# Test specifying DATA DIRECTORY that is the same as what would normally
# have been chosen. (Bug #8707)
+10 −1
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ int my_rename_with_symlink(const char *from, const char *to, myf MyFlags)
  int was_symlink= (!my_disable_symlinks &&
		    !my_readlink(link_name, from, MYF(0)));
  int result=0;
  int name_is_different;
  DBUG_ENTER("my_rename_with_symlink");

  if (!was_symlink)
@@ -133,6 +134,14 @@ int my_rename_with_symlink(const char *from, const char *to, myf MyFlags)
  /* Change filename that symlink pointed to */
  strmov(tmp_name, to);
  fn_same(tmp_name,link_name,1);		/* Copy dir */
  name_is_different= strcmp(link_name, tmp_name);
  if (name_is_different && !access(tmp_name, F_OK))
  {
    my_errno= EEXIST;
    if (MyFlags & MY_WME)
      my_error(EE_CANTCREATEFILE, MYF(0), tmp_name, EEXIST);
    DBUG_RETURN(1);
  }

  /* Create new symlink */
  if (my_symlink(tmp_name, to, MyFlags))
@@ -144,7 +153,7 @@ int my_rename_with_symlink(const char *from, const char *to, myf MyFlags)
    the same basename and different directories.
   */

  if (strcmp(link_name, tmp_name) && my_rename(link_name, tmp_name, MyFlags))
  if (name_is_different && my_rename(link_name, tmp_name, MyFlags))
  {
    int save_errno=my_errno;
    my_delete(to, MyFlags);			/* Remove created symlink */