summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2017-10-14 00:24:54 +0200
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2017-10-14 00:48:23 +0200
commit31beb7972466a33a88770eacbce13490f2ddadc2 (patch)
tree2b32766dc13267d3fb0bdf1136483ecb80dc0242
parent131c0f8aad2e08201a3977401f15dfd2b5127b69 (diff)
Fix mariadb/mysql macro confusion
-rw-r--r--src/src/EDITME3
-rw-r--r--src/src/lookups/mysql.c61
2 files changed, 53 insertions, 11 deletions
diff --git a/src/src/EDITME b/src/src/EDITME
index e604acd8b..72e26ce0e 100644
--- a/src/src/EDITME
+++ b/src/src/EDITME
@@ -258,7 +258,7 @@ TRANSPORT_SMTP=yes
# you perform upgrades and revert them. You should consider the benefit of
# embedding the Exim version number into LOOKUP_MODULE_DIR, so that you can
# maintain two concurrent sets of modules.
-#
+#
# *BEWARE*: ability to modify the files in LOOKUP_MODULE_DIR is equivalent to
# the ability to modify the Exim binary, which is often setuid root! The Exim
# developers only intend this functionality be used by OS software packagers
@@ -311,6 +311,7 @@ LOOKUP_DNSDB=yes
# LOOKUP_IBASE=yes
# LOOKUP_LDAP=yes
# LOOKUP_MYSQL=yes
+# LOOKUP_MYSQL_PC=mariadb
# LOOKUP_NIS=yes
# LOOKUP_NISPLUS=yes
# LOOKUP_ORACLE=yes
diff --git a/src/src/lookups/mysql.c b/src/src/lookups/mysql.c
index 40b27d5ba..b5133bc00 100644
--- a/src/src/lookups/mysql.c
+++ b/src/src/lookups/mysql.c
@@ -13,7 +13,53 @@ functions. */
#include "lf_functions.h"
#include <mysql.h> /* The system header */
-#include <mysql_version.h>
+
+/* We define symbols for *_VERSION_ID (numeric), *_VERSION_STR (char*)
+and *_BASE_STR (char*). It's a bit of guesswork. Especially for mariadb
+with versions before 10.2, as they do not define there there specific symbols.
+*/
+
+// Newer (>= 10.2) MariaDB
+#if defined MARIADB_VERSION_ID
+#define EXIM_MxSQL_VERSION_ID MARIADB_VERSION_ID
+
+// MySQL defines MYSQL_VERSION_ID, and MariaDB does so
+// https://dev.mysql.com/doc/refman/5.7/en/c-api-server-client-versions.html
+#elif defined LIBMYSQL_VERSION_ID
+#define EXIM_MxSQL_VERSION_ID LIBMYSQL_VERSION_ID
+#elif defined MYSQL_VERSION_ID
+#define EXIM_MxSQL_VERSION_ID MYSQL_VERSION_ID
+
+#else
+#define EXIM_MYSQL_VERSION_ID 0
+#endif
+
+// Newer (>= 10.2) MariaDB
+#ifdef MARIADB_CLIENT_VERSION_STR
+#define EXIM_MxSQL_VERSION_STR MARIADB_CLIENT_VERSION_STR
+
+// Mysql uses MYSQL_SERVER_VERSION
+#elif defined LIBMYSQL_VERSION
+#define EXIM_MxSQL_VERSION_STR LIBMYSQL_VERSION
+#elif defined MYSQL_SERVER_VERSION
+#define EXIM_MxSQL_VERSION_STR MYSQL_SERVER_VERSION
+
+#else
+#define EXIM_MxSQL_VERSION_STR "N.A."
+#endif
+
+#if defined MARIADB_BASE_VERSION
+#define EXIM_MxSQL_BASE_STR MARIADB_BASE_VERSION
+
+#elif defined MARIADB_PACKAGE_VERSION
+#define EXIM_MxSQL_BASE_STR "mariadb"
+
+#elif defined MYSQL_BASE_VERSION
+#define EXIM_MxSQL_BASE_STR MYSQL_BASE_VERSION
+
+#else
+#define EXIM_MxSQL_BASE_STR "n.A."
+#endif
/* Structure and anchor for caching connections. */
@@ -433,15 +479,10 @@ return quoted;
void
mysql_version_report(FILE *f)
{
-#ifdef MYSQL_SERVER_VERSION
-fprintf(f, "Library version: MySQL: Compile: %s [%s]\n",
- MYSQL_SERVER_VERSION, MYSQL_COMPILATION_COMMENT);
-#else
-fprintf(f, "Library version: MySQL: Compile: (unknown)\n");
-#endif
-
-fprintf(f, " Runtime: %s\n", mysql_get_client_info());
-
+fprintf(f, "Library version: MySQL: Compile: %lu %s [%s]\n"
+ " Runtime: %lu %s\n",
+ (long)EXIM_MxSQL_VERSION_ID, EXIM_MxSQL_VERSION_STR, EXIM_MxSQL_BASE_STR,
+ mysql_get_client_version(), mysql_get_client_info());
#ifdef DYNLOOKUP
fprintf(f, " Exim version %s\n", EXIM_VERSION_STR);
#endif