mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.0
into gw.mysql.r18.ru:/usr/home/ram/work/4.0.b4898
This commit is contained in:
commit
1b666071d1
3 changed files with 46 additions and 5 deletions
|
@ -131,3 +131,21 @@ Wrong usage of DB GRANT and GLOBAL PRIVILEGES
|
||||||
select 1;
|
select 1;
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
|
insert into mysql.user (host, user) values ('localhost', 'test11');
|
||||||
|
insert into mysql.db (host, db, user, select_priv) values
|
||||||
|
('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
|
||||||
|
flush privileges;
|
||||||
|
show grants for test11@localhost;
|
||||||
|
Grants for test11@localhost
|
||||||
|
GRANT USAGE ON *.* TO 'test11'@'localhost'
|
||||||
|
GRANT SELECT ON `ab%`.* TO 'test11'@'localhost'
|
||||||
|
GRANT SELECT ON `a%`.* TO 'test11'@'localhost'
|
||||||
|
alter table mysql.db order by db desc;
|
||||||
|
flush privileges;
|
||||||
|
show grants for test11@localhost;
|
||||||
|
Grants for test11@localhost
|
||||||
|
GRANT USAGE ON *.* TO 'test11'@'localhost'
|
||||||
|
GRANT SELECT ON `ab%`.* TO 'test11'@'localhost'
|
||||||
|
GRANT SELECT ON `a%`.* TO 'test11'@'localhost'
|
||||||
|
delete from mysql.user where user='test11';
|
||||||
|
delete from mysql.db where user='test11';
|
||||||
|
|
|
@ -89,3 +89,18 @@ drop table t1;
|
||||||
--error 1221
|
--error 1221
|
||||||
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
|
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
|
||||||
select 1; -- To test that the previous command didn't cause problems
|
select 1; -- To test that the previous command didn't cause problems
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #4898: User privileges depending on ORDER BY Settings of table db
|
||||||
|
#
|
||||||
|
insert into mysql.user (host, user) values ('localhost', 'test11');
|
||||||
|
insert into mysql.db (host, db, user, select_priv) values
|
||||||
|
('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
|
||||||
|
flush privileges;
|
||||||
|
show grants for test11@localhost;
|
||||||
|
alter table mysql.db order by db desc;
|
||||||
|
flush privileges;
|
||||||
|
show grants for test11@localhost;
|
||||||
|
delete from mysql.user where user='test11';
|
||||||
|
delete from mysql.db where user='test11';
|
||||||
|
|
|
@ -460,22 +460,30 @@ static ulong get_sort(uint count,...)
|
||||||
va_start(args,count);
|
va_start(args,count);
|
||||||
ulong sort=0;
|
ulong sort=0;
|
||||||
|
|
||||||
|
/* Should not use this function with more than 4 arguments for compare. */
|
||||||
|
DBUG_ASSERT(count <= 4);
|
||||||
|
|
||||||
while (count--)
|
while (count--)
|
||||||
{
|
{
|
||||||
char *str=va_arg(args,char*);
|
char *start, *str= va_arg(args,char*);
|
||||||
uint chars=0,wild=0;
|
uint chars= 0;
|
||||||
|
uint wild_pos= 0; /* first wildcard position */
|
||||||
|
|
||||||
if (str)
|
if (start= str)
|
||||||
{
|
{
|
||||||
for (; *str ; str++)
|
for (; *str ; str++)
|
||||||
{
|
{
|
||||||
if (*str == wild_many || *str == wild_one || *str == wild_prefix)
|
if (*str == wild_many || *str == wild_one || *str == wild_prefix)
|
||||||
wild++;
|
{
|
||||||
|
wild_pos= str - start + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
chars++;
|
chars++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sort= (sort << 8) + (wild ? 1 : chars ? 2 : 0);
|
sort= (sort << 8) + (wild_pos ? (wild_pos > 127 ? 127 : wild_pos) :
|
||||||
|
(chars ? 128 : 0));
|
||||||
}
|
}
|
||||||
va_end(args);
|
va_end(args);
|
||||||
return sort;
|
return sort;
|
||||||
|
|
Loading…
Reference in a new issue