From 205b23acb89b6f362705f7ebee8e58be7ff5e91b Mon Sep 17 00:00:00 2001 From: Bibek Shrestha Date: Thu, 30 Apr 2020 16:58:50 -0400 Subject: [PATCH] Do not support CLIENT_DEPRECATE_EOF on AdminModule --- include/MySQL_Protocol.h | 3 +-- lib/ClickHouse_Server.cpp | 2 +- lib/MySQL_Protocol.cpp | 10 +++++++--- lib/MySQL_Thread.cpp | 2 +- lib/ProxySQL_Admin.cpp | 2 +- src/SQLite3_Server.cpp | 2 +- test/tap/tap/SQLite3_Server.cpp | 2 +- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/MySQL_Protocol.h b/include/MySQL_Protocol.h index 451913996..83337c592 100644 --- a/include/MySQL_Protocol.h +++ b/include/MySQL_Protocol.h @@ -99,8 +99,7 @@ class MySQL_Protocol { bool generate_pkt_field(bool send, void **ptr, unsigned int *len, uint8_t sequence_id, char *schema, char *table, char *org_table, char *name, char *org_name, uint16_t charset, uint32_t column_length, uint8_t type, uint16_t flags, uint8_t decimals, bool field_list, uint64_t defvalue_length, char *defvalue, MySQL_ResultSet *myrs=NULL); bool generate_pkt_row(bool send, void **ptr, unsigned int *len, uint8_t sequence_id, int colnums, unsigned long *fieldslen, char **fieldstxt); uint8_t generate_pkt_row3(MySQL_ResultSet *myrs, unsigned int *len, uint8_t sequence_id, int colnums, unsigned long *fieldslen, char **fieldstxt); -// bool generate_pkt_initial_handshake(MySQL_Data_Stream *myds, bool send, void **ptr, unsigned int *len); - bool generate_pkt_initial_handshake(bool send, void **ptr, unsigned int *len, uint32_t *thread_id); + bool generate_pkt_initial_handshake(bool send, void **ptr, unsigned int *len, uint32_t *thread_id, bool deprecate_eof_active); // bool generate_statistics_response(MySQL_Data_Stream *myds, bool send, void **ptr, unsigned int *len); bool generate_statistics_response(bool send, void **ptr, unsigned int *len); diff --git a/lib/ClickHouse_Server.cpp b/lib/ClickHouse_Server.cpp index 9a27dc34b..2358f6644 100644 --- a/lib/ClickHouse_Server.cpp +++ b/lib/ClickHouse_Server.cpp @@ -1274,7 +1274,7 @@ static void *child_mysql(void *arg) { fds[0].revents=0; fds[0].events=POLLIN|POLLOUT; free(arg); - sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id); + sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id, false); while (__sync_fetch_and_add(&glovars.shutdown,0)==0) { if (myds->available_data_out()) { diff --git a/lib/MySQL_Protocol.cpp b/lib/MySQL_Protocol.cpp index a063e33a0..edf55854a 100644 --- a/lib/MySQL_Protocol.cpp +++ b/lib/MySQL_Protocol.cpp @@ -1160,8 +1160,7 @@ bool MySQL_Protocol::generate_pkt_auth_switch_request(bool send, void **ptr, uns return true; } -//bool MySQL_Protocol::generate_pkt_initial_handshake(MySQL_Data_Stream *myds, bool send, void **ptr, unsigned int *len) { -bool MySQL_Protocol::generate_pkt_initial_handshake(bool send, void **ptr, unsigned int *len, uint32_t *_thread_id) { +bool MySQL_Protocol::generate_pkt_initial_handshake(bool send, void **ptr, unsigned int *len, uint32_t *_thread_id, bool deprecate_eof_active) { proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 7, "Generating handshake pkt\n"); mysql_hdr myhdr; myhdr.pkt_id=0; @@ -1244,7 +1243,12 @@ bool MySQL_Protocol::generate_pkt_initial_handshake(bool send, void **ptr, unsig uint8_t uint8_charset = ci->nr & 255; memcpy(_ptr+l,&uint8_charset, sizeof(uint8_charset)); l+=sizeof(uint8_charset); memcpy(_ptr+l,&server_status, sizeof(server_status)); l+=sizeof(server_status); - memcpy(_ptr+l,"\x8f\x81\x15",3); l+=3; + if (deprecate_eof_active) { + memcpy(_ptr+l,"\x8f\x81\x15",3); l+=3; + } + else { + memcpy(_ptr+l,"\x8f\x80\x15",3); l+=3; + } for (i=0;i<10; i++) { _ptr[l]=0x00; l++; } //filler //create_random_string(mypkt->data+l,12,(struct my_rnd_struct *)&rand_st); l+=12; //#ifdef MARIADB_BASE_VERSION diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index b81512c4a..d1e87476e 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -5200,7 +5200,7 @@ void MySQL_Thread::listener_handle_new_connection(MySQL_Data_Stream *myds, unsig sess->client_myds->proxy_addr.addr=strdup(ifi->address); sess->client_myds->proxy_addr.port=ifi->port; } - sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id); + sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id, true); ioctl_FIONBIO(sess->client_myds->fd, 1); mypolls.add(POLLIN|POLLOUT, sess->client_myds->fd, sess->client_myds, curtime); proxy_debug(PROXY_DEBUG_NET,1,"Session=%p -- Adding client FD %d\n", sess, sess->client_myds->fd); diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index cc8a3c67c..ee483a32b 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -4749,7 +4749,7 @@ void *child_mysql(void *arg) { fds[0].events=POLLIN|POLLOUT; //free(arg->addr); // do not free free(arg); - sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id); + sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id, false); while (__sync_fetch_and_add(&glovars.shutdown,0)==0) { if (myds->available_data_out()) { diff --git a/src/SQLite3_Server.cpp b/src/SQLite3_Server.cpp index 98424336b..7723d2cac 100644 --- a/src/SQLite3_Server.cpp +++ b/src/SQLite3_Server.cpp @@ -683,7 +683,7 @@ static void *child_mysql(void *arg) { fds[0].revents=0; fds[0].events=POLLIN|POLLOUT; free(arg); - sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id); + sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id, false); while (__sync_fetch_and_add(&glovars.shutdown,0)==0) { if (myds->available_data_out()) { diff --git a/test/tap/tap/SQLite3_Server.cpp b/test/tap/tap/SQLite3_Server.cpp index 13c07630f..bbd629683 100644 --- a/test/tap/tap/SQLite3_Server.cpp +++ b/test/tap/tap/SQLite3_Server.cpp @@ -286,7 +286,7 @@ static void *child_mysql(void *arg) { fds[0].revents=0; fds[0].events=POLLIN|POLLOUT; free(arg); - sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id); + sess->client_myds->myprot.generate_pkt_initial_handshake(true,NULL,NULL, &sess->thread_session_id, false); while (__sync_fetch_and_add(&glovars.shutdown,0)==0) { if (myds->available_data_out()) {