Commit graph

2836 commits

Author SHA1 Message Date
Ahmet Oeztuerk
c376b3ab4c use strdup where destination working_state.curlopt_proxy may be NULL 2026-02-13 16:49:52 +01:00
Ahmet Oeztuerk
5180bfd096 check if host name is a subdomain of an noproxy item 2026-02-12 18:53:16 +01:00
Ahmet Oeztuerk
73d6c8b660 switch argument from --no-proxy to --noproxy like curl cli 2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
e41b74c96b check curlopt_noproxy before accessing it 2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
5e618a31a0 document proxy cli arguments
clarify and add more examples of proxy environment variables and their
behavior when multiple are specified, overriden etc.

add single wildcard '*' checking for no_proxy to
determine_hostname_resolver, special case per curlopt_noproxy
documentation
2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
cfeaf28338 improve proxy environment parsing
add another argument: --no-proxy , which is used when setting
CURL_NOPROXY

additionally parse all_proxy, ALL_PROXY, no_proxy and NO_PROXY
environment variables in the correct order.

set the curlopt_proxy and curlopt_noproxy of libcurl, and additionally
save them in check_curl_working_state.

add function determine_hostname_resolver, uses the working state and
static config. it can tokenize the no_proxy variable and check for exact
matches, but cannot determine subnet matches for ip addresses yet.
2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
1c0134a994 fix typo with proxy scheme socks5a->socks5h 2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
8e095bfc73 fix typo in the proxy argument 2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
ff9f5a5bc1 remove unused handle_curl_easyoption and format_curl_easyoption functions 2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
b9555bcab3 add proxy_resolves_hostname, determined by proxy scheme
leave the functions that print out an curl_easyoption, but dont use it. organize the code slightly, print out the final CURLOPT_PROXY and proxy_resolves_hostname flag on verbose mode, add comments
2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
ed1d54d562 add curl version and ssl enabelement macro checks
might fix rocky linux 8 compilation issues.
2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
e7a55d1f0c codespell, clang-format and hints fixes 2026-02-10 13:15:35 +01:00
Ahmet Oeztuerk
d5a5a3de6f add proxy argument and improve dns cache usage
add proxy argument that useing the -x and --proxy argument. add it to
the static curl config struct, command usage and help outputs of the
cli.

parse these argument together with the environment variables like
http_proxy before setting the CURLOPT_PROXY in the curl configuration
option. this is required, as there is no easy way to ascertain/get what
the CURLOPT_PROXY that libcurl will use. by the point it is set by
libcurl, we have no control over it anymore, and need it for the other
steps in the configuration.

if the CURLOPT_PROXY is set, skip the DNS cache population which would
set the CURLOPT_RESOLVE. this is currently not perfect however. if a
proxy is set with socks4 or socks5 scheme, the host should be resolving
the hostname.
2026-02-10 13:15:35 +01:00
Lorenz Kästle
0f0865c910
Make IPv6 unconditional (#2219)
Some checks failed
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
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
This commits removes the detection of IPv6 availability.
The IPv6 code in the plugins is used unconditionally now.
2026-02-06 12:59:58 +01:00
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
Lorenz Kästle
f5f60f5717
check_disk: compare inode thresholds against the correct value (#2223)
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
* check_disk: compare inode thresholds against the correct value

* check_disk: Detect free inode number correctly in tests

---------

Co-authored-by: Lorenz Kästle <lorenz.kaestle@netways.de>
2026-01-16 12:16:45 +01:00
Lorenz Kästle
46563cea2b
Merge pull request #2200 from RincewindsHat/modern_output/check_radius
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
check_radius: Implement modern output
2026-01-09 15:13:36 +01:00
Lorenz Kästle
da4fb28fca
Merge branch 'master' into refactor/check_ide_smart 2026-01-09 14:57:57 +01:00
Lorenz Kästle
f694f4cd4d
Merge pull request #2218 from RincewindsHat/fix/compiler_warnings
Fix some minor compiler warnings
2026-01-09 14:18:31 +01:00
Lorenz Kästle
d13413916e
Merge pull request #2199 from RincewindsHat/modern_output/check_real
check_real: implement modern output
2026-01-09 14:12:22 +01:00
Lorenz Kästle
35a1344995 check_curl: fix pointer type 2026-01-09 13:12:31 +01:00
Lorenz Kästle
bbc0c8b29f check_curl: clang-format 2026-01-09 13:10:23 +01:00
Lorenz Kästle
544ea5bf95 Fix error message formatting 2026-01-09 13:09:46 +01:00
Lorenz Kästle
c1384375bc Fix some minor compiler warnings 2026-01-09 13:05:25 +01:00
Lorenz Kästle
ae6fcfde85 Add lib math to check_snmp dependencies 2026-01-02 13:42:00 +01:00
Lorenz Kästle
f861729abd
Merge pull request #2210 from sthen/curl_types
Some checks failed
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
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
fix types for most curl_easy_setopt parameters
2025-12-28 13:07:34 +01:00
Lorenz Kästle
9c26154698
Merge branch 'master' into fix/check-curl-append-query-string-on-redirect 2025-12-28 12:30:23 +01:00
Stuart Henderson
d36bf51baf fix types for most curl_easy_setopt parameters
according to https://curl.se/libcurl/c/curl_easy_setopt.html, parameters
are either a long, a function pointer, an object pointer or a curl_off_t,
depending on what the option expects; curl 8.16 checks and warns about
these.
2025-12-23 15:54:27 +00:00
Lorenz Kästle
828a9720b1
Merge pull request #2202 from oxzi/fringe-unix-build-fixes-for-v3.0.0-rc1
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
Fix v3.0.0-rc1 Build on OpenBSD
2025-12-17 17:19:21 +01:00
Lorenz Kästle
68fc05381e
Merge pull request #2206 from oxzi/check_http_die_not_null
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
check_http: Abort invalid SSL w/ error
2025-12-14 22:54:42 +01:00
Alvar
eed2dd00bb
check_curl: --verify-cert / -D in examples (#2204)
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
Include the -D flag for certificate verification in the "CHECK
CERTIFICATE" examples. Otherwise, only the certificate dates are
checked, but not if the certificate matches to the hostname or is signed
by a trusted CA.

Fixes #2146.
2025-12-14 12:53:51 +01:00
Ahmet Oeztuerk
f8db90c206 check_curl redirection test improvements
previously, the fragment was sent in the request from client, and the
server would parse and increment its value. the incremented value would
be set in the redirected URI.

this does not work as fragments are meaningless to servers and clients
like check_curl strip them in their GET request.

rewrite the fragment handling . if client sends a URI parameter with
'fragment' as its key, the server will set its value for its redirected
URI. it will come up both as a parameter and the fragment at the end.

use this new logic to rewrite the fragment redirection test. remove -p
$http_port argument on tests for this endpoint, which was making https
tests fail. correct the common test count from 75 to 95, as there are 20
total test assertions in the 8 times it uses the new endpoint. remove
unused code on that endpoint as well
2025-12-12 11:29:35 +01:00
Alvar Penning
8bc1d57a73
check_http: Abort invalid SSL w/ error
If a SSL connection cannot be established, check_http bailed out with a
die function call with a NULL fmt string. This adds a more meaningful
message.

The motivation for this patch was to get everything from the OpenBSD
ports upstream. It seems like in the old days, this would have resulted
in a segfault.

b8a6b3cae5

However, even if "die" now checks for NULL, a human readable error is
nice to have.
2025-12-11 22:27:12 +01:00
Alvar Penning
6ce11bc44f
lib/utils_cmd: Rename stdout, stderr in cmd_run_result
On OpenBSD's "stdio.h", stdin, stdout, and stderr are not directly
FILE*, but #defines. Thus, naming the output struct fields stdout and
stderr resulted in compiler errors, after replacing the #define.

a762189c5e/include/stdio.h (L75-L77)
2025-12-11 21:05:49 +01:00
Alvar Penning
ca5c2b3a5f
plugins/check_smtp: Remove unnecessary glibc-only include
This library is glibc-only and not necessary at this point. The
getopt_long function is provided by "getopt.h", included via "common.h".

Similar to #2159.
2025-12-11 21:05:49 +01:00
Ahmet Oeztuerk
737af667a2 clairfy new check_curl tests
use the parameters in the last redirected URI that that server returns
HTTP OK to. matches the incrementation count of redirection_count from 0
to 3, as they also get incremented three times alongside it. add
comments about what is happening in the test cases, no need to
understand the endpoint completely
2025-12-11 10:37:05 +01:00
Ahmet Oeztuerk
feeade0817 fix typos 2025-12-10 17:09:46 +01:00
Ahmet Oeztuerk
f7df5579ab check_curl add tests for uri field parsing
plugins/tests/check_curl.t forks and runs a http(s) server that responds
to specific uri endpoints. Added another endpoint under
/redirect_with_increment with dynamic redirection points.

This endpoint will parse different parts of the uri that come after the
path: parameters, query and the fragment. If applicable, seperate
elements within each field are parsed into key/value pairs. value is
incremented in redirected URI.

Tests if check_url redirection logic retains different parts of the url
when parsing the uri and building the new redirected URL. Current tests
show that it ignores the fragment part.
2025-12-09 00:13:15 +01:00
Lorenz Kästle
fccadd7ced Fix typo 2025-12-05 13:19:24 +01:00
Lorenz Kästle
2f67402385 check_radius: Implement modern output 2025-12-05 13:15:55 +01:00
Lorenz Kästle
74d61bbf8a check_real: implement modern output 2025-12-05 12:28:26 +01:00
Ahmet Oeztuerk
e0b30cc6e8 append the query string from parsed uri
Check the UriUriA object, and if query string exists append it to the
new_url. Only appends the query part, fragments are still not appended

Function redir parses the new location header value using the
uriParseUriA function already, which populates the query field. This
field was already being printed, but it was not being appended to the
new_url during its construction.

Redirection chain of check_curl --onredirect=follow now mimics the chain
of check_http --onredirect=follow. Tested on the url:
mail.google.com/chat
2025-12-04 17:03:57 +01:00
Lorenz Kästle
3ae751ed67
Fix check_ntp_time without a socket (#2196)
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
In the previous commit I unintentionally introduced an error
through symbol shadowing.
This should fix check_ntp_time when the target address
is a network address.
2025-12-04 13:24:14 +01:00
Lorenz Kästle
c735cf4234
Remove check_ntp (#2194)
check_ntp was marked as deprecated for forever (SVN times).
In the spirit of cleaning up and removing the dead bodies, this
commit removes check_ntp and all its connections.
2025-12-04 13:23:50 +01:00
Lorenz Kästle
30a9908d8d
Remove check_nt (#2195)
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_nt was used to connect NSclient++ on windows, both the method
and the target are pretty much dead.
Therefor check_nt gets removed.
2025-12-03 22:39:19 +01:00
Lorenz Kästle
25329a9097
check_snmp: fix offset computation for INTEGER (#2190)
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
2025-12-02 11:32:17 +01:00
Dennis
fd42290d4a
check_dig: add -E/--require-flags and -X/--forbid-flags (#2165)
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
* check_dig: Add feature to require or forbid dig DNS flags -E, -X.
Introduced helper functions for flag parsing.

 -E, --require-flags=LIST
    Comma-separated dig flags that must be present (e.g. 'aa,qr')
 -X, --forbid-flags=LIST
    Comma-separated dig flags that must NOT be present
2025-11-29 15:24:52 +01:00
Lorenz Kästle
db2983da7e
Fix/check curl sticky redir (#2188)
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_curl: avoid freeing memory when we don't know where it came from

* check_curl: when using -f sticky conserve IPv6 addresses properly

When running the check on an ipv6 address with a sticky onredirect
policy like in this example:

  check_curl -6 -H example.com -I ::1 -f sticky

It results in a getaddrinfo error:

  HTTP CRITICAL - Unable to lookup IP address for '[::1]': getaddrinfo returned -3 - Temporary failure in name resolution

This happens because in check_http() if the content of server_addr is an
ipv6 address enclosing brackets are added and on redirection a
subsequent call to check_http() will pass this now bracketed value to
getaddrinfo resulting in the error.

To work around this, strip the brackets from the address prior to the
lookup_host() call.

* add Michael Jeanson to thanks
2025-11-28 12:21:08 +01:00
Lorenz Kästle
2f96b82c9b
check_ntp_time/check_ntp_peer: unix socket handling (#2187)
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_ntp_time/check_ntp_peer: unix socket handling

* No tests for check_ntp since it is deprecated
2025-11-28 10:52:39 +01:00
Lorenz Kästle
16db5eed1e
Merge pull request #2183 from RincewindsHat/modern_output/check_mrtgtraf
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_mrtgtraf: modern output implementation
2025-11-28 00:35:51 +01:00