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')
|
convert_tz(ts, @@time_zone, 'Japan')
|
||||||
2001-09-09 10:46:40
|
2001-09-09 10:46:40
|
||||||
drop table t1;
|
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;
|
select convert_tz(ts, @@time_zone, 'Japan') from t1;
|
||||||
drop table 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;
|
TABLE_LIST *org_tables=tables;
|
||||||
for (; tables ; tables=tables->next)
|
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;
|
continue;
|
||||||
if ((thd->master_access & want_access) == (want_access & ~EXTRA_ACL) &&
|
if ((thd->master_access & want_access) == (want_access & ~EXTRA_ACL) &&
|
||||||
thd->db)
|
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
|
This function creates list of TABLE_LIST objects allocated in thd's
|
||||||
memroot, which can be used for opening of time zone tables.
|
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
|
RETURN VALUES
|
||||||
Returns pointer to first TABLE_LIST object, (could be 0 if time zone
|
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.
|
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 my_bool my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap);
|
||||||
extern void my_tz_free();
|
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
|
Maximum length of time zone name that we support
|
||||||
(Time zone name is char(64) in db)
|
(Time zone name is char(64) in db)
|
||||||
|
Reference in New Issue
Block a user