Commit 0e8ed1b5 authored by unknown's avatar unknown
Browse files

Add command "chmod" to mysqltest


client/mysqltest.c:
  Add "chmod" command
mysql-test/r/mysqltest.result:
  Update result file
mysql-test/t/mysqltest.test:
  Add tests for chmod
parent 6f1c3848
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -265,6 +265,7 @@ enum enum_commands {
  Q_DISABLE_PARSING, Q_ENABLE_PARSING,
  Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST,
  Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE,
  Q_CHMOD_FILE,

  Q_UNKNOWN,			       /* Unknown command.   */
  Q_COMMENT,			       /* Comments, ignored. */
@@ -345,6 +346,7 @@ const char *command_names[]=
  "copy_file",
  "perl",
  "die",
  "chmod",
  0
};

@@ -1751,6 +1753,48 @@ void do_copy_file(struct st_command *command)
}


/*
  SYNOPSIS
  do_chmod_file
  command	command handle

  DESCRIPTION
  chmod  <octal>  <file>
  Change file permission of <file>

  NOTE!  Simplified version, only supports +r, -r, +w, -w
*/

void do_chmod_file(struct st_command *command)
{
  mode_t mode= 0;
  DYNAMIC_STRING ds_mode;
  DYNAMIC_STRING ds_file;
  const struct command_arg chmod_file_args[] = {
    "mode", ARG_STRING, TRUE, &ds_mode, "Mode of file",
    "file", ARG_STRING, TRUE, &ds_file, "Filename of file to modify"
  };
  DBUG_ENTER("do_chmod_file");

  check_command_args(command, command->first_argument,
                     chmod_file_args,
                     sizeof(chmod_file_args)/sizeof(struct command_arg),
                     ' ');

  /* Parse what mode to set */
  if (ds_mode.length != 4)
    die("You must write a 4 digit octal number for mode");

  str2int(ds_mode.str, 8, 0, INT_MAX, (long*)&mode);

  DBUG_PRINT("info", ("chmod %o %s", mode, ds_file.str));
  handle_command_error(command, chmod(ds_file.str, mode));
  dynstr_free(&ds_mode);
  dynstr_free(&ds_file);
  DBUG_VOID_RETURN;
}


/*
  SYNOPSIS
  do_file_exists
@@ -5604,6 +5648,7 @@ int main(int argc, char **argv)
      case Q_FILE_EXIST: do_file_exist(command); break;
      case Q_WRITE_FILE: do_write_file(command); break;
      case Q_COPY_FILE: do_copy_file(command); break;
      case Q_CHMOD_FILE: do_chmod_file(command); break;
      case Q_PERL: do_perl(command); break;
      case Q_DELIMITER:
        do_delimiter(command);
+6 −0
Original line number Diff line number Diff line
@@ -512,6 +512,12 @@ mysqltest: At line 1: End of line junk detected: "write_file filename ";
mysqltest: At line 1: Missing required argument 'filename' to command 'file_exists'
mysqltest: At line 1: Missing required argument 'from_file' to command 'copy_file'
mysqltest: At line 1: Missing required argument 'to_file' to command 'copy_file'
mysqltest: At line 1: Missing required argument 'mode' to command 'chmod'
mysqltest: At line 1: You must write a 4 digit octal number for mode
mysqltest: At line 1: You must write a 4 digit octal number for mode
mysqltest: At line 1: Missing required argument 'file' to command 'chmod'
mysqltest: At line 1: command "chmod" failed with error -1
mysqltest: At line 1: You must write a 4 digit octal number for mode
hello
hello
hello
+39 −0
Original line number Diff line number Diff line
@@ -1521,6 +1521,45 @@ remove_file $MYSQLTEST_VARDIR/tmp/file2.tmp;
--error 1
--exec echo "copy_file from_file;" | $MYSQL_TEST 2>&1

# ----------------------------------------------------------------------------
# test for chmod
# ----------------------------------------------------------------------------
--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
file1
EOF

chmod 0000 $MYSQLTEST_VARDIR/tmp/file1.tmp;
# The below write fails, but --error is not implemented
# for write_file
#--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
#test should fail
#EOF

chmod 0777 $MYSQLTEST_VARDIR/tmp/file1.tmp;
--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
test2
EOF

remove_file $MYSQLTEST_VARDIR/tmp/file1.tmp;

--error 1
--exec echo "chmod ;" | $MYSQL_TEST 2>&1

--error 1
--exec echo "chmod 0 from_file;" | $MYSQL_TEST 2>&1

--error 1
--exec echo "chmod 08 from_file;" | $MYSQL_TEST 2>&1

--error 1
--exec echo "chmod from_file;" | $MYSQL_TEST 2>&1

--error 1
--exec echo "chmod ABZD from_file;" | $MYSQL_TEST 2>&1

--error 1
--exec echo "chmod 06789 from_file;" | $MYSQL_TEST 2>&1

# ----------------------------------------------------------------------------
# test for perl
# ----------------------------------------------------------------------------