mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
Merge branch '5.5' into 10.0
This commit is contained in:
@@ -1909,12 +1909,12 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident,
|
||||
#endif
|
||||
case SCH_COLUMNS:
|
||||
case SCH_STATISTICS:
|
||||
{
|
||||
#ifdef DONT_ALLOW_SHOW_COMMANDS
|
||||
my_message(ER_NOT_ALLOWED_COMMAND,
|
||||
ER(ER_NOT_ALLOWED_COMMAND), MYF(0)); /* purecov: inspected */
|
||||
DBUG_RETURN(1);
|
||||
#else
|
||||
{
|
||||
DBUG_ASSERT(table_ident);
|
||||
TABLE_LIST **query_tables_last= lex->query_tables_last;
|
||||
schema_select_lex= new SELECT_LEX();
|
||||
@@ -6487,7 +6487,7 @@ void mysql_init_multi_delete(LEX *lex)
|
||||
|
||||
|
||||
/*
|
||||
When you modify mysql_parse(), you may need to mofify
|
||||
When you modify mysql_parse(), you may need to modify
|
||||
mysql_test_parse_for_slave() in this same file.
|
||||
*/
|
||||
|
||||
@@ -8465,48 +8465,24 @@ bool check_ident_length(LEX_STRING *ident)
|
||||
}
|
||||
|
||||
|
||||
C_MODE_START
|
||||
|
||||
/*
|
||||
Check if path does not contain mysql data home directory
|
||||
|
||||
SYNOPSIS
|
||||
test_if_data_home_dir()
|
||||
dir directory
|
||||
path_starts_from_data_home_dir()
|
||||
dir directory, with all symlinks resolved
|
||||
|
||||
RETURN VALUES
|
||||
0 ok
|
||||
1 error ; Given path contains data directory
|
||||
*/
|
||||
extern "C" {
|
||||
|
||||
int test_if_data_home_dir(const char *dir)
|
||||
int path_starts_from_data_home_dir(const char *path)
|
||||
{
|
||||
char path[FN_REFLEN];
|
||||
int dir_len;
|
||||
DBUG_ENTER("test_if_data_home_dir");
|
||||
int dir_len= strlen(path);
|
||||
DBUG_ENTER("path_starts_from_data_home_dir");
|
||||
|
||||
if (!dir)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/*
|
||||
data_file_name and index_file_name include the table name without
|
||||
extension. Mostly this does not refer to an existing file. When
|
||||
comparing data_file_name or index_file_name against the data
|
||||
directory, we try to resolve all symbolic links. On some systems,
|
||||
we use realpath(3) for the resolution. This returns ENOENT if the
|
||||
resolved path does not refer to an existing file. my_realpath()
|
||||
does then copy the requested path verbatim, without symlink
|
||||
resolution. Thereafter the comparison can fail even if the
|
||||
requested path is within the data directory. E.g. if symlinks to
|
||||
another file system are used. To make realpath(3) return the
|
||||
resolved path, we strip the table name and compare the directory
|
||||
path only. If the directory doesn't exist either, table creation
|
||||
will fail anyway.
|
||||
*/
|
||||
|
||||
(void) fn_format(path, dir, "", "",
|
||||
(MY_RETURN_REAL_PATH|MY_RESOLVE_SYMLINKS));
|
||||
dir_len= strlen(path);
|
||||
if (mysql_unpacked_real_data_home_len<= dir_len)
|
||||
{
|
||||
if (dir_len > mysql_unpacked_real_data_home_len &&
|
||||
@@ -8534,7 +8510,31 @@ int test_if_data_home_dir(const char *dir)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
C_MODE_END
|
||||
}
|
||||
|
||||
/*
|
||||
Check if path does not contain mysql data home directory
|
||||
|
||||
SYNOPSIS
|
||||
test_if_data_home_dir()
|
||||
dir directory
|
||||
|
||||
RETURN VALUES
|
||||
0 ok
|
||||
1 error ; Given path contains data directory
|
||||
*/
|
||||
|
||||
int test_if_data_home_dir(const char *dir)
|
||||
{
|
||||
char path[FN_REFLEN];
|
||||
DBUG_ENTER("test_if_data_home_dir");
|
||||
|
||||
if (!dir)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
(void) fn_format(path, dir, "", "", MY_RETURN_REAL_PATH);
|
||||
DBUG_RETURN(path_starts_from_data_home_dir(path));
|
||||
}
|
||||
|
||||
|
||||
int error_if_data_home_dir(const char *path, const char *what)
|
||||
|
Reference in New Issue
Block a user