[monitoring-plugins] check_icmp: Populate progname before ...

GitHub git at monitoring-plugins.org
Mon Jan 19 01:00:12 CET 2026


    Module: monitoring-plugins
    Branch: master
    Commit: bccb38dc9d56ca5cecce8f2f9a988ec5d31626db
    Author: Alvar <post at 0x21.biz>
 Committer: GitHub <noreply at github.com>
      Date: Mon Jan 19 00:00:00 2026 +0000
       URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=bccb38dc

check_icmp: Populate progname before np_extra_opts call (#2226)

Within np_extra_opts, the ini parser expects a valid progname as the
default section to select a configuration section in the ini file.
However, within the check_icmp codebase, the progname is being populated
directly after the np_extra_opts call, being a null pointer before.

$ ./check_icmp --extra-opts=@foo.ini
Segmentation fault (core dumped)

> #0  strlen () at /usr/src/lib/libc/arch/amd64/string/strlen.S:125
> #1  0x000003989615d032 in _libc_strdup (str=Variable "str" is not available.) at /usr/src/lib/libc/string/strdup.c:44
> #2  0x000003966f751b74 in np_get_defaults (locator=0x73ede1e538ea "@foo.ini", default_section=0x0) at parse_ini.c:91
> #3  0x000003966f7518ce in np_extra_opts (argc=0x73ede1e5369c, argv=0x73ede1e53728, plugin_name=0x0) at extra_opts.c:98
> #4  0x000003966f74165a in main (argc=1, argv=0x0) at check_icmp.c:832

The progname variable is set within the process_arguments function,
requiring the already enriched arguments from np_extra_opts. Thus, I
moved the progname detection out of this function, directly before the
np_extra_opts call. This pattern does already exists in check_tcp.

I briefly looked for similar issues in other plugins, but found none.

---

 plugins-root/check_icmp.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c
index 5bfb5cb5..e536e31c 100644
--- a/plugins-root/check_icmp.c
+++ b/plugins-root/check_icmp.c
@@ -277,15 +277,6 @@ typedef struct {
 	check_icmp_config config;
 } check_icmp_config_wrapper;
 check_icmp_config_wrapper process_arguments(int argc, char **argv) {
-	/* get calling name the old-fashioned way for portability instead
-	 * of relying on the glibc-ism __progname */
-	char *ptr = strrchr(argv[0], '/');
-	if (ptr) {
-		progname = &ptr[1];
-	} else {
-		progname = argv[0];
-	}
-
 	check_icmp_config_wrapper result = {
 		.errorcode = OK,
 		.config = check_icmp_config_init(),
@@ -828,6 +819,14 @@ int main(int argc, char **argv) {
 	/* POSIXLY_CORRECT might break things, so unset it (the portable way) */
 	environ = NULL;
 
+	/* determine program- and service-name quickly */
+	progname = strrchr(argv[0], '/');
+	if (progname != NULL) {
+		progname++;
+	} else {
+		progname = argv[0];
+	}
+
 	/* Parse extra opts if any */
 	argv = np_extra_opts(&argc, argv, progname);
 



More information about the Commits mailing list