]>
Commit | Line | Data |
---|---|---|
85beda0e | 1 | From: kpettersson |
45c53499 | 2 | Date: October 24 2007 10:29am |
85beda0e | 3 | Subject: bk commit into 5.0 tree (thek:1.2537) BUG#16470 |
4 | ||
5 | Below is the list of changes that have just been committed into a local | |
6 | 5.0 repository of thek. When thek does a push these changes will | |
7 | be propagated to the main repository and, within 24 hours after the | |
8 | push, to the public repository. | |
9 | For information on how to access the public repository | |
10 | see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html | |
11 | ||
45c53499 | 12 | ChangeSet@stripped, 2007-10-24 10:29:24+02:00, thek@adventure.(none) +1 -0 |
85beda0e | 13 | Bug #16470 crash on grant if old grant tables |
14 | ||
15 | If a user upgraded the server without running mysql_upgrade, and later tried | |
16 | to run a GRANT command on grant tables like tables_priv, the server would | |
17 | crash. | |
18 | ||
19 | This patch fixes this problem by checking if the grant tables were properly | |
20 | initialized before attempt to store any new grants. | |
21 | ||
45c53499 | 22 | sql/sql_acl.cc@stripped, 2007-10-24 10:29:21+02:00, thek@adventure.(none) +3 -6 |
85beda0e | 23 | If grant_reload fails, don't try to store new GRANTs because the grant tables |
24 | weren't properly initialized. | |
25 | ||
26 | diff -Nrup a/sql/sql_acl.cc b/sql/sql_acl.cc | |
27 | --- a/sql/sql_acl.cc 2007-06-20 14:24:27 +02:00 | |
45c53499 ER |
28 | +++ b/sql/sql_acl.cc 2007-10-24 10:29:21 +02:00 |
29 | @@ -2780,7 +2780,7 @@ bool mysql_table_grant(THD *thd, TABLE_L | |
30 | "--skip-grant-tables"); /* purecov: inspected */ | |
31 | DBUG_RETURN(TRUE); /* purecov: inspected */ | |
85beda0e | 32 | } |
45c53499 ER |
33 | - if (rights & ~TABLE_ACLS) |
34 | + if ((rights & ~TABLE_ACLS) || !grant_option) | |
85beda0e | 35 | { |
45c53499 ER |
36 | my_message(ER_ILLEGAL_GRANT_FOR_TABLE, ER(ER_ILLEGAL_GRANT_FOR_TABLE), |
37 | MYF(0)); | |
38 | @@ -3328,20 +3328,17 @@ void grant_free(void) | |
39 | my_bool grant_init() | |
40 | { | |
41 | THD *thd; | |
42 | - my_bool return_val; | |
43 | DBUG_ENTER("grant_init"); | |
44 | ||
45 | if (!(thd= new THD)) | |
85beda0e | 46 | DBUG_RETURN(1); /* purecov: deadcode */ |
47 | thd->thread_stack= (char*) &thd; | |
48 | thd->store_globals(); | |
49 | - return_val= grant_reload(thd); | |
45c53499 | 50 | + grant_option= !grant_reload(thd); |
85beda0e | 51 | delete thd; |
52 | /* Remember that we don't have a THD */ | |
53 | my_pthread_setspecific_ptr(THR_THD, 0); | |
45c53499 ER |
54 | - /* Set the grant option flag so we will check grants */ |
55 | - grant_option= TRUE; | |
85beda0e | 56 | - DBUG_RETURN(return_val); |
45c53499 | 57 | + DBUG_RETURN(!grant_option); |
85beda0e | 58 | } |
59 | ||
60 |