mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Fix for Bug#32748: Inconsistent handling of assignments to
general_log_file/slow_query_log_file. The problem was that log file path was rejected if directory path was empty. The fix is to reject log file path only if it is entirely empty.
This commit is contained in:
@@ -249,4 +249,25 @@ set global slow_query_log_file= NULL;
|
||||
ERROR 42000: Variable 'slow_query_log_file' can't be set to the value of 'NULL'
|
||||
set global general_log_file= @old_general_log_file;
|
||||
set global slow_query_log_file= @old_slow_query_log_file;
|
||||
|
||||
# --
|
||||
# -- Bug#32748: Inconsistent handling of assignments to
|
||||
# -- general_log_file/slow_query_log_file.
|
||||
# --
|
||||
|
||||
SET @general_log_file_saved = @@global.general_log_file;
|
||||
SET @slow_query_log_file_saved = @@global.slow_query_log_file;
|
||||
|
||||
SET GLOBAL general_log_file = 'bug32748.query.log';
|
||||
SET GLOBAL slow_query_log_file = 'bug32748.slow.log';
|
||||
|
||||
SHOW VARIABLES LIKE '%log_file';
|
||||
Variable_name Value
|
||||
general_log_file bug32748.query.log
|
||||
slow_query_log_file bug32748.slow.log
|
||||
|
||||
SET GLOBAL general_log_file = @general_log_file_saved;
|
||||
SET GLOBAL slow_query_log_file = @slow_query_log_file_saved;
|
||||
|
||||
# -- End of Bug#32748.
|
||||
End of 5.1 tests
|
||||
|
@@ -231,6 +231,34 @@ set global slow_query_log_file= NULL;
|
||||
set global general_log_file= @old_general_log_file;
|
||||
set global slow_query_log_file= @old_slow_query_log_file;
|
||||
|
||||
###########################################################################
|
||||
|
||||
--echo
|
||||
--echo # --
|
||||
--echo # -- Bug#32748: Inconsistent handling of assignments to
|
||||
--echo # -- general_log_file/slow_query_log_file.
|
||||
--echo # --
|
||||
|
||||
--echo
|
||||
SET @general_log_file_saved = @@global.general_log_file;
|
||||
SET @slow_query_log_file_saved = @@global.slow_query_log_file;
|
||||
|
||||
--echo
|
||||
SET GLOBAL general_log_file = 'bug32748.query.log';
|
||||
SET GLOBAL slow_query_log_file = 'bug32748.slow.log';
|
||||
|
||||
--echo
|
||||
SHOW VARIABLES LIKE '%log_file';
|
||||
|
||||
--echo
|
||||
SET GLOBAL general_log_file = @general_log_file_saved;
|
||||
SET GLOBAL slow_query_log_file = @slow_query_log_file_saved;
|
||||
|
||||
--echo
|
||||
--echo # -- End of Bug#32748.
|
||||
|
||||
###########################################################################
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
--enable_ps_protocol
|
||||
|
@@ -2399,6 +2399,7 @@ static int sys_check_log_path(THD *thd, set_var *var)
|
||||
MY_STAT f_stat;
|
||||
String str(buff, sizeof(buff), system_charset_info), *res;
|
||||
const char *log_file_str;
|
||||
size_t path_length;
|
||||
|
||||
if (!(res= var->value->val_str(&str)))
|
||||
goto err;
|
||||
@@ -2406,25 +2407,43 @@ static int sys_check_log_path(THD *thd, set_var *var)
|
||||
log_file_str= res->c_ptr();
|
||||
bzero(&f_stat, sizeof(MY_STAT));
|
||||
|
||||
(void) unpack_filename(path, log_file_str);
|
||||
path_length= unpack_filename(path, log_file_str);
|
||||
|
||||
if (!path_length)
|
||||
{
|
||||
/* File name is empty. */
|
||||
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (my_stat(path, &f_stat, MYF(0)))
|
||||
{
|
||||
/* Check if argument is a file and we have 'write' permission */
|
||||
/*
|
||||
A file system object exists. Check if argument is a file and we have
|
||||
'write' permission.
|
||||
*/
|
||||
|
||||
if (!MY_S_ISREG(f_stat.st_mode) ||
|
||||
!(f_stat.st_mode & MY_S_IWRITE))
|
||||
goto err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t path_length;
|
||||
/*
|
||||
Check if directory exists and
|
||||
we have permission to create file & write to file
|
||||
*/
|
||||
|
||||
/* Get dirname of the file path. */
|
||||
(void) dirname_part(path, log_file_str, &path_length);
|
||||
|
||||
/* Dirname is empty if file path is relative. */
|
||||
if (!path_length)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
Check if directory exists and we have permission to create file and
|
||||
write to file.
|
||||
*/
|
||||
if (my_access(path, (F_OK|W_OK)))
|
||||
goto err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
Reference in New Issue
Block a user