summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <tnurnberg@mysql.com/blasphemy.mysql.com>2007-04-30 11:30:07 +0200
committerunknown <tnurnberg@mysql.com/blasphemy.mysql.com>2007-04-30 11:30:07 +0200
commit3f18c6bc4726227f74bd3abc6f79c99407a2e7f4 (patch)
treeae4c4e0772bbcfca623b849ed7b73c8dec08a70e /client
parent024dbd231a76f6455c2dc62a06dda70879a85704 (diff)
downloadmariadb-git-3f18c6bc4726227f74bd3abc6f79c99407a2e7f4.tar.gz
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
Diffstat (limited to 'client')
-rw-r--r--client/mysqldump.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 63db2cc268e..4f908b531b1 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -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",