diff --git a/deps/Makefile b/deps/Makefile index d74e0a9b0..1d722bb2d 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -95,8 +95,9 @@ jemalloc: jemalloc/jemalloc/lib/libjemalloc.a mariadb-client-library/mariadb_client/libmariadb/libmariadbclient.a: libssl/openssl/libssl.a - cd mariadb-client-library && rm -rf mariadb-connector-c-3.0.2-src - cd mariadb-client-library && tar -zxf mariadb-connector-c-3.0.2-src.tar.gz + cd mariadb-client-library && rm -rf mariadb-connector-c-3.1.4-src + cd mariadb-client-library && tar -zxf mariadb-connector-c-3.1.4-src.tar.gz + cd mariadb-client-library/mariadb_client && patch ./plugins/auth/CMakeLists.txt < ../plugin_auth_CMakeLists.txt.patch cd mariadb-client-library/mariadb_client && cmake . -DOPENSSL_ROOT_DIR=$(shell pwd)/libssl/openssl/ -DOPENSSL_LIBRARIES=$(shell pwd)/libssl/openssl/ . # cd mariadb-client-library/mariadb_client && cmake . -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl # this is needed on MacOSX cd mariadb-client-library/mariadb_client && patch libmariadb/mariadb_stmt.c < ../mariadb_stmt.c.patch @@ -109,7 +110,7 @@ mariadb-client-library/mariadb_client/libmariadb/libmariadbclient.a: libssl/open cd mariadb-client-library/mariadb_client && patch include/mariadb_com.h < ../mariadb_com.h.patch cd mariadb-client-library/mariadb_client && patch libmariadb/ma_alloc.c < ../ma_alloc.c.patch cd mariadb-client-library/mariadb_client && patch libmariadb/ma_charset.c < ../ma_charset.c.patch - cd mariadb-client-library/mariadb_client && patch libmariadb/ma_pvio.c < ../ma_pvio.c.patch +# cd mariadb-client-library/mariadb_client && patch libmariadb/ma_pvio.c < ../ma_pvio.c.patch cd mariadb-client-library/mariadb_client && patch unittest/libmariadb/basic-t.c < ../unittest_basic-t.c.patch cd mariadb-client-library/mariadb_client && patch unittest/libmariadb/charset.c < ../unittest_charset.c.patch cd mariadb-client-library/mariadb_client && CC=${CC} CXX=${CXX} ${MAKE} mariadbclient @@ -156,6 +157,7 @@ pcre: pcre/pcre/.libs/libpcre.a cleanpart: cd mariadb-client-library && rm -rf mariadb-connector-c-2.3.1 cd mariadb-client-library && rm -rf mariadb-connector-c-3.0.2-src + cd mariadb-client-library && rm -rf mariadb-connector-c-3.1.4-src cd jemalloc && rm -rf jemalloc-4.2.1 cd sqlite3/sqlite3 && rm -rf * .PHONY: cleanpart @@ -166,6 +168,7 @@ cleanall: cd jemalloc && rm -rf jemalloc-5.2.0 || true cd mariadb-client-library && rm -rf mariadb-connector-c-2.3.1 cd mariadb-client-library && rm -rf mariadb-connector-c-3.0.2-src + cd mariadb-client-library && rm -rf mariadb-connector-c-3.1.4-src cd libconfig && rm -rf libconfig-1.4.9 cd re2 && rm -rf re2-2018-07-01 cd pcre && rm -rf pcre-8.39 diff --git a/deps/mariadb-client-library/ma_charset.c.patch b/deps/mariadb-client-library/ma_charset.c.patch index 8ade285f8..765d47da6 100644 --- a/deps/mariadb-client-library/ma_charset.c.patch +++ b/deps/mariadb-client-library/ma_charset.c.patch @@ -1,4 +1,4 @@ -@@ -679,7 +679,7 @@ +@@ -720,7 +720,7 @@ { 182, 1, "utf32", "utf32_unicode_520_ci", "", 0, "UTF32", 4, 4, mysql_mbcharlen_utf32, check_mb_utf32}, { 183, 1, "utf32", "utf32_vietnamese_ci", "", 0, "UTF32", 4, 4, mysql_mbcharlen_utf32, check_mb_utf32}, @@ -7,11 +7,3 @@ { 193, 1, UTF8_MB3, UTF8_MB3"_icelandic_ci", "", 65001, "UTF-8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 194, 1, UTF8_MB3, UTF8_MB3"_latvian_ci", "", 65001, "UTF-8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 195, 1, UTF8_MB3, UTF8_MB3"_romanian_ci", "", 65001, "UTF-8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, -@@ -732,6 +732,7 @@ - { 247, 1, UTF8_MB4, UTF8_MB4"_vietnamese_ci", "", 65001, "UTF-8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, - - { 254, 1, UTF8_MB3, UTF8_MB3"_general_cs", "", 65001, "UTF-8", 1, 3, mysql_mbcharlen_utf8, check_mb_utf8_valid}, -+ { 255, 1, UTF8_MB4, UTF8_MB4"_0900_ai_ci", "", 65001, "UTF-8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, - { 576, 1, UTF8_MB3, UTF8_MB3"_croatian_ci", "", 65001, "UTF-8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, /*MDB*/ - { 577, 1, UTF8_MB3, UTF8_MB3"_myanmar_ci", "", 65001, "UTF-8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, /*MDB*/ - { 578, 1, UTF8_MB3, UTF8_MB3"_thai_520_w2", "", 65001, "UTF-8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, /*MDB*/ diff --git a/deps/mariadb-client-library/ma_password.c.patch b/deps/mariadb-client-library/ma_password.c.patch index 2ba8f9352..d6300c0bb 100644 --- a/deps/mariadb-client-library/ma_password.c.patch +++ b/deps/mariadb-client-library/ma_password.c.patch @@ -1,4 +1,4 @@ -@@ -105,6 +105,35 @@ +@@ -98,6 +98,35 @@ } } @@ -34,7 +34,7 @@ void ma_scramble_41(const unsigned char *buffer, const char *scramble, const char *password) { _MA_SHA1_CTX context; -@@ -112,10 +141,15 @@ +@@ -105,10 +134,15 @@ unsigned char sha2[SHA1_MAX_LENGTH]; diff --git a/deps/mariadb-client-library/mariadb_client b/deps/mariadb-client-library/mariadb_client index fc72bf037..56c4215f0 120000 --- a/deps/mariadb-client-library/mariadb_client +++ b/deps/mariadb-client-library/mariadb_client @@ -1 +1 @@ -mariadb-connector-c-3.0.2-src \ No newline at end of file +mariadb-connector-c-3.1.4-src \ No newline at end of file diff --git a/deps/mariadb-client-library/mariadb_com.h.patch b/deps/mariadb-client-library/mariadb_com.h.patch index f61385427..721708d8e 100644 --- a/deps/mariadb-client-library/mariadb_com.h.patch +++ b/deps/mariadb-client-library/mariadb_com.h.patch @@ -1,6 +1,4 @@ ---- include/mariadb_com.h.old 2019-08-16 10:31:33.982265001 +0000 -+++ include/mariadb_com.h 2019-08-16 10:32:03.048790998 +0000 -@@ -206,8 +206,6 @@ +@@ -207,8 +207,6 @@ CLIENT_LONG_FLAG |\ CLIENT_TRANSACTIONS |\ CLIENT_SECURE_CONNECTION |\ diff --git a/deps/mariadb-client-library/mariadb_lib.c.patch b/deps/mariadb-client-library/mariadb_lib.c.patch index f34f12f05..c6606a890 100644 --- a/deps/mariadb-client-library/mariadb_lib.c.patch +++ b/deps/mariadb-client-library/mariadb_lib.c.patch @@ -1,4 +1,4 @@ -@@ -1494,9 +1494,16 @@ +@@ -1515,9 +1515,16 @@ mysql->client_flag= client_flag; @@ -15,7 +15,7 @@ if (mysql->client_flag & CLIENT_COMPRESS) net->compress= 1; -@@ -1625,7 +1632,7 @@ +@@ -1647,7 +1654,7 @@ if (!mysql_real_connect(&tmp_mysql,mysql->host,mysql->user,mysql->passwd, mysql->db, mysql->port, mysql->unix_socket, mysql->client_flag | CLIENT_REMEMBER_OPTIONS) || @@ -24,7 +24,7 @@ { if (ctxt) my_context_install_suspend_resume_hook(ctxt, NULL, NULL); -@@ -1671,6 +1678,7 @@ +@@ -1693,6 +1700,7 @@ { if (mysql->stmts) { @@ -32,7 +32,7 @@ LIST *li_stmt= mysql->stmts; for (; li_stmt; li_stmt= li_stmt->next) -@@ -1679,6 +1687,7 @@ +@@ -1701,6 +1709,7 @@ stmt->mysql= NULL; SET_CLIENT_STMT_ERROR(stmt, CR_STMT_CLOSED, SQLSTATE_UNKNOWN, function_name); } @@ -40,7 +40,7 @@ mysql->stmts= NULL; } } -@@ -1948,6 +1957,33 @@ +@@ -1970,6 +1979,33 @@ return; } @@ -74,16 +74,16 @@ /************************************************************************** ** Do a query. If query returned rows, free old rows. -@@ -2028,6 +2064,8 @@ - old_pos= pos; - si_type= (enum enum_session_state_type)net_field_length(&pos); - switch(si_type) { -+ case SESSION_TRACK_GTIDS: -+ net_field_length(&pos); /* skip encoding */ - case SESSION_TRACK_SCHEMA: - case SESSION_TRACK_STATE_CHANGE: - case SESSION_TRACK_TRANSACTION_CHARACTERISTICS: -@@ -3425,18 +3463,27 @@ +@@ -2036,6 +2072,8 @@ + old_pos= pos; + si_type= (enum enum_session_state_type)net_field_length(&pos); + switch(si_type) { ++ case SESSION_TRACK_GTIDS: ++ net_field_length(&pos); /* skip encoding */ + case SESSION_TRACK_SCHEMA: + case SESSION_TRACK_STATE_CHANGE: + case SESSION_TRACK_TRANSACTION_CHARACTERISTICS: +@@ -3474,18 +3512,27 @@ mariadb_get_charset_info(mysql, cs); } diff --git a/deps/mariadb-client-library/mariadb_stmt.c.patch b/deps/mariadb-client-library/mariadb_stmt.c.patch index e5567885b..f84335d69 100644 --- a/deps/mariadb-client-library/mariadb_stmt.c.patch +++ b/deps/mariadb-client-library/mariadb_stmt.c.patch @@ -1,4 +1,4 @@ -@@ -124,6 +124,7 @@ +@@ -133,6 +133,7 @@ case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_TINY: case MYSQL_TYPE_TINY_BLOB: @@ -6,7 +6,7 @@ case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_YEAR: return 1; -@@ -1143,6 +1144,7 @@ +@@ -1231,6 +1232,7 @@ break; case MYSQL_TYPE_STRING: case MYSQL_TYPE_JSON: diff --git a/deps/mariadb-client-library/mysql.h.patch b/deps/mariadb-client-library/mysql.h.patch index ab93317cc..c64292763 100644 --- a/deps/mariadb-client-library/mysql.h.patch +++ b/deps/mariadb-client-library/mysql.h.patch @@ -1,13 +1,13 @@ -@@ -490,7 +490,7 @@ +@@ -492,7 +492,7 @@ unsigned long STDCALL mysql_thread_id(MYSQL *mysql); const char * STDCALL mysql_character_set_name(MYSQL *mysql); void STDCALL mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *cs); -int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname); +int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname, uint charsetnr); - my_bool STDCALL mariadb_get_infov(MYSQL *mysql, enum mariadb_value value, void *arg, ...); + my_bool mariadb_get_infov(MYSQL *mysql, enum mariadb_value value, void *arg, ...); my_bool STDCALL mariadb_get_info(MYSQL *mysql, enum mariadb_value value, void *arg); -@@ -509,6 +509,7 @@ +@@ -511,6 +511,7 @@ const char *unix_socket, unsigned long clientflag); void STDCALL mysql_close(MYSQL *sock); @@ -15,7 +15,7 @@ int STDCALL mysql_select_db(MYSQL *mysql, const char *db); int STDCALL mysql_query(MYSQL *mysql, const char *q); int STDCALL mysql_send_query(MYSQL *mysql, const char *q, -@@ -608,7 +609,7 @@ +@@ -610,7 +611,7 @@ int STDCALL mysql_stmt_next_result_cont(int *ret, MYSQL_STMT *stmt, int status); int STDCALL mysql_set_character_set_start(int *ret, MYSQL *mysql, diff --git a/deps/mariadb-client-library/plugin_auth_CMakeLists.txt.patch b/deps/mariadb-client-library/plugin_auth_CMakeLists.txt.patch new file mode 100644 index 000000000..37ea1792a --- /dev/null +++ b/deps/mariadb-client-library/plugin_auth_CMakeLists.txt.patch @@ -0,0 +1,28 @@ +--- /tmp/CMakeLists.txt 2019-11-12 10:34:39.913735922 +1100 ++++ ./plugins/auth/CMakeLists.txt 2019-11-12 10:35:51.642093480 +1100 +@@ -70,7 +70,7 @@ + REGISTER_PLUGIN(TARGET caching_sha2_password + TYPE MARIADB_CLIENT_PLUGIN_AUTH + CONFIGURATIONS DYNAMIC STATIC OFF +- DEFAULT DYNAMIC ++ DEFAULT STATIC + SOURCES ${CC_SOURCE_DIR}/plugins/auth/caching_sha2_pw.c + ${CRYPT_SOURCE} + LIBRARIES ${CRYPT_LIBS}) +@@ -81,7 +81,7 @@ + REGISTER_PLUGIN(TARGET sha256_password + TYPE MARIADB_CLIENT_PLUGIN_AUTH + CONFIGURATIONS DYNAMIC STATIC OFF +- DEFAULT DYNAMIC ++ DEFAULT STATIC + SOURCES ${AUTH_DIR}/sha256_pw.c + LIBRARIES ${CRYT_LIBS}) + ENDIF() +@@ -123,6 +123,6 @@ + REGISTER_PLUGIN(TARGET mysql_clear_password + TYPE MARIADB_CLIENT_PLUGIN_AUTH + CONFIGURATIONS DYNAMIC STATIC OFF +- DEFAULT DYNAMIC ++ DEFAULT STATIC + SOURCES ${AUTH_DIR}/mariadb_cleartext.c) + diff --git a/deps/mariadb-client-library/unittest_charset.c.patch b/deps/mariadb-client-library/unittest_charset.c.patch index ceb58ea2e..143f6ee25 100644 --- a/deps/mariadb-client-library/unittest_charset.c.patch +++ b/deps/mariadb-client-library/unittest_charset.c.patch @@ -1,5 +1,3 @@ ---- /tmp/charset.c 2017-12-28 14:58:14.174281738 +0100 -+++ unittest/libmariadb/charset.c 2017-12-28 14:59:53.510120540 +0100 @@ -74,12 +74,12 @@ char *csname= (char*) "utf8"; char *csdefault= (char*)mysql_character_set_name(mysql); @@ -15,7 +13,7 @@ return OK; } -@@ -542,7 +542,7 @@ +@@ -543,7 +543,7 @@ } /* Retrieve character set information. */ @@ -24,7 +22,7 @@ bug30472_retrieve_charset_info(mysql, character_set_name_1, character_set_client_1, -@@ -551,7 +551,7 @@ +@@ -552,7 +552,7 @@ /* Switch client character set. */ @@ -33,7 +31,7 @@ /* Retrieve character set information. */ -@@ -581,7 +581,7 @@ +@@ -582,7 +582,7 @@ /* Call mysql_change_user() with the same username, password, database. */ rc= mysql_change_user(mysql, username, password, (schema) ? schema : "test"); @@ -42,7 +40,7 @@ check_mysql_rc(rc, mysql); /* Retrieve character set information. */ -@@ -647,7 +647,7 @@ +@@ -648,7 +648,7 @@ /* ignore ucs2 */ if (strcmp(row[0], "ucs2") && strcmp(row[0], "utf16le") && strcmp(row[0], "utf8mb4") && strcmp(row[0], "utf16") && strcmp(row[0], "utf32")) { @@ -51,7 +49,7 @@ check_mysql_rc(rc, mysql); } } -@@ -748,7 +748,7 @@ +@@ -749,7 +749,7 @@ if (strcmp(osname, "utf8")) { @@ -60,7 +58,7 @@ check_mysql_rc(rc, mysql); csname2= mysql_character_set_name(mysql); -@@ -756,7 +756,7 @@ +@@ -757,7 +757,7 @@ FAIL_IF(!strcmp(csname2, csname1), "Wrong charset: expected utf8"); diff --git a/include/MySQL_Thread.h b/include/MySQL_Thread.h index 1eedfb3f2..92bfe74b9 100644 --- a/include/MySQL_Thread.h +++ b/include/MySQL_Thread.h @@ -38,7 +38,7 @@ static unsigned int near_pow_2 (unsigned int n) { } #ifdef IDLE_THREADS -typedef struct __attribute__((aligned(CACHE_LINE_SIZE))) _conn_exchange_t { +typedef struct __attribute__((aligned(64))) _conn_exchange_t { pthread_mutex_t mutex_idles; PtrArray *idle_mysql_sessions; pthread_mutex_t mutex_resumes; diff --git a/src/main.cpp b/src/main.cpp index 0943955f2..9fcbc1d9f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -468,6 +468,7 @@ void ProxySQL_Main_init_SSL_module() { proxy_error("%s\n", SSL_alert_desc_string_long(rc)); } init_locks(); + proxy_info("Using OpenSSL version: %s\n", OpenSSL_version(OPENSSL_VERSION)); SSL_METHOD *ssl_method; OpenSSL_add_all_algorithms(); SSL_load_error_strings();