From 9ae9d31165952dc0738d0909108e7684798786ce Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Tue, 14 Aug 2018 09:48:46 +0900 Subject: [PATCH] repmgr: truncate version string if necessary Some distributions may add extra information to PG_VERSION after the actual version number (e.g. "10.4 (Debian 10.4-2.pgdg90+1)"), so copy the version number string up until the first space is found. GitHub #490. --- HISTORY | 1 + dbutils.c | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/HISTORY b/HISTORY index 8c82efb1..bf85766f 100644 --- a/HISTORY +++ b/HISTORY @@ -1,5 +1,6 @@ 4.1.1 2018-??-?? + repmgr: truncate version string, if necessary; GitHub #490 (Ian) repmgrd: ensure that sending SIGHUP always results in the log file being reopened; GitHub #485 (Ian) repmgrd: report version number *after* logger initialisation; GitHub #487 (Ian) diff --git a/dbutils.c b/dbutils.c index 7786c305..13ce238e 100644 --- a/dbutils.c +++ b/dbutils.c @@ -1095,7 +1095,28 @@ get_server_version(PGconn *conn, char *server_version) } if (server_version != NULL) - strncpy(server_version, PQgetvalue(res, 0, 1), MAXVERSIONSTR); + { + char server_version_buf[MAXVERSIONSTR]; + int i; + + memset(server_version_buf, 0, MAXVERSIONSTR); + + /* + * Some distributions may add extra info after the actual version number, + * e.g. "10.4 (Debian 10.4-2.pgdg90+1)", so copy everything up until the + * first space. + */ + + strncpy(server_version_buf, PQgetvalue(res, 0, 1), MAXVERSIONSTR); + + for (i = 0; i < MAXVERSIONSTR; i++) + { + if (server_version_buf[i] == ' ') + break; + + *server_version++ = server_version_buf[i]; + } + } server_version_num = atoi(PQgetvalue(res, 0, 0));