[Pkg-nagios-devel] Bug#1118443: trixie-pu: package monitoring-plugins/2.4.0-3+deb13u1

Jan Wagner waja at cyconet.org
Mon Oct 20 07:20:06 BST 2025


Package: release.debian.org
Severity: normal
Tags: trixie
User: release.debian.org at packages.debian.org
Usertags: pu
X-Debbugs-Cc: monitoring-plugins at packages.debian.org
Control: affects -1 + src:monitoring-plugins

[ Reason ]
As reported in #1116027, check_mysql fails for MySQL 8.4 due to 
deprecation of 'CHECK SLAVE STATUS' command
Another regression was reported in #1110265 where check_users is 
reporting wrong users count

[ Impact ]
  - check_mysql is unable to check the slave/replica status for MySQL >= 8.4
  - check_users reports wrong users count

[ Tests ]
Upstream test suite, fix for #1116027 was verified[1] by the bug 
reporter (Jon Cutting) to work. 2.4.0-4 has also those fixes, which is 
since some time in testing.

[ Risks ]
Low, trivial changes.

[ Checklist ]
      [x] *all* changes are documented in the d/changelog
      [x] I reviewed all changes and I approve them
      [x] attach debdiff against the package in stable
      [x] the issue is verified as fixed in unstable

[ Changes ]
The changes are required to fix the check_mysql and check_users regression.

[ Other info ]
This is a request for pre approval, if you are okay with the changes, 
I'll upload it.

Kind Regards,

Jan
[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1116027#39
[2] 
https://salsa.debian.org/nagios-team/monitoring-plugins/-/pipelines/959549
-- 
Never write mail to <waja at spamfalle.info>, you have been warned!
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GIT d-- s+: a C+++ UL++++ P+ L+++ E--- W+++ N+++ o++ K++ w--- O M+ V- PS 
PE Y++
PGP++ t-- 5 X R tv- b+ DI D+ G++ e++ h---- r+++ y++++
------END GEEK CODE BLOCK------
-------------- next part --------------
diff --git a/debian/.gitlab-ci.yml b/debian/.gitlab-ci.yml
index 45a5cf6..067d3ee 100644
--- a/debian/.gitlab-ci.yml
+++ b/debian/.gitlab-ci.yml
@@ -3,7 +3,7 @@ include:
   - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml
 
 variables:
-  RELEASE: 'unstable'
+  RELEASE: 'trixie'
   SALSA_CI_DISABLE_APTLY: 0
   SALSA_CI_DISABLE_AUTOPKGTEST: 0
   SALSA_CI_DISABLE_BLHC: 1
diff --git a/debian/changelog b/debian/changelog
index 3a9b589..d9304e1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+monitoring-plugins (2.4.0-3+deb13u1) trixie; urgency=medium
+
+  * [3cb6abf] d/.gitlab-ci.yml: Change RELEASE to trixie
+  * [1b5ea7b] Adding d/patches/25_check_users_sd_get_uids to fix user count
+  * [b92ed85] Adding d/p/26_check_mysql_replica from upstream (Closes: #1116027)
+  * [4362a8d] d/control: Adding libsystemd-dev and libsystemd0 as build-dep
+    (Closes: #1110265)
+  * [22de282] d/control: Drop libsystemd0 from build-deps, pulled by libsystemd-dev
+
+ -- Jan Wagner <waja at cyconet.org>  Mon, 20 Oct 2025 06:00:52 +0000
+
 monitoring-plugins (2.4.0-3) unstable; urgency=medium
 
   * Upload to unstable 
diff --git a/debian/control b/debian/control
index 7b0f0c1..e4be0a8 100644
--- a/debian/control
+++ b/debian/control
@@ -13,6 +13,7 @@ Build-Depends: debhelper-compat (= 13),
                libnet-snmp-perl,
                libpq-dev,
                libssl-dev,
+               libsystemd-dev,
                liburiparser-dev,
                mawk | awk,
                perl,
diff --git a/debian/patches/25_check_users_sd_get_uids b/debian/patches/25_check_users_sd_get_uids
new file mode 100644
index 0000000..9f541ed
--- /dev/null
+++ b/debian/patches/25_check_users_sd_get_uids
@@ -0,0 +1,28 @@
+From fb39f96ac6f72bb56d17f3e8694134dfea9186e9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lorenz=20K=C3=A4stle?=
+ <12514511+RincewindsHat at users.noreply.github.com>
+Date: Mon, 11 Aug 2025 21:49:20 +0200
+Subject: [PATCH] check_users: Use sd_get_uids instead of sd_get_session
+
+Previously check_users in combination with systemd used
+sd_get_sessions (3) to aquire the number of users, probably
+with the idea that every users opens a session.
+Turns out, that a user can have multiple sessions and we only really
+want to know how many users there are.
+
+This commit changes to sd_get_uids (3) to achieve that target.
+---
+ plugins/check_users.d/users.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/plugins/check_users.c
++++ b/plugins/check_users.c
+@@ -92,7 +92,7 @@
+ 
+ #ifdef HAVE_LIBSYSTEMD
+ 	if (sd_booted () > 0)
+-	        users = sd_get_sessions (NULL);
++		users = sd_get_uids(NULL);
+ 	else {
+ #endif
+ #if HAVE_WTSAPI32_H
diff --git a/debian/patches/26_check_mysql_replica b/debian/patches/26_check_mysql_replica
new file mode 100644
index 0000000..aeeb45a
--- /dev/null
+++ b/debian/patches/26_check_mysql_replica
@@ -0,0 +1,188 @@
+From 4886fa3debf79aa2faac9d0180e8ddb4bb1d4aaa Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lorenz=20K=C3=A4stle?=
+ <12514511+RincewindsHat at users.noreply.github.com>
+Date: Mon, 24 Feb 2025 19:52:08 +0100
+Subject: [PATCH 1/2] Add MySQL server version dectection and adaptive replica
+ query
+
+---
+
+Taken from https://github.com/monitoring-plugins/monitoring-plugins/compare/master...maintenance-2.4.0-check_mysql.patch
+
+---
+ plugins/check_mysql.c | 51 +++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 49 insertions(+), 2 deletions(-)
+
+diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c
+index 6a7daf11a..1b7403f7b 100644
+--- a/plugins/check_mysql.c
++++ b/plugins/check_mysql.c
+@@ -211,8 +211,55 @@ main (int argc, char **argv)
+ 	}
+ 
+ 	if(check_slave) {
+-		/* check the slave status */
+-		if (mysql_query (&mysql, "show slave status") != 0) {
++		// Detect which version we are, on older version
++		// "show slave status" should work, on newer ones
++		// "show replica status"
++		// But first we have to find out whether this is
++		// MySQL or MariaDB since the version numbering scheme
++		// is different
++		bool use_deprecated_slave_status = false;
++		const char *server_version = mysql_get_server_info(&mysql);
++		unsigned long server_verion_int = mysql_get_server_version(&mysql);
++		unsigned long major_version = server_verion_int / 10000;
++		unsigned long minor_version = (server_verion_int % 10000) / 100;
++		unsigned long patch_version = (server_verion_int % 100);
++		if (verbose) {
++			printf("Found MariaDB: %s, main version: %lu, minor version: %lu, patch version: %lu\n", server_version, major_version,
++				   minor_version, patch_version);
++		}
++
++		if (strstr(server_version, "MariaDB") != NULL) {
++			// Looks like MariaDB, new commands should be available after 10.5.1
++			if (major_version < 10) {
++				use_deprecated_slave_status = true;
++			} else if (major_version == 10) {
++				if (minor_version < 5) {
++					use_deprecated_slave_status = true;
++				} else if (minor_version == 5 && patch_version < 1) {
++					use_deprecated_slave_status = true;
++				}
++			}
++		} else if (strstr(server_version, "MySQL") != NULL) {
++			// Looks like MySQL
++			if (major_version < 8) {
++				use_deprecated_slave_status = true;
++			} else if (major_version == 10 && minor_version < 4) {
++				use_deprecated_slave_status = true;
++			}
++		} else {
++			printf("Not a known sever implementation: %s\n", server_version);
++			exit(STATE_UNKNOWN);
++		}
++
++		char *replica_query = NULL;
++		if (use_deprecated_slave_status) {
++			replica_query = "show slave status";
++		} else {
++			replica_query = "show replica status";
++		}
++
++		/* check the replica status */
++		if (mysql_query(&mysql, replica_query) != 0) {
+ 			error = strdup(mysql_error(&mysql));
+ 			mysql_close (&mysql);
+ 			die (STATE_CRITICAL, _("slave query error: %s\n"), error);
+
+From 291a704bcf738f6ceb7a1f46c69b8332b33dbd70 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lorenz=20K=C3=A4stle?=
+ <12514511+RincewindsHat at users.noreply.github.com>
+Date: Fri, 26 Sep 2025 08:57:19 +0200
+Subject: [PATCH 2/2] check_mysql: Assume MySQL server by default (in replica
+ check)
+
+In the Debian Bug tracker (and then Github) a person pointed out,
+that a MySQL server does not respond with a hint that is indeed the
+MySQL software, but only with the version string.
+Which makes sense if one assumes to be the only implementation.
+
+This commit changes the behaviour of the Replica check to assume
+that the counterpart is a MySQL server if there are not hints that
+it is a MariaDB server.
+---
+ plugins/check_mysql.c | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c
+index 1b7403f7b..951a96f93 100644
+--- a/plugins/check_mysql.c
++++ b/plugins/check_mysql.c
+@@ -239,16 +239,13 @@ main (int argc, char **argv)
+ 					use_deprecated_slave_status = true;
+ 				}
+ 			}
+-		} else if (strstr(server_version, "MySQL") != NULL) {
+-			// Looks like MySQL
++		} else {
++			// Looks like MySQL (or at least not like MariaDB)
+ 			if (major_version < 8) {
+ 				use_deprecated_slave_status = true;
+ 			} else if (major_version == 10 && minor_version < 4) {
+ 				use_deprecated_slave_status = true;
+ 			}
+-		} else {
+-			printf("Not a known sever implementation: %s\n", server_version);
+-			exit(STATE_UNKNOWN);
+ 		}
+ 
+ 		char *replica_query = NULL;
+From 392c945966d96d1dba9c68ac7a73450c2ad72d85 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Lorenz=20K=C3=A4stle?= <lorenz.kaestle at netways.de>
+Date: Tue, 30 Sep 2025 14:51:39 +0200
+Subject: [PATCH] More renaming due to MySQL name chances
+
+Due to MySQL changing several term in Version 8.0.22 the way to
+determine the status of replicas has changed.
+To adapt to these changes in a517dc614e44650a7e9204c4202feec7a40fd37f
+check_mysql was modified to adapt to different versions.
+Some parts were missed though which results in failures to detect
+the replica status properly.
+
+This parts should be contained in this commit.
+
+---
+
+Taken from https://patch-diff.githubusercontent.com/raw/monitoring-plugins/monitoring-plugins/pull/2163.patch
+
+---
+ plugins/check_mysql.c | 37 ++++++++++++++++++++++++++-----------
+ 1 file changed, 26 insertions(+), 11 deletions(-)
+
+--- a/plugins/check_mysql.c
++++ b/plugins/check_mysql.c
+@@ -300,17 +300,32 @@
+ 			num_fields = mysql_num_fields(res);
+ 			fields = mysql_fetch_fields(res);
+ 			for(i = 0; i < num_fields; i++) {
+-				if (strcmp(fields[i].name, "Slave_IO_Running") == 0) {
+-					slave_io_field = i;
+-					continue;
+-				}
+-				if (strcmp(fields[i].name, "Slave_SQL_Running") == 0) {
+-					slave_sql_field = i;
+-					continue;
+-				}
+-				if (strcmp(fields[i].name, "Seconds_Behind_Master") == 0) {
+-					seconds_behind_field = i;
+-					continue;
++				if (use_deprecated_slave_status) {
++					if (strcmp(fields[i].name, "Slave_IO_Running") == 0) {
++						slave_io_field = i;
++						continue;
++					}
++					if (strcmp(fields[i].name, "Slave_SQL_Running") == 0) {
++						slave_sql_field = i;
++						continue;
++					}
++					if (strcmp(fields[i].name, "Seconds_Behind_Master") == 0) {
++						seconds_behind_field = i;
++						continue;
++					}
++				} else {
++					if (strcmp(fields[i].name, "Replica_IO_Running") == 0) {
++						slave_io_field = i;
++						continue;
++					}
++					if (strcmp(fields[i].name, "Replica_SQL_Running") == 0) {
++						slave_sql_field = i;
++						continue;
++					}
++					if (strcmp(fields[i].name, "Seconds_Behind_Source") == 0) {
++						seconds_behind_field = i;
++						continue;
++					}
+ 				}
+ 			}
+ 
diff --git a/debian/patches/series b/debian/patches/series
index d349ff1..f540ae3 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -17,4 +17,6 @@
 22_check_by_ssh_missing_options
 23_sslutils_fix_error_message
 24_check_http_deprecation
+25_check_users_sd_get_uids
+26_check_mysql_replica
 # feature patches


More information about the Pkg-nagios-devel mailing list