1
0
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:
anozdrin/alik@quad.opbmk
2008-03-28 21:46:18 +03:00
parent d02459cbae
commit 73345d0fbd
3 changed files with 82 additions and 14 deletions

View File

@@ -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' 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 general_log_file= @old_general_log_file;
set global slow_query_log_file= @old_slow_query_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 End of 5.1 tests

View File

@@ -231,6 +231,34 @@ set global slow_query_log_file= NULL;
set global general_log_file= @old_general_log_file; set global general_log_file= @old_general_log_file;
set global slow_query_log_file= @old_slow_query_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 --echo End of 5.1 tests
--enable_ps_protocol --enable_ps_protocol

View File

@@ -2399,32 +2399,51 @@ static int sys_check_log_path(THD *thd, set_var *var)
MY_STAT f_stat; MY_STAT f_stat;
String str(buff, sizeof(buff), system_charset_info), *res; String str(buff, sizeof(buff), system_charset_info), *res;
const char *log_file_str; const char *log_file_str;
size_t path_length;
if (!(res= var->value->val_str(&str))) if (!(res= var->value->val_str(&str)))
goto err; goto err;
log_file_str= res->c_ptr(); log_file_str= res->c_ptr();
bzero(&f_stat, sizeof(MY_STAT)); 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))) 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) || if (!MY_S_ISREG(f_stat.st_mode) ||
!(f_stat.st_mode & MY_S_IWRITE)) !(f_stat.st_mode & MY_S_IWRITE))
goto err; goto err;
return 0;
} }
else
{ /* Get dirname of the file path. */
size_t path_length; (void) dirname_part(path, log_file_str, &path_length);
/*
Check if directory exists and /* Dirname is empty if file path is relative. */
we have permission to create file & write to file if (!path_length)
*/ return 0;
(void) dirname_part(path, log_file_str, &path_length);
if (my_access(path, (F_OK|W_OK))) /*
goto err; 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; return 0;
err: err: