[monitoring-plugins] Improve logic

William git at monitoring-plugins.org
Tue May 13 09:10:11 CEST 2025


 Module: monitoring-plugins
 Branch: master
 Commit: 58a34245110f12192d3b3e99198086c119a57418
 Author: William <william at blackhats.net.au>
   Date: Wed Apr  2 10:50:56 2025 +1000
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=58a34245

Improve logic

---

 plugins/check_fping.c | 48 +++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 41 insertions(+), 7 deletions(-)

diff --git a/plugins/check_fping.c b/plugins/check_fping.c
index cf9c2d1c..9dadcec7 100644
--- a/plugins/check_fping.c
+++ b/plugins/check_fping.c
@@ -81,27 +81,61 @@ int main(int argc, char **argv) {
 	char *option_string = "";
 	char *fping_prog = NULL;
 
-	/* compose the command */
+	/* First determine if the target is dualstack or ipv6 only. */
+#ifdef USE_IPV6
+	bool server_is_inet6_addr = is_inet6_addr(server);
+#else
+	bool server_is_inet6_addr = false;
+#endif
+
+	/* PATH_TO_FPING6 implies USE_IPV6 */
 #ifdef PATH_TO_FPING6
-	if (address_family == AF_INET6 || (address_family == AF_UNSPEC && is_inet6_addr(server))) {
+	/*
+	 * If the user requested -6 OR the user made no assertion and the address is v6 or dualstack
+	 *   -> we use ipv6
+	 * If the user requested -4 OR the user made no assertion and the address is v4 ONLY
+	 *   -> we use ipv4
+	 */
+	if (address_family == AF_INET6 || (address_family == AF_UNSPEC && server_is_inet6_addr)) {
 		fping_prog = strdup(PATH_TO_FPING6);
 	} else {
 		xasprintf(&option_string, "%s-4 ", option_string);
 		fping_prog = strdup(PATH_TO_FPING);
 	}
 #else
-	if (address_family == AF_INET6 || (address_family == AF_UNSPEC && is_inet6_addr(server))) {
-		// -4 / -6 must be set explicitly as when a host has dual stack
-		// if we don't specify -4 then fping selects ipv6 which can mess
-		// with some checks.
+#ifdef USE_IPV6
+	/*
+	 * If the user requested -6 OR the user made no assertion and the address is v6 or dualstack
+	 *   -> we use ipv6
+	 * If the user requested -4 OR the user made no assertion and the address is v4 ONLY
+	 *   -> we use ipv4
+	 */
+	if (address_family == AF_INET6 || (address_family == AF_UNSPEC && server_is_inet6_addr)) {
 		xasprintf(&option_string, "%s-6 ", option_string);
 	} else {
 		xasprintf(&option_string, "%s-4 ", option_string);
 	}
-
+#else
+	/*
+	 * If the user requested -6
+	 *   -> warn that v6 is not available
+	 * -> we use ipv4
+	 */
+	if (address_family == AF_INET6) {
+		usage4(_("IPv6 support not available"));
+	}
+	/*
+	 * Note here we still have to call with -4, else in the case of a dual stacked target
+	 * we could potentially silently use ipv6 despite having just warned that it is not available
+	 */
+	xasprintf(&option_string, "%s-4 ", option_string);
+	/* end USE_IPV6 */
+#endif
 	fping_prog = strdup(PATH_TO_FPING);
+	/* end PATH_TO_FPING6 */
 #endif
 
+	/* compose the command */
 	if (config.target_timeout) {
 		xasprintf(&option_string, "%s-t %d ", option_string, config.target_timeout);
 	}



More information about the Commits mailing list