Commit c431088d authored by Georgi Kodinov's avatar Georgi Kodinov

merge

parents 23bd7374 2ac344ec
...@@ -510,4 +510,65 @@ DROP USER mysqltest_u1@localhost; ...@@ -510,4 +510,65 @@ DROP USER mysqltest_u1@localhost;
DROP PROCEDURE p_suid; DROP PROCEDURE p_suid;
DROP FUNCTION f_suid; DROP FUNCTION f_suid;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #48872 : Privileges for stored functions ignored if function name
# is mixed case
#
CREATE DATABASE B48872;
USE B48872;
CREATE TABLE `TestTab` (id INT);
INSERT INTO `TestTab` VALUES (1),(2);
CREATE FUNCTION `f_Test`() RETURNS INT RETURN 123;
CREATE FUNCTION `f_Test_denied`() RETURNS INT RETURN 123;
CREATE USER 'tester';
CREATE USER 'Tester';
GRANT SELECT ON TABLE `TestTab` TO 'tester';
GRANT EXECUTE ON FUNCTION `f_Test` TO 'tester';
GRANT EXECUTE ON FUNCTION `f_Test_denied` TO 'Tester';
SELECT f_Test();
f_Test()
123
SELECT * FROM TestTab;
id
1
2
SELECT * FROM TestTab;
id
1
2
SELECT `f_Test`();
`f_Test`()
123
SELECT `F_TEST`();
`F_TEST`()
123
SELECT f_Test();
f_Test()
123
SELECT F_TEST();
F_TEST()
123
SELECT * FROM TestTab;
ERROR 42000: SELECT command denied to user 'Tester'@'localhost' for table 'TestTab'
SELECT `f_Test`();
ERROR 42000: execute command denied to user 'Tester'@'%' for routine 'B48872.f_Test'
SELECT `F_TEST`();
ERROR 42000: execute command denied to user 'Tester'@'%' for routine 'B48872.f_Test'
SELECT f_Test();
ERROR 42000: execute command denied to user 'Tester'@'%' for routine 'B48872.f_Test'
SELECT F_TEST();
ERROR 42000: execute command denied to user 'Tester'@'%' for routine 'B48872.f_Test'
SELECT `f_Test_denied`();
`f_Test_denied`()
123
SELECT `F_TEST_DENIED`();
`F_TEST_DENIED`()
123
DROP TABLE `TestTab`;
DROP FUNCTION `f_Test`;
DROP FUNCTION `f_Test_denied`;
USE test;
DROP USER 'tester';
DROP USER 'Tester';
DROP DATABASE B48872;
End of 5.0 tests. End of 5.0 tests.
...@@ -865,6 +865,63 @@ DROP PROCEDURE p_suid; ...@@ -865,6 +865,63 @@ DROP PROCEDURE p_suid;
DROP FUNCTION f_suid; DROP FUNCTION f_suid;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # Bug #48872 : Privileges for stored functions ignored if function name
--echo # is mixed case
--echo #
CREATE DATABASE B48872;
USE B48872;
CREATE TABLE `TestTab` (id INT);
INSERT INTO `TestTab` VALUES (1),(2);
CREATE FUNCTION `f_Test`() RETURNS INT RETURN 123;
CREATE FUNCTION `f_Test_denied`() RETURNS INT RETURN 123;
CREATE USER 'tester';
CREATE USER 'Tester';
GRANT SELECT ON TABLE `TestTab` TO 'tester';
GRANT EXECUTE ON FUNCTION `f_Test` TO 'tester';
GRANT EXECUTE ON FUNCTION `f_Test_denied` TO 'Tester';
SELECT f_Test();
SELECT * FROM TestTab;
CONNECT (con_tester,localhost,tester,,B48872);
CONNECT (con_tester_denied,localhost,Tester,,B48872);
CONNECTION con_tester;
SELECT * FROM TestTab;
SELECT `f_Test`();
SELECT `F_TEST`();
SELECT f_Test();
SELECT F_TEST();
CONNECTION con_tester_denied;
--error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM TestTab;
--error ER_PROCACCESS_DENIED_ERROR
SELECT `f_Test`();
--error ER_PROCACCESS_DENIED_ERROR
SELECT `F_TEST`();
--error ER_PROCACCESS_DENIED_ERROR
SELECT f_Test();
--error ER_PROCACCESS_DENIED_ERROR
SELECT F_TEST();
SELECT `f_Test_denied`();
SELECT `F_TEST_DENIED`();
CONNECTION default;
DISCONNECT con_tester;
DISCONNECT con_tester_denied;
DROP TABLE `TestTab`;
DROP FUNCTION `f_Test`;
DROP FUNCTION `f_Test_denied`;
USE test;
DROP USER 'tester';
DROP USER 'Tester';
DROP DATABASE B48872;
--echo End of 5.0 tests. --echo End of 5.0 tests.
# Wait till all disconnects are completed # Wait till all disconnects are completed
......
...@@ -2444,14 +2444,17 @@ static GRANT_NAME *name_hash_search(HASH *name_hash, ...@@ -2444,14 +2444,17 @@ static GRANT_NAME *name_hash_search(HASH *name_hash,
const char *host,const char* ip, const char *host,const char* ip,
const char *db, const char *db,
const char *user, const char *tname, const char *user, const char *tname,
bool exact) bool exact, bool name_tolower)
{ {
char helping [NAME_LEN*2+USERNAME_LENGTH+3]; char helping [NAME_LEN*2+USERNAME_LENGTH+3], *name_ptr;
uint len; uint len;
GRANT_NAME *grant_name,*found=0; GRANT_NAME *grant_name,*found=0;
HASH_SEARCH_STATE state; HASH_SEARCH_STATE state;
len = (uint) (strmov(strmov(strmov(helping,user)+1,db)+1,tname)-helping)+ 1; name_ptr= strmov(strmov(helping, user) + 1, db) + 1;
len = (uint) (strmov(name_ptr, tname) - helping) + 1;
if (name_tolower)
my_casedn_str(files_charset_info, name_ptr);
for (grant_name= (GRANT_NAME*) hash_first(name_hash, (uchar*) helping, for (grant_name= (GRANT_NAME*) hash_first(name_hash, (uchar*) helping,
len, &state); len, &state);
grant_name ; grant_name ;
...@@ -2484,7 +2487,7 @@ routine_hash_search(const char *host, const char *ip, const char *db, ...@@ -2484,7 +2487,7 @@ routine_hash_search(const char *host, const char *ip, const char *db,
{ {
return (GRANT_TABLE*) return (GRANT_TABLE*)
name_hash_search(proc ? &proc_priv_hash : &func_priv_hash, name_hash_search(proc ? &proc_priv_hash : &func_priv_hash,
host, ip, db, user, tname, exact); host, ip, db, user, tname, exact, TRUE);
} }
...@@ -2493,7 +2496,7 @@ table_hash_search(const char *host, const char *ip, const char *db, ...@@ -2493,7 +2496,7 @@ table_hash_search(const char *host, const char *ip, const char *db,
const char *user, const char *tname, bool exact) const char *user, const char *tname, bool exact)
{ {
return (GRANT_TABLE*) name_hash_search(&column_priv_hash, host, ip, db, return (GRANT_TABLE*) name_hash_search(&column_priv_hash, host, ip, db,
user, tname, exact); user, tname, exact, FALSE);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment