[monitoring-plugins] check_curl: implement optional http headers

Sven Nierlein git at monitoring-plugins.org
Wed Mar 15 09:20:14 CET 2017


 Module: monitoring-plugins
 Branch: feature_check_curl
 Commit: afb41b29f7a444826a1f23535def3a57fb241375
 Author: Sven Nierlein <sven at nierlein.de>
   Date: Tue Mar 14 20:29:17 2017 +0100
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=afb41b2

check_curl: implement optional http headers

Signed-off-by: Sven Nierlein <sven at nierlein.de>

---

 plugins/check_curl.c | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/plugins/check_curl.c b/plugins/check_curl.c
index 209b449..c6a7ab8 100644
--- a/plugins/check_curl.c
+++ b/plugins/check_curl.c
@@ -103,6 +103,7 @@ curlhelp_curlbuf body_buf;
 curlhelp_curlbuf header_buf;
 curlhelp_statusline status_line;
 char http_header[DEFAULT_BUFFER_SIZE];
+struct curl_slist *http_opt_headers = NULL;
 long code;
 long socket_timeout = DEFAULT_SOCKET_TIMEOUT;
 double total_time;
@@ -219,10 +220,10 @@ check_http (void)
   /* always close connection, be nice to servers */
   snprintf (http_header, DEFAULT_BUFFER_SIZE, "Connection: close");
   header_list = curl_slist_append (header_list, http_header);
-  
-  /* set HTTP headers */  
+
+  /* set HTTP headers */
   curl_easy_setopt( curl, CURLOPT_HTTPHEADER, header_list );
-  
+
   /* set SSL version, warn about unsecure or unsupported versions */
   if (use_ssl) {
     curl_easy_setopt (curl, CURLOPT_SSLVERSION, ssl_version);
@@ -289,11 +290,15 @@ check_http (void)
     */
   }
 
+  /* set optional http header */
+  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_opt_headers);
+
   /* do the request */
   res = curl_easy_perform(curl);
 
   /* free header list, we don't need it anymore */
-  curl_slist_free_all (header_list);
+  curl_slist_free_all(header_list);
+  curl_slist_free_all(http_opt_headers);
 
   /* Curl errors, result in critical Nagios state */
   if (res != CURLE_OK) {
@@ -460,6 +465,7 @@ process_arguments (int argc, char **argv)
     {"ca-cert", required_argument, 0, CA_CERT_OPTION},
     {"useragent", required_argument, 0, 'A'},
     {"invert-regex", no_argument, NULL, INVERT_REGEX},
+    {"header", required_argument, 0, 'k'},
     {0, 0, 0, 0}
   };
 
@@ -467,7 +473,7 @@ process_arguments (int argc, char **argv)
     return ERROR;
 
   while (1) {
-    c = getopt_long (argc, argv, "Vvht:c:w:A:H:j:I:a:p:s:r:u:f:C:J:K:S::", longopts, &option);
+    c = getopt_long (argc, argv, "Vvht:c:w:A:k:H:j:I:a:p:s:r:u:f:C:J:K:S::", longopts, &option);
     if (c == -1 || c == EOF || c == 1)
       break;
 
@@ -526,6 +532,9 @@ process_arguments (int argc, char **argv)
     case 'A': /* useragent */
       snprintf (user_agent, DEFAULT_BUFFER_SIZE, optarg);
       break;
+    case 'k': /* Additional headers */
+      http_opt_headers = curl_slist_append(http_opt_headers, optarg);
+      break;
     case 'C': /* Check SSL cert validity */
 #ifdef LIBCURL_FEATURE_SSL
       /* TODO: C:, check age of certificate for backward compatible
@@ -854,20 +863,20 @@ curlhelp_freebuffer (curlhelp_curlbuf *buf)
 /* TODO: should be moved into 'gl' and should be probed, glibc has
  * a strrstr
  */
-const char* 
+const char*
 strrstr2(const char *haystack, const char *needle)
 {
   int counter;
   size_t len;
   const char *prev_pos;
   const char *pos;
-  
+
   if (haystack == NULL || needle == NULL)
     return NULL;
-  
+
   if (haystack[0] == '\0' || needle[0] == '\0')
     return NULL;
-    
+
   counter = 0;
   prev_pos = NULL;
   pos = haystack;
@@ -902,7 +911,7 @@ curlhelp_parse_statusline (const char *buf, curlhelp_statusline *status_line)
     start += 2;
     buf = start;
   }
-  
+
   first_line_end = strstr(buf, "\r\n");
   if (first_line_end == NULL) return -1;
 



More information about the Commits mailing list