mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/dlenev/src/mysql-4.1-tzfix
This commit is contained in:
@ -251,3 +251,23 @@ select convert_tz(ts, @@time_zone, 'Japan') from t1;
|
||||
convert_tz(ts, @@time_zone, 'Japan')
|
||||
2001-09-09 10:46:40
|
||||
drop table t1;
|
||||
delete from mysql.user where user like 'mysqltest\_%';
|
||||
delete from mysql.db where user like 'mysqltest\_%';
|
||||
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
||||
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
||||
flush privileges;
|
||||
grant usage on mysqltest.* to mysqltest_1@localhost;
|
||||
show grants for current_user();
|
||||
Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
||||
set time_zone= '+00:00';
|
||||
set time_zone= 'Europe/Moscow';
|
||||
select convert_tz('2004-10-21 19:00:00', 'Europe/Moscow', 'UTC');
|
||||
convert_tz('2004-10-21 19:00:00', 'Europe/Moscow', 'UTC')
|
||||
2004-10-21 15:00:00
|
||||
select * from mysql.time_zone_name;
|
||||
ERROR 42000: Access denied for user 'mysqltest_1'@'localhost' to database 'mysql'
|
||||
select Name, convert_tz('2004-10-21 19:00:00', Name, 'UTC') from mysql.time_zone_name;
|
||||
ERROR 42000: Access denied for user 'mysqltest_1'@'localhost' to database 'mysql'
|
||||
delete from mysql.user where user like 'mysqltest\_%';
|
||||
flush privileges;
|
||||
|
@ -199,3 +199,31 @@ insert into t1 (ts) values (now());
|
||||
select convert_tz(ts, @@time_zone, 'Japan') from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test for bug #6116 "SET time_zone := ... requires access to mysql.time_zone
|
||||
# tables". We should allow implicit access to time zone description tables
|
||||
# even for unprivileged users.
|
||||
#
|
||||
|
||||
delete from mysql.user where user like 'mysqltest\_%';
|
||||
delete from mysql.db where user like 'mysqltest\_%';
|
||||
delete from mysql.tables_priv where user like 'mysqltest\_%';
|
||||
delete from mysql.columns_priv where user like 'mysqltest\_%';
|
||||
flush privileges;
|
||||
|
||||
grant usage on mysqltest.* to mysqltest_1@localhost;
|
||||
connect (tzuser, localhost, mysqltest_1,,);
|
||||
connection tzuser;
|
||||
show grants for current_user();
|
||||
set time_zone= '+00:00';
|
||||
set time_zone= 'Europe/Moscow';
|
||||
select convert_tz('2004-10-21 19:00:00', 'Europe/Moscow', 'UTC');
|
||||
# But still these two statements should not work:
|
||||
--error 1044
|
||||
select * from mysql.time_zone_name;
|
||||
--error 1044
|
||||
select Name, convert_tz('2004-10-21 19:00:00', Name, 'UTC') from mysql.time_zone_name;
|
||||
|
||||
connection default;
|
||||
delete from mysql.user where user like 'mysqltest\_%';
|
||||
flush privileges;
|
||||
|
@ -3730,7 +3730,10 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
|
||||
TABLE_LIST *org_tables=tables;
|
||||
for (; tables ; tables=tables->next)
|
||||
{
|
||||
if (tables->derived || (tables->table && (int)tables->table->tmp_table))
|
||||
if (tables->derived ||
|
||||
(tables->table && (int)tables->table->tmp_table) ||
|
||||
my_tz_check_n_skip_implicit_tables(&tables,
|
||||
thd->lex->time_zone_tables_used))
|
||||
continue;
|
||||
if ((thd->master_access & want_access) == (want_access & ~EXTRA_ACL) &&
|
||||
thd->db)
|
||||
|
@ -1434,6 +1434,10 @@ tz_init_table_list(TABLE_LIST *tz_tabs)
|
||||
This function creates list of TABLE_LIST objects allocated in thd's
|
||||
memroot, which can be used for opening of time zone tables.
|
||||
|
||||
NOTE
|
||||
my_tz_check_n_skip_implicit_tables() function depends on fact that
|
||||
elements of list created are allocated as TABLE_LIST[4] array.
|
||||
|
||||
RETURN VALUES
|
||||
Returns pointer to first TABLE_LIST object, (could be 0 if time zone
|
||||
tables don't exist) and &fake_time_zone_tables_list in case of error.
|
||||
|
29
sql/tztime.h
29
sql/tztime.h
@ -64,6 +64,35 @@ extern Time_zone * my_tz_find(const String *name, TABLE_LIST *tz_tables);
|
||||
extern my_bool my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap);
|
||||
extern void my_tz_free();
|
||||
|
||||
|
||||
/*
|
||||
Check if we have pointer to the beggining of list of implictly used
|
||||
time zone tables and fast-forward to its end.
|
||||
|
||||
SYNOPSIS
|
||||
my_tz_check_n_skip_implicit_tables()
|
||||
table - (in/out) pointer to element of table list to check
|
||||
tz_tables - list of implicitly used time zone tables received
|
||||
from my_tz_get_table_list() function.
|
||||
|
||||
NOTE
|
||||
This function relies on my_tz_get_table_list() implementation.
|
||||
|
||||
RETURN VALUE
|
||||
TRUE - if table points to the beggining of tz_tables list
|
||||
FALSE - otherwise.
|
||||
*/
|
||||
inline bool my_tz_check_n_skip_implicit_tables(TABLE_LIST **table,
|
||||
TABLE_LIST *tz_tables)
|
||||
{
|
||||
if (*table == tz_tables)
|
||||
{
|
||||
(*table)+= 3;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
Maximum length of time zone name that we support
|
||||
(Time zone name is char(64) in db)
|
||||
|
Reference in New Issue
Block a user