Commit graph

165 commits

Author SHA1 Message Date
Alvar
cef40299a9
OpenBSD: pledge(2) some network-facing checks (#2225)
OpenBSD's pledge(2) system call allows the current process to
self-restrict itself, being reduced to promised pledges. For example,
unless a process says it wants to write to files, it is not allowed to
do so any longer.

This change starts by calling pledge(2) in some network-facing checks,
removing the more dangerous privileges, such as executing other files.

My initial motivation came from check_icmp, being installed as a setuid
binary and (temporarily) running with root privileges. There, the
pledge(2) calls result in check_icmp to only being allowed to interact
with the network and to setuid(2) to the calling user later on.

Afterwards, I went through my most commonly used monitoring plugins
directly interacting with the network. Thus, I continued with
pledge(2)-ing check_curl - having a huge codebase and all -,
check_ntp_time, check_smtp, check_ssh, and check_tcp.

For most of those, the changes were quite similar: start with
network-friendly promises, parse the configuration, give up file access,
and proceed with the actual check.
2026-02-06 12:58:38 +01:00
Alvar
bccb38dc9d
check_icmp: Populate progname before np_extra_opts call (#2226)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
Spellcheck / codespell (push) Has been cancelled
Tests / Running unit and integrationt tests (push) Has been cancelled
Tests / Running rpm build test on almalinux:9 (push) Has been cancelled
Tests / Running rpm build test on fedora:latest (push) Has been cancelled
Tests / Running rpm build test on rockylinux:8 (push) Has been cancelled
Tests Debian:Testing and Fedora:Rawhide / Running unit and integrationt tests (push) Has been cancelled
Tests Debian:Testing and Fedora:Rawhide / Running rpm build test on fedora:rawhide (push) Has been cancelled
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.
2026-01-19 01:00:00 +01:00
Lorenz Kästle
b58e244cc7
check_icmp: prevent segfault on OpenBSD (#2224)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
Spellcheck / codespell (push) Waiting to run
Tests / Running unit and integrationt tests (push) Waiting to run
Tests / Running rpm build test on almalinux:9 (push) Waiting to run
Tests / Running rpm build test on fedora:latest (push) Waiting to run
Tests / Running rpm build test on rockylinux:8 (push) Waiting to run
* check_icmp: prevent segfault on OpenBSD

This commit adds a sanity check for sockets in
check_icmp.
Previously FD_ISSET segfaulted when a socket value was
-1 (on OpenBSD). The changes here add an explicit
check whether the socket is -1 (and therefore not
set).

---------

Co-authored-by: Lorenz Kästle <lorenz.kaestle@netways.de>
2026-01-16 02:42:01 +01:00
Lorenz Kästle
f15029d856 check_icmp: fix some compiler warnings (and maybe bugs) 2026-01-09 13:41:28 +01:00
Alvar Penning
b27bf07ebf
plugins-root/check_icmp: Fix build for SIOCGIFADDR
The refactoring in eafee9c3f9 missed the
part within "#if defined(SIOCGIFADDR)" in get_ip_address.
2025-12-11 21:05:49 +01:00
Alvar Penning
cbddc7dbb4
plugins-root/check_icmp: Import sys/ioctl.h
The ioctl(2) call within "#if defined(SIOCGIFADDR)" requires the include.
2025-12-11 21:05:49 +01:00
Lorenz Kästle
bd55d9cd2d check_icmp: Add missing line ending in help 2025-06-23 11:46:45 +02:00
Lorenz Kästle
8626d22fc5 check_icmp: trigger help before anything important 2025-06-23 11:44:46 +02:00
Lorenz Kästle
622d7f4c89 check_icmp: add long options to help 2025-06-23 11:41:56 +02:00
Lorenz Kästle
bf67d5cb53 check_icmp: remove dead comment 2025-06-23 11:41:41 +02:00
Lorenz Kästle
771ccfa526 check_icmp: remove unnecessary variable 2025-06-23 11:41:24 +02:00
Lorenz Kästle
7e9519e0ad check_icmp: correct output strings 2025-06-23 10:59:21 +02:00
Lorenz Kästle
b08bafc45c check_icmp: remove paket_interval, was never used anyway 2025-06-23 10:52:56 +02:00
Lorenz Kästle
27d30c3df0 Fix typo 2025-06-23 10:34:12 +02:00
Lorenz Kästle
efba4f7654 check_icmp: cleanup some leftover comments 2025-06-23 10:32:24 +02:00
Lorenz Kästle
cd20cc0632 check_icmp: add long options, add output format option
This commit switches check_icmp from getopt to getopt_long
to provide long options too and (most importantly) homogenize
option parsing between the different plugins.
2025-06-23 10:17:28 +02:00
Lorenz Kästle
8ae415ee4c Improve check_icmp help output 2025-06-23 10:16:42 +02:00
Lorenz Kästle
2bea8e9522 check_icmp: Remove signal handling and timeouts
The timeout option was redundant in that the runtime
of check_icmp was always limited by the input parameters
and therefore timeout gets removed with this commit to
avoid that confusion.

The rest of the signal handlings was removed too, since
the added complexity does not provide sufficient returns.
If check_icmp gets a signal, it now dies like most other
programs instead of trying to save some things and return a
(arguably wrong) result.
2025-06-20 10:04:34 +02:00
Lorenz Kästle
20e938bb54 Override state with min_hosts_alive 2025-06-19 01:15:37 +02:00
Lorenz Kästle
ca954e4f76 Reintroduce min_hosts_alive 2025-06-19 00:55:41 +02:00
Lorenz Kästle
43ae5fbe2d Fix possible multiplication overflow? 2025-06-17 15:44:35 +02:00
Lorenz Kästle
f680cd7b88 Improve error detection for threshold parsers 2025-06-17 15:19:30 +02:00
Lorenz Kästle
906e895c72 Format specifier fixes 2025-05-18 19:19:07 +02:00
Lorenz Kästle
738d58714d some more fixes 2025-05-18 19:11:14 +02:00
Lorenz Kästle
3b76fdc840 Fix typos 2025-05-18 18:48:49 +02:00
Lorenz Kästle
d92bbaef83 Some more fixes 2025-05-18 18:46:30 +02:00
Lorenz Kästle
b5de682309 WIP - check_icmp refactor 8 2025-05-18 18:10:25 +02:00
Lorenz Kästle
8f08e7ab3e WIP - check_icmp refactor 7 2025-05-18 14:44:31 +02:00
Lorenz Kästle
fbcd11acb7 Clang-format 2025-05-18 00:20:36 +02:00
Lorenz Kästle
a01d522c4c WIP - check_icmp refactor 6 2025-05-17 11:49:06 +02:00
Lorenz Kästle
6b86583e0d WIP - check_icmp refactor 5 2025-05-16 12:46:56 +02:00
Lorenz Kästle
9ebde5eb09 WIP - check_icmp refactor 4 2025-05-06 00:01:42 +02:00
Lorenz Kästle
5fd8191a50 WIP - check_icmp refactor 3 2025-05-05 22:52:56 +02:00
Lorenz Kästle
5a6adcb7db WIP - check_icmp refactor 2 2025-05-04 01:42:52 +02:00
Lorenz Kästle
eafee9c3f9 WIP: check_icmp refactor 2025-04-28 22:01:01 +02:00
Lorenz Kästle
f62f182653 check_icmp: localise variables 2025-04-02 01:04:25 +02:00
Lorenz Kästle
4ab8a54c52 check_icmp: linter fixes 2025-04-02 00:13:20 +02:00
Lorenz Kästle
89f79cf2d2 check_icmp: set rtmin initially 2024-11-28 09:02:29 +01:00
Lorenz Kästle
714fd1aceb check_icmp: Add some lines to introduce some readability 2024-11-28 09:02:29 +01:00
Lorenz Kästle
eb9f9cf8c4 check_icmp: clang-format 2024-11-28 09:02:29 +01:00
Lorenz Kästle
de6e3c45f3 check_icmp: Apply clang-format again 2024-10-30 17:12:19 +01:00
RincewindsHat
aa1f9c5011 check_icmp: clang-format 2024-10-16 00:11:39 +02:00
RincewindsHat
c0694cc6b5 check_icmp: Update copyright 2024-10-15 11:56:41 +02:00
RincewindsHat
780909f980 check_icmp: Properly mark function with void input 2024-10-15 11:55:27 +02:00
RincewindsHat
85f2e32e27 check_icmp: Declare internal variables static 2024-10-15 11:55:08 +02:00
RincewindsHat
0caa47a50b check_icmp: clang-format 2024-10-15 11:44:28 +02:00
Sven Nierlein
0488426c7e check_icmp: keep performance data order in case of none-reachable hosts
For responding hosts nothing changes:

    ./check_icmp -H 10.0.0.1
    OK - 10.0.0.1 rta 0.336ms lost 0%|rta=0.336ms;200.000;500.000;0; rtmax=0.471ms;;;; rtmin=0.000ms;;;; pl=0%;40;80;0;100

In case the host is down, the performance data now contain 'U' according to:
https://www.monitoring-plugins.org/doc/guidelines.html#AEN201

Old:
    ./check_icmp -H 10.0.0.99
    CRITICAL - 10.0.0.99: Host unreachable @ 10.0.1.138. rta nan, lost 100%|pl=100%;40;80;0;100

Old:
    ./check_icmp -H 10.0.0.99
    CRITICAL - 10.0.0.99: Host unreachable @ 10.0.1.138. rta nan, lost 100%|rta=U;;;; rtmax=U;;;; rtmin=U;;;; pl=100%;40;80;0;100

This confuses some performance graphing tools, ex.: pnp.

Signed-off-by: Sven Nierlein <sven@consol.de>
2024-03-01 09:03:17 +01:00
RincewindsHat
f5074ac7f0 Fix spelling stuff 2023-10-13 01:29:31 +02:00
RincewindsHat
0de0daccec Add some more comments about the MOS score 2023-10-13 01:25:22 +02:00
RincewindsHat
eb6c83a650 Even more code formatting and cleanup 2023-10-09 14:03:36 +02:00