Commit 5177c97e authored by unknown's avatar unknown

BUG#22989 - START SLAVE causes Error on COM_REGISTER_SLAVE: 1105

            'Wrong parameters to functi

START SLAVE reports vague error when it fails to register on master:
"Wrong parameters to function register_slave".

If master failed to register slave because of too long
'report-host'/'report-user'/'report-password', return better error
messages:
"Failed to register slave: too long 'report-host'"
"Failed to register slave: too long 'report-user'"
"Failed to register slave; too long 'report-password'"

No test case for this fix.


sql/repl_failsafe.cc:
  Report descriptive error when master fails to register slave.
parent a46b9639
...@@ -109,11 +109,14 @@ void change_rpl_status(RPL_STATUS from_status, RPL_STATUS to_status) ...@@ -109,11 +109,14 @@ void change_rpl_status(RPL_STATUS from_status, RPL_STATUS to_status)
} }
#define get_object(p, obj) \ #define get_object(p, obj, msg) \
{\ {\
uint len = (uint)*p++; \ uint len = (uint)*p++; \
if (p + len > p_end || len >= sizeof(obj)) \ if (p + len > p_end || len >= sizeof(obj)) \
{\
errmsg= msg;\
goto err; \ goto err; \
}\
strmake(obj,(char*) p,len); \ strmake(obj,(char*) p,len); \
p+= len; \ p+= len; \
}\ }\
...@@ -158,6 +161,7 @@ int register_slave(THD* thd, uchar* packet, uint packet_length) ...@@ -158,6 +161,7 @@ int register_slave(THD* thd, uchar* packet, uint packet_length)
int res; int res;
SLAVE_INFO *si; SLAVE_INFO *si;
uchar *p= packet, *p_end= packet + packet_length; uchar *p= packet, *p_end= packet + packet_length;
const char *errmsg= "Wrong parameters to function register_slave";
if (check_access(thd, REPL_SLAVE_ACL, any_db,0,0,0,0)) if (check_access(thd, REPL_SLAVE_ACL, any_db,0,0,0,0))
return 1; return 1;
...@@ -166,9 +170,9 @@ int register_slave(THD* thd, uchar* packet, uint packet_length) ...@@ -166,9 +170,9 @@ int register_slave(THD* thd, uchar* packet, uint packet_length)
thd->server_id= si->server_id= uint4korr(p); thd->server_id= si->server_id= uint4korr(p);
p+= 4; p+= 4;
get_object(p,si->host); get_object(p,si->host, "Failed to register slave: too long 'report-host'");
get_object(p,si->user); get_object(p,si->user, "Failed to register slave: too long 'report-user'");
get_object(p,si->password); get_object(p,si->password, "Failed to register slave; too long 'report-password'");
if (p+10 > p_end) if (p+10 > p_end)
goto err; goto err;
si->port= uint2korr(p); si->port= uint2korr(p);
...@@ -187,8 +191,7 @@ int register_slave(THD* thd, uchar* packet, uint packet_length) ...@@ -187,8 +191,7 @@ int register_slave(THD* thd, uchar* packet, uint packet_length)
err: err:
my_free((gptr) si, MYF(MY_WME)); my_free((gptr) si, MYF(MY_WME));
my_message(ER_UNKNOWN_ERROR, "Wrong parameters to function register_slave", my_message(ER_UNKNOWN_ERROR, errmsg, MYF(0));
MYF(0));
err2: err2:
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment