[monitoring-plugins] Check ntp time delay (#2277)

GitHub git at monitoring-plugins.org
Thu Jun 11 02:40:13 CEST 2026


    Module: monitoring-plugins
    Branch: master
    Commit: 1372654e8a2d392db35aae8f62586d55319ccb3c
    Author: Lorenz Kästle <12514511+RincewindsHat at users.noreply.github.com>
 Committer: GitHub <noreply at github.com>
      Date: Thu Jun 11 02:40:07 2026 +0200
       URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=1372654e

Check ntp time delay (#2277)

* check_ntp_time: add polling delay

NTP server can have rate limiting which might be triggered by
check_ntp_time due to many requests in a short time span.

This patch adds a default delay (of 0.5s) between requests to each server
and a command line option (--poll-delay) to make this delay
configurable.

Co-authored-by: Lorenz Kästle <lorenz at vulgrim.de>

* check_ntp_time: verify whether socket path fits into address struct

check_ntp_time could be give a too long (>108 bytes) socket path
to work with, which would potentially crash the program.
This patch validates to length beforehand and stops execution
in that case.

Co-authored-by: Lorenz Kästle <lorenz at vulgrim.de>

---------

Co-authored-by: Paul Crawford <paul at crawford-space.co.uk>
Co-authored-by: Lorenz Kästle <lorenz at vulgrim.de>

---

 plugins/check_ntp_time.c          | 6 +++++-
 plugins/check_ntp_time.d/config.h | 5 +++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/plugins/check_ntp_time.c b/plugins/check_ntp_time.c
index 3e23d0bf..2d9a6f40 100644
--- a/plugins/check_ntp_time.c
+++ b/plugins/check_ntp_time.c
@@ -43,6 +43,7 @@
 #include "thresholds.h"
 #include "check_ntp_time.d/config.h"
 #include <netinet/in.h>
+#include <string.h>
 #include <sys/socket.h>
 
 static int verbose = 0;
@@ -395,7 +396,10 @@ static offset_request_wrapper offset_request(const char *host, const char *port,
 			.sun_family = AF_UNIX,
 		};
 
-		strncpy(unix_socket.sun_path, host, strlen(host));
+		if (strlen(host) > sizeof(unix_socket.sun_path)) {
+			die(STATE_UNKNOWN, "host argument is too long (%lu) for a socket path\n", strlen(host));
+		}
+		strncpy(unix_socket.sun_path, host, sizeof(unix_socket.sun_path));
 
 		if (connect(socklist[0], &unix_socket, sizeof(unix_socket))) {
 			/* don't die here, because it is enough if there is one server
diff --git a/plugins/check_ntp_time.d/config.h b/plugins/check_ntp_time.d/config.h
index 9bbd82aa..c1aa142c 100644
--- a/plugins/check_ntp_time.d/config.h
+++ b/plugins/check_ntp_time.d/config.h
@@ -5,6 +5,9 @@
 #include "thresholds.h"
 #include <stddef.h>
 
+/* Time in microseconds to delay between polling to avoid a blocking response. */
+const long default_polling_delay = 500000L;
+
 typedef struct {
 	char *server_address;
 	char *port;
@@ -15,6 +18,7 @@ typedef struct {
 	mp_thresholds offset_thresholds;
 
 	bool output_format_is_set;
+	long poll_delay;
 	mp_output_format output_format;
 } check_ntp_time_config;
 
@@ -29,6 +33,7 @@ check_ntp_time_config check_ntp_time_config_init() {
 		.offset_thresholds = mp_thresholds_init(),
 
 		.output_format_is_set = false,
+		.poll_delay = default_polling_delay,
 	};
 
 	mp_range warning = mp_range_init();



More information about the Commits mailing list