aboutsummaryrefslogtreecommitdiff
path: root/plugins/check_curl.c
diff options
context:
space:
mode:
authorGravatar Andreas Baumann <mail@andreasbaumann.cc> 2021-03-08 19:46:43 +0100
committerGravatar Andreas Baumann <mail@andreasbaumann.cc> 2021-03-08 19:46:43 +0100
commit0f926a3566fb6f3333f3a24e47e2ad204fd0fba4 (patch)
treebef6c182a4a28a2786472703ab14f08ef7a96cef /plugins/check_curl.c
parenta260c798de4546ed931e58f76f940eb1e775c54f (diff)
downloadmonitoring-plugins-0f926a3566fb6f3333f3a24e47e2ad204fd0fba4.tar.gz
check_curl: added string_statuscode function for printing HTTP/1.1 and HTTP/2 correctly
Diffstat (limited to 'plugins/check_curl.c')
-rw-r--r--plugins/check_curl.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/plugins/check_curl.c b/plugins/check_curl.c
index a3f63f16..8f274c26 100644
--- a/plugins/check_curl.c
+++ b/plugins/check_curl.c
@@ -296,6 +296,28 @@ CURLcode sslctxfun(CURL *curl, SSL_CTX *sslctx, void *parm)
#endif /* USE_OPENSSL */
#endif /* HAVE_SSL */
+/* returns a string "HTTP/1.x" or "HTTP/2" */
+static char *string_statuscode (int major, int minor)
+{
+ static char buf[10];
+
+ switch (major) {
+ case 1:
+ snprintf (buf, sizeof (buf), "HTTP/%d.%d", major, minor);
+ break;
+ case 2:
+ case 3:
+ snprintf (buf, sizeof (buf), "HTTP/%d", major);
+ break;
+ default:
+ /* assuming here HTTP/N with N>=4 */
+ snprintf (buf, sizeof (buf), "HTTP/%d", major);
+ break;
+ }
+
+ return buf;
+}
+
/* Checks if the server 'reply' is one of the expected 'statuscodes' */
static int
expected_statuscode (const char *reply, const char *statuscodes)
@@ -746,7 +768,8 @@ GOT_FIRST_CERT:
if (curlhelp_parse_statusline (header_buf.buf, &status_line) < 0) {
snprintf (msg, DEFAULT_BUFFER_SIZE, "Unparsable status line in %.3g seconds response time|%s\n",
total_time, perfstring);
- die (STATE_CRITICAL, "HTTP CRITICAL HTTP/1.x %ld unknown - %s", code, msg);
+ /* we cannot know the major/minor version here for sure as we cannot parse the first line */
+ die (STATE_CRITICAL, "HTTP CRITICAL HTTP/x.x %ld unknown - %s", code, msg);
}
/* get result code from cURL */
@@ -823,8 +846,8 @@ GOT_FIRST_CERT:
/* check status codes, set exit status accordingly */
if( status_line.http_code != code ) {
- die (STATE_CRITICAL, _("HTTP CRITICAL HTTP/%d.%d %d %s - different HTTP codes (cUrl has %ld)\n"),
- status_line.http_major, status_line.http_minor,
+ die (STATE_CRITICAL, _("HTTP CRITICAL %s %d %s - different HTTP codes (cUrl has %ld)\n"),
+ string_statuscode (status_line.http_major, status_line.http_minor),
status_line.http_code, status_line.msg, code);
}
@@ -895,8 +918,8 @@ GOT_FIRST_CERT:
msg[strlen(msg)-3] = '\0';
/* TODO: separate _() msg and status code: die (result, "HTTP %s: %s\n", state_text(result), msg); */
- die (result, "HTTP %s: HTTP/%d.%d %d %s%s%s - %d bytes in %.3f second response time %s|%s\n",
- state_text(result), status_line.http_major, status_line.http_minor,
+ die (result, "HTTP %s: %s %d %s%s%s - %d bytes in %.3f second response time %s|%s\n",
+ state_text(result), string_statuscode (status_line.http_major, status_line.http_minor),
status_line.http_code, status_line.msg,
strlen(msg) > 0 ? " - " : "",
msg, page_len, total_time,