summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authormonty@narttu.mysql.fi <>2003-07-04 03:18:15 +0300
committermonty@narttu.mysql.fi <>2003-07-04 03:18:15 +0300
commitf3af0d7ce423d3b28de463c430f4ff4bef8b925e (patch)
treeeaf3cc9d9913bdfe213c549f3890aa25f565ca8b /sql
parent3f4f339f15748a348d085da9c3d17658d01b4af3 (diff)
downloadmariadb-git-f3af0d7ce423d3b28de463c430f4ff4bef8b925e.tar.gz
Status query on killed mysql connection results in segmentation fault (Bug #738)
Added MAX_PASSWORD_LENGTH. This increased master-slave passwords to 32 bytes (Bug #766) Fixed server crash on purge master logs or show master logs when binlog is off. (Bug #733)
Diffstat (limited to 'sql')
-rw-r--r--sql/mysql_priv.h1
-rw-r--r--sql/slave.h11
-rw-r--r--sql/sql_repl.cc25
-rw-r--r--sql/sql_repl.h2
4 files changed, 20 insertions, 19 deletions
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 14680306e5d..ce23abb6b2c 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -59,6 +59,7 @@ char* query_table_status(THD *thd,const char *db,const char *table_name);
#define ACL_CACHE_SIZE 256
#define HASH_PASSWORD_LENGTH 16
+#define MAX_PASSWORD_LENGTH 32
#define HOST_CACHE_SIZE 128
#define MAX_ACCEPT_RETRY 10 // Test accept this many times
#define MAX_FIELDS_BEFORE_HASH 32
diff --git a/sql/slave.h b/sql/slave.h
index 6a73c86d304..cae8c6ae241 100644
--- a/sql/slave.h
+++ b/sql/slave.h
@@ -250,20 +250,20 @@ Log_event* next_event(RELAY_LOG_INFO* rli);
typedef struct st_master_info
{
char master_log_name[FN_REFLEN];
+ char host[HOSTNAME_LENGTH+1];
+ char user[USERNAME_LENGTH+1];
+ char password[MAX_PASSWORD_LENGTH+1];
my_off_t master_log_pos;
File fd; // we keep the file open, so we need to remember the file pointer
IO_CACHE file;
/* the variables below are needed because we can change masters on the fly */
- char host[HOSTNAME_LENGTH+1];
- char user[USERNAME_LENGTH+1];
- char password[HASH_PASSWORD_LENGTH+1];
pthread_mutex_t data_lock,run_lock;
pthread_cond_t data_cond,start_cond,stop_cond;
THD *io_thd;
MYSQL* mysql;
- uint32 file_id; /* for 3.23 load data infile */
+ uint32 file_id; /* for 3.23 load data infile */
RELAY_LOG_INFO rli;
uint port;
uint connect_retry;
@@ -271,12 +271,11 @@ typedef struct st_master_info
int events_till_abort;
#endif
bool inited;
- enum enum_binlog_formats old_format; /* master binlog is in 3.23 format */
+ enum enum_binlog_formats old_format; /* binlog is in 3.23 format */
volatile bool abort_slave, slave_running;
volatile ulong slave_run_id;
bool ignore_stop_event;
-
st_master_info()
:fd(-1), io_thd(0), inited(0), old_format(BINLOG_FORMAT_CURRENT),
abort_slave(0),slave_running(0), slave_run_id(0)
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 8fb82798a45..e775a5d712e 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -267,9 +267,13 @@ int purge_master_logs(THD* thd, const char* to_log)
{
char search_file_name[FN_REFLEN];
const char* errmsg = 0;
+ int res;
+
+ if (!mysql_bin_log.is_open())
+ goto end;
mysql_bin_log.make_log_name(search_file_name, to_log);
- int res = mysql_bin_log.purge_logs(thd, search_file_name);
+ res = mysql_bin_log.purge_logs(thd, search_file_name);
switch(res) {
case 0: break;
@@ -292,9 +296,9 @@ binlog purge"; break;
send_error(&thd->net, 0, errmsg);
return 1;
}
- else
- send_ok(&thd->net);
+end:
+ send_ok(&thd->net);
return 0;
}
@@ -886,7 +890,7 @@ int change_master(THD* thd, MASTER_INFO* mi)
if (lex_mi->log_file_name)
strmake(mi->master_log_name, lex_mi->log_file_name,
- sizeof(mi->master_log_name));
+ sizeof(mi->master_log_name)-1);
if (lex_mi->pos)
{
mi->master_log_pos= lex_mi->pos;
@@ -895,11 +899,11 @@ int change_master(THD* thd, MASTER_INFO* mi)
DBUG_PRINT("info", ("master_log_pos: %d", (ulong) mi->master_log_pos));
if (lex_mi->host)
- strmake(mi->host, lex_mi->host, sizeof(mi->host));
+ strmake(mi->host, lex_mi->host, sizeof(mi->host)-1);
if (lex_mi->user)
- strmake(mi->user, lex_mi->user, sizeof(mi->user));
+ strmake(mi->user, lex_mi->user, sizeof(mi->user)-1);
if (lex_mi->password)
- strmake(mi->password, lex_mi->password, sizeof(mi->password));
+ strmake(mi->password, lex_mi->password, sizeof(mi->password)-1);
if (lex_mi->port)
mi->port = lex_mi->port;
if (lex_mi->connect_retry)
@@ -1137,7 +1141,6 @@ int show_binlog_info(THD* thd)
int show_binlogs(THD* thd)
{
- const char *errmsg;
IO_CACHE *index_file;
char fname[FN_REFLEN];
NET* net = &thd->net;
@@ -1148,8 +1151,8 @@ int show_binlogs(THD* thd)
if (!mysql_bin_log.is_open())
{
//TODO: Replace with ER() error message
- errmsg= "You are not using binary logging";
- goto err_with_msg;
+ send_error(net, 0, "You are not using binary logging");
+ return 1;
}
field_list.push_back(new Item_empty_string("Log_name", 255));
@@ -1174,8 +1177,6 @@ int show_binlogs(THD* thd)
send_eof(net);
return 0;
-err_with_msg:
- send_error(net, 0, errmsg);
err:
mysql_bin_log.unlock_index();
return 1;
diff --git a/sql/sql_repl.h b/sql/sql_repl.h
index 15435382b08..c73744c4b7c 100644
--- a/sql/sql_repl.h
+++ b/sql/sql_repl.h
@@ -6,7 +6,7 @@ typedef struct st_slave_info
uint32 rpl_recovery_rank, master_id;
char host[HOSTNAME_LENGTH+1];
char user[USERNAME_LENGTH+1];
- char password[HASH_PASSWORD_LENGTH+1];
+ char password[MAX_PASSWORD_LENGTH+1];
uint16 port;
THD* thd;
} SLAVE_INFO;