From b2db9b91e7173e4b62889c06cb283ba56dbc9cc0 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 24 Dec 2021 21:08:53 +0100 Subject: [PATCH 1/3] MDEV-27304 SHOW ... result columns are right-aligned with --version=xxx the server doesn't send 5.5.5- version prefix, so C/C doesn't detect the server as MariaDB (look for "is_maria"), but it still sends MARIADB_CLIENT_EXTENDED_METADATA to the server. This causes the server to send extended metadata, but C/C doesn't expect it (is_maria is false) and parses the packet incorrectly. As a fix, backport from 3.2 the code that makes C/C to announce only those client capabilities that are supported by the server. --- plugins/auth/my_auth.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/auth/my_auth.c b/plugins/auth/my_auth.c index f2ba3e7b..2423294c 100644 --- a/plugins/auth/my_auth.c +++ b/plugins/auth/my_auth.c @@ -273,7 +273,10 @@ static int send_client_reply_packet(MCPVIO_EXT *mpvio, memset(buff + 9, 0, 32-9); if (!(mysql->server_capabilities & CLIENT_MYSQL)) { - mysql->extension->mariadb_client_flag = MARIADB_CLIENT_SUPPORTED_FLAGS >> 32; + uint server_extended_cap= mysql->extension->mariadb_server_capabilities; + uint client_extended_cap= (uint)(MARIADB_CLIENT_SUPPORTED_FLAGS >> 32); + mysql->extension->mariadb_client_flag= + server_extended_cap & client_extended_cap; int4store(buff + 28, mysql->extension->mariadb_client_flag); } end= buff+32; From 43b60edc928a6ab6ab88b2983ce83abf2a80eee9 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 25 Dec 2021 17:23:18 +0100 Subject: [PATCH 2/3] use mariadb_connection() to detect whether the server is MariaDB --- libmariadb/mariadb_lib.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index 389ec5bc..b37cf430 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -1557,6 +1557,7 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user, SET_CLIENT_ERROR(mysql, CR_OUT_OF_MEMORY, SQLSTATE_UNKNOWN, 0); goto error; } + is_maria= mariadb_connection(mysql); } end+= strlen(end) + 1; From e19c93d31becad77311092f3281be5017c1b825c Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Fri, 14 Jan 2022 20:06:39 +0100 Subject: [PATCH 3/3] MDEV-16383 Add mariadb_config --libmysqld-libs option If server package was built with embedded server and MariaDB Connector/C was built as subproject in server package mariadb_config will display link option for embedded server. --- CMakeLists.txt | 5 +++++ mariadb_config/mariadb_config.c.in | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 31008b73..76036d1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,6 +118,11 @@ IF(MSVC) ENDFOREACH() ENDIF() ENDIF() +ELSE() + # MDEV-16383 + IF(WITH_EMBEDDED_SERVER) + ADD_DEFINITIONS(-DHAVE_EMBEDDED) + ENDIF() ENDIF(NOT IS_SUBPROJECT) # Disable dbug information for release builds diff --git a/mariadb_config/mariadb_config.c.in b/mariadb_config/mariadb_config.c.in index 55749432..8d5e19cb 100644 --- a/mariadb_config/mariadb_config.c.in +++ b/mariadb_config/mariadb_config.c.in @@ -45,6 +45,10 @@ static char *mariadb_progname; #define PKG_PLUGINDIR "%s/@INSTALL_PLUGINDIR@" #define PKG_LIBDIR "%s/@INSTALL_LIBDIR@" +#ifdef HAVE_EMBEDDED +#define EMBEDDED_LIBS "-L@CMAKE_INSTALL_PREFIX@/@INSTALL_LIBDIR@/ -lmariadbd @extra_dynamic_LDFLAGS@" +#endif + #if defined(SOLARIS) || defined(__sun) #define OPT_STRING_TYPE (char *) #else @@ -65,6 +69,11 @@ static struct option long_options[]= {OPT_STRING_TYPE "plugindir", no_argument, 0, 'j'}, {OPT_STRING_TYPE "tlsinfo", no_argument, 0, 'k'}, {OPT_STRING_TYPE "variable", 2, 0, 'm'}, +#ifdef HAVE_EMBEDDED + {OPT_STRING_TYPE "libmysqld-libs", no_argument, 0, 'n' }, + {OPT_STRING_TYPE "embedded-libs", no_argument, 0, 'n' }, + {OPT_STRING_TYPE "embedded", no_argument, 0, 'n' }, +#endif {NULL, 0, 0, 0} }; @@ -95,6 +104,9 @@ static const char *values[]= PLUGIN_DIR, TLS_LIBRARY_VERSION, "VAR VAR is one of:" +#ifdef HAVE_EMBEDDED + ,EMBEDDED_LIBS +#endif }; void usage(void) @@ -232,7 +244,7 @@ int main(int argc, char **argv) while(1) { int option_index= 0; - c= getopt_long(argc, argv, "abcdefghijkl", long_options, &option_index); + c= getopt_long(argc, argv, "abcdefghijklmno", long_options, &option_index); switch(c) { case 'a': /* CFLAGS and Include directories */ @@ -288,6 +300,11 @@ int main(int argc, char **argv) } break; } +#ifdef HAVE_EMBEDDED + case 'n': + puts(EMBEDDED_LIBS); + break; +#endif default: exit((c != -1)); }