mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#27293: mysqldump crashes when dumping procedure defined by different user
mysqldump didn't properly handle getting no data on SHOW CREATE PROCEDURE. If S/C/P fails (due to dumping user's insufficient privileges on mysql.proc, say), mysqldump will print a comment to that effect to the output and return an error-code. If the -f (force) option is used, the dump will continue, otherwise, it will abort right there and then. Also fixes Bug#22761, "mysqldump reports no errors when using --routines without mysql.proc privileges" --- Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-maint into mysql.com:/home/tnurnberg/27293/50-27293 client/mysqldump.c: Bug#27293: mysqldump crashes when dumping procedure defined by different user handle failure of SHOW CREATE PROCEDURE, give user diagnostics, heed -f (force) option mysql-test/r/mysqldump.result: Bug#27293: mysqldump crashes when dumping procedure defined by different user show that trying to mysqldump --routines with insufficient privileges will no longer crash the client --- manual merge mysql-test/t/mysqldump.test: Bug#27293: mysqldump crashes when dumping procedure defined by different user show that trying to mysqldump --routines with insufficient privileges will no longer crash the client --- manual merge
This commit is contained in:
@ -1489,8 +1489,15 @@ static uint dump_routines_for_db(char *db)
|
||||
routine body of other routines that are not the creator of!
|
||||
*/
|
||||
DBUG_PRINT("info",("length of body for %s row[2] '%s' is %d",
|
||||
routine_name, row[2], (int) strlen(row[2])));
|
||||
if (strlen(row[2]))
|
||||
routine_name, row[2] ? row[2] : "(null)",
|
||||
row[2] ? (int) strlen(row[2]) : 0));
|
||||
if (row[2] == NULL)
|
||||
{
|
||||
fprintf(sql_file, "\n-- insufficient privileges to %s\n", query_buff);
|
||||
fprintf(sql_file, "-- does %s have permissions on mysql.proc?\n\n", current_user);
|
||||
maybe_die(EX_MYSQLERR,"%s has insufficent privileges to %s!", current_user, query_buff);
|
||||
}
|
||||
else if (strlen(row[2]))
|
||||
{
|
||||
char *query_str= NULL;
|
||||
char *definer_begin;
|
||||
@ -1540,7 +1547,7 @@ static uint dump_routines_for_db(char *db)
|
||||
/*
|
||||
we need to change sql_mode only for the CREATE
|
||||
PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name
|
||||
*/;
|
||||
*/
|
||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/;;\n",
|
||||
row[1] /* sql_mode */);
|
||||
fprintf(sql_file, "/*!50003 %s */;;\n",
|
||||
|
Reference in New Issue
Block a user