Module: monitoring-plugins
    Branch: feature_check_curl
    Commit: b7ba0e6f7425ebea3760b7c2134f029e9362ea33
    Author: Andreas Baumann <m...@andreasbaumann.cc>
 Committer: Sven Nierlein <s...@nierlein.de>
      Date: Thu Jan 19 20:37:14 2017 +0100
       URL: 
https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=b7ba0e6

added -s option

---

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

diff --git a/plugins/check_curl.c b/plugins/check_curl.c
index e4230dc..4a62c1d 100644
--- a/plugins/check_curl.c
+++ b/plugins/check_curl.c
@@ -90,6 +90,7 @@ char *server_address;
 char *host_name;
 char *server_url = DEFAULT_SERVER_URL;
 unsigned short server_port = DEFAULT_HTTP_PORT;
+char output_string_search[30] = "";
 char *warning_thresholds = NULL;
 char *critical_thresholds = NULL;
 thresholds *thlds;
@@ -109,6 +110,7 @@ CURLcode res;
 char url[DEFAULT_BUFFER_SIZE];
 char msg[DEFAULT_BUFFER_SIZE];
 char perfstring[DEFAULT_BUFFER_SIZE];
+char string_expect[MAX_INPUT_BUFFER] = "";
 char user_auth[MAX_INPUT_BUFFER] = "";
 int onredirect = STATE_OK;
 int use_ssl = FALSE;
@@ -246,18 +248,6 @@ main (int argc, char **argv)
                //~ curl_easy_setopt( curl, CURLOPT_CAINFO, 
args_info.cacert_arg );
        //~ }
 
-       /* TODO: old option -s: check if the excepted string matches */
-       //~ if( args_info.string_given ) {
-               //~ if( strstr( body_buf.buf, args_info.string_arg ) == NULL ) {
-                       //~ printf( "HTTP CRITICAL - string not found|%s\n", 
perfstring );
-                       //~ curl_easy_cleanup( curl );
-                       //~ curl_global_cleanup( );
-                       //~ curlhelp_freebuffer( &body_buf );
-                       //~ curlhelp_freebuffer( &header_buf );
-                       //~ exit( STATE_CRITICAL );
-               //~ }
-       //~ }
-
        /* handle redirections */
        if (onredirect == STATE_DEPENDENT) {
                curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1);
@@ -280,7 +270,7 @@ main (int argc, char **argv)
                remove_newlines (errbuf);
                snprintf (msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response 
received from host on port %d: %s\n"),
                        server_port, status_line.msg, status_line.msg);
-               die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", errbuf);
+               die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg);
        }
 
        /* we got the data and we executed the request in a given time, so we 
can append
@@ -334,8 +324,9 @@ main (int argc, char **argv)
                        code = status_line.http_code;
                }
                result = max_state_alt (onredirect, result);
-               // TODO: make sure the last status line has been
-               // parsed into the status_line structure
+               /* TODO: make sure the last status line has been
+                  parsed into the status_line structure
+                */
        /* all other codes are considered ok */
        } else {
                result = STATE_OK;
@@ -348,13 +339,25 @@ main (int argc, char **argv)
                        status_line.http_code, status_line.msg, code);
        }
 
+       /* Page and Header content checks go here */
+       if (strlen (string_expect)) {
+               if (!strstr (body_buf.buf, string_expect)) {
+                       
strncpy(&output_string_search[0],string_expect,sizeof(output_string_search));
+                       
if(output_string_search[sizeof(output_string_search)-1]!='\0') {
+                               
bcopy("...",&output_string_search[sizeof(output_string_search)-4],4);
+                       }
+                       snprintf (msg, DEFAULT_BUFFER_SIZE, _("%sstring '%s' 
not found on '%s://%s:%d%s', "), msg, output_string_search, use_ssl ? "https" : 
"http", host_name ? host_name : server_address, server_port, server_url);
+                       result = STATE_CRITICAL;
+               }
+       }
+
        /* -w, -c: check warning and critical level */
        result = max_state_alt(get_status(total_time, thlds), result);
 
        //~ die (result, "HTTP %s: %s\n", state_text(result), msg);
-       die (result, "HTTP %s HTTP/%d.%d %d %s - %.3g seconds response 
time|%s\n",
+       die (result, "HTTP %s HTTP/%d.%d %d %s - %s - %.3g seconds response 
time|%s\n",
                state_text(result), status_line.http_major, 
status_line.http_minor,
-               status_line.http_code, status_line.msg,
+               status_line.http_code, status_line.msg, msg,
                total_time, perfstring);
 
        /* proper cleanup after die? */
@@ -393,6 +396,7 @@ process_arguments (int argc, char **argv)
                {"url", required_argument, 0, 'u'},
                {"port", required_argument, 0, 'p'},
                {"authorization", required_argument, 0, 'a'},
+               {"string", required_argument, 0, 's'},
                {"onredirect", required_argument, 0, 'f'},
                {"client-cert", required_argument, 0, 'J'},
                {"private-key", required_argument, 0, 'K'},
@@ -405,7 +409,7 @@ process_arguments (int argc, char **argv)
                usage ("\n");
 
        while (1) {
-               c = getopt_long (argc, argv, 
"Vvht:c:w:A:H:I:a:p:u:f:C:J:K:S::", longopts, &option);
+               c = getopt_long (argc, argv, 
"Vvht:c:w:A:H:I:a:p:s:u:f:C:J:K:S::", longopts, &option);
                if (c == -1 || c == EOF || c == 1)
                        break;
 
@@ -532,6 +536,10 @@ process_arguments (int argc, char **argv)
                        if (verbose >= 2)
                                printf(_("* Following redirects set to %s\n"), 
state_text(onredirect));
                        break;
+               case 's': /* string or substring */
+                       strncpy (string_expect, optarg, MAX_INPUT_BUFFER - 1);
+                       string_expect[MAX_INPUT_BUFFER - 1] = 0;
+                       break;
                case '?':
                        /* print short usage statement if args not parsable */
                        usage5 ();
@@ -578,6 +586,7 @@ print_help (void)
 {
        print_revision(progname, NP_VERSION);
 
+       printf ("Copyright (c) 1999 Ethan Galstad <nag...@nagios.org>\n");
        printf ("Copyright (c) 2017 Andreas Baumann <abaum...@yahoo.com>\n");
        printf (COPYRIGHT, copyright, email);
 
@@ -633,6 +642,8 @@ print_help (void)
        printf ("   %s\n", _("matching the client certificate"));
 #endif
 
+       printf (" %s\n", "-s, --string=STRING");
+       printf ("    %s\n", _("String to expect in the content"));
        printf (" %s\n", "-u, --url=PATH");
        printf ("    %s\n", _("URL to GET or POST (default: /)"));
 

Reply via email to