Commit graph

172 commits

Author SHA1 Message Date
Andre Klärner
e7dbfd4223 check_curl: enable internal cookie handling
This enables us to enable curl cookie engine by specifying an empty
filename as the cookie jar file.

This works, since curl's CURLOPT_COOKIEFILE option allows passing an
empty string as filename, which it interprets as a request to enable the
cookie processing. But since CURLOPT_COOKIEJAR would now attempt to
write to a file named by an empty filename, it would break again (or at
least produce a warning in verbose output).

Overall this is allows to handle checking URLs with cookie based
sessions without persisting the cookies to disk, by using the
curl-internal redirect following.
2024-12-02 20:48:24 +01:00
Lorenz Kästle
8de299308c check_curl: update TLS notification notes 2024-11-27 14:22:02 +01:00
Lorenz Kästle
f1dae44075 Fix false formatting directive in printf 2024-11-09 11:26:09 +01:00
RincewindsHat
fde8e9c77b check_curl: Linter fixes 2024-10-31 03:10:57 +01:00
RincewindsHat
7334812a92 check_curl: do not export local variables and remove unused ones 2024-10-31 03:05:43 +01:00
RincewindsHat
367c4f89c1 check_curl: Update copyright 2024-10-31 02:59:49 +01:00
RincewindsHat
80f07ff92b check_curl: clang-format 2024-10-31 02:58:41 +01:00
Sven Nierlein
3b96044248 fix check_curl: OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0
using check_curl on a probably embedded device responding as 'Server: GoAhead-Webs'

    %> check_curl -H ... -S -vvv

    > GET / HTTP/1.1
    Host: ...
    User-Agent: check_curl/v2.4.0 (monitoring-plugins 2.4.0, libcurl/7.76.1 OpenSSL/3.0.7 zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.1 (+libidn2/2.3.0) libssh/0.10.4/openssl/zlib nghttp2/1.43.0)
    Accept: */*
    Connection: close

    * Mark bundle as not supporting multiuse
    * HTTP 1.0, assume close after body
    < HTTP/1.0 302 Redirect
    < Server: GoAhead-Webs
    < Date: Tue Mar 26 17:57:16 2019
    < Cache-Control: no-cache, no-store, must-revalidate,private
    < Pragma: no-cache
    < Expires: 0
    < Content-Type: text/html
    < X-Frame-Options: sameorigin
    < X-XSS-Protection: 1; mode=block
    < X-Content-Type-Options: nosniff
    < Location: https://...
    <
    * OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0
    * Closing connection 0

reading the discussion on https://github.com/openssl/openssl/discussions/22690 suggest to set the option SSL_OP_IGNORE_UNEXPECTED_EOF
which makes check_curl behave like check_http at this point.
Since this is a rather new flag, fencing it in ifdefs.
And since there can only be one ssl ctx function, we need to move both tasks into one function.
2024-10-10 15:54:28 +02:00
Lorenz Kästle
bc6dda5286
Merge branch 'master' into check_curl_regex_state 2024-10-06 17:28:08 +02:00
Lorenz Kästle
75d5c51207 Remove experimental state from check_curl 2024-08-29 18:20:35 +02:00
RincewindsHat
af097aa364 check_curl: change help for --state-regex again to fix formatting 2024-08-19 15:33:17 +02:00
RincewindsHat
b6c72064a5 check_curl: Parse state-regex option ignoring case
Previously the --state-regex option accepted only "critical" and
"warning" as values.
This commit changes the strcmp there to strcasecmp to be more tolerant
regarding the input.
2024-08-19 15:26:52 +02:00
RincewindsHat
46efe803cf check_curl: Fix help for state regex option
The help output of `check-curl` contained a typo,
the real option is `state-regex` and not `regex-state` as
the help suggests.
Also added the two possible options to avoid confusion.
2024-08-19 15:23:41 +02:00
Alvar Penning
9cdf2aec7f check_curl: Documentation for --certificate, --cookie-jar
From the mere help output for -C / --certificate, I was confused about
what its two integer parameters do. Unfortunately, I also missed out on
the explaining examples later. Since I like to have basic documentation
for each flag, I tried to make the arguments as short as possible.

The other fix was one hyphen too many for the --cookie-jar option.
2024-08-16 10:52:14 +02:00
Yannick Martin
78ce3144e3 check_curl: raise SSL issue when --continue-after-certificate is used
This change aims to raise the worst status between the SSL check and the HTTP check.

before:
check_curl -H www.google.fr -S --continue-after-certificate --certificate 4000,4000 ; echo $?
CRITICAL - Certificate '*.google.fr' expires in 74 day(s) (Tue 22 Oct 2024 12:53:52 PM GMT +0000).
HTTP OK: HTTP/2 200  - 22807 bytes in 0.076 second response time |time=0.075516s;;;0.000000;10.000000 size=22807B;;;0;
0

after:
/usr/lib/nagios/ovh/check_curl -H www.google.fr -S --continue-after-certificate --certificate 4000,4000 ; echo $?
CRITICAL - Certificate '*.google.fr' expires in 74 day(s) (Tue 22 Oct 2024 12:53:52 PM GMT +0000).
HTTP OK: HTTP/2 200  - 22840 bytes in 0.090 second response time |time=0.090463s;;;0.000000;10.000000 size=22840B;;;0;
2
2024-08-11 22:18:28 +02:00
Sven Nierlein
acbfbf3de6 check_curl: fix relative redirects on non-standard port
Having a webserver respond with a relative redirect as for ex. in `Location: /path/to.html`
check_curl would use the wrong standard http/https port instead
of crafting the absolute url using the given scheme/hostname and port.

Adding a new test case for this for check_http and check_curl. check_http did
it correct already, so no fix necessary there.

before:

    %>./check_curl -H 127.0.0.1 -p 50493 -f follow -u /redirect_rel -s redirected -vvv
    **** HEADER ****
    HTTP/1.1 302 Found
    ...
    Location: /redirect2

    ...
    * Seen redirect location /redirect2
    ** scheme: (null)
    ** host: (null)
    ** port: (null)
    ** path: /redirect2
    Redirection to http://127.0.0.1:80/redirect2

fixed:

    %>./check_curl -H 127.0.0.1 -p 50493 -f follow -u /redirect_rel -s redirected -vvv
    **** HEADER ****
    HTTP/1.1 302 Found
    ...
    Location: /redirect2

    ...
    * Seen redirect location /redirect2
    ** scheme: (null)
    ** host: (null)
    ** port: (null)
    ** path: /redirect2
    Redirection to http://127.0.0.1:50493/redirect2

Signed-off-by: Sven Nierlein <sven@nierlein.de>
2024-07-30 17:13:03 +02:00
Andreas Baumann
f29785f503 check_http/check_curl: added a --regex-state option to change the state of a regex check
from the default CRITICAL to something else (#1213)
2024-04-07 20:01:54 +02:00
Andreas Baumann
4c4031100a check_curl/check_http: clarified format of POST data (#1978) 2024-04-07 19:30:26 +02:00
Emmanuel Riviere
61218b2fdc check_curl: add haproxy protocol option 2024-02-01 16:08:16 +01:00
Lorenz Kästle
53a15f0c2c
Merge pull request #1951 from RincewindsHat/compiler_warnings_maybe_unused
Fix compiler warning for uninitialized variable
2023-11-22 23:34:59 +01:00
RincewindsHat
07f9c438f3 Fixes for -Wsign-compare 2023-10-19 12:10:55 +02:00
RincewindsHat
0ab5e10d9b check_curl: Initialize pointer before usage 2023-10-19 11:55:11 +02:00
RincewindsHat
ceb614aad4 fix compiler warnings for unused variables 2023-10-15 19:11:40 +02:00
RincewindsHat
928e1c7496 Whitespace fixes 2023-10-15 15:11:07 +02:00
RincewindsHat
fa3b80ce7d Fix -Wcast-function-type compiler warnings 2023-10-15 15:10:27 +02:00
waja
265a7c0ed8
Merge branch 'master' into compiler_warning_part_2 2023-06-28 16:39:27 +02:00
Lorenz Kästle
b96a8424f0 Avoid unnecessary malloc and use stack instead 2023-04-26 09:15:04 +02:00
RincewindsHat
d271819149 Fixes for -Wrestrict 2023-04-18 00:20:39 +02:00
RincewindsHat
907b933a87 Fixes for -Wunused-parameters 2023-04-18 00:20:12 +02:00
RincewindsHat
f7687d47cb Fixes for -Wimplicit-fallthrough 2023-04-18 00:18:07 +02:00
RincewindsHat
6c78f0b5ea Fixes for -Wunused
* lib/utils_base.c
* plugins/check_curl.c
* plugins-root/check_dhcp.c
   Removed a line which theoretically can not do anything, but there was
   comment which indicated something else. Still trying this though.
2023-04-18 00:13:24 +02:00
Jan Wagner
0f3703e641 Fix a lot of typos reported by codespell 2023-04-14 18:35:00 +00:00
Andreas Baumann
cf90f0de7b check_curk: including netinet/in.h (for FreeBSD), fixed an ambigous compare warning 2023-03-16 16:21:46 +01:00
Andreas Baumann
ea53555f2d check_curl: removed a superflous variable 2023-03-11 11:40:00 +01:00
Andreas Baumann
fc927e98db fixed a wrong compare and a wrong size in strncat 2023-03-08 16:10:45 +01:00
Barak Shohat
2902381c5d check_curl.c: Include all IPs from getaddrinfo() in curl DNS cache 2023-03-08 11:56:43 +02:00
Andreas Baumann
03f86b5d08 check_curl: in SSL host caching mode try to connect and bind and take the first getaddrinfo result which succeeds 2023-03-07 19:51:33 +01:00
Andreas Baumann
ad6b638acb using real boolean in check_curl 2023-02-17 14:03:55 +01:00
Andreas Baumann
8e1bbf5e6e changed #else/#if to #elif in libcurl library checks 2023-02-12 15:09:02 +01:00
Andreas Baumann
6563267c3a fixed double frees when doing old-style redirects 2023-02-12 13:16:25 +01:00
Andreas Baumann
40da85e691 better cleanup of curl structures and buffers 2023-02-12 12:11:38 +01:00
Andreas Baumann
f6978deaa1 added --cookie-jar and doing proper cleanup of libcurl 2023-02-11 19:11:07 +01:00
Andreas Baumann
27b0c69645 fixed regerror is MAX_INPUT_BUFFER writting into too small errbuf 2023-02-11 18:39:24 +01:00
Andreas Baumann
53f07a468d using CURLOPT_REDIR_PROTOCOLS_STR instead of CURLOPT_REDIR_PROTOCOLS for curl >= 7.85.0 2023-02-05 20:34:41 +01:00
waja
72147140ed
Fixing spelling errors (#1826) 2023-01-17 15:42:54 +01:00
Sven Nierlein
765b29f09b
check_curl: fix checking large bodys (#1823)
check_curl fails on large pages:

  HTTP CRITICAL - Invalid HTTP response received from host on port 5080: cURL returned 23 - Failure writing output to destination

for example trying to run check_curl on the test from #1822

I guess the idea is to double the buffer size each time it is to small. But the code
exponentially grows the buffer size which works well 2-3 times, but then fails.
2022-12-22 12:51:18 +01:00
Lorenz
4a5ddd2011
Check curl detect ipv6 (#1809)
* If server_address is an IPv6 address surround it with brackets

* If the message is too short, we should not have an underflow

* Add simple conditional test case available if IPv6 is
2022-11-07 17:48:28 +01:00
Andreas Baumann
a96bdd7349 check_curl: added option --continue-after-certificate (#1761) 2022-04-10 16:31:53 +02:00
Andreas Baumann
ee2a60fc4e fixed -ffollow for HTTP/2.0 (Fixes #1685): added major_version parsing to PicoHTTPParser 2022-01-29 12:17:37 +01:00
Andreas Baumann
737412f739 check_http and check_curl: added --max-redirs=N option (feature #1684) 2022-01-29 12:15:12 +01:00