[monitoring-plugins] page length is computed from header, fallback to ...
Andreas Baumann
git at monitoring-plugins.org
Thu Apr 27 15:00:13 CEST 2017
Module: monitoring-plugins
Branch: feature_check_curl
Commit: 4df31dbe62b873a94282723463f8a5588bb3dfb9
Author: Andreas Baumann <mail at andreasbaumann.cc>
Date: Thu Apr 27 14:50:20 2017 +0200
URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=4df31db
page length is computed from header, fallback to actual body size (get_content_length)
---
plugins/check_curl.c | 42 +++++++++++++++++++++++++++++++++++++-----
1 file changed, 37 insertions(+), 5 deletions(-)
diff --git a/plugins/check_curl.c b/plugins/check_curl.c
index cd00b0e..babbcd5 100644
--- a/plugins/check_curl.c
+++ b/plugins/check_curl.c
@@ -168,11 +168,9 @@ char *client_cert = NULL;
char *client_privkey = NULL;
char *ca_cert = NULL;
int is_openssl_callback = FALSE;
-#ifdef HAVE_SSL
-#ifdef USE_OPENSSL
+#if defined(HAVE_SSL) && defined(USE_OPENSSL)
X509 *cert = NULL;
-#endif /* USE_OPENSSL */
-#endif /* HAVE_SSL */
+#endif /* defined(HAVE_SSL) && defined(USE_OPENSSL) */
int no_body = FALSE;
int maximum_age = -1;
int address_family = AF_UNSPEC;
@@ -199,6 +197,11 @@ void curlhelp_free_statusline (curlhelp_statusline *);
char *perfd_time_ssl (double microsec);
char *get_header_value (const struct phr_header* headers, const size_t nof_headers, const char* header);
int check_document_dates (const curlhelp_write_curlbuf *, char (*msg)[DEFAULT_BUFFER_SIZE]);
+int get_content_length (const curlhelp_write_curlbuf* header_buf, const curlhelp_write_curlbuf* body_buf);
+
+#if defined(HAVE_SSL) && defined(USE_OPENSSL)
+int np_net_ssl_check_certificate(X509 *certificate, int days_till_exp_warn, int days_till_exp_crit);
+#endif /* defined(HAVE_SSL) && defined(USE_OPENSSL) */
void remove_newlines (char *);
void test_file (char *);
@@ -756,7 +759,7 @@ GOT_FIRST_CERT:
* - if -N (nobody) is given, use Content-Length only and hope the server set
* the value correcly
*/
- page_len = header_buf.buflen + body_buf.buflen;
+ page_len = get_content_length(&header_buf, &body_buf);
if ((max_page_len > 0) && (page_len > max_page_len)) {
snprintf (msg, DEFAULT_BUFFER_SIZE, _("%spage size %d too large, "), msg, page_len);
result = max_state_alt(STATE_WARNING, result);
@@ -1698,6 +1701,35 @@ check_document_dates (const curlhelp_write_curlbuf *header_buf, char (*msg)[DEFA
return date_result;
}
+int
+get_content_length (const curlhelp_write_curlbuf* header_buf, const curlhelp_write_curlbuf* body_buf)
+{
+ const char *s;
+ int content_length = 0;
+ char *copy;
+ struct phr_header headers[255];
+ size_t nof_headers = 255;
+ size_t msglen;
+ char *content_length_s = NULL;
+ curlhelp_statusline status_line;
+
+ int res = phr_parse_response (header_buf->buf, header_buf->buflen,
+ &status_line.http_minor, &status_line.http_code, &status_line.msg, &msglen,
+ headers, &nof_headers, 0);
+
+ content_length_s = get_header_value (headers, nof_headers, "content-length");
+ if (!content_length_s) {
+ /* TODO: or header_buf->buflen + body_buf->buflen */
+ return body_buf->buflen;
+ }
+ /* TODO: trim */
+ content_length = atoi (content_length_s);
+
+ if (content_length_s) free (content_length_s);
+
+ return content_length;
+}
+
/* TODO: is there a better way in libcurl to check for the SSL library? */
curlhelp_ssl_library
curlhelp_get_ssl_library (CURL* curl)
More information about the Commits
mailing list