diff options
Diffstat (limited to 'plugins-root')
| -rw-r--r-- | plugins-root/check_icmp.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 58d8a545..e536e31c 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c | |||
| @@ -277,15 +277,6 @@ typedef struct { | |||
| 277 | check_icmp_config config; | 277 | check_icmp_config config; |
| 278 | } check_icmp_config_wrapper; | 278 | } check_icmp_config_wrapper; |
| 279 | check_icmp_config_wrapper process_arguments(int argc, char **argv) { | 279 | check_icmp_config_wrapper process_arguments(int argc, char **argv) { |
| 280 | /* get calling name the old-fashioned way for portability instead | ||
| 281 | * of relying on the glibc-ism __progname */ | ||
| 282 | char *ptr = strrchr(argv[0], '/'); | ||
| 283 | if (ptr) { | ||
| 284 | progname = &ptr[1]; | ||
| 285 | } else { | ||
| 286 | progname = argv[0]; | ||
| 287 | } | ||
| 288 | |||
| 289 | check_icmp_config_wrapper result = { | 280 | check_icmp_config_wrapper result = { |
| 290 | .errorcode = OK, | 281 | .errorcode = OK, |
| 291 | .config = check_icmp_config_init(), | 282 | .config = check_icmp_config_init(), |
| @@ -828,6 +819,14 @@ int main(int argc, char **argv) { | |||
| 828 | /* POSIXLY_CORRECT might break things, so unset it (the portable way) */ | 819 | /* POSIXLY_CORRECT might break things, so unset it (the portable way) */ |
| 829 | environ = NULL; | 820 | environ = NULL; |
| 830 | 821 | ||
| 822 | /* determine program- and service-name quickly */ | ||
| 823 | progname = strrchr(argv[0], '/'); | ||
| 824 | if (progname != NULL) { | ||
| 825 | progname++; | ||
| 826 | } else { | ||
| 827 | progname = argv[0]; | ||
| 828 | } | ||
| 829 | |||
| 831 | /* Parse extra opts if any */ | 830 | /* Parse extra opts if any */ |
| 832 | argv = np_extra_opts(&argc, argv, progname); | 831 | argv = np_extra_opts(&argc, argv, progname); |
| 833 | 832 | ||
| @@ -1470,10 +1469,13 @@ static recvfrom_wto_wrapper recvfrom_wto(const check_icmp_socket_set sockset, vo | |||
| 1470 | }; | 1469 | }; |
| 1471 | 1470 | ||
| 1472 | ssize_t ret; | 1471 | ssize_t ret; |
| 1473 | if (FD_ISSET(sockset.socket4, &read_fds)) { | 1472 | |
| 1473 | // Test explicitly whether sockets are in use | ||
| 1474 | // this is necessary at least on OpenBSD where FD_ISSET will segfault otherwise | ||
| 1475 | if ((sockset.socket4 != -1) && FD_ISSET(sockset.socket4, &read_fds)) { | ||
| 1474 | ret = recvmsg(sockset.socket4, &hdr, 0); | 1476 | ret = recvmsg(sockset.socket4, &hdr, 0); |
| 1475 | result.recv_proto = AF_INET; | 1477 | result.recv_proto = AF_INET; |
| 1476 | } else if (FD_ISSET(sockset.socket6, &read_fds)) { | 1478 | } else if ((sockset.socket6 != -1) && FD_ISSET(sockset.socket6, &read_fds)) { |
| 1477 | ret = recvmsg(sockset.socket6, &hdr, 0); | 1479 | ret = recvmsg(sockset.socket6, &hdr, 0); |
| 1478 | result.recv_proto = AF_INET6; | 1480 | result.recv_proto = AF_INET6; |
| 1479 | } else { | 1481 | } else { |
