mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix for Bug #1595 "mysqlbinlog can't read a password from the console".
** I already fixed it in 3.23; I fix it in 4.0 separately because the code is a bit different (so the changeset 1.1422 of 3.23 should not be merged here) ** Make mysqlbinlog prompt for the password if mysqlbinlog -p instead of printing the usage(). This makes mysqlbinlog behave like other clients. This new code was almost copied from mysqldump. Note that before, one could use mysqlbinlog -p pass and now one must use mysqlbinlog -ppass (putting a space will ask for the password).
This commit is contained in:
@ -52,7 +52,7 @@ static const char* host = 0;
|
|||||||
static int port = MYSQL_PORT;
|
static int port = MYSQL_PORT;
|
||||||
static const char* sock= 0;
|
static const char* sock= 0;
|
||||||
static const char* user = 0;
|
static const char* user = 0;
|
||||||
static const char* pass = "";
|
static char* pass = 0;
|
||||||
static ulonglong position = 0;
|
static ulonglong position = 0;
|
||||||
static short binlog_flags = 0;
|
static short binlog_flags = 0;
|
||||||
static MYSQL* mysql = NULL;
|
static MYSQL* mysql = NULL;
|
||||||
@ -227,7 +227,7 @@ static struct my_option my_long_options[] =
|
|||||||
{"offset", 'o', "Skip the first N entries.", (gptr*) &offset, (gptr*) &offset,
|
{"offset", 'o', "Skip the first N entries.", (gptr*) &offset, (gptr*) &offset,
|
||||||
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, GET_ULL, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"password", 'p', "Password to connect to remote server.",
|
{"password", 'p', "Password to connect to remote server.",
|
||||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"port", 'P', "Use port to connect to the remote server.",
|
{"port", 'P', "Use port to connect to the remote server.",
|
||||||
(gptr*) &port, (gptr*) &port, 0, GET_INT, REQUIRED_ARG, MYSQL_PORT, 0, 0,
|
(gptr*) &port, (gptr*) &port, 0, GET_INT, REQUIRED_ARG, MYSQL_PORT, 0, 0,
|
||||||
0, 0, 0},
|
0, 0, 0},
|
||||||
@ -267,6 +267,11 @@ void sql_print_error(const char *format,...)
|
|||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cleanup()
|
||||||
|
{
|
||||||
|
my_free(pass,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
|
}
|
||||||
|
|
||||||
static void die(const char* fmt, ...)
|
static void die(const char* fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
@ -275,6 +280,7 @@ static void die(const char* fmt, ...)
|
|||||||
vfprintf(stderr, fmt, args);
|
vfprintf(stderr, fmt, args);
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
cleanup();
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -334,6 +340,7 @@ extern "C" my_bool
|
|||||||
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||||
char *argument)
|
char *argument)
|
||||||
{
|
{
|
||||||
|
bool tty_password=0;
|
||||||
switch (optid) {
|
switch (optid) {
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
case '#':
|
case '#':
|
||||||
@ -344,7 +351,17 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
one_database = 1;
|
one_database = 1;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
pass = my_strdup(argument, MYF(0));
|
if (argument)
|
||||||
|
{
|
||||||
|
my_free(pass,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
|
char *start=argument;
|
||||||
|
pass= my_strdup(argument,MYF(MY_FAE));
|
||||||
|
while (*argument) *argument++= 'x'; /* Destroy argument */
|
||||||
|
if (*start)
|
||||||
|
start[1]=0; /* Cut length of argument */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tty_password=1;
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
if (!(result_file = my_fopen(argument, O_WRONLY | O_BINARY, MYF(MY_WME))))
|
if (!(result_file = my_fopen(argument, O_WRONLY | O_BINARY, MYF(MY_WME))))
|
||||||
@ -360,6 +377,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
usage();
|
usage();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
if (tty_password)
|
||||||
|
pass= get_tty_password(NullS);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -778,6 +798,7 @@ int main(int argc, char** argv)
|
|||||||
my_fclose(result_file, MYF(0));
|
my_fclose(result_file, MYF(0));
|
||||||
if (remote_opt)
|
if (remote_opt)
|
||||||
mysql_close(mysql);
|
mysql_close(mysql);
|
||||||
|
cleanup();
|
||||||
free_defaults(defaults_argv);
|
free_defaults(defaults_argv);
|
||||||
my_end(0);
|
my_end(0);
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user