Commit 1271d8b9 authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-5.0

into  shellback.(none):/home/msvensson/mysql/mysql-5.0

parents fedf6131 ba3b8fd8
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -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;
+35 −0
Original line number Diff line number Diff line
@@ -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;
+25 −4
Original line number Diff line number Diff line
@@ -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
}


@@ -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),
@@ -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;
+3 −1
Original line number Diff line number Diff line
@@ -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 */