diff options
author | monty@narttu.mysql.fi <> | 2003-07-04 03:18:15 +0300 |
---|---|---|
committer | monty@narttu.mysql.fi <> | 2003-07-04 03:18:15 +0300 |
commit | f3af0d7ce423d3b28de463c430f4ff4bef8b925e (patch) | |
tree | eaf3cc9d9913bdfe213c549f3890aa25f565ca8b /sql | |
parent | 3f4f339f15748a348d085da9c3d17658d01b4af3 (diff) | |
download | mariadb-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.h | 1 | ||||
-rw-r--r-- | sql/slave.h | 11 | ||||
-rw-r--r-- | sql/sql_repl.cc | 25 | ||||
-rw-r--r-- | sql/sql_repl.h | 2 |
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; |