Added mysql variable to enable unsupported query 'LOAD DATA LOCAL INFILE' issuing warning message #3500

pull/3526/head
Javier Jaramago Fernández 5 years ago
parent bd703d4ea8
commit 1f4f86d5ce

@ -535,6 +535,7 @@ class MySQL_Threads_Handler
bool client_session_track_gtid;
bool enable_client_deprecate_eof;
bool enable_server_deprecate_eof;
bool enable_load_data_local_infile;
bool log_mysql_warnings_enabled;
} variables;
struct {

@ -798,6 +798,7 @@ __thread int mysql_thread___query_digests_grouping_limit;
__thread bool mysql_thread___enable_client_deprecate_eof;
__thread bool mysql_thread___enable_server_deprecate_eof;
__thread bool mysql_thread___log_mysql_warnings_enabled;
__thread bool mysql_thread___enable_load_data_local_infile;
/* variables used for Query Cache */
__thread int mysql_thread___query_cache_size_MB;
@ -949,6 +950,7 @@ extern __thread int mysql_thread___query_digests_grouping_limit;
extern __thread bool mysql_thread___enable_client_deprecate_eof;
extern __thread bool mysql_thread___enable_server_deprecate_eof;
extern __thread bool mysql_thread___log_mysql_warnings_enabled;
extern __thread bool mysql_thread___enable_load_data_local_infile;
/* variables used for Query Cache */
extern __thread int mysql_thread___query_cache_size_MB;

@ -1333,16 +1333,23 @@ bool MySQL_Session::handler_special_queries(PtrSize_t *pkt) {
return true;
}
// 'LOAD DATA LOCAL INFILE' is unsupported. We report an specific error to inform clients about this fact. For more context see #833.
if ( (pkt->size >= 22 + 5) && (strncasecmp((char *)"LOAD DATA LOCAL INFILE",(char *)pkt->ptr+5, 22)==0) ) {
client_myds->DSS=STATE_QUERY_SENT_NET;
client_myds->myprot.generate_pkt_ERR(true,NULL,NULL,1,1047,(char *)"HY000",(char *)"Unsupported 'LOAD DATA LOCAL INFILE' command",true);
client_myds->DSS=STATE_SLEEP;
status=WAITING_CLIENT_DATA;
if (mirror==false) {
RequestEnd(NULL);
if (mysql_thread___enable_load_data_local_infile == false) {
if ( (pkt->size >= 22 + 5) && (strncasecmp((char *)"LOAD DATA LOCAL INFILE",(char *)pkt->ptr+5, 22)==0) ) {
client_myds->DSS=STATE_QUERY_SENT_NET;
client_myds->myprot.generate_pkt_ERR(true,NULL,NULL,1,1047,(char *)"HY000",(char *)"Unsupported 'LOAD DATA LOCAL INFILE' command",true);
client_myds->DSS=STATE_SLEEP;
status=WAITING_CLIENT_DATA;
if (mirror==false) {
RequestEnd(NULL);
}
l_free(pkt->size,pkt->ptr);
return true;
}
l_free(pkt->size,pkt->ptr);
return true;
} else {
proxy_warning(
"Command 'LOAD DATA LOCAL INFILE' refers to file in ProxySQL instance, NOT on client side!\n"
);
}
return false;

@ -421,6 +421,7 @@ static char * mysql_thread_variables_names[]= {
(char *)"connect_timeout_server_max",
(char *)"enable_client_deprecate_eof",
(char *)"enable_server_deprecate_eof",
(char *)"enable_load_data_local_infile",
(char *)"eventslog_filename",
(char *)"eventslog_filesize",
(char *)"eventslog_default_log",
@ -1158,6 +1159,7 @@ MySQL_Threads_Handler::MySQL_Threads_Handler() {
variables.query_digests_grouping_limit = 3;
variables.enable_client_deprecate_eof=true;
variables.enable_server_deprecate_eof=true;
variables.enable_load_data_local_infile=false;
variables.log_mysql_warnings_enabled=false;
// status variables
status_variables.mirror_sessions_current=0;
@ -1970,6 +1972,7 @@ char ** MySQL_Threads_Handler::get_variables_list() {
VariablesPointers_bool["default_reconnect"] = make_tuple(&variables.default_reconnect, false);
VariablesPointers_bool["enable_client_deprecate_eof"] = make_tuple(&variables.enable_client_deprecate_eof, false);
VariablesPointers_bool["enable_server_deprecate_eof"] = make_tuple(&variables.enable_server_deprecate_eof, false);
VariablesPointers_bool["enable_load_data_local_infile"] = make_tuple(&variables.enable_load_data_local_infile, false);
VariablesPointers_bool["enforce_autocommit_on_reads"] = make_tuple(&variables.enforce_autocommit_on_reads, false);
VariablesPointers_bool["firewall_whitelist_enabled"] = make_tuple(&variables.firewall_whitelist_enabled, false);
VariablesPointers_bool["kill_backend_connection_when_disconnect"] = make_tuple(&variables.kill_backend_connection_when_disconnect, false);
@ -3655,6 +3658,7 @@ void MySQL_Thread::refresh_variables() {
mysql_thread___default_reconnect=(bool)GloMTH->get_variable_int((char *)"default_reconnect");
mysql_thread___enable_client_deprecate_eof=(bool)GloMTH->get_variable_int((char *)"enable_client_deprecate_eof");
mysql_thread___enable_server_deprecate_eof=(bool)GloMTH->get_variable_int((char *)"enable_server_deprecate_eof");
mysql_thread___enable_load_data_local_infile=(bool)GloMTH->get_variable_int((char *)"enable_load_data_local_infile");
mysql_thread___log_mysql_warnings_enabled=(bool)GloMTH->get_variable_int((char *)"log_mysql_warnings_enabled");
#ifdef DEBUG
mysql_thread___session_debug=(bool)GloMTH->get_variable_int((char *)"session_debug");

Loading…
Cancel
Save