Commit a9a6cd13 authored by smenon's avatar smenon

merge

parents 0752b54a 64bee6fd
...@@ -9,15 +9,19 @@ ...@@ -9,15 +9,19 @@
*.core *.core
*.d *.d
*.da *.da
*.dll
*.exe *.exe
*.exp
*.gcda *.gcda
*.gcno *.gcno
*.gcov *.gcov
*.idb *.idb
*.ilk
*.la *.la
*.lai *.lai
*.lib *.lib
*.lo *.lo
*.manifest
*.map *.map
*.o *.o
*.obj *.obj
...@@ -148,6 +152,7 @@ Makefile ...@@ -148,6 +152,7 @@ Makefile
Makefile.in Makefile.in
Makefile.in' Makefile.in'
PENDING/* PENDING/*
scripts/scripts
TAGS TAGS
VC++Files/client/mysql_amd64.dsp VC++Files/client/mysql_amd64.dsp
ac_available_languages_fragment ac_available_languages_fragment
...@@ -1981,6 +1986,7 @@ sql-bench/test-transactions ...@@ -1981,6 +1986,7 @@ sql-bench/test-transactions
sql-bench/test-wisconsin sql-bench/test-wisconsin
sql/*.cpp sql/*.cpp
sql/*.ds? sql/*.ds?
sql/*.def
sql/*.vcproj sql/*.vcproj
sql/.deps/client.Po sql/.deps/client.Po
sql/.deps/derror.Po sql/.deps/derror.Po
...@@ -2116,6 +2122,7 @@ sql/.libs/udf_example.lai ...@@ -2116,6 +2122,7 @@ sql/.libs/udf_example.lai
sql/.libs/udf_example.so.0 sql/.libs/udf_example.so.0
sql/.libs/udf_example.so.0.0.0 sql/.libs/udf_example.so.0.0.0
sql/client.c sql/client.c
sql/cmake_dummy.cc
sql/Doxyfile sql/Doxyfile
sql/f.c sql/f.c
sql/gen_lex_hash sql/gen_lex_hash
...@@ -3046,6 +3053,7 @@ vio/viotest.cpp ...@@ -3046,6 +3053,7 @@ vio/viotest.cpp
win/configure.data win/configure.data
win/vs71cache.txt win/vs71cache.txt
win/vs8cache.txt win/vs8cache.txt
win/nmake_cache.txt
ylwrap ylwrap
zlib/*.ds? zlib/*.ds?
zlib/*.vcproj zlib/*.vcproj
......
...@@ -27,7 +27,7 @@ dnl ...@@ -27,7 +27,7 @@ dnl
dnl When changing the major version number please also check the switch dnl When changing the major version number please also check the switch
dnl statement in mysqlbinlog::check_master_version(). You may also need dnl statement in mysqlbinlog::check_master_version(). You may also need
dnl to update version.c in ndb. dnl to update version.c in ndb.
AC_INIT([MySQL Server], [5.5.8-rc], [], [mysql]) AC_INIT([MySQL Server], [5.5.8], [], [mysql])
AC_CONFIG_SRCDIR([sql/mysqld.cc]) AC_CONFIG_SRCDIR([sql/mysqld.cc])
AC_CANONICAL_SYSTEM AC_CANONICAL_SYSTEM
......
...@@ -21,7 +21,7 @@ ndb_binlog_index ...@@ -21,7 +21,7 @@ ndb_binlog_index
plugin plugin
proc proc
procs_priv procs_priv
proxy_priv proxies_priv
servers servers
slow_log slow_log
tables_priv tables_priv
......
...@@ -15,7 +15,7 @@ ndb_binlog_index ...@@ -15,7 +15,7 @@ ndb_binlog_index
plugin plugin
proc proc
procs_priv procs_priv
proxy_priv proxies_priv
servers servers
slow_log slow_log
tables_priv tables_priv
...@@ -49,7 +49,7 @@ ndb_binlog_index ...@@ -49,7 +49,7 @@ ndb_binlog_index
plugin plugin
proc proc
procs_priv procs_priv
proxy_priv proxies_priv
servers servers
slow_log slow_log
tables_priv tables_priv
...@@ -91,7 +91,7 @@ ndb_binlog_index ...@@ -91,7 +91,7 @@ ndb_binlog_index
plugin plugin
proc proc
procs_priv procs_priv
proxy_priv proxies_priv
servers servers
slow_log slow_log
tables_priv tables_priv
......
...@@ -134,3 +134,15 @@ INSERT INTO t1 VALUES ('abc\0\0'); ...@@ -134,3 +134,15 @@ INSERT INTO t1 VALUES ('abc\0\0');
INSERT INTO t1 VALUES ('abc\0\0'); INSERT INTO t1 VALUES ('abc\0\0');
ERROR 23000: Duplicate entry 'abc\x00\x00' for key 'PRIMARY' ERROR 23000: Duplicate entry 'abc\x00\x00' for key 'PRIMARY'
DROP TABLE t1; DROP TABLE t1;
#
# Bug#57882: Item_func_conv_charset::val_str(String*):
# Assertion `fixed == 1' failed
#
SELECT (CONVERT('0' USING latin1) IN (CHAR(COT('v') USING utf8),''));
ERROR 22003: DOUBLE value is out of range in 'cot('v')'
SET NAMES utf8 COLLATE utf8_latvian_ci ;
SELECT UPDATEXML(-73 * -2465717823867977728,@@global.slave_net_timeout,null);
ERROR 22003: BIGINT value is out of range in '(-(73) * -(2465717823867977728))'
#
# End Bug#57882
#
...@@ -88,7 +88,7 @@ host ...@@ -88,7 +88,7 @@ host
plugin plugin
proc proc
procs_priv procs_priv
proxy_priv proxies_priv
servers servers
slow_log slow_log
tables_priv tables_priv
......
...@@ -27,7 +27,7 @@ mysql.ndb_binlog_index OK ...@@ -27,7 +27,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.renamed_general_log OK mysql.renamed_general_log OK
mysql.servers OK mysql.servers OK
mysql.slow_log OK mysql.slow_log OK
......
...@@ -15,7 +15,7 @@ mysql.ndb_binlog_index OK ...@@ -15,7 +15,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log OK mysql.slow_log OK
mysql.tables_priv OK mysql.tables_priv OK
...@@ -44,7 +44,7 @@ mysql.ndb_binlog_index OK ...@@ -44,7 +44,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log OK mysql.slow_log OK
mysql.tables_priv OK mysql.tables_priv OK
...@@ -73,7 +73,7 @@ mysql.ndb_binlog_index OK ...@@ -73,7 +73,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log OK mysql.slow_log OK
mysql.tables_priv OK mysql.tables_priv OK
...@@ -104,7 +104,7 @@ mysql.ndb_binlog_index OK ...@@ -104,7 +104,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log OK mysql.slow_log OK
mysql.tables_priv OK mysql.tables_priv OK
...@@ -139,7 +139,7 @@ mysql.ndb_binlog_index OK ...@@ -139,7 +139,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log OK mysql.slow_log OK
mysql.tables_priv OK mysql.tables_priv OK
...@@ -177,7 +177,7 @@ mysql.ndb_binlog_index OK ...@@ -177,7 +177,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log OK mysql.slow_log OK
mysql.tables_priv OK mysql.tables_priv OK
......
...@@ -17,7 +17,7 @@ mysql.ndb_binlog_index OK ...@@ -17,7 +17,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log OK mysql.slow_log OK
mysql.tables_priv OK mysql.tables_priv OK
......
...@@ -18,7 +18,7 @@ mysql.ndb_binlog_index OK ...@@ -18,7 +18,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log mysql.slow_log
note : The storage engine for the table doesn't support analyze note : The storage engine for the table doesn't support analyze
...@@ -46,7 +46,7 @@ mysql.ndb_binlog_index OK ...@@ -46,7 +46,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log mysql.slow_log
note : The storage engine for the table doesn't support optimize note : The storage engine for the table doesn't support optimize
...@@ -72,7 +72,7 @@ mysql.ndb_binlog_index OK ...@@ -72,7 +72,7 @@ mysql.ndb_binlog_index OK
mysql.plugin OK mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.proxy_priv OK mysql.proxies_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log mysql.slow_log
note : The storage engine for the table doesn't support analyze note : The storage engine for the table doesn't support analyze
...@@ -98,7 +98,7 @@ mysql.ndb_binlog_index Table is already up to date ...@@ -98,7 +98,7 @@ mysql.ndb_binlog_index Table is already up to date
mysql.plugin Table is already up to date mysql.plugin Table is already up to date
mysql.proc Table is already up to date mysql.proc Table is already up to date
mysql.procs_priv Table is already up to date mysql.procs_priv Table is already up to date
mysql.proxy_priv Table is already up to date mysql.proxies_priv Table is already up to date
mysql.servers Table is already up to date mysql.servers Table is already up to date
mysql.slow_log mysql.slow_log
note : The storage engine for the table doesn't support optimize note : The storage engine for the table doesn't support optimize
......
...@@ -11,6 +11,26 @@ test_plugin_server plug_dest ...@@ -11,6 +11,26 @@ test_plugin_server plug_dest
## test plugin auth ## test plugin auth
ERROR 28000: Access denied for user 'plug'@'localhost' (using password: YES) ERROR 28000: Access denied for user 'plug'@'localhost' (using password: YES)
GRANT PROXY ON plug_dest TO plug; GRANT PROXY ON plug_dest TO plug;
test proxies_priv columns
SELECT * FROM mysql.proxies_priv;
Host User Proxied_host Proxied_user With_grant Grantor Timestamp
xx root 1 xx
xx root 1 xx
xx plug % plug_dest 0 root@localhost xx
test mysql.proxies_priv;
SHOW CREATE TABLE mysql.proxies_priv;
Table Create Table
proxies_priv CREATE TABLE `proxies_priv` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
`Proxied_host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`Proxied_user` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
`With_grant` tinyint(1) NOT NULL DEFAULT '0',
`Grantor` char(77) COLLATE utf8_bin NOT NULL DEFAULT '',
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`Host`,`User`,`Proxied_host`,`Proxied_user`),
KEY `Grantor` (`Grantor`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='User proxy privileges'
select USER(),CURRENT_USER(); select USER(),CURRENT_USER();
USER() CURRENT_USER() USER() CURRENT_USER()
plug@localhost plug_dest@% plug@localhost plug_dest@%
...@@ -146,8 +166,8 @@ Grants for test_drop@localhost ...@@ -146,8 +166,8 @@ Grants for test_drop@localhost
GRANT USAGE ON *.* TO 'test_drop'@'localhost' GRANT USAGE ON *.* TO 'test_drop'@'localhost'
GRANT PROXY ON 'future_user'@'%' TO 'test_drop'@'localhost' GRANT PROXY ON 'future_user'@'%' TO 'test_drop'@'localhost'
DROP USER test_drop@localhost; DROP USER test_drop@localhost;
SELECT * FROM mysql.proxy_priv WHERE Host = 'test_drop' AND User = 'localhost'; SELECT * FROM mysql.proxies_priv WHERE Host = 'test_drop' AND User = 'localhost';
Host User Proxied_Host Proxied_User With_Grant Host User Proxied_host Proxied_user With_grant Grantor Timestamp
DROP USER proxy_admin; DROP USER proxy_admin;
DROP USER grant_plug,grant_plug_dest,grant_plug_dest2; DROP USER grant_plug,grant_plug_dest,grant_plug_dest2;
## END GRANT PROXY tests ## END GRANT PROXY tests
......
...@@ -14,7 +14,7 @@ ndb_binlog_index ...@@ -14,7 +14,7 @@ ndb_binlog_index
plugin plugin
proc proc
procs_priv procs_priv
proxy_priv proxies_priv
servers servers
slow_log slow_log
tables_priv tables_priv
......
...@@ -134,11 +134,13 @@ def mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_general_ ...@@ -134,11 +134,13 @@ def mysql procs_priv Routine_name 4 NO char 64 192 NULL NULL utf8 utf8_general_
def mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references def mysql procs_priv Routine_type 5 NULL NO enum 9 27 NULL NULL utf8 utf8_bin enum('FUNCTION','PROCEDURE') PRI select,insert,update,references
def mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references def mysql procs_priv Timestamp 8 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
def mysql procs_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references def mysql procs_priv User 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
def mysql proxy_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references def mysql proxies_priv Grantor 6 NO char 77 231 NULL NULL utf8 utf8_bin char(77) MUL select,insert,update,references
def mysql proxy_priv Proxied_Host 3 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references def mysql proxies_priv Host 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
def mysql proxy_priv Proxied_User 4 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references def mysql proxies_priv Proxied_host 3 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
def mysql proxy_priv User 2 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references def mysql proxies_priv Proxied_user 4 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
def mysql proxy_priv With_Grant 5 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references def mysql proxies_priv Timestamp 7 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
def mysql proxies_priv User 2 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
def mysql proxies_priv With_grant 5 0 NO tinyint NULL NULL 3 0 NULL NULL tinyint(1) select,insert,update,references
def mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references def mysql servers Db 3 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
def mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references def mysql servers Host 2 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
def mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references def mysql servers Owner 9 NO char 64 192 NULL NULL utf8 utf8_general_ci char(64) select,insert,update,references
...@@ -425,11 +427,13 @@ NULL mysql proc modified timestamp NULL NULL NULL NULL timestamp ...@@ -425,11 +427,13 @@ NULL mysql proc modified timestamp NULL NULL NULL NULL timestamp
3.0000 mysql procs_priv Grantor char 77 231 utf8 utf8_bin char(77) 3.0000 mysql procs_priv Grantor char 77 231 utf8 utf8_bin char(77)
3.0000 mysql procs_priv Proc_priv set 27 81 utf8 utf8_general_ci set('Execute','Alter Routine','Grant') 3.0000 mysql procs_priv Proc_priv set 27 81 utf8 utf8_general_ci set('Execute','Alter Routine','Grant')
NULL mysql procs_priv Timestamp timestamp NULL NULL NULL NULL timestamp NULL mysql procs_priv Timestamp timestamp NULL NULL NULL NULL timestamp
3.0000 mysql proxy_priv Host char 60 180 utf8 utf8_bin char(60) 3.0000 mysql proxies_priv Host char 60 180 utf8 utf8_bin char(60)
3.0000 mysql proxy_priv User char 16 48 utf8 utf8_bin char(16) 3.0000 mysql proxies_priv User char 16 48 utf8 utf8_bin char(16)
3.0000 mysql proxy_priv Proxied_Host char 16 48 utf8 utf8_bin char(16) 3.0000 mysql proxies_priv Proxied_host char 60 180 utf8 utf8_bin char(60)
3.0000 mysql proxy_priv Proxied_User char 60 180 utf8 utf8_bin char(60) 3.0000 mysql proxies_priv Proxied_user char 16 48 utf8 utf8_bin char(16)
NULL mysql proxy_priv With_Grant tinyint NULL NULL NULL NULL tinyint(1) NULL mysql proxies_priv With_grant tinyint NULL NULL NULL NULL tinyint(1)
3.0000 mysql proxies_priv Grantor char 77 231 utf8 utf8_bin char(77)
NULL mysql proxies_priv Timestamp timestamp NULL NULL NULL NULL timestamp
3.0000 mysql servers Server_name char 64 192 utf8 utf8_general_ci char(64) 3.0000 mysql servers Server_name char 64 192 utf8 utf8_general_ci char(64)
3.0000 mysql servers Host char 64 192 utf8 utf8_general_ci char(64) 3.0000 mysql servers Host char 64 192 utf8 utf8_general_ci char(64)
3.0000 mysql servers Db char 64 192 utf8 utf8_general_ci char(64) 3.0000 mysql servers Db char 64 192 utf8 utf8_general_ci char(64)
......
...@@ -106,10 +106,10 @@ def mysql PRIMARY def mysql procs_priv Db ...@@ -106,10 +106,10 @@ def mysql PRIMARY def mysql procs_priv Db
def mysql PRIMARY def mysql procs_priv User def mysql PRIMARY def mysql procs_priv User
def mysql PRIMARY def mysql procs_priv Routine_name def mysql PRIMARY def mysql procs_priv Routine_name
def mysql PRIMARY def mysql procs_priv Routine_type def mysql PRIMARY def mysql procs_priv Routine_type
def mysql PRIMARY def mysql proxy_priv Host def mysql PRIMARY def mysql proxies_priv Host
def mysql PRIMARY def mysql proxy_priv User def mysql PRIMARY def mysql proxies_priv User
def mysql PRIMARY def mysql proxy_priv Proxied_Host def mysql PRIMARY def mysql proxies_priv Proxied_host
def mysql PRIMARY def mysql proxy_priv Proxied_User def mysql PRIMARY def mysql proxies_priv Proxied_user
def mysql PRIMARY def mysql servers Server_name def mysql PRIMARY def mysql servers Server_name
def mysql PRIMARY def mysql tables_priv Host def mysql PRIMARY def mysql tables_priv Host
def mysql PRIMARY def mysql tables_priv Db def mysql PRIMARY def mysql tables_priv Db
......
...@@ -118,10 +118,11 @@ def mysql procs_priv mysql PRIMARY ...@@ -118,10 +118,11 @@ def mysql procs_priv mysql PRIMARY
def mysql procs_priv mysql PRIMARY def mysql procs_priv mysql PRIMARY
def mysql procs_priv mysql PRIMARY def mysql procs_priv mysql PRIMARY
def mysql procs_priv mysql Grantor def mysql procs_priv mysql Grantor
def mysql proxy_priv mysql PRIMARY def mysql proxies_priv mysql PRIMARY
def mysql proxy_priv mysql PRIMARY def mysql proxies_priv mysql PRIMARY
def mysql proxy_priv mysql PRIMARY def mysql proxies_priv mysql PRIMARY
def mysql proxy_priv mysql PRIMARY def mysql proxies_priv mysql PRIMARY
def mysql proxies_priv mysql Grantor
def mysql servers mysql PRIMARY def mysql servers mysql PRIMARY
def mysql tables_priv mysql PRIMARY def mysql tables_priv mysql PRIMARY
def mysql tables_priv mysql PRIMARY def mysql tables_priv mysql PRIMARY
......
...@@ -40,10 +40,11 @@ def mysql procs_priv 0 mysql PRIMARY 2 Db A #CARD# NULL NULL BTREE ...@@ -40,10 +40,11 @@ def mysql procs_priv 0 mysql PRIMARY 2 Db A #CARD# NULL NULL BTREE
def mysql procs_priv 0 mysql PRIMARY 3 User A #CARD# NULL NULL BTREE def mysql procs_priv 0 mysql PRIMARY 3 User A #CARD# NULL NULL BTREE
def mysql procs_priv 0 mysql PRIMARY 4 Routine_name A #CARD# NULL NULL BTREE def mysql procs_priv 0 mysql PRIMARY 4 Routine_name A #CARD# NULL NULL BTREE
def mysql procs_priv 0 mysql PRIMARY 5 Routine_type A #CARD# NULL NULL BTREE def mysql procs_priv 0 mysql PRIMARY 5 Routine_type A #CARD# NULL NULL BTREE
def mysql proxy_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE def mysql proxies_priv 1 mysql Grantor 1 Grantor A #CARD# NULL NULL BTREE
def mysql proxy_priv 0 mysql PRIMARY 2 User A #CARD# NULL NULL BTREE def mysql proxies_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE
def mysql proxy_priv 0 mysql PRIMARY 3 Proxied_Host A #CARD# NULL NULL BTREE def mysql proxies_priv 0 mysql PRIMARY 2 User A #CARD# NULL NULL BTREE
def mysql proxy_priv 0 mysql PRIMARY 4 Proxied_User A #CARD# NULL NULL BTREE def mysql proxies_priv 0 mysql PRIMARY 3 Proxied_host A #CARD# NULL NULL BTREE
def mysql proxies_priv 0 mysql PRIMARY 4 Proxied_user A #CARD# NULL NULL BTREE
def mysql servers 0 mysql PRIMARY 1 Server_name A #CARD# NULL NULL BTREE def mysql servers 0 mysql PRIMARY 1 Server_name A #CARD# NULL NULL BTREE
def mysql tables_priv 1 mysql Grantor 1 Grantor A #CARD# NULL NULL BTREE def mysql tables_priv 1 mysql Grantor 1 Grantor A #CARD# NULL NULL BTREE
def mysql tables_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE def mysql tables_priv 0 mysql PRIMARY 1 Host A #CARD# NULL NULL BTREE
......
...@@ -73,7 +73,7 @@ def mysql PRIMARY mysql ndb_binlog_index ...@@ -73,7 +73,7 @@ def mysql PRIMARY mysql ndb_binlog_index
def mysql PRIMARY mysql plugin def mysql PRIMARY mysql plugin
def mysql PRIMARY mysql proc def mysql PRIMARY mysql proc
def mysql PRIMARY mysql procs_priv def mysql PRIMARY mysql procs_priv
def mysql PRIMARY mysql proxy_priv def mysql PRIMARY mysql proxies_priv
def mysql PRIMARY mysql servers def mysql PRIMARY mysql servers
def mysql PRIMARY mysql tables_priv def mysql PRIMARY mysql tables_priv
def mysql PRIMARY mysql time_zone def mysql PRIMARY mysql time_zone
......
...@@ -23,7 +23,7 @@ def mysql PRIMARY mysql ndb_binlog_index PRIMARY KEY ...@@ -23,7 +23,7 @@ def mysql PRIMARY mysql ndb_binlog_index PRIMARY KEY
def mysql PRIMARY mysql plugin PRIMARY KEY def mysql PRIMARY mysql plugin PRIMARY KEY
def mysql PRIMARY mysql proc PRIMARY KEY def mysql PRIMARY mysql proc PRIMARY KEY
def mysql PRIMARY mysql procs_priv PRIMARY KEY def mysql PRIMARY mysql procs_priv PRIMARY KEY
def mysql PRIMARY mysql proxy_priv PRIMARY KEY def mysql PRIMARY mysql proxies_priv PRIMARY KEY
def mysql PRIMARY mysql servers PRIMARY KEY def mysql PRIMARY mysql servers PRIMARY KEY
def mysql PRIMARY mysql tables_priv PRIMARY KEY def mysql PRIMARY mysql tables_priv PRIMARY KEY
def mysql PRIMARY mysql time_zone PRIMARY KEY def mysql PRIMARY mysql time_zone PRIMARY KEY
......
...@@ -336,7 +336,7 @@ user_comment Procedure privileges ...@@ -336,7 +336,7 @@ user_comment Procedure privileges
Separator ----------------------------------------------------- Separator -----------------------------------------------------
TABLE_CATALOG def TABLE_CATALOG def
TABLE_SCHEMA mysql TABLE_SCHEMA mysql
TABLE_NAME proxy_priv TABLE_NAME proxies_priv
TABLE_TYPE BASE TABLE TABLE_TYPE BASE TABLE
ENGINE MyISAM ENGINE MyISAM
VERSION 10 VERSION 10
......
...@@ -155,3 +155,19 @@ INSERT INTO t1 VALUES ('abc\0\0'); ...@@ -155,3 +155,19 @@ INSERT INTO t1 VALUES ('abc\0\0');
--error ER_DUP_ENTRY --error ER_DUP_ENTRY
INSERT INTO t1 VALUES ('abc\0\0'); INSERT INTO t1 VALUES ('abc\0\0');
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # Bug#57882: Item_func_conv_charset::val_str(String*):
--echo # Assertion `fixed == 1' failed
--echo #
--error ER_DATA_OUT_OF_RANGE
SELECT (CONVERT('0' USING latin1) IN (CHAR(COT('v') USING utf8),''));
SET NAMES utf8 COLLATE utf8_latvian_ci ;
--error ER_DATA_OUT_OF_RANGE
SELECT UPDATEXML(-73 * -2465717823867977728,@@global.slave_net_timeout,null);
--echo #
--echo # End Bug#57882
--echo #
...@@ -16,6 +16,11 @@ connect(plug_con,localhost,plug,plug_dest); ...@@ -16,6 +16,11 @@ connect(plug_con,localhost,plug,plug_dest);
--enable_query_log --enable_query_log
GRANT PROXY ON plug_dest TO plug; GRANT PROXY ON plug_dest TO plug;
--echo test proxies_priv columns
--replace_column 1 xx 7 xx
SELECT * FROM mysql.proxies_priv;
--echo test mysql.proxies_priv;
SHOW CREATE TABLE mysql.proxies_priv;
connect(plug_con,localhost,plug,plug_dest); connect(plug_con,localhost,plug,plug_dest);
...@@ -226,7 +231,7 @@ CREATE USER test_drop@localhost; ...@@ -226,7 +231,7 @@ CREATE USER test_drop@localhost;
GRANT PROXY ON future_user TO test_drop@localhost; GRANT PROXY ON future_user TO test_drop@localhost;
SHOW GRANTS FOR test_drop@localhost; SHOW GRANTS FOR test_drop@localhost;
DROP USER test_drop@localhost; DROP USER test_drop@localhost;
SELECT * FROM mysql.proxy_priv WHERE Host = 'test_drop' AND User = 'localhost'; SELECT * FROM mysql.proxies_priv WHERE Host = 'test_drop' AND User = 'localhost';
DROP USER proxy_admin; DROP USER proxy_admin;
......
...@@ -72,7 +72,7 @@ CREATE TABLE time_zone_leap_second ( Transition_time bigint signed NOT NULL, ...@@ -72,7 +72,7 @@ CREATE TABLE time_zone_leap_second ( Transition_time bigint signed NOT NULL,
-- disable_query_log -- disable_query_log
# Drop all tables created by this test # Drop all tables created by this test
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxy_priv; DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxies_priv;
-- enable_query_log -- enable_query_log
......
...@@ -78,7 +78,7 @@ INSERT INTO servers VALUES ('test','localhost','test','root','', 0,'','mysql','r ...@@ -78,7 +78,7 @@ INSERT INTO servers VALUES ('test','localhost','test','root','', 0,'','mysql','r
-- disable_query_log -- disable_query_log
# Drop all tables created by this test # Drop all tables created by this test
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxy_priv; DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxies_priv;
-- enable_query_log -- enable_query_log
......
...@@ -97,7 +97,7 @@ CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL, ...@@ -97,7 +97,7 @@ CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL,
-- disable_query_log -- disable_query_log
# Drop all tables created by this test # Drop all tables created by this test
DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxy_priv; DROP TABLE db, host, user, func, plugin, tables_priv, columns_priv, procs_priv, servers, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type, general_log, slow_log, event, ndb_binlog_index, proxies_priv;
-- enable_query_log -- enable_query_log
......
...@@ -478,7 +478,7 @@ PREPARE stmt FROM @str; ...@@ -478,7 +478,7 @@ PREPARE stmt FROM @str;
EXECUTE stmt; EXECUTE stmt;
DROP PREPARE stmt; DROP PREPARE stmt;
CREATE TABLE IF NOT EXISTS proxy_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_Host char(16) binary DEFAULT '' NOT NULL, Proxied_User char(60) binary DEFAULT '' NOT NULL, With_Grant BOOL DEFAULT 0 NOT NULL, PRIMARY KEY Host (Host,User,Proxied_Host,Proxied_User) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User proxy privileges'; CREATE TABLE IF NOT EXISTS proxies_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_host char(60) binary DEFAULT '' NOT NULL, Proxied_user char(16) binary DEFAULT '' NOT NULL, With_grant BOOL DEFAULT 0 NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, PRIMARY KEY Host (Host,User,Proxied_host,Proxied_user), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User proxy privileges';
-- Remember for later if proxy_priv table already existed -- Remember for later if proxies_priv table already existed
set @had_proxy_priv_table= @@warning_count != 0; set @had_proxies_priv_table= @@warning_count != 0;
...@@ -30,8 +30,8 @@ INSERT INTO tmp_user (host,user) SELECT @current_hostname,'' FROM dual WHERE LOW ...@@ -30,8 +30,8 @@ INSERT INTO tmp_user (host,user) SELECT @current_hostname,'' FROM dual WHERE LOW
INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0; INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0;
DROP TABLE tmp_user; DROP TABLE tmp_user;
CREATE TEMPORARY TABLE tmp_proxy_priv LIKE proxy_priv; CREATE TEMPORARY TABLE tmp_proxies_priv LIKE proxies_priv;
INSERT INTO tmp_proxy_priv VALUES ('localhost', 'root', '', '', TRUE); INSERT INTO tmp_proxies_priv VALUES ('localhost', 'root', '', '', TRUE, '', now());
REPLACE INTO tmp_proxy_priv SELECT @current_hostname, 'root', '', '', TRUE FROM DUAL WHERE LOWER (@current_hostname) != 'localhost'; REPLACE INTO tmp_proxies_priv SELECT @current_hostname, 'root', '', '', TRUE, '', now() FROM DUAL WHERE LOWER (@current_hostname) != 'localhost';
INSERT INTO proxy_priv SELECT * FROM tmp_proxy_priv WHERE @had_proxy_priv_table=0; INSERT INTO proxies_priv SELECT * FROM tmp_proxies_priv WHERE @had_proxies_priv_table=0;
DROP TABLE tmp_proxy_priv; DROP TABLE tmp_proxies_priv;
...@@ -643,7 +643,7 @@ drop procedure mysql.die; ...@@ -643,7 +643,7 @@ drop procedure mysql.die;
ALTER TABLE user ADD plugin char(60) DEFAULT '' NOT NULL, ADD authentication_string TEXT NOT NULL; ALTER TABLE user ADD plugin char(60) DEFAULT '' NOT NULL, ADD authentication_string TEXT NOT NULL;
ALTER TABLE user MODIFY plugin char(60) DEFAULT '' NOT NULL; ALTER TABLE user MODIFY plugin char(60) DEFAULT '' NOT NULL;
CREATE TABLE IF NOT EXISTS proxy_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_User char(60) binary DEFAULT '' NOT NULL, Proxied_Host char(16) binary DEFAULT '' NOT NULL, With_Grant BOOL DEFAULT 0 NOT NULL, PRIMARY KEY Host (Host,User,Proxied_Host,Proxied_User) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Users and global privileges'; CREATE TABLE IF NOT EXISTS proxies_priv (Host char(60) binary DEFAULT '' NOT NULL, User char(16) binary DEFAULT '' NOT NULL, Proxied_host char(60) binary DEFAULT '' NOT NULL, Proxied_user char(16) binary DEFAULT '' NOT NULL, With_grant BOOL DEFAULT 0 NOT NULL, Grantor char(77) DEFAULT '' NOT NULL, Timestamp timestamp, PRIMARY KEY Host (Host,User,Proxied_host,Proxied_user), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='User proxy privileges';
# Activate the new, possible modified privilege tables # Activate the new, possible modified privilege tables
# This should not be needed, but gives us some extra testing that the above # This should not be needed, but gives us some extra testing that the above
......
...@@ -1853,11 +1853,12 @@ bool agg_item_set_converter(DTCollation &coll, const char *fname, ...@@ -1853,11 +1853,12 @@ bool agg_item_set_converter(DTCollation &coll, const char *fname,
*arg= conv; *arg= conv;
else else
thd->change_item_tree(arg, conv); thd->change_item_tree(arg, conv);
/*
We do not check conv->fixed, because Item_func_conv_charset which can if (conv->fix_fields(thd, arg))
be return by safe_charset_converter can't be fixed at creation {
*/ res= TRUE;
conv->fix_fields(thd, arg); break; // we cannot return here, we need to restore "arena".
}
} }
if (arena) if (arena)
thd->restore_active_arena(arena, &backup); thd->restore_active_arena(arena, &backup);
......
...@@ -3778,12 +3778,12 @@ static int init_server_components() ...@@ -3778,12 +3778,12 @@ static int init_server_components()
unireg_abort(1); unireg_abort(1);
} }
/* initialize delegates for extension observers */ /*
initialize delegates for extension observers, errors have already
been reported in the function
*/
if (delegates_init()) if (delegates_init())
{
sql_print_error("Initialize extension delegates failed");
unireg_abort(1); unireg_abort(1);
}
/* need to configure logging before initializing storage engines */ /* need to configure logging before initializing storage engines */
if (opt_log_slave_updates && !opt_bin_log) if (opt_log_slave_updates && !opt_bin_log)
......
...@@ -105,12 +105,20 @@ int delegates_init() ...@@ -105,12 +105,20 @@ int delegates_init()
transaction_delegate= new (place_trans_mem) Trans_delegate; transaction_delegate= new (place_trans_mem) Trans_delegate;
if (!transaction_delegate->is_inited()) if (!transaction_delegate->is_inited())
{
sql_print_error("Initialization of transaction delegates failed. "
"Please report a bug.");
return 1; return 1;
}
binlog_storage_delegate= new (place_storage_mem) Binlog_storage_delegate; binlog_storage_delegate= new (place_storage_mem) Binlog_storage_delegate;
if (!binlog_storage_delegate->is_inited()) if (!binlog_storage_delegate->is_inited())
{
sql_print_error("Initialization binlog storage delegates failed. "
"Please report a bug.");
return 1; return 1;
}
#ifdef HAVE_REPLICATION #ifdef HAVE_REPLICATION
void *place_transmit_mem= transmit_mem.data; void *place_transmit_mem= transmit_mem.data;
...@@ -119,16 +127,29 @@ int delegates_init() ...@@ -119,16 +127,29 @@ int delegates_init()
binlog_transmit_delegate= new (place_transmit_mem) Binlog_transmit_delegate; binlog_transmit_delegate= new (place_transmit_mem) Binlog_transmit_delegate;
if (!binlog_transmit_delegate->is_inited()) if (!binlog_transmit_delegate->is_inited())
{
sql_print_error("Initialization of binlog transmit delegates failed. "
"Please report a bug.");
return 1; return 1;
}
binlog_relay_io_delegate= new (place_relay_io_mem) Binlog_relay_IO_delegate; binlog_relay_io_delegate= new (place_relay_io_mem) Binlog_relay_IO_delegate;
if (!binlog_relay_io_delegate->is_inited()) if (!binlog_relay_io_delegate->is_inited())
{
sql_print_error("Initialization binlog relay IO delegates failed. "
"Please report a bug.");
return 1; return 1;
}
#endif #endif
if (pthread_key_create(&RPL_TRANS_BINLOG_INFO, NULL)) if (pthread_key_create(&RPL_TRANS_BINLOG_INFO, NULL))
{
sql_print_error("Error while creating pthread specific data key for replication. "
"Please report a bug.");
return 1; return 1;
}
return 0; return 0;
} }
......
...@@ -268,11 +268,13 @@ class ACL_PROXY_USER :public ACL_ACCESS ...@@ -268,11 +268,13 @@ class ACL_PROXY_USER :public ACL_ACCESS
bool with_grant; bool with_grant;
typedef enum { typedef enum {
MYSQL_PROXY_PRIV_HOST, MYSQL_PROXIES_PRIV_HOST,
MYSQL_PROXY_PRIV_USER, MYSQL_PROXIES_PRIV_USER,
MYSQL_PROXY_PRIV_PROXIED_HOST, MYSQL_PROXIES_PRIV_PROXIED_HOST,
MYSQL_PROXY_PRIV_PROXIED_USER, MYSQL_PROXIES_PRIV_PROXIED_USER,
MYSQL_PROXY_PRIV_WITH_GRANT } old_acl_proxy_users; MYSQL_PROXIES_PRIV_WITH_GRANT,
MYSQL_PROXIES_PRIV_GRANTOR,
MYSQL_PROXIES_PRIV_TIMESTAMP } old_acl_proxy_users;
public: public:
ACL_PROXY_USER () {}; ACL_PROXY_USER () {};
...@@ -308,11 +310,11 @@ class ACL_PROXY_USER :public ACL_ACCESS ...@@ -308,11 +310,11 @@ class ACL_PROXY_USER :public ACL_ACCESS
void init(TABLE *table, MEM_ROOT *mem) void init(TABLE *table, MEM_ROOT *mem)
{ {
init (get_field(mem, table->field[MYSQL_PROXY_PRIV_HOST]), init (get_field(mem, table->field[MYSQL_PROXIES_PRIV_HOST]),
get_field(mem, table->field[MYSQL_PROXY_PRIV_USER]), get_field(mem, table->field[MYSQL_PROXIES_PRIV_USER]),
get_field(mem, table->field[MYSQL_PROXY_PRIV_PROXIED_HOST]), get_field(mem, table->field[MYSQL_PROXIES_PRIV_PROXIED_HOST]),
get_field(mem, table->field[MYSQL_PROXY_PRIV_PROXIED_USER]), get_field(mem, table->field[MYSQL_PROXIES_PRIV_PROXIED_USER]),
table->field[MYSQL_PROXY_PRIV_WITH_GRANT]->val_int() != 0); table->field[MYSQL_PROXIES_PRIV_WITH_GRANT]->val_int() != 0);
} }
bool get_with_grant() { return with_grant; } bool get_with_grant() { return with_grant; }
...@@ -337,7 +339,7 @@ class ACL_PROXY_USER :public ACL_ACCESS ...@@ -337,7 +339,7 @@ class ACL_PROXY_USER :public ACL_ACCESS
(hostname_requires_resolving(host.hostname) || (hostname_requires_resolving(host.hostname) ||
hostname_requires_resolving(proxied_host.hostname))) hostname_requires_resolving(proxied_host.hostname)))
{ {
sql_print_warning("'proxy_priv' entry '%s@%s %s@%s' " sql_print_warning("'proxes_priv' entry '%s@%s %s@%s' "
"ignored in --skip-name-resolve mode.", "ignored in --skip-name-resolve mode.",
proxied_user ? proxied_user : "", proxied_user ? proxied_user : "",
proxied_host.hostname ? proxied_host.hostname : "", proxied_host.hostname ? proxied_host.hostname : "",
...@@ -452,19 +454,19 @@ class ACL_PROXY_USER :public ACL_ACCESS ...@@ -452,19 +454,19 @@ class ACL_PROXY_USER :public ACL_ACCESS
user->str ? user->str : "<NULL>", user->str ? user->str : "<NULL>",
proxied_host->str ? proxied_host->str : "<NULL>", proxied_host->str ? proxied_host->str : "<NULL>",
proxied_user->str ? proxied_user->str : "<NULL>")); proxied_user->str ? proxied_user->str : "<NULL>"));
if (table->field[MYSQL_PROXY_PRIV_HOST]->store(host->str, if (table->field[MYSQL_PROXIES_PRIV_HOST]->store(host->str,
host->length, host->length,
system_charset_info)) system_charset_info))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
if (table->field[MYSQL_PROXY_PRIV_USER]->store(user->str, if (table->field[MYSQL_PROXIES_PRIV_USER]->store(user->str,
user->length, user->length,
system_charset_info)) system_charset_info))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
if (table->field[MYSQL_PROXY_PRIV_PROXIED_HOST]->store(proxied_host->str, if (table->field[MYSQL_PROXIES_PRIV_PROXIED_HOST]->store(proxied_host->str,
proxied_host->length, proxied_host->length,
system_charset_info)) system_charset_info))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
if (table->field[MYSQL_PROXY_PRIV_PROXIED_USER]->store(proxied_user->str, if (table->field[MYSQL_PROXIES_PRIV_PROXIED_USER]->store(proxied_user->str,
proxied_user->length, proxied_user->length,
system_charset_info)) system_charset_info))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
...@@ -477,15 +479,20 @@ class ACL_PROXY_USER :public ACL_ACCESS ...@@ -477,15 +479,20 @@ class ACL_PROXY_USER :public ACL_ACCESS
const LEX_STRING *user, const LEX_STRING *user,
const LEX_STRING *proxied_host, const LEX_STRING *proxied_host,
const LEX_STRING *proxied_user, const LEX_STRING *proxied_user,
bool with_grant) bool with_grant,
const char *grantor)
{ {
DBUG_ENTER ("ACL_PROXY_USER::store_pk"); DBUG_ENTER("ACL_PROXY_USER::store_pk");
if (store_pk (table, host, user, proxied_host, proxied_user)) if (store_pk(table, host, user, proxied_host, proxied_user))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
DBUG_PRINT ("info", ("with_grant=%s", with_grant ? "TRUE" : "FALSE")); DBUG_PRINT("info", ("with_grant=%s", with_grant ? "TRUE" : "FALSE"));
if (table->field[MYSQL_PROXY_PRIV_WITH_GRANT]->store(with_grant ? 1 : 0, if (table->field[MYSQL_PROXIES_PRIV_WITH_GRANT]->store(with_grant ? 1 : 0,
TRUE)) TRUE))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
if (table->field[MYSQL_PROXIES_PRIV_GRANTOR]->store(grantor,
strlen(grantor),
system_charset_info))
DBUG_RETURN(TRUE);
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }
...@@ -1113,8 +1120,8 @@ my_bool acl_reload(THD *thd) ...@@ -1113,8 +1120,8 @@ my_bool acl_reload(THD *thd)
tables[2].init_one_table(C_STRING_WITH_LEN("mysql"), tables[2].init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("db"), "db", TL_READ); C_STRING_WITH_LEN("db"), "db", TL_READ);
tables[3].init_one_table(C_STRING_WITH_LEN("mysql"), tables[3].init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("proxy_priv"), C_STRING_WITH_LEN("proxies_priv"),
"proxy_priv", TL_READ); "proxies_priv", TL_READ);
tables[0].next_local= tables[0].next_global= tables + 1; tables[0].next_local= tables[0].next_global= tables + 1;
tables[1].next_local= tables[1].next_global= tables + 2; tables[1].next_local= tables[1].next_global= tables + 2;
tables[2].next_local= tables[2].next_global= tables + 3; tables[2].next_local= tables[2].next_global= tables + 3;
...@@ -2608,7 +2615,7 @@ acl_insert_proxy_user(ACL_PROXY_USER *new_value) ...@@ -2608,7 +2615,7 @@ acl_insert_proxy_user(ACL_PROXY_USER *new_value)
static int static int
replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user, replace_proxies_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
const LEX_USER *proxied_user, bool with_grant_arg, const LEX_USER *proxied_user, bool with_grant_arg,
bool revoke_grant) bool revoke_grant)
{ {
...@@ -2616,8 +2623,9 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user, ...@@ -2616,8 +2623,9 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
int error; int error;
uchar user_key[MAX_KEY_LENGTH]; uchar user_key[MAX_KEY_LENGTH];
ACL_PROXY_USER new_grant; ACL_PROXY_USER new_grant;
char grantor[USER_HOST_BUFF_SIZE];
DBUG_ENTER("replace_proxy_priv_table"); DBUG_ENTER("replace_proxies_priv_table");
if (!initialized) if (!initialized)
{ {
...@@ -2639,6 +2647,8 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user, ...@@ -2639,6 +2647,8 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
key_copy(user_key, table->record[0], table->key_info, key_copy(user_key, table->record[0], table->key_info,
table->key_info->key_length); table->key_info->key_length);
get_grantor(thd, grantor);
table->file->ha_index_init(0, 1); table->file->ha_index_init(0, 1);
if (table->file->index_read_map(table->record[0], user_key, if (table->file->index_read_map(table->record[0], user_key,
HA_WHOLE_KEY, HA_WHOLE_KEY,
...@@ -2655,7 +2665,8 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user, ...@@ -2655,7 +2665,8 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
ACL_PROXY_USER::store_data_record(table, &user->host, &user->user, ACL_PROXY_USER::store_data_record(table, &user->host, &user->user,
&proxied_user->host, &proxied_user->host,
&proxied_user->user, &proxied_user->user,
with_grant_arg); with_grant_arg,
grantor);
} }
else else
{ {
...@@ -2712,7 +2723,7 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user, ...@@ -2712,7 +2723,7 @@ replace_proxy_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
table->file->print_error(error, MYF(0)); /* purecov: inspected */ table->file->print_error(error, MYF(0)); /* purecov: inspected */
abort: abort:
DBUG_PRINT("info", ("aborting replace_proxy_priv_table")); DBUG_PRINT("info", ("aborting replace_proxies_priv_table"));
table->file->ha_index_end(); table->file->ha_index_end();
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
...@@ -3962,14 +3973,14 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list, ...@@ -3962,14 +3973,14 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
proxied_user= str_list++; proxied_user= str_list++;
} }
/* open the mysql.user and mysql.db or mysql.proxy_priv tables */ /* open the mysql.user and mysql.db or mysql.proxies_priv tables */
tables[0].init_one_table(C_STRING_WITH_LEN("mysql"), tables[0].init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("user"), "user", TL_WRITE); C_STRING_WITH_LEN("user"), "user", TL_WRITE);
if (is_proxy) if (is_proxy)
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"), tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("proxy_priv"), C_STRING_WITH_LEN("proxies_priv"),
"proxy_priv", "proxies_priv",
TL_WRITE); TL_WRITE);
else else
tables[1].init_one_table(C_STRING_WITH_LEN("mysql"), tables[1].init_one_table(C_STRING_WITH_LEN("mysql"),
...@@ -4063,7 +4074,7 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list, ...@@ -4063,7 +4074,7 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
} }
else if (is_proxy) else if (is_proxy)
{ {
if (replace_proxy_priv_table (thd, tables[1].table, Str, proxied_user, if (replace_proxies_priv_table (thd, tables[1].table, Str, proxied_user,
rights & GRANT_ACL ? TRUE : FALSE, rights & GRANT_ACL ? TRUE : FALSE,
revoke_grant)) revoke_grant))
result= -1; result= -1;
...@@ -5690,8 +5701,8 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables) ...@@ -5690,8 +5701,8 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables)
C_STRING_WITH_LEN("procs_priv"), C_STRING_WITH_LEN("procs_priv"),
"procs_priv", TL_WRITE); "procs_priv", TL_WRITE);
(tables+5)->init_one_table(C_STRING_WITH_LEN("mysql"), (tables+5)->init_one_table(C_STRING_WITH_LEN("mysql"),
C_STRING_WITH_LEN("proxy_priv"), C_STRING_WITH_LEN("proxies_priv"),
"proxy_priv", TL_WRITE); "proxies_priv", TL_WRITE);
tables->next_local= tables->next_global= tables + 1; tables->next_local= tables->next_global= tables + 1;
(tables+1)->next_local= (tables+1)->next_global= tables + 2; (tables+1)->next_local= (tables+1)->next_global= tables + 2;
(tables+2)->next_local= (tables+2)->next_global= tables + 3; (tables+2)->next_local= (tables+2)->next_global= tables + 3;
...@@ -6283,7 +6294,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop, ...@@ -6283,7 +6294,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop,
} }
} }
/* Handle proxy_priv table. */ /* Handle proxies_priv table. */
if ((found= handle_grant_table(tables, 5, drop, user_from, user_to)) < 0) if ((found= handle_grant_table(tables, 5, drop, user_from, user_to)) < 0)
{ {
/* Handle of table failed, don't touch the in-memory array. */ /* Handle of table failed, don't touch the in-memory array. */
...@@ -6291,7 +6302,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop, ...@@ -6291,7 +6302,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop,
} }
else else
{ {
/* Handle proxy_priv array. */ /* Handle proxies_priv array. */
if ((handle_grant_struct(5, drop, user_from, user_to) && !result) || if ((handle_grant_struct(5, drop, user_from, user_to) && !result) ||
found) found)
result= 1; /* At least one record/element found. */ result= 1; /* At least one record/element found. */
......
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