mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Backport mysqltests "change_user" command
This commit is contained in:
@ -277,7 +277,7 @@ enum enum_commands {
|
||||
Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST,
|
||||
Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_SKIP,
|
||||
Q_CHMOD_FILE, Q_APPEND_FILE, Q_CAT_FILE, Q_DIFF_FILES,
|
||||
Q_SEND_QUIT,
|
||||
Q_SEND_QUIT, Q_CHANGE_USER,
|
||||
|
||||
Q_UNKNOWN, /* Unknown command. */
|
||||
Q_COMMENT, /* Comments, ignored. */
|
||||
@ -366,6 +366,7 @@ const char *command_names[]=
|
||||
"cat_file",
|
||||
"diff_files",
|
||||
"send_quit",
|
||||
"change_user",
|
||||
0
|
||||
};
|
||||
|
||||
@ -3046,6 +3047,69 @@ void do_send_quit(struct st_command *command)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
SYNOPSIS
|
||||
do_change_user
|
||||
command called command
|
||||
|
||||
DESCRIPTION
|
||||
change_user [<user>], [<passwd>], [<db>]
|
||||
<user> - user to change to
|
||||
<passwd> - user password
|
||||
<db> - default database
|
||||
|
||||
Changes the user and causes the database specified by db to become
|
||||
the default (current) database for the the current connection.
|
||||
|
||||
*/
|
||||
|
||||
void do_change_user(struct st_command *command)
|
||||
{
|
||||
MYSQL *mysql = &cur_con->mysql;
|
||||
/* static keyword to make the NetWare compiler happy. */
|
||||
static DYNAMIC_STRING ds_user, ds_passwd, ds_db;
|
||||
const struct command_arg change_user_args[] = {
|
||||
{ "user", ARG_STRING, FALSE, &ds_user, "User to connect as" },
|
||||
{ "password", ARG_STRING, FALSE, &ds_passwd, "Password used when connecting" },
|
||||
{ "database", ARG_STRING, FALSE, &ds_db, "Database to select after connect" },
|
||||
};
|
||||
|
||||
DBUG_ENTER("do_change_user");
|
||||
|
||||
check_command_args(command, command->first_argument,
|
||||
change_user_args,
|
||||
sizeof(change_user_args)/sizeof(struct command_arg),
|
||||
',');
|
||||
|
||||
if (cur_con->stmt)
|
||||
{
|
||||
mysql_stmt_close(cur_con->stmt);
|
||||
cur_con->stmt= NULL;
|
||||
}
|
||||
|
||||
if (!ds_user.length)
|
||||
dynstr_set(&ds_user, mysql->user);
|
||||
|
||||
if (!ds_passwd.length)
|
||||
dynstr_set(&ds_passwd, mysql->passwd);
|
||||
|
||||
if (!ds_db.length)
|
||||
dynstr_set(&ds_db, mysql->db);
|
||||
|
||||
DBUG_PRINT("info",("connection: '%s' user: '%s' password: '%s' database: '%s'",
|
||||
cur_con->name, ds_user.str, ds_passwd.str, ds_db.str));
|
||||
|
||||
if (mysql_change_user(mysql, ds_user.str, ds_passwd.str, ds_db.str))
|
||||
die("change user failed: %s", mysql_error(mysql));
|
||||
|
||||
dynstr_free(&ds_user);
|
||||
dynstr_free(&ds_passwd);
|
||||
dynstr_free(&ds_db);
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
SYNOPSIS
|
||||
do_perl
|
||||
@ -6852,6 +6916,7 @@ int main(int argc, char **argv)
|
||||
case Q_APPEND_FILE: do_append_file(command); break;
|
||||
case Q_DIFF_FILES: do_diff_files(command); break;
|
||||
case Q_SEND_QUIT: do_send_quit(command); break;
|
||||
case Q_CHANGE_USER: do_change_user(command); break;
|
||||
case Q_CAT_FILE: do_cat_file(command); break;
|
||||
case Q_COPY_FILE: do_copy_file(command); break;
|
||||
case Q_CHMOD_FILE: do_chmod_file(command); break;
|
||||
|
@ -722,4 +722,7 @@ a int(11) YES NULL
|
||||
b varchar(255) YES NULL
|
||||
c datetime YES NULL
|
||||
drop table t1;
|
||||
mysqltest: At line 1: change user failed: Unknown database 'inexistent'
|
||||
mysqltest: At line 1: change user failed: Access denied for user 'inexistent'@'localhost' (using password: NO)
|
||||
mysqltest: At line 1: change user failed: Access denied for user 'root'@'localhost' (using password: YES)
|
||||
End of tests
|
||||
|
@ -2083,5 +2083,24 @@ eval $show_statement;
|
||||
|
||||
drop table t1;
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test change_user command
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
--error 1
|
||||
--exec echo "--change_user root,,inexistent" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "--change_user inexistent,,test" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "--change_user root,inexistent,test" | $MYSQL_TEST 2>&1
|
||||
|
||||
--change_user
|
||||
--change_user root
|
||||
--change_user root,,
|
||||
--change_user root,,test
|
||||
|
||||
|
||||
--echo End of tests
|
||||
|
||||
|
Reference in New Issue
Block a user