Loading mysql-test/r/grant.result +19 −0 Original line number Diff line number Diff line Loading @@ -131,3 +131,22 @@ Wrong usage of DB GRANT and GLOBAL PRIVILEGES select 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'); alter table mysql.db order by db asc; 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'; mysql-test/t/grant.test +16 −0 Original line number Diff line number Diff line Loading @@ -89,3 +89,19 @@ drop table t1; --error 1221 GRANT FILE on mysqltest.* to mysqltest_1@localhost; 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'); alter table mysql.db order by db asc; 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'; sql/sql_acl.cc +13 −5 Original line number Diff line number Diff line Loading @@ -460,22 +460,30 @@ static ulong get_sort(uint count,...) va_start(args,count); ulong sort=0; /* Should not use this function with more than 4 arguments for compare. */ DBUG_ASSERT(count <= 4); while (count--) { char *str=va_arg(args,char*); uint chars=0,wild=0; char *start, *str= va_arg(args,char*); uint chars= 0; uint wild_pos= 0; /* first wildcard position */ if (str) if (start= str) { for (; *str ; str++) { if (*str == wild_many || *str == wild_one || *str == wild_prefix) wild++; { wild_pos= str - start + 1; break; } else 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); return sort; Loading Loading
mysql-test/r/grant.result +19 −0 Original line number Diff line number Diff line Loading @@ -131,3 +131,22 @@ Wrong usage of DB GRANT and GLOBAL PRIVILEGES select 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'); alter table mysql.db order by db asc; 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';
mysql-test/t/grant.test +16 −0 Original line number Diff line number Diff line Loading @@ -89,3 +89,19 @@ drop table t1; --error 1221 GRANT FILE on mysqltest.* to mysqltest_1@localhost; 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'); alter table mysql.db order by db asc; 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';
sql/sql_acl.cc +13 −5 Original line number Diff line number Diff line Loading @@ -460,22 +460,30 @@ static ulong get_sort(uint count,...) va_start(args,count); ulong sort=0; /* Should not use this function with more than 4 arguments for compare. */ DBUG_ASSERT(count <= 4); while (count--) { char *str=va_arg(args,char*); uint chars=0,wild=0; char *start, *str= va_arg(args,char*); uint chars= 0; uint wild_pos= 0; /* first wildcard position */ if (str) if (start= str) { for (; *str ; str++) { if (*str == wild_many || *str == wild_one || *str == wild_prefix) wild++; { wild_pos= str - start + 1; break; } else 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); return sort; Loading