Loading mysql-test/r/grant2.result +22 −0 Original line number Diff line number Diff line Loading @@ -334,3 +334,25 @@ lock table mysql.user write; revoke all on *.* from 'mysqltest_1'@'localhost'; unlock tables; drop user 'mysqltest_1'@'localhost'; create database TESTDB; create table t2(a int); create temporary table t1 as select * from mysql.user; delete from mysql.user where host='localhost'; INSERT INTO mysql.user VALUES ('%','mysqltest_1',password('password'),'N','N','N','N','N','N', 'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N', '','','','',0,0,0,0); INSERT INTO mysql.db VALUES ('%','TESTDB','mysqltest_1','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','N','Y','Y','Y',' Y','N'); Warnings: Warning 1265 Data truncated for column 'Alter_routine_priv' at row 1 FLUSH PRIVILEGES; create database TEStdb; ERROR 42000: Access denied for user 'mysqltest_1'@'%' to database 'TEStdb' delete from mysql.user; delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB'; insert into mysql.user select * from t1; drop table t1, t2; drop database TESTDB; flush privileges; mysql-test/t/grant2.test +35 −0 Original line number Diff line number Diff line Loading @@ -429,3 +429,38 @@ disconnect con2root; disconnect con3root; # End of 4.1 tests # # Bug#17279 user with no global privs and with create # priv in db can create databases # create database TESTDB; create table t2(a int); create temporary table t1 as select * from mysql.user; delete from mysql.user where host='localhost'; INSERT INTO mysql.user VALUES ('%','mysqltest_1',password('password'),'N','N','N','N','N','N', 'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N', '','','','',0,0,0,0); INSERT INTO mysql.db VALUES ('%','TESTDB','mysqltest_1','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','N','Y','Y','Y',' Y','N'); FLUSH PRIVILEGES; connect (con1,localhost,mysqltest_1,password,TESTDB); # The user mysqltest_1 should only be allowed access to # database TESTDB, not TEStdb --error 1044 create database TEStdb; # Clean-up connection default; delete from mysql.user; delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB'; insert into mysql.user select * from t1; drop table t1, t2; drop database TESTDB; flush privileges; sql/net_serv.cc +25 −4 Original line number Diff line number Diff line Loading @@ -208,23 +208,40 @@ my_bool net_realloc(NET *net, ulong length) RETURN VALUES 0 No data to read 1 Data or EOF to read -1 Don't know if data is ready or not */ static my_bool net_data_is_ready(my_socket sd) static int net_data_is_ready(my_socket sd) { #ifdef HAVE_POLL struct pollfd ufds; int res; ufds.fd= sd; ufds.events= POLLIN | POLLPRI; if (!(res= poll(&ufds, 1, 0))) return 0; if (res < 0 || !(ufds.revents & (POLLIN | POLLPRI))) return 0; return 1; #else fd_set sfds; struct timeval tv; int res; if (sd >= FD_SETSIZE) return -1; FD_ZERO(&sfds); FD_SET(sd, &sfds); tv.tv_sec= tv.tv_usec= 0; if ((res= select(sd+1, &sfds, NULL, NULL, &tv)) < 0) return FALSE; return 0; else return test(res ? FD_ISSET(sd, &sfds) : 0); #endif } Loading @@ -251,10 +268,10 @@ static my_bool net_data_is_ready(my_socket sd) void net_clear(NET *net) { int count; int count, ready; DBUG_ENTER("net_clear"); #if !defined(EMBEDDED_LIBRARY) while(net_data_is_ready(net->vio->sd)) while((ready= net_data_is_ready(net->vio->sd)) != 0) { /* The socket is ready */ if ((count= vio_read(net->vio, (char*) (net->buff), Loading @@ -269,6 +286,10 @@ void net_clear(NET *net) } else { /* No data to read and 'net_data_is_ready' returned "don't know" */ if (ready == -1) break; DBUG_PRINT("info",("socket ready but only EOF to read - disconnected")); net->error= 2; break; Loading sql/sql_acl.cc +3 −1 Original line number Diff line number Diff line Loading @@ -148,7 +148,9 @@ my_bool acl_init(bool dont_read_acl_tables) acl_cache= new hash_filo(ACL_CACHE_SIZE, 0, 0, (hash_get_key) acl_entry_get_key, (hash_free_key) free, system_charset_info); (hash_free_key) free, /* Use the case sensitive "binary" charset */ &my_charset_bin); if (dont_read_acl_tables) { DBUG_RETURN(0); /* purecov: tested */ Loading Loading
mysql-test/r/grant2.result +22 −0 Original line number Diff line number Diff line Loading @@ -334,3 +334,25 @@ lock table mysql.user write; revoke all on *.* from 'mysqltest_1'@'localhost'; unlock tables; drop user 'mysqltest_1'@'localhost'; create database TESTDB; create table t2(a int); create temporary table t1 as select * from mysql.user; delete from mysql.user where host='localhost'; INSERT INTO mysql.user VALUES ('%','mysqltest_1',password('password'),'N','N','N','N','N','N', 'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N', '','','','',0,0,0,0); INSERT INTO mysql.db VALUES ('%','TESTDB','mysqltest_1','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','N','Y','Y','Y',' Y','N'); Warnings: Warning 1265 Data truncated for column 'Alter_routine_priv' at row 1 FLUSH PRIVILEGES; create database TEStdb; ERROR 42000: Access denied for user 'mysqltest_1'@'%' to database 'TEStdb' delete from mysql.user; delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB'; insert into mysql.user select * from t1; drop table t1, t2; drop database TESTDB; flush privileges;
mysql-test/t/grant2.test +35 −0 Original line number Diff line number Diff line Loading @@ -429,3 +429,38 @@ disconnect con2root; disconnect con3root; # End of 4.1 tests # # Bug#17279 user with no global privs and with create # priv in db can create databases # create database TESTDB; create table t2(a int); create temporary table t1 as select * from mysql.user; delete from mysql.user where host='localhost'; INSERT INTO mysql.user VALUES ('%','mysqltest_1',password('password'),'N','N','N','N','N','N', 'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N', '','','','',0,0,0,0); INSERT INTO mysql.db VALUES ('%','TESTDB','mysqltest_1','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','N','Y','Y','Y',' Y','N'); FLUSH PRIVILEGES; connect (con1,localhost,mysqltest_1,password,TESTDB); # The user mysqltest_1 should only be allowed access to # database TESTDB, not TEStdb --error 1044 create database TEStdb; # Clean-up connection default; delete from mysql.user; delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB'; insert into mysql.user select * from t1; drop table t1, t2; drop database TESTDB; flush privileges;
sql/net_serv.cc +25 −4 Original line number Diff line number Diff line Loading @@ -208,23 +208,40 @@ my_bool net_realloc(NET *net, ulong length) RETURN VALUES 0 No data to read 1 Data or EOF to read -1 Don't know if data is ready or not */ static my_bool net_data_is_ready(my_socket sd) static int net_data_is_ready(my_socket sd) { #ifdef HAVE_POLL struct pollfd ufds; int res; ufds.fd= sd; ufds.events= POLLIN | POLLPRI; if (!(res= poll(&ufds, 1, 0))) return 0; if (res < 0 || !(ufds.revents & (POLLIN | POLLPRI))) return 0; return 1; #else fd_set sfds; struct timeval tv; int res; if (sd >= FD_SETSIZE) return -1; FD_ZERO(&sfds); FD_SET(sd, &sfds); tv.tv_sec= tv.tv_usec= 0; if ((res= select(sd+1, &sfds, NULL, NULL, &tv)) < 0) return FALSE; return 0; else return test(res ? FD_ISSET(sd, &sfds) : 0); #endif } Loading @@ -251,10 +268,10 @@ static my_bool net_data_is_ready(my_socket sd) void net_clear(NET *net) { int count; int count, ready; DBUG_ENTER("net_clear"); #if !defined(EMBEDDED_LIBRARY) while(net_data_is_ready(net->vio->sd)) while((ready= net_data_is_ready(net->vio->sd)) != 0) { /* The socket is ready */ if ((count= vio_read(net->vio, (char*) (net->buff), Loading @@ -269,6 +286,10 @@ void net_clear(NET *net) } else { /* No data to read and 'net_data_is_ready' returned "don't know" */ if (ready == -1) break; DBUG_PRINT("info",("socket ready but only EOF to read - disconnected")); net->error= 2; break; Loading
sql/sql_acl.cc +3 −1 Original line number Diff line number Diff line Loading @@ -148,7 +148,9 @@ my_bool acl_init(bool dont_read_acl_tables) acl_cache= new hash_filo(ACL_CACHE_SIZE, 0, 0, (hash_get_key) acl_entry_get_key, (hash_free_key) free, system_charset_info); (hash_free_key) free, /* Use the case sensitive "binary" charset */ &my_charset_bin); if (dont_read_acl_tables) { DBUG_RETURN(0); /* purecov: tested */ Loading