From c50ee6c23dbeb090963580754bec2f0a96ac0557 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 9 Apr 2013 23:27:52 +0200 Subject: [PATCH] MDEV-4088 Replication 10.0 -> 5.5 fails --- include/mysql_com.h | 7 +++++++ sql-common/client.c | 6 ++++++ sql/sql_acl.cc | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/include/mysql_com.h b/include/mysql_com.h index 9ba17b416c4..e9a24fd767d 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -34,6 +34,13 @@ #define MYSQL50_TABLE_NAME_PREFIX_LENGTH (sizeof(MYSQL50_TABLE_NAME_PREFIX)-1) #define SAFE_NAME_LEN (NAME_LEN + MYSQL50_TABLE_NAME_PREFIX_LENGTH) +#ifdef EMBEDDED_LIBRARY +#define RPL_VERSION_HACK "" +#else +/* this version must be the one that *does not* support pluggable auth */ +#define RPL_VERSION_HACK "5.5.5-" +#endif + #define SERVER_VERSION_LENGTH 60 #define SQLSTATE_LENGTH 5 #define LIST_PROCESS_HOST_LEN 64 diff --git a/sql-common/client.c b/sql-common/client.c index 64010919fe3..e48cdac369e 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -3416,6 +3416,12 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user, strmov(mysql->server_version,(char*) net->read_pos+1); mysql->port=port; + /* remove the rpl hack from the version string */ + if (mysql->server_capabilities & CLIENT_PLUGIN_AUTH && + strncmp(mysql->server_version, RPL_VERSION_HACK, + sizeof(RPL_VERSION_HACK) - 1) == 0) + mysql->server_version+= sizeof(RPL_VERSION_HACK) - 1; + if (pkt_end >= end + SCRAMBLE_LENGTH - SCRAMBLE_LENGTH_323 + 1) { /* diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 56dec73bac5..d9470094c63 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -7957,7 +7957,7 @@ static bool send_server_handshake_packet(MPVIO_EXT *mpvio, data_len= SCRAMBLE_LENGTH; } - end= strnmov(end, server_version, SERVER_VERSION_LENGTH) + 1; + end= strxnmov(end, SERVER_VERSION_LENGTH, RPL_VERSION_HACK, server_version, NullS) + 1; int4store((uchar*) end, mpvio->thd->thread_id); end+= 4;