summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author <Dao-Gang.Qu@sun.com>2009-11-05 14:07:31 +0800
committer <Dao-Gang.Qu@sun.com>2009-11-05 14:07:31 +0800
commit8d52424326f9fea4e616c8aad5edbe632dbbdf63 (patch)
treebfa6953f6e5f3ba921a4f60aeb55f6f7c9ee4e7b
parent2b87e80ab3010b383672f68f0796b9dc6795bdf6 (diff)
downloadmariadb-git-8d52424326f9fea4e616c8aad5edbe632dbbdf63.tar.gz
Bug #34739 unexpected binlog file name when --log-bin is set to a directory name
If --log-bin is set to a directory name with the trailing 'FN_LIBCHAR', which will be '/' on Unix like systems, and '\\' on Windows like systems. the basename of the binlog is empty so that the created files named '.000001' and '.index'. It is not expected. The same thing happened to --log-bin-index, --relay-log and --relay-log-index options. To resolve the problem, in these cases the program should report an error and abort.
-rw-r--r--sql/mysqld.cc21
-rw-r--r--sql/rpl_rli.cc23
2 files changed, 44 insertions, 0 deletions
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 1da51338517..2be95bca54d 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -3888,6 +3888,27 @@ server.");
if (opt_bin_log)
{
+ /* Reports an error and aborts, if the --log-bin's path
+ is a directory.*/
+ if (opt_bin_logname &&
+ opt_bin_logname[strlen(opt_bin_logname) - 1] == FN_LIBCHAR)
+ {
+ sql_print_error("Path '%s' is a directory name, please specify \
+a file name for --log-bin option", opt_bin_logname);
+ unireg_abort(1);
+ }
+
+ /* Reports an error and aborts, if the --log-bin-index's path
+ is a directory.*/
+ if (opt_binlog_index_name &&
+ opt_binlog_index_name[strlen(opt_binlog_index_name) - 1]
+ == FN_LIBCHAR)
+ {
+ sql_print_error("Path '%s' is a directory name, please specify \
+a file name for --log-bin-index option", opt_binlog_index_name);
+ unireg_abort(1);
+ }
+
char buf[FN_REFLEN];
const char *ln;
ln= mysql_bin_log.generate_name(opt_bin_logname, "-bin", 1, buf);
diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc
index 0c6cc15297f..a9ed736b453 100644
--- a/sql/rpl_rli.cc
+++ b/sql/rpl_rli.cc
@@ -132,6 +132,29 @@ int init_relay_log_info(Relay_log_info* rli,
rli->relay_log.max_size (and mysql_bin_log.max_size).
*/
{
+ /* Reports an error and returns, if the --relay-log's path
+ is a directory.*/
+ if (opt_relay_logname &&
+ opt_relay_logname[strlen(opt_relay_logname) - 1] == FN_LIBCHAR)
+ {
+ pthread_mutex_unlock(&rli->data_lock);
+ sql_print_error("Path '%s' is a directory name, please specify \
+a file name for --relay-log option", opt_relay_logname);
+ DBUG_RETURN(1);
+ }
+
+ /* Reports an error and returns, if the --relay-log-index's path
+ is a directory.*/
+ if (opt_relaylog_index_name &&
+ opt_relaylog_index_name[strlen(opt_relaylog_index_name) - 1]
+ == FN_LIBCHAR)
+ {
+ pthread_mutex_unlock(&rli->data_lock);
+ sql_print_error("Path '%s' is a directory name, please specify \
+a file name for --relay-log-index option", opt_relaylog_index_name);
+ DBUG_RETURN(1);
+ }
+
char buf[FN_REFLEN];
const char *ln;
static bool name_warning_sent= 0;