mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-12-13 02:01:10 +08:00
Merge pull request #797 from percona/PT-2327_pt-mysql-summary_fails_to_connect_if_password_has_a_single_quote_character
PT-2327 - pt-mysql-summary fails to connect if password has a single …
This commit is contained in:
@@ -408,7 +408,7 @@ _parse_command_line() {
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
val="$(echo $opt | awk -F= '{print $2}')"
|
||||
val="$(echo "$opt" | awk '{ st = index($0,"="); print substr($0, st+1)}')"
|
||||
opt="$(echo $opt | awk -F= '{print $1}')"
|
||||
fi
|
||||
|
||||
@@ -453,7 +453,7 @@ _parse_command_line() {
|
||||
val=$(size_to_bytes $val)
|
||||
fi
|
||||
|
||||
eval "OPT_$opt"="'$val'"
|
||||
eval "OPT_$opt"='$val'
|
||||
|
||||
opt=""
|
||||
val=""
|
||||
|
||||
@@ -449,7 +449,7 @@ _parse_command_line() {
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
val="$(echo $opt | awk -F= '{print $2}')"
|
||||
val="$(echo "$opt" | awk '{ st = index($0,"="); print substr($0, st+1)}')"
|
||||
opt="$(echo $opt | awk -F= '{print $1}')"
|
||||
fi
|
||||
|
||||
@@ -494,7 +494,7 @@ _parse_command_line() {
|
||||
val=$(size_to_bytes $val)
|
||||
fi
|
||||
|
||||
eval "OPT_$opt"="'$val'"
|
||||
eval "OPT_$opt"='$val'
|
||||
|
||||
opt=""
|
||||
val=""
|
||||
|
||||
@@ -410,7 +410,7 @@ _parse_command_line() {
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
val="$(echo $opt | awk -F= '{print $2}')"
|
||||
val="$(echo "$opt" | awk '{ st = index($0,"="); print substr($0, st+1)}')"
|
||||
opt="$(echo $opt | awk -F= '{print $1}')"
|
||||
fi
|
||||
|
||||
@@ -455,7 +455,7 @@ _parse_command_line() {
|
||||
val=$(size_to_bytes $val)
|
||||
fi
|
||||
|
||||
eval "OPT_$opt"="'$val'"
|
||||
eval "OPT_$opt"='$val'
|
||||
|
||||
opt=""
|
||||
val=""
|
||||
|
||||
@@ -451,7 +451,7 @@ _parse_command_line() {
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
val="$(echo $opt | awk -F= '{print $2}')"
|
||||
val="$(echo "$opt" | awk '{ st = index($0,"="); print substr($0, st+1)}')"
|
||||
opt="$(echo $opt | awk -F= '{print $1}')"
|
||||
fi
|
||||
|
||||
@@ -496,7 +496,7 @@ _parse_command_line() {
|
||||
val=$(size_to_bytes $val)
|
||||
fi
|
||||
|
||||
eval "OPT_$opt"="'$val'"
|
||||
eval "OPT_$opt"='$val'
|
||||
|
||||
opt=""
|
||||
val=""
|
||||
|
||||
@@ -449,7 +449,7 @@ _parse_command_line() {
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
val="$(echo $opt | awk -F= '{print $2}')"
|
||||
val="$(echo "$opt" | awk '{ st = index($0,"="); print substr($0, st+1)}')"
|
||||
opt="$(echo $opt | awk -F= '{print $1}')"
|
||||
fi
|
||||
|
||||
@@ -494,7 +494,7 @@ _parse_command_line() {
|
||||
val=$(size_to_bytes $val)
|
||||
fi
|
||||
|
||||
eval "OPT_$opt"="'$val'"
|
||||
eval "OPT_$opt"='$val'
|
||||
|
||||
opt=""
|
||||
val=""
|
||||
|
||||
@@ -462,7 +462,7 @@ _parse_command_line() {
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
val="$(echo $opt | awk -F= '{print $2}')"
|
||||
val="$(echo "$opt" | awk '{ st = index($0,"="); print substr($0, st+1)}')"
|
||||
opt="$(echo $opt | awk -F= '{print $1}')"
|
||||
fi
|
||||
|
||||
@@ -507,7 +507,7 @@ _parse_command_line() {
|
||||
val=$(size_to_bytes $val)
|
||||
fi
|
||||
|
||||
eval "OPT_$opt"="'$val'"
|
||||
eval "OPT_$opt"='$val'
|
||||
|
||||
opt=""
|
||||
val=""
|
||||
|
||||
@@ -417,7 +417,7 @@ _parse_command_line() {
|
||||
fi
|
||||
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
val="$(echo $opt | awk -F= '{print $2}')"
|
||||
val="$(echo "$opt" | awk '{ st = index($0,"="); print substr($0, st+1)}')"
|
||||
opt="$(echo $opt | awk -F= '{print $1}')"
|
||||
fi
|
||||
|
||||
@@ -462,7 +462,7 @@ _parse_command_line() {
|
||||
val=$(size_to_bytes $val)
|
||||
fi
|
||||
|
||||
eval "OPT_$opt"="'$val'"
|
||||
eval "OPT_$opt"='$val'
|
||||
|
||||
opt=""
|
||||
val=""
|
||||
|
||||
@@ -475,7 +475,7 @@ _parse_command_line() {
|
||||
|
||||
# Split opt=val pair.
|
||||
if $(echo $opt | grep '^[a-z-][a-z-]*=' >/dev/null 2>&1); then
|
||||
val="$(echo $opt | awk -F= '{print $2}')"
|
||||
val="$(echo "$opt" | awk '{ st = index($0,"="); print substr($0, st+1)}')"
|
||||
opt="$(echo $opt | awk -F= '{print $1}')"
|
||||
fi
|
||||
|
||||
@@ -533,7 +533,7 @@ _parse_command_line() {
|
||||
fi
|
||||
|
||||
# Re-eval the option to update its global variable value.
|
||||
eval "OPT_$opt"="'$val'"
|
||||
eval "OPT_$opt"='$val'
|
||||
|
||||
opt=""
|
||||
val=""
|
||||
|
||||
77
t/pt-mysql-summary/pt-2327.t
Normal file
77
t/pt-mysql-summary/pt-2327.t
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use PerconaTest;
|
||||
use Sandbox;
|
||||
use DSNParser;
|
||||
require VersionParser;
|
||||
use Test::More;
|
||||
|
||||
local $ENV{PTDEBUG} = "";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $dbh = $sb->get_dbh_for('master');
|
||||
my $cnf = '/tmp/12345/my.sandbox.cnf';
|
||||
my $output;
|
||||
|
||||
if ( !$dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
else {
|
||||
plan tests => 5;
|
||||
}
|
||||
|
||||
$sb->do_as_root("master", q/create user pt2302 identified by "root_'f<=*password"/);
|
||||
$sb->do_as_root("master", q/grant all on *.* to pt2302/);
|
||||
|
||||
my $cmd = "$trunk/bin/pt-mysql-summary --sleep 1 -- --defaults-file=$cnf --user=pt2302 --password=\"root_'f<=*password\"";
|
||||
|
||||
$output = `$cmd 2>&1`;
|
||||
|
||||
unlike(
|
||||
$output,
|
||||
qr/eval: Syntax error: Unterminated quoted string/s,
|
||||
"pt-mysql-summary does not stop with password containing an apostrophe"
|
||||
);
|
||||
|
||||
unlike(
|
||||
$output,
|
||||
qr/Access denied for user/s,
|
||||
"pt-mysql-summary works fine with password containing an apostrophe"
|
||||
);
|
||||
|
||||
$sb->do_as_root("master", q/drop user pt2302/);
|
||||
$sb->do_as_root("master", q/create user pt2302 identified by 'root_"f<=*password'/);
|
||||
$sb->do_as_root("master", q/grant all on *.* to pt2302/);
|
||||
|
||||
$cmd = "$trunk/bin/pt-mysql-summary --sleep 1 -- --defaults-file=$cnf --user=pt2302 --password='root_\"f<=*password'";
|
||||
|
||||
$output = `$cmd 2>&1`;
|
||||
|
||||
unlike(
|
||||
$output,
|
||||
qr/eval: Syntax error: Unterminated quoted string/s,
|
||||
"pt-mysql-summary does not stop with password containing a quote"
|
||||
);
|
||||
|
||||
unlike(
|
||||
$output,
|
||||
qr/Access denied for user/s,
|
||||
"pt-mysql-summary works fine with password containing a quote"
|
||||
);
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->do_as_root("master", q/drop user pt2302/);
|
||||
$sb->wipe_clean($dbh);
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
exit;
|
||||
Reference in New Issue
Block a user