Merge lp:~sergei.glushchenko/percona-server/CVE-2012-5627-bug1172090-5.6 into lp:percona-server/5.6
- CVE-2012-5627-bug1172090-5.6
- Merge into 5.6
Proposed by
Sergei Glushchenko
Status: | Merged | ||||||||
---|---|---|---|---|---|---|---|---|---|
Approved by: | Laurynas Biveinis | ||||||||
Approved revision: | no longer in the source branch. | ||||||||
Merged at revision: | 344 | ||||||||
Proposed branch: | lp:~sergei.glushchenko/percona-server/CVE-2012-5627-bug1172090-5.6 | ||||||||
Merge into: | lp:percona-server/5.6 | ||||||||
Diff against target: |
758 lines (+357/-171) 11 files modified
Percona-Server/client/mysqltest.cc (+4/-1) Percona-Server/mysql-test/r/change_user_notembedded.result (+5/-0) Percona-Server/mysql-test/r/failed_auth_3909.result (+20/-0) Percona-Server/mysql-test/r/mysqltest.result (+3/-3) Percona-Server/mysql-test/t/change_user_notembedded.test (+24/-0) Percona-Server/mysql-test/t/failed_auth_3909.test (+37/-0) Percona-Server/sql/sql_acl.cc (+48/-6) Percona-Server/sql/sql_class.cc (+1/-0) Percona-Server/sql/sql_class.h (+1/-0) Percona-Server/sql/sql_parse.cc (+18/-1) Percona-Server/tests/mysql_client_test.c (+196/-160) |
||||||||
To merge this branch: | bzr merge lp:~sergei.glushchenko/percona-server/CVE-2012-5627-bug1172090-5.6 | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Laurynas Biveinis (community) | Approve | ||
Review via email: mp+161800@code.launchpad.net |
Commit message
Description of the change
This is a manual merge fix for #1172090, #1171941 from 5.6
http://
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'Percona-Server/client/mysqltest.cc' | |||
2 | --- Percona-Server/client/mysqltest.cc 2013-03-05 12:46:43 +0000 | |||
3 | +++ Percona-Server/client/mysqltest.cc 2013-05-01 09:25:43 +0000 | |||
4 | @@ -4165,7 +4165,10 @@ | |||
5 | 4165 | cur_con->name, ds_user.str, ds_passwd.str, ds_db.str)); | 4165 | cur_con->name, ds_user.str, ds_passwd.str, ds_db.str)); |
6 | 4166 | 4166 | ||
7 | 4167 | if (mysql_change_user(mysql, ds_user.str, ds_passwd.str, ds_db.str)) | 4167 | if (mysql_change_user(mysql, ds_user.str, ds_passwd.str, ds_db.str)) |
9 | 4168 | die("change user failed: %s", mysql_error(mysql)); | 4168 | handle_error(command, mysql_errno(mysql), mysql_error(mysql), |
10 | 4169 | mysql_sqlstate(mysql), &ds_res); | ||
11 | 4170 | else | ||
12 | 4171 | handle_no_error(command); | ||
13 | 4169 | 4172 | ||
14 | 4170 | dynstr_free(&ds_user); | 4173 | dynstr_free(&ds_user); |
15 | 4171 | dynstr_free(&ds_passwd); | 4174 | dynstr_free(&ds_passwd); |
16 | 4172 | 4175 | ||
17 | === added file 'Percona-Server/mysql-test/r/change_user_notembedded.result' | |||
18 | --- Percona-Server/mysql-test/r/change_user_notembedded.result 1970-01-01 00:00:00 +0000 | |||
19 | +++ Percona-Server/mysql-test/r/change_user_notembedded.result 2013-05-01 09:25:43 +0000 | |||
20 | @@ -0,0 +1,5 @@ | |||
21 | 1 | ERROR 28000: Access denied for user 'foo'@'localhost' (using password: YES) | ||
22 | 2 | ERROR 28000: Access denied for user 'foo'@'localhost' (using password: NO) | ||
23 | 3 | ERROR 28000: Access denied for user 'foo'@'localhost' (using password: YES) | ||
24 | 4 | ERROR 08S01: Unknown command | ||
25 | 5 | ERROR 08S01: Unknown command | ||
26 | 0 | 6 | ||
27 | === added file 'Percona-Server/mysql-test/r/failed_auth_3909.result' | |||
28 | --- Percona-Server/mysql-test/r/failed_auth_3909.result 1970-01-01 00:00:00 +0000 | |||
29 | +++ Percona-Server/mysql-test/r/failed_auth_3909.result 2013-05-01 09:25:43 +0000 | |||
30 | @@ -0,0 +1,20 @@ | |||
31 | 1 | optimize table mysql.user; | ||
32 | 2 | Table Op Msg_type Msg_text | ||
33 | 3 | mysql.user optimize status OK | ||
34 | 4 | insert mysql.user (user,plugin) values ('foo','bar'),('bar','bar'),('baz','bar'); | ||
35 | 5 | Warnings: | ||
36 | 6 | Warning 1364 Field 'ssl_cipher' doesn't have a default value | ||
37 | 7 | Warning 1364 Field 'x509_issuer' doesn't have a default value | ||
38 | 8 | Warning 1364 Field 'x509_subject' doesn't have a default value | ||
39 | 9 | flush privileges; | ||
40 | 10 | connect(localhost,u1,,test,MASTER_PORT,MASTER_SOCKET); | ||
41 | 11 | ERROR HY000: Plugin 'bar' is not loaded | ||
42 | 12 | connect(localhost,u2,,test,MASTER_PORT,MASTER_SOCKET); | ||
43 | 13 | ERROR 28000: Access denied for user 'u2'@'localhost' (using password: NO) | ||
44 | 14 | connect(localhost,u2,password,test,MASTER_PORT,MASTER_SOCKET); | ||
45 | 15 | ERROR 28000: Access denied for user 'u2'@'localhost' (using password: YES) | ||
46 | 16 | ERROR HY000: Plugin 'bar' is not loaded | ||
47 | 17 | ERROR 28000: Access denied for user 'u2'@'localhost' (using password: NO) | ||
48 | 18 | ERROR 28000: Access denied for user 'u2'@'localhost' (using password: YES) | ||
49 | 19 | delete from mysql.user where plugin = 'bar'; | ||
50 | 20 | flush privileges; | ||
51 | 0 | 21 | ||
52 | === modified file 'Percona-Server/mysql-test/r/mysqltest.result' | |||
53 | --- Percona-Server/mysql-test/r/mysqltest.result 2012-08-22 01:40:20 +0000 | |||
54 | +++ Percona-Server/mysql-test/r/mysqltest.result 2013-05-01 09:25:43 +0000 | |||
55 | @@ -929,9 +929,9 @@ | |||
56 | 929 | b varchar(255) YES NULL | 929 | b varchar(255) YES NULL |
57 | 930 | c datetime YES NULL | 930 | c datetime YES NULL |
58 | 931 | drop table t1; | 931 | drop table t1; |
62 | 932 | mysqltest: At line 1: change user failed: Unknown database 'inexistent' | 932 | mysqltest: At line 1: query 'change_user root,,inexistent' failed: 1049: Unknown database 'inexistent' |
63 | 933 | mysqltest: At line 1: change user failed: Access denied for user 'inexistent'@'localhost' (using password: NO) | 933 | mysqltest: At line 1: query 'change_user inexistent,,test' failed: 1045: Access denied for user 'inexistent'@'localhost' (using password: NO) |
64 | 934 | mysqltest: At line 1: change user failed: Access denied for user 'root'@'localhost' (using password: YES) | 934 | mysqltest: At line 1: query 'change_user root,inexistent,test' failed: 1045: Access denied for user 'root'@'localhost' (using password: YES) |
65 | 935 | REPLACED_FILE1.txt | 935 | REPLACED_FILE1.txt |
66 | 936 | file1.txt | 936 | file1.txt |
67 | 937 | file2.txt | 937 | file2.txt |
68 | 938 | 938 | ||
69 | === added file 'Percona-Server/mysql-test/t/change_user_notembedded.test' | |||
70 | --- Percona-Server/mysql-test/t/change_user_notembedded.test 1970-01-01 00:00:00 +0000 | |||
71 | +++ Percona-Server/mysql-test/t/change_user_notembedded.test 2013-05-01 09:25:43 +0000 | |||
72 | @@ -0,0 +1,24 @@ | |||
73 | 1 | source include/not_embedded.inc; | ||
74 | 2 | |||
75 | 3 | # | ||
76 | 4 | # MDEV-3915 COM_CHANGE_USER allows fast password brute-forcing | ||
77 | 5 | # | ||
78 | 6 | # only three failed change_user per connection. | ||
79 | 7 | # successful change_user do NOT reset the counter | ||
80 | 8 | # | ||
81 | 9 | connect (test,localhost,root,,); | ||
82 | 10 | connection test; | ||
83 | 11 | --error 1045 | ||
84 | 12 | change_user foo,bar; | ||
85 | 13 | --error 1045 | ||
86 | 14 | change_user foo; | ||
87 | 15 | change_user; | ||
88 | 16 | --error 1045 | ||
89 | 17 | change_user foo,bar; | ||
90 | 18 | --error 1047 | ||
91 | 19 | change_user foo,bar; | ||
92 | 20 | --error 1047 | ||
93 | 21 | change_user; | ||
94 | 22 | disconnect test; | ||
95 | 23 | connection default; | ||
96 | 24 | |||
97 | 0 | 25 | ||
98 | === added file 'Percona-Server/mysql-test/t/failed_auth_3909.test' | |||
99 | --- Percona-Server/mysql-test/t/failed_auth_3909.test 1970-01-01 00:00:00 +0000 | |||
100 | +++ Percona-Server/mysql-test/t/failed_auth_3909.test 2013-05-01 09:25:43 +0000 | |||
101 | @@ -0,0 +1,37 @@ | |||
102 | 1 | source include/not_embedded.inc; | ||
103 | 2 | |||
104 | 3 | # | ||
105 | 4 | # MDEV-3909 remote user enumeration | ||
106 | 5 | # | ||
107 | 6 | # verify that for some failed login attemps (with wrong user names) | ||
108 | 7 | # the server requests a plugin | ||
109 | 8 | # | ||
110 | 9 | optimize table mysql.user; | ||
111 | 10 | insert mysql.user (user,plugin) values ('foo','bar'),('bar','bar'),('baz','bar'); | ||
112 | 11 | flush privileges; | ||
113 | 12 | |||
114 | 13 | --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT | ||
115 | 14 | --error ER_PLUGIN_IS_NOT_LOADED | ||
116 | 15 | connect (fail,localhost,u1); | ||
117 | 16 | |||
118 | 17 | --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT | ||
119 | 18 | --error ER_ACCESS_DENIED_ERROR | ||
120 | 19 | connect (fail,localhost,u2); | ||
121 | 20 | |||
122 | 21 | --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT | ||
123 | 22 | --error ER_ACCESS_DENIED_ERROR | ||
124 | 23 | connect (fail,localhost,u2,password); | ||
125 | 24 | |||
126 | 25 | --error ER_PLUGIN_IS_NOT_LOADED | ||
127 | 26 | change_user u1; | ||
128 | 27 | |||
129 | 28 | --error ER_ACCESS_DENIED_ERROR | ||
130 | 29 | change_user u2; | ||
131 | 30 | |||
132 | 31 | --error ER_ACCESS_DENIED_ERROR | ||
133 | 32 | change_user u2,password; | ||
134 | 33 | |||
135 | 34 | delete from mysql.user where plugin = 'bar'; | ||
136 | 35 | flush privileges; | ||
137 | 36 | |||
138 | 37 | |||
139 | 0 | 38 | ||
140 | === modified file 'Percona-Server/sql/sql_acl.cc' | |||
141 | --- Percona-Server/sql/sql_acl.cc 2013-03-05 12:46:43 +0000 | |||
142 | +++ Percona-Server/sql/sql_acl.cc 2013-05-01 09:25:43 +0000 | |||
143 | @@ -9126,6 +9126,7 @@ | |||
144 | 9126 | uint pkt_len; | 9126 | uint pkt_len; |
145 | 9127 | } cached_server_packet; | 9127 | } cached_server_packet; |
146 | 9128 | int packets_read, packets_written; ///< counters for send/received packets | 9128 | int packets_read, packets_written; ///< counters for send/received packets |
147 | 9129 | bool make_it_fail; | ||
148 | 9129 | /** when plugin returns a failure this tells us what really happened */ | 9130 | /** when plugin returns a failure this tells us what really happened */ |
149 | 9130 | enum { SUCCESS, FAILURE, RESTART } status; | 9131 | enum { SUCCESS, FAILURE, RESTART } status; |
150 | 9131 | 9132 | ||
151 | @@ -9488,14 +9489,14 @@ | |||
152 | 9488 | /** | 9489 | /** |
153 | 9489 | Finds acl entry in user database for authentication purposes. | 9490 | Finds acl entry in user database for authentication purposes. |
154 | 9490 | 9491 | ||
157 | 9491 | Finds a user and copies it into mpvio. Reports an authentication | 9492 | Finds a user and copies it into mpvio. Creates a fake user |
158 | 9492 | failure if a user is not found. | 9493 | if no matching user account is found. |
159 | 9493 | 9494 | ||
160 | 9494 | @note find_acl_user is not the same, because it doesn't take into | 9495 | @note find_acl_user is not the same, because it doesn't take into |
161 | 9495 | account the case when user is not empty, but acl_user->user is empty | 9496 | account the case when user is not empty, but acl_user->user is empty |
162 | 9496 | 9497 | ||
163 | 9497 | @retval 0 found | 9498 | @retval 0 found |
165 | 9498 | @retval 1 not found | 9499 | @retval 1 error |
166 | 9499 | */ | 9500 | */ |
167 | 9500 | static bool find_mpvio_user(MPVIO_EXT *mpvio) | 9501 | static bool find_mpvio_user(MPVIO_EXT *mpvio) |
168 | 9501 | { | 9502 | { |
169 | @@ -9530,8 +9531,32 @@ | |||
170 | 9530 | 9531 | ||
171 | 9531 | if (!mpvio->acl_user) | 9532 | if (!mpvio->acl_user) |
172 | 9532 | { | 9533 | { |
175 | 9533 | login_failed_error(mpvio, mpvio->auth_info.password_used); | 9534 | /* |
176 | 9534 | DBUG_RETURN (1); | 9535 | A matching user was not found. Fake it. Take any user, make the |
177 | 9536 | authentication fail later. | ||
178 | 9537 | This way we get a realistically looking failure, with occasional | ||
179 | 9538 | "change auth plugin" requests even for nonexistent users. The ratio | ||
180 | 9539 | of "change auth plugin" request will be the same for real and | ||
181 | 9540 | nonexistent users. | ||
182 | 9541 | Note, that we cannot pick any user at random, it must always be | ||
183 | 9542 | the same user account for the incoming sctx->user name. | ||
184 | 9543 | */ | ||
185 | 9544 | ulong nr1=1, nr2=4; | ||
186 | 9545 | CHARSET_INFO *cs= &my_charset_latin1; | ||
187 | 9546 | cs->coll->hash_sort(cs, (uchar*) mpvio->auth_info.user_name, | ||
188 | 9547 | mpvio->auth_info.user_name_length, &nr1, &nr2); | ||
189 | 9548 | |||
190 | 9549 | mysql_mutex_lock(&acl_cache->lock); | ||
191 | 9550 | uint i= nr1 % acl_users.elements; | ||
192 | 9551 | ACL_USER *acl_user_tmp= dynamic_element(&acl_users, i, ACL_USER*); | ||
193 | 9552 | mpvio->acl_user= acl_user_tmp->copy(mpvio->mem_root); | ||
194 | 9553 | make_lex_string_root(mpvio->mem_root, | ||
195 | 9554 | &mpvio->acl_user_plugin, | ||
196 | 9555 | acl_user_tmp->plugin.str, | ||
197 | 9556 | acl_user_tmp->plugin.length, 0); | ||
198 | 9557 | mysql_mutex_unlock(&acl_cache->lock); | ||
199 | 9558 | |||
200 | 9559 | mpvio->make_it_fail= true; | ||
201 | 9535 | } | 9560 | } |
202 | 9536 | 9561 | ||
203 | 9537 | if (my_strcasecmp(system_charset_info, mpvio->acl_user->plugin.str, | 9562 | if (my_strcasecmp(system_charset_info, mpvio->acl_user->plugin.str, |
204 | @@ -9638,6 +9663,9 @@ | |||
205 | 9638 | uint passwd_len= (mpvio->client_capabilities & CLIENT_SECURE_CONNECTION ? | 9663 | uint passwd_len= (mpvio->client_capabilities & CLIENT_SECURE_CONNECTION ? |
206 | 9639 | (uchar) (*passwd++) : strlen(passwd)); | 9664 | (uchar) (*passwd++) : strlen(passwd)); |
207 | 9640 | 9665 | ||
208 | 9666 | if (passwd_len) | ||
209 | 9667 | mpvio->auth_info.password_used= PASSWORD_USED_YES; | ||
210 | 9668 | |||
211 | 9641 | db+= passwd_len + 1; | 9669 | db+= passwd_len + 1; |
212 | 9642 | /* | 9670 | /* |
213 | 9643 | Database name is always NUL-terminated, so in case of empty database | 9671 | Database name is always NUL-terminated, so in case of empty database |
214 | @@ -10431,6 +10459,10 @@ | |||
215 | 10431 | *buf= (uchar*) mpvio->cached_client_reply.pkt; | 10459 | *buf= (uchar*) mpvio->cached_client_reply.pkt; |
216 | 10432 | mpvio->cached_client_reply.pkt= 0; | 10460 | mpvio->cached_client_reply.pkt= 0; |
217 | 10433 | mpvio->packets_read++; | 10461 | mpvio->packets_read++; |
218 | 10462 | |||
219 | 10463 | if (mpvio->make_it_fail) | ||
220 | 10464 | goto err; | ||
221 | 10465 | |||
222 | 10434 | DBUG_RETURN ((int) mpvio->cached_client_reply.pkt_len); | 10466 | DBUG_RETURN ((int) mpvio->cached_client_reply.pkt_len); |
223 | 10435 | } | 10467 | } |
224 | 10436 | 10468 | ||
225 | @@ -10473,12 +10505,21 @@ | |||
226 | 10473 | else | 10505 | else |
227 | 10474 | *buf= mpvio->net->read_pos; | 10506 | *buf= mpvio->net->read_pos; |
228 | 10475 | 10507 | ||
229 | 10508 | if (mpvio->make_it_fail) | ||
230 | 10509 | goto err; | ||
231 | 10510 | |||
232 | 10476 | DBUG_RETURN((int)pkt_len); | 10511 | DBUG_RETURN((int)pkt_len); |
233 | 10477 | 10512 | ||
234 | 10478 | err: | 10513 | err: |
235 | 10479 | if (mpvio->status == MPVIO_EXT::FAILURE) | 10514 | if (mpvio->status == MPVIO_EXT::FAILURE) |
236 | 10480 | { | 10515 | { |
238 | 10481 | my_error(ER_HANDSHAKE_ERROR, MYF(0)); | 10516 | if (!current_thd->is_error()) |
239 | 10517 | { | ||
240 | 10518 | if (mpvio->make_it_fail) | ||
241 | 10519 | login_failed_error(mpvio, mpvio->auth_info.password_used); | ||
242 | 10520 | else | ||
243 | 10521 | my_error(ER_HANDSHAKE_ERROR, MYF(0)); | ||
244 | 10522 | } | ||
245 | 10482 | } | 10523 | } |
246 | 10483 | DBUG_RETURN(-1); | 10524 | DBUG_RETURN(-1); |
247 | 10484 | } | 10525 | } |
248 | @@ -10686,6 +10727,7 @@ | |||
249 | 10686 | #endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ | 10727 | #endif /* HAVE_OPENSSL && !EMBEDDED_LIBRARY */ |
250 | 10687 | mpvio->vio_is_encrypted= 0; | 10728 | mpvio->vio_is_encrypted= 0; |
251 | 10688 | mpvio->status= MPVIO_EXT::FAILURE; | 10729 | mpvio->status= MPVIO_EXT::FAILURE; |
252 | 10730 | mpvio->make_it_fail= false; | ||
253 | 10689 | 10731 | ||
254 | 10690 | mpvio->client_capabilities= thd->client_capabilities; | 10732 | mpvio->client_capabilities= thd->client_capabilities; |
255 | 10691 | mpvio->mem_root= thd->mem_root; | 10733 | mpvio->mem_root= thd->mem_root; |
256 | 10692 | 10734 | ||
257 | === modified file 'Percona-Server/sql/sql_class.cc' | |||
258 | --- Percona-Server/sql/sql_class.cc 2013-03-05 12:46:43 +0000 | |||
259 | +++ Percona-Server/sql/sql_class.cc 2013-05-01 09:25:43 +0000 | |||
260 | @@ -899,6 +899,7 @@ | |||
261 | 899 | first_successful_insert_id_in_prev_stmt_for_binlog(0), | 899 | first_successful_insert_id_in_prev_stmt_for_binlog(0), |
262 | 900 | first_successful_insert_id_in_cur_stmt(0), | 900 | first_successful_insert_id_in_cur_stmt(0), |
263 | 901 | stmt_depends_on_first_successful_insert_id_in_prev_stmt(FALSE), | 901 | stmt_depends_on_first_successful_insert_id_in_prev_stmt(FALSE), |
264 | 902 | failed_com_change_user(0), | ||
265 | 902 | m_examined_row_count(0), | 903 | m_examined_row_count(0), |
266 | 903 | m_statement_psi(NULL), | 904 | m_statement_psi(NULL), |
267 | 904 | m_idle_psi(NULL), | 905 | m_idle_psi(NULL), |
268 | 905 | 906 | ||
269 | === modified file 'Percona-Server/sql/sql_class.h' | |||
270 | --- Percona-Server/sql/sql_class.h 2013-03-05 12:46:43 +0000 | |||
271 | +++ Percona-Server/sql/sql_class.h 2013-05-01 09:25:43 +0000 | |||
272 | @@ -2641,6 +2641,7 @@ | |||
273 | 2641 | } | 2641 | } |
274 | 2642 | 2642 | ||
275 | 2643 | ha_rows cuted_fields; | 2643 | ha_rows cuted_fields; |
276 | 2644 | uint8 failed_com_change_user; | ||
277 | 2644 | 2645 | ||
278 | 2645 | private: | 2646 | private: |
279 | 2646 | /** | 2647 | /** |
280 | 2647 | 2648 | ||
281 | === modified file 'Percona-Server/sql/sql_parse.cc' | |||
282 | --- Percona-Server/sql/sql_parse.cc 2013-03-31 06:08:39 +0000 | |||
283 | +++ Percona-Server/sql/sql_parse.cc 2013-05-01 09:25:43 +0000 | |||
284 | @@ -1252,7 +1252,22 @@ | |||
285 | 1252 | const CHARSET_INFO *save_character_set_results= | 1252 | const CHARSET_INFO *save_character_set_results= |
286 | 1253 | thd->variables.character_set_results; | 1253 | thd->variables.character_set_results; |
287 | 1254 | 1254 | ||
289 | 1255 | auth_rc= acl_authenticate(thd, packet_length); | 1255 | /* Ensure we don't free security_ctx->user in case we have to revert */ |
290 | 1256 | thd->security_ctx->user= 0; | ||
291 | 1257 | thd->set_user_connect(0); | ||
292 | 1258 | |||
293 | 1259 | /* | ||
294 | 1260 | to limit COM_CHANGE_USER ability to brute-force passwords, | ||
295 | 1261 | we only allow three unsuccessful COM_CHANGE_USER per connection. | ||
296 | 1262 | */ | ||
297 | 1263 | if (thd->failed_com_change_user >= 3) | ||
298 | 1264 | { | ||
299 | 1265 | my_message(ER_UNKNOWN_COM_ERROR, ER(ER_UNKNOWN_COM_ERROR), MYF(0)); | ||
300 | 1266 | auth_rc= 1; | ||
301 | 1267 | } | ||
302 | 1268 | else | ||
303 | 1269 | auth_rc= acl_authenticate(thd, packet_length); | ||
304 | 1270 | |||
305 | 1256 | MYSQL_AUDIT_NOTIFY_CONNECTION_CHANGE_USER(thd); | 1271 | MYSQL_AUDIT_NOTIFY_CONNECTION_CHANGE_USER(thd); |
306 | 1257 | if (auth_rc) | 1272 | if (auth_rc) |
307 | 1258 | { | 1273 | { |
308 | @@ -1264,6 +1279,8 @@ | |||
309 | 1264 | thd->variables.collation_connection= save_collation_connection; | 1279 | thd->variables.collation_connection= save_collation_connection; |
310 | 1265 | thd->variables.character_set_results= save_character_set_results; | 1280 | thd->variables.character_set_results= save_character_set_results; |
311 | 1266 | thd->update_charset(); | 1281 | thd->update_charset(); |
312 | 1282 | thd->failed_com_change_user++; | ||
313 | 1283 | my_sleep(1000000); | ||
314 | 1267 | } | 1284 | } |
315 | 1268 | else | 1285 | else |
316 | 1269 | { | 1286 | { |
317 | 1270 | 1287 | ||
318 | === modified file 'Percona-Server/tests/mysql_client_test.c' | |||
319 | --- Percona-Server/tests/mysql_client_test.c 2013-03-05 12:46:43 +0000 | |||
320 | +++ Percona-Server/tests/mysql_client_test.c 2013-05-01 09:25:43 +0000 | |||
321 | @@ -16266,6 +16266,7 @@ | |||
322 | 16266 | const char *pw= "password"; | 16266 | const char *pw= "password"; |
323 | 16267 | const char *db= "mysqltest_user_test_database"; | 16267 | const char *db= "mysqltest_user_test_database"; |
324 | 16268 | int rc; | 16268 | int rc; |
325 | 16269 | MYSQL *conn; | ||
326 | 16269 | 16270 | ||
327 | 16270 | DBUG_ENTER("test_change_user"); | 16271 | DBUG_ENTER("test_change_user"); |
328 | 16271 | myheader("test_change_user"); | 16272 | myheader("test_change_user"); |
329 | @@ -16309,149 +16310,173 @@ | |||
330 | 16309 | rc= mysql_query(mysql, buff); | 16310 | rc= mysql_query(mysql, buff); |
331 | 16310 | myquery(rc); | 16311 | myquery(rc); |
332 | 16311 | 16312 | ||
333 | 16313 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); | ||
334 | 16312 | 16314 | ||
335 | 16313 | /* Try some combinations */ | 16315 | /* Try some combinations */ |
473 | 16314 | rc= mysql_change_user(mysql, NULL, NULL, NULL); | 16316 | rc= mysql_change_user(conn, NULL, NULL, NULL); |
474 | 16315 | DIE_UNLESS(rc); | 16317 | DIE_UNLESS(rc); |
475 | 16316 | if (! opt_silent) | 16318 | if (! opt_silent) |
476 | 16317 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16319 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
477 | 16318 | 16320 | ||
478 | 16319 | 16321 | ||
479 | 16320 | rc= mysql_change_user(mysql, "", NULL, NULL); | 16322 | rc= mysql_change_user(conn, "", NULL, NULL); |
480 | 16321 | DIE_UNLESS(rc); | 16323 | DIE_UNLESS(rc); |
481 | 16322 | if (! opt_silent) | 16324 | if (! opt_silent) |
482 | 16323 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16325 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
483 | 16324 | 16326 | ||
484 | 16325 | rc= mysql_change_user(mysql, "", "", NULL); | 16327 | rc= mysql_change_user(conn, "", "", NULL); |
485 | 16326 | DIE_UNLESS(rc); | 16328 | DIE_UNLESS(rc); |
486 | 16327 | if (! opt_silent) | 16329 | if (! opt_silent) |
487 | 16328 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16330 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
488 | 16329 | 16331 | ||
489 | 16330 | rc= mysql_change_user(mysql, "", "", ""); | 16332 | mysql_close(conn); |
490 | 16331 | DIE_UNLESS(rc); | 16333 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); |
491 | 16332 | if (! opt_silent) | 16334 | |
492 | 16333 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16335 | rc= mysql_change_user(conn, "", "", ""); |
493 | 16334 | 16336 | DIE_UNLESS(rc); | |
494 | 16335 | rc= mysql_change_user(mysql, NULL, "", ""); | 16337 | if (! opt_silent) |
495 | 16336 | DIE_UNLESS(rc); | 16338 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
496 | 16337 | if (! opt_silent) | 16339 | |
497 | 16338 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16340 | rc= mysql_change_user(conn, NULL, "", ""); |
498 | 16339 | 16341 | DIE_UNLESS(rc); | |
499 | 16340 | 16342 | if (! opt_silent) | |
500 | 16341 | rc= mysql_change_user(mysql, NULL, NULL, ""); | 16343 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
501 | 16342 | DIE_UNLESS(rc); | 16344 | |
502 | 16343 | if (! opt_silent) | 16345 | |
503 | 16344 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16346 | rc= mysql_change_user(conn, NULL, NULL, ""); |
504 | 16345 | 16347 | DIE_UNLESS(rc); | |
505 | 16346 | rc= mysql_change_user(mysql, "", NULL, ""); | 16348 | if (! opt_silent) |
506 | 16347 | DIE_UNLESS(rc); | 16349 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
507 | 16348 | if (! opt_silent) | 16350 | |
508 | 16349 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16351 | mysql_close(conn); |
509 | 16350 | 16352 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); | |
510 | 16351 | rc= mysql_change_user(mysql, user_pw, NULL, ""); | 16353 | |
511 | 16352 | DIE_UNLESS(rc); | 16354 | rc= mysql_change_user(conn, "", NULL, ""); |
512 | 16353 | if (! opt_silent) | 16355 | DIE_UNLESS(rc); |
513 | 16354 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16356 | if (! opt_silent) |
514 | 16355 | 16357 | printf("Got error (as expected): %s\n", mysql_error(conn)); | |
515 | 16356 | rc= mysql_change_user(mysql, user_pw, "", ""); | 16358 | |
516 | 16357 | DIE_UNLESS(rc); | 16359 | rc= mysql_change_user(conn, user_pw, NULL, ""); |
517 | 16358 | if (! opt_silent) | 16360 | DIE_UNLESS(rc); |
518 | 16359 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16361 | if (! opt_silent) |
519 | 16360 | 16362 | printf("Got error (as expected): %s\n", mysql_error(conn)); | |
520 | 16361 | rc= mysql_change_user(mysql, user_pw, "", NULL); | 16363 | |
521 | 16362 | DIE_UNLESS(rc); | 16364 | rc= mysql_change_user(conn, user_pw, "", ""); |
522 | 16363 | if (! opt_silent) | 16365 | DIE_UNLESS(rc); |
523 | 16364 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16366 | if (! opt_silent) |
524 | 16365 | 16367 | printf("Got error (as expected): %s\n", mysql_error(conn)); | |
525 | 16366 | rc= mysql_change_user(mysql, user_pw, NULL, NULL); | 16368 | |
526 | 16367 | DIE_UNLESS(rc); | 16369 | mysql_close(conn); |
527 | 16368 | if (! opt_silent) | 16370 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); |
528 | 16369 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16371 | |
529 | 16370 | 16372 | rc= mysql_change_user(conn, user_pw, "", NULL); | |
530 | 16371 | rc= mysql_change_user(mysql, user_pw, "", db); | 16373 | DIE_UNLESS(rc); |
531 | 16372 | DIE_UNLESS(rc); | 16374 | if (! opt_silent) |
532 | 16373 | if (! opt_silent) | 16375 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
533 | 16374 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16376 | |
534 | 16375 | 16377 | rc= mysql_change_user(conn, user_pw, NULL, NULL); | |
535 | 16376 | rc= mysql_change_user(mysql, user_pw, NULL, db); | 16378 | DIE_UNLESS(rc); |
536 | 16377 | DIE_UNLESS(rc); | 16379 | if (! opt_silent) |
537 | 16378 | if (! opt_silent) | 16380 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
538 | 16379 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16381 | |
539 | 16380 | 16382 | rc= mysql_change_user(conn, user_pw, "", db); | |
540 | 16381 | rc= mysql_change_user(mysql, user_pw, pw, db); | 16383 | DIE_UNLESS(rc); |
541 | 16382 | myquery(rc); | 16384 | if (! opt_silent) |
542 | 16383 | 16385 | printf("Got error (as expected): %s\n", mysql_error(conn)); | |
543 | 16384 | rc= mysql_change_user(mysql, user_pw, pw, NULL); | 16386 | |
544 | 16385 | myquery(rc); | 16387 | mysql_close(conn); |
545 | 16386 | 16388 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); | |
546 | 16387 | rc= mysql_change_user(mysql, user_pw, pw, ""); | 16389 | |
547 | 16388 | myquery(rc); | 16390 | rc= mysql_change_user(conn, user_pw, NULL, db); |
548 | 16389 | 16391 | DIE_UNLESS(rc); | |
549 | 16390 | rc= mysql_change_user(mysql, user_no_pw, pw, db); | 16392 | if (! opt_silent) |
550 | 16391 | DIE_UNLESS(rc); | 16393 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
551 | 16392 | if (! opt_silent) | 16394 | |
552 | 16393 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16395 | rc= mysql_change_user(conn, user_pw, pw, db); |
553 | 16394 | 16396 | myquery(rc); | |
554 | 16395 | rc= mysql_change_user(mysql, user_no_pw, pw, ""); | 16397 | |
555 | 16396 | DIE_UNLESS(rc); | 16398 | rc= mysql_change_user(conn, user_pw, pw, NULL); |
556 | 16397 | if (! opt_silent) | 16399 | myquery(rc); |
557 | 16398 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16400 | |
558 | 16399 | 16401 | rc= mysql_change_user(conn, user_pw, pw, ""); | |
559 | 16400 | rc= mysql_change_user(mysql, user_no_pw, pw, NULL); | 16402 | myquery(rc); |
560 | 16401 | DIE_UNLESS(rc); | 16403 | |
561 | 16402 | if (! opt_silent) | 16404 | rc= mysql_change_user(conn, user_no_pw, pw, db); |
562 | 16403 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16405 | DIE_UNLESS(rc); |
563 | 16404 | 16406 | if (! opt_silent) | |
564 | 16405 | rc= mysql_change_user(mysql, user_no_pw, "", NULL); | 16407 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
565 | 16406 | myquery(rc); | 16408 | |
566 | 16407 | 16409 | rc= mysql_change_user(conn, user_no_pw, pw, ""); | |
567 | 16408 | rc= mysql_change_user(mysql, user_no_pw, "", ""); | 16410 | DIE_UNLESS(rc); |
568 | 16409 | myquery(rc); | 16411 | if (! opt_silent) |
569 | 16410 | 16412 | printf("Got error (as expected): %s\n", mysql_error(conn)); | |
570 | 16411 | rc= mysql_change_user(mysql, user_no_pw, "", db); | 16413 | |
571 | 16412 | myquery(rc); | 16414 | mysql_close(conn); |
572 | 16413 | 16415 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); | |
573 | 16414 | rc= mysql_change_user(mysql, user_no_pw, NULL, db); | 16416 | |
574 | 16415 | myquery(rc); | 16417 | rc= mysql_change_user(conn, user_no_pw, pw, NULL); |
575 | 16416 | 16418 | DIE_UNLESS(rc); | |
576 | 16417 | rc= mysql_change_user(mysql, "", pw, db); | 16419 | if (! opt_silent) |
577 | 16418 | DIE_UNLESS(rc); | 16420 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
578 | 16419 | if (! opt_silent) | 16421 | |
579 | 16420 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16422 | rc= mysql_change_user(conn, user_no_pw, "", NULL); |
580 | 16421 | 16423 | myquery(rc); | |
581 | 16422 | rc= mysql_change_user(mysql, "", pw, ""); | 16424 | |
582 | 16423 | DIE_UNLESS(rc); | 16425 | rc= mysql_change_user(conn, user_no_pw, "", ""); |
583 | 16424 | if (! opt_silent) | 16426 | myquery(rc); |
584 | 16425 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16427 | |
585 | 16426 | 16428 | rc= mysql_change_user(conn, user_no_pw, "", db); | |
586 | 16427 | rc= mysql_change_user(mysql, "", pw, NULL); | 16429 | myquery(rc); |
587 | 16428 | DIE_UNLESS(rc); | 16430 | |
588 | 16429 | if (! opt_silent) | 16431 | rc= mysql_change_user(conn, user_no_pw, NULL, db); |
589 | 16430 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16432 | myquery(rc); |
590 | 16431 | 16433 | ||
591 | 16432 | rc= mysql_change_user(mysql, NULL, pw, NULL); | 16434 | rc= mysql_change_user(conn, "", pw, db); |
592 | 16433 | DIE_UNLESS(rc); | 16435 | DIE_UNLESS(rc); |
593 | 16434 | if (! opt_silent) | 16436 | if (! opt_silent) |
594 | 16435 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16437 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
595 | 16436 | 16438 | ||
596 | 16437 | rc= mysql_change_user(mysql, NULL, NULL, db); | 16439 | rc= mysql_change_user(conn, "", pw, ""); |
597 | 16438 | DIE_UNLESS(rc); | 16440 | DIE_UNLESS(rc); |
598 | 16439 | if (! opt_silent) | 16441 | if (! opt_silent) |
599 | 16440 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16442 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
600 | 16441 | 16443 | ||
601 | 16442 | rc= mysql_change_user(mysql, NULL, "", db); | 16444 | mysql_close(conn); |
602 | 16443 | DIE_UNLESS(rc); | 16445 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); |
603 | 16444 | if (! opt_silent) | 16446 | |
604 | 16445 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16447 | rc= mysql_change_user(conn, "", pw, NULL); |
605 | 16446 | 16448 | DIE_UNLESS(rc); | |
606 | 16447 | rc= mysql_change_user(mysql, "", "", db); | 16449 | if (! opt_silent) |
607 | 16448 | DIE_UNLESS(rc); | 16450 | printf("Got error (as expected): %s\n", mysql_error(conn)); |
608 | 16449 | if (! opt_silent) | 16451 | |
609 | 16450 | printf("Got error (as expected): %s\n", mysql_error(mysql)); | 16452 | rc= mysql_change_user(conn, NULL, pw, NULL); |
610 | 16453 | DIE_UNLESS(rc); | ||
611 | 16454 | if (! opt_silent) | ||
612 | 16455 | printf("Got error (as expected): %s\n", mysql_error(conn)); | ||
613 | 16456 | |||
614 | 16457 | rc= mysql_change_user(conn, NULL, NULL, db); | ||
615 | 16458 | DIE_UNLESS(rc); | ||
616 | 16459 | if (! opt_silent) | ||
617 | 16460 | printf("Got error (as expected): %s\n", mysql_error(conn)); | ||
618 | 16461 | |||
619 | 16462 | mysql_close(conn); | ||
620 | 16463 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); | ||
621 | 16464 | |||
622 | 16465 | rc= mysql_change_user(conn, NULL, "", db); | ||
623 | 16466 | DIE_UNLESS(rc); | ||
624 | 16467 | if (! opt_silent) | ||
625 | 16468 | printf("Got error (as expected): %s\n", mysql_error(conn)); | ||
626 | 16469 | |||
627 | 16470 | rc= mysql_change_user(conn, "", "", db); | ||
628 | 16471 | DIE_UNLESS(rc); | ||
629 | 16472 | if (! opt_silent) | ||
630 | 16473 | printf("Got error (as expected): %s\n", mysql_error(conn)); | ||
631 | 16451 | 16474 | ||
632 | 16452 | /* Cleanup the environment */ | 16475 | /* Cleanup the environment */ |
633 | 16453 | 16476 | ||
635 | 16454 | mysql_change_user(mysql, opt_user, opt_password, current_db); | 16477 | mysql_change_user(conn, opt_user, opt_password, current_db); |
636 | 16478 | |||
637 | 16479 | mysql_close(conn); | ||
638 | 16455 | 16480 | ||
639 | 16456 | sprintf(buff, "drop database %s", db); | 16481 | sprintf(buff, "drop database %s", db); |
640 | 16457 | rc= mysql_query(mysql, buff); | 16482 | rc= mysql_query(mysql, buff); |
641 | @@ -17114,30 +17139,36 @@ | |||
642 | 17114 | static char db[NAME_CHAR_LEN+1]; | 17139 | static char db[NAME_CHAR_LEN+1]; |
643 | 17115 | static char query[LARGE_BUFFER_SIZE*2]; | 17140 | static char query[LARGE_BUFFER_SIZE*2]; |
644 | 17116 | #endif | 17141 | #endif |
645 | 17142 | MYSQL* conn; | ||
646 | 17117 | 17143 | ||
647 | 17118 | DBUG_ENTER("test_bug31669"); | 17144 | DBUG_ENTER("test_bug31669"); |
648 | 17119 | myheader("test_bug31669"); | 17145 | myheader("test_bug31669"); |
649 | 17120 | 17146 | ||
651 | 17121 | rc= mysql_change_user(mysql, NULL, NULL, NULL); | 17147 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); |
652 | 17148 | |||
653 | 17149 | rc= mysql_change_user(conn, NULL, NULL, NULL); | ||
654 | 17122 | DIE_UNLESS(rc); | 17150 | DIE_UNLESS(rc); |
655 | 17123 | 17151 | ||
657 | 17124 | rc= mysql_change_user(mysql, "", "", ""); | 17152 | rc= mysql_change_user(conn, "", "", ""); |
658 | 17125 | DIE_UNLESS(rc); | 17153 | DIE_UNLESS(rc); |
659 | 17126 | 17154 | ||
660 | 17127 | memset(buff, 'a', sizeof(buff)); | 17155 | memset(buff, 'a', sizeof(buff)); |
661 | 17128 | buff[sizeof(buff) - 1] = '\0'; | 17156 | buff[sizeof(buff) - 1] = '\0'; |
662 | 17129 | 17157 | ||
664 | 17130 | rc= mysql_change_user(mysql, buff, buff, buff); | 17158 | mysql_close(conn); |
665 | 17159 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); | ||
666 | 17160 | |||
667 | 17161 | rc= mysql_change_user(conn, buff, buff, buff); | ||
668 | 17131 | DIE_UNLESS(rc); | 17162 | DIE_UNLESS(rc); |
669 | 17132 | 17163 | ||
671 | 17133 | rc = mysql_change_user(mysql, opt_user, opt_password, current_db); | 17164 | rc = mysql_change_user(conn, opt_user, opt_password, current_db); |
672 | 17134 | DIE_UNLESS(!rc); | 17165 | DIE_UNLESS(!rc); |
673 | 17135 | 17166 | ||
674 | 17136 | #ifndef EMBEDDED_LIBRARY | 17167 | #ifndef EMBEDDED_LIBRARY |
675 | 17137 | memset(db, 'a', sizeof(db)); | 17168 | memset(db, 'a', sizeof(db)); |
676 | 17138 | db[NAME_CHAR_LEN]= 0; | 17169 | db[NAME_CHAR_LEN]= 0; |
677 | 17139 | strxmov(query, "CREATE DATABASE IF NOT EXISTS ", db, NullS); | 17170 | strxmov(query, "CREATE DATABASE IF NOT EXISTS ", db, NullS); |
679 | 17140 | rc= mysql_query(mysql, query); | 17171 | rc= mysql_query(conn, query); |
680 | 17141 | myquery(rc); | 17172 | myquery(rc); |
681 | 17142 | 17173 | ||
682 | 17143 | memset(user, 'b', sizeof(user)); | 17174 | memset(user, 'b', sizeof(user)); |
683 | @@ -17146,54 +17177,59 @@ | |||
684 | 17146 | buff[LARGE_BUFFER_SIZE]= 0; | 17177 | buff[LARGE_BUFFER_SIZE]= 0; |
685 | 17147 | strxmov(query, "GRANT ALL PRIVILEGES ON *.* TO '", user, "'@'%' IDENTIFIED BY " | 17178 | strxmov(query, "GRANT ALL PRIVILEGES ON *.* TO '", user, "'@'%' IDENTIFIED BY " |
686 | 17148 | "'", buff, "' WITH GRANT OPTION", NullS); | 17179 | "'", buff, "' WITH GRANT OPTION", NullS); |
688 | 17149 | rc= mysql_query(mysql, query); | 17180 | rc= mysql_query(conn, query); |
689 | 17150 | myquery(rc); | 17181 | myquery(rc); |
690 | 17151 | 17182 | ||
691 | 17152 | strxmov(query, "GRANT ALL PRIVILEGES ON *.* TO '", user, "'@'localhost' IDENTIFIED BY " | 17183 | strxmov(query, "GRANT ALL PRIVILEGES ON *.* TO '", user, "'@'localhost' IDENTIFIED BY " |
692 | 17153 | "'", buff, "' WITH GRANT OPTION", NullS); | 17184 | "'", buff, "' WITH GRANT OPTION", NullS); |
700 | 17154 | rc= mysql_query(mysql, query); | 17185 | rc= mysql_query(conn, query); |
701 | 17155 | myquery(rc); | 17186 | myquery(rc); |
702 | 17156 | 17187 | ||
703 | 17157 | rc= mysql_query(mysql, "FLUSH PRIVILEGES"); | 17188 | rc= mysql_query(conn, "FLUSH PRIVILEGES"); |
704 | 17158 | myquery(rc); | 17189 | myquery(rc); |
705 | 17159 | 17190 | ||
706 | 17160 | rc= mysql_change_user(mysql, user, buff, db); | 17191 | rc= mysql_change_user(conn, user, buff, db); |
707 | 17161 | DIE_UNLESS(!rc); | 17192 | DIE_UNLESS(!rc); |
708 | 17162 | 17193 | ||
709 | 17163 | user[USERNAME_CHAR_LENGTH-1]= 'a'; | 17194 | user[USERNAME_CHAR_LENGTH-1]= 'a'; |
711 | 17164 | rc= mysql_change_user(mysql, user, buff, db); | 17195 | rc= mysql_change_user(conn, user, buff, db); |
712 | 17165 | DIE_UNLESS(rc); | 17196 | DIE_UNLESS(rc); |
713 | 17166 | 17197 | ||
714 | 17167 | user[USERNAME_CHAR_LENGTH-1]= 'b'; | 17198 | user[USERNAME_CHAR_LENGTH-1]= 'b'; |
715 | 17168 | buff[LARGE_BUFFER_SIZE-1]= 'd'; | 17199 | buff[LARGE_BUFFER_SIZE-1]= 'd'; |
717 | 17169 | rc= mysql_change_user(mysql, user, buff, db); | 17200 | rc= mysql_change_user(conn, user, buff, db); |
718 | 17170 | DIE_UNLESS(rc); | 17201 | DIE_UNLESS(rc); |
719 | 17171 | 17202 | ||
720 | 17172 | buff[LARGE_BUFFER_SIZE-1]= 'c'; | 17203 | buff[LARGE_BUFFER_SIZE-1]= 'c'; |
721 | 17173 | db[NAME_CHAR_LEN-1]= 'e'; | 17204 | db[NAME_CHAR_LEN-1]= 'e'; |
723 | 17174 | rc= mysql_change_user(mysql, user, buff, db); | 17205 | rc= mysql_change_user(conn, user, buff, db); |
724 | 17175 | DIE_UNLESS(rc); | 17206 | DIE_UNLESS(rc); |
725 | 17176 | 17207 | ||
726 | 17208 | mysql_close(conn); | ||
727 | 17209 | conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); | ||
728 | 17210 | |||
729 | 17177 | db[NAME_CHAR_LEN-1]= 'a'; | 17211 | db[NAME_CHAR_LEN-1]= 'a'; |
731 | 17178 | rc= mysql_change_user(mysql, user, buff, db); | 17212 | rc= mysql_change_user(conn, user, buff, db); |
732 | 17179 | DIE_UNLESS(!rc); | 17213 | DIE_UNLESS(!rc); |
733 | 17180 | 17214 | ||
735 | 17181 | rc= mysql_change_user(mysql, user + 1, buff + 1, db + 1); | 17215 | rc= mysql_change_user(conn, user + 1, buff + 1, db + 1); |
736 | 17182 | DIE_UNLESS(rc); | 17216 | DIE_UNLESS(rc); |
737 | 17183 | 17217 | ||
739 | 17184 | rc = mysql_change_user(mysql, opt_user, opt_password, current_db); | 17218 | rc = mysql_change_user(conn, opt_user, opt_password, current_db); |
740 | 17185 | DIE_UNLESS(!rc); | 17219 | DIE_UNLESS(!rc); |
741 | 17186 | 17220 | ||
742 | 17187 | strxmov(query, "DROP DATABASE ", db, NullS); | 17221 | strxmov(query, "DROP DATABASE ", db, NullS); |
744 | 17188 | rc= mysql_query(mysql, query); | 17222 | rc= mysql_query(conn, query); |
745 | 17189 | myquery(rc); | 17223 | myquery(rc); |
746 | 17190 | 17224 | ||
747 | 17191 | strxmov(query, "DELETE FROM mysql.user WHERE User='", user, "'", NullS); | 17225 | strxmov(query, "DELETE FROM mysql.user WHERE User='", user, "'", NullS); |
749 | 17192 | rc= mysql_query(mysql, query); | 17226 | rc= mysql_query(conn, query); |
750 | 17193 | myquery(rc); | 17227 | myquery(rc); |
752 | 17194 | DIE_UNLESS(mysql_affected_rows(mysql) == 2); | 17228 | DIE_UNLESS(mysql_affected_rows(conn) == 2); |
753 | 17195 | #endif | 17229 | #endif |
754 | 17196 | 17230 | ||
755 | 17231 | mysql_close(conn); | ||
756 | 17232 | |||
757 | 17197 | DBUG_VOID_RETURN; | 17233 | DBUG_VOID_RETURN; |
758 | 17198 | } | 17234 | } |
759 | 17199 | 17235 |
Same comment as for 5.5, also the sql_acl.cc bit in rev 342 belongs to 343 instead. It is benign enough though.