diff options
| author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-01-19 20:37:14 +0100 |
|---|---|---|
| committer | Sven Nierlein <sven@nierlein.de> | 2018-10-22 16:28:51 +0200 |
| commit | 67967df159843134654ca0e676e3514fba2d3705 (patch) | |
| tree | 2761486d16c4276e3864b4dc9abc2b353e078797 | |
| parent | 2a9812ee43d64d11be96544f84501686541da86b (diff) | |
| download | monitoring-plugins-67967df159843134654ca0e676e3514fba2d3705.tar.gz | |
added -s option
| -rw-r--r-- | plugins/check_curl.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/plugins/check_curl.c b/plugins/check_curl.c index e4230dc4..4a62c1d2 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c | |||
| @@ -90,6 +90,7 @@ char *server_address; | |||
| 90 | char *host_name; | 90 | char *host_name; |
| 91 | char *server_url = DEFAULT_SERVER_URL; | 91 | char *server_url = DEFAULT_SERVER_URL; |
| 92 | unsigned short server_port = DEFAULT_HTTP_PORT; | 92 | unsigned short server_port = DEFAULT_HTTP_PORT; |
| 93 | char output_string_search[30] = ""; | ||
| 93 | char *warning_thresholds = NULL; | 94 | char *warning_thresholds = NULL; |
| 94 | char *critical_thresholds = NULL; | 95 | char *critical_thresholds = NULL; |
| 95 | thresholds *thlds; | 96 | thresholds *thlds; |
| @@ -109,6 +110,7 @@ CURLcode res; | |||
| 109 | char url[DEFAULT_BUFFER_SIZE]; | 110 | char url[DEFAULT_BUFFER_SIZE]; |
| 110 | char msg[DEFAULT_BUFFER_SIZE]; | 111 | char msg[DEFAULT_BUFFER_SIZE]; |
| 111 | char perfstring[DEFAULT_BUFFER_SIZE]; | 112 | char perfstring[DEFAULT_BUFFER_SIZE]; |
| 113 | char string_expect[MAX_INPUT_BUFFER] = ""; | ||
| 112 | char user_auth[MAX_INPUT_BUFFER] = ""; | 114 | char user_auth[MAX_INPUT_BUFFER] = ""; |
| 113 | int onredirect = STATE_OK; | 115 | int onredirect = STATE_OK; |
| 114 | int use_ssl = FALSE; | 116 | int use_ssl = FALSE; |
| @@ -246,18 +248,6 @@ main (int argc, char **argv) | |||
| 246 | //~ curl_easy_setopt( curl, CURLOPT_CAINFO, args_info.cacert_arg ); | 248 | //~ curl_easy_setopt( curl, CURLOPT_CAINFO, args_info.cacert_arg ); |
| 247 | //~ } | 249 | //~ } |
| 248 | 250 | ||
| 249 | /* TODO: old option -s: check if the excepted string matches */ | ||
| 250 | //~ if( args_info.string_given ) { | ||
| 251 | //~ if( strstr( body_buf.buf, args_info.string_arg ) == NULL ) { | ||
| 252 | //~ printf( "HTTP CRITICAL - string not found|%s\n", perfstring ); | ||
| 253 | //~ curl_easy_cleanup( curl ); | ||
| 254 | //~ curl_global_cleanup( ); | ||
| 255 | //~ curlhelp_freebuffer( &body_buf ); | ||
| 256 | //~ curlhelp_freebuffer( &header_buf ); | ||
| 257 | //~ exit( STATE_CRITICAL ); | ||
| 258 | //~ } | ||
| 259 | //~ } | ||
| 260 | |||
| 261 | /* handle redirections */ | 251 | /* handle redirections */ |
| 262 | if (onredirect == STATE_DEPENDENT) { | 252 | if (onredirect == STATE_DEPENDENT) { |
| 263 | curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1); | 253 | curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1); |
| @@ -280,7 +270,7 @@ main (int argc, char **argv) | |||
| 280 | remove_newlines (errbuf); | 270 | remove_newlines (errbuf); |
| 281 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response received from host on port %d: %s\n"), | 271 | snprintf (msg, DEFAULT_BUFFER_SIZE, _("Invalid HTTP response received from host on port %d: %s\n"), |
| 282 | server_port, status_line.msg, status_line.msg); | 272 | server_port, status_line.msg, status_line.msg); |
| 283 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", errbuf); | 273 | die (STATE_CRITICAL, "HTTP CRITICAL - %s\n", msg); |
| 284 | } | 274 | } |
| 285 | 275 | ||
| 286 | /* we got the data and we executed the request in a given time, so we can append | 276 | /* 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) | |||
| 334 | code = status_line.http_code; | 324 | code = status_line.http_code; |
| 335 | } | 325 | } |
| 336 | result = max_state_alt (onredirect, result); | 326 | result = max_state_alt (onredirect, result); |
| 337 | // TODO: make sure the last status line has been | 327 | /* TODO: make sure the last status line has been |
| 338 | // parsed into the status_line structure | 328 | parsed into the status_line structure |
| 329 | */ | ||
| 339 | /* all other codes are considered ok */ | 330 | /* all other codes are considered ok */ |
| 340 | } else { | 331 | } else { |
| 341 | result = STATE_OK; | 332 | result = STATE_OK; |
| @@ -348,13 +339,25 @@ main (int argc, char **argv) | |||
| 348 | status_line.http_code, status_line.msg, code); | 339 | status_line.http_code, status_line.msg, code); |
| 349 | } | 340 | } |
| 350 | 341 | ||
| 342 | /* Page and Header content checks go here */ | ||
| 343 | if (strlen (string_expect)) { | ||
| 344 | if (!strstr (body_buf.buf, string_expect)) { | ||
| 345 | strncpy(&output_string_search[0],string_expect,sizeof(output_string_search)); | ||
| 346 | if(output_string_search[sizeof(output_string_search)-1]!='\0') { | ||
| 347 | bcopy("...",&output_string_search[sizeof(output_string_search)-4],4); | ||
| 348 | } | ||
| 349 | 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); | ||
| 350 | result = STATE_CRITICAL; | ||
| 351 | } | ||
| 352 | } | ||
| 353 | |||
| 351 | /* -w, -c: check warning and critical level */ | 354 | /* -w, -c: check warning and critical level */ |
| 352 | result = max_state_alt(get_status(total_time, thlds), result); | 355 | result = max_state_alt(get_status(total_time, thlds), result); |
| 353 | 356 | ||
| 354 | //~ die (result, "HTTP %s: %s\n", state_text(result), msg); | 357 | //~ die (result, "HTTP %s: %s\n", state_text(result), msg); |
| 355 | die (result, "HTTP %s HTTP/%d.%d %d %s - %.3g seconds response time|%s\n", | 358 | die (result, "HTTP %s HTTP/%d.%d %d %s - %s - %.3g seconds response time|%s\n", |
| 356 | state_text(result), status_line.http_major, status_line.http_minor, | 359 | state_text(result), status_line.http_major, status_line.http_minor, |
| 357 | status_line.http_code, status_line.msg, | 360 | status_line.http_code, status_line.msg, msg, |
| 358 | total_time, perfstring); | 361 | total_time, perfstring); |
| 359 | 362 | ||
| 360 | /* proper cleanup after die? */ | 363 | /* proper cleanup after die? */ |
| @@ -393,6 +396,7 @@ process_arguments (int argc, char **argv) | |||
| 393 | {"url", required_argument, 0, 'u'}, | 396 | {"url", required_argument, 0, 'u'}, |
| 394 | {"port", required_argument, 0, 'p'}, | 397 | {"port", required_argument, 0, 'p'}, |
| 395 | {"authorization", required_argument, 0, 'a'}, | 398 | {"authorization", required_argument, 0, 'a'}, |
| 399 | {"string", required_argument, 0, 's'}, | ||
| 396 | {"onredirect", required_argument, 0, 'f'}, | 400 | {"onredirect", required_argument, 0, 'f'}, |
| 397 | {"client-cert", required_argument, 0, 'J'}, | 401 | {"client-cert", required_argument, 0, 'J'}, |
| 398 | {"private-key", required_argument, 0, 'K'}, | 402 | {"private-key", required_argument, 0, 'K'}, |
| @@ -405,7 +409,7 @@ process_arguments (int argc, char **argv) | |||
| 405 | usage ("\n"); | 409 | usage ("\n"); |
| 406 | 410 | ||
| 407 | while (1) { | 411 | while (1) { |
| 408 | c = getopt_long (argc, argv, "Vvht:c:w:A:H:I:a:p:u:f:C:J:K:S::", longopts, &option); | 412 | c = getopt_long (argc, argv, "Vvht:c:w:A:H:I:a:p:s:u:f:C:J:K:S::", longopts, &option); |
| 409 | if (c == -1 || c == EOF || c == 1) | 413 | if (c == -1 || c == EOF || c == 1) |
| 410 | break; | 414 | break; |
| 411 | 415 | ||
| @@ -532,6 +536,10 @@ process_arguments (int argc, char **argv) | |||
| 532 | if (verbose >= 2) | 536 | if (verbose >= 2) |
| 533 | printf(_("* Following redirects set to %s\n"), state_text(onredirect)); | 537 | printf(_("* Following redirects set to %s\n"), state_text(onredirect)); |
| 534 | break; | 538 | break; |
| 539 | case 's': /* string or substring */ | ||
| 540 | strncpy (string_expect, optarg, MAX_INPUT_BUFFER - 1); | ||
| 541 | string_expect[MAX_INPUT_BUFFER - 1] = 0; | ||
| 542 | break; | ||
| 535 | case '?': | 543 | case '?': |
| 536 | /* print short usage statement if args not parsable */ | 544 | /* print short usage statement if args not parsable */ |
| 537 | usage5 (); | 545 | usage5 (); |
| @@ -578,6 +586,7 @@ print_help (void) | |||
| 578 | { | 586 | { |
| 579 | print_revision(progname, NP_VERSION); | 587 | print_revision(progname, NP_VERSION); |
| 580 | 588 | ||
| 589 | printf ("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n"); | ||
| 581 | printf ("Copyright (c) 2017 Andreas Baumann <abaumann@yahoo.com>\n"); | 590 | printf ("Copyright (c) 2017 Andreas Baumann <abaumann@yahoo.com>\n"); |
| 582 | printf (COPYRIGHT, copyright, email); | 591 | printf (COPYRIGHT, copyright, email); |
| 583 | 592 | ||
| @@ -633,6 +642,8 @@ print_help (void) | |||
| 633 | printf (" %s\n", _("matching the client certificate")); | 642 | printf (" %s\n", _("matching the client certificate")); |
| 634 | #endif | 643 | #endif |
| 635 | 644 | ||
| 645 | printf (" %s\n", "-s, --string=STRING"); | ||
| 646 | printf (" %s\n", _("String to expect in the content")); | ||
| 636 | printf (" %s\n", "-u, --url=PATH"); | 647 | printf (" %s\n", "-u, --url=PATH"); |
| 637 | printf (" %s\n", _("URL to GET or POST (default: /)")); | 648 | printf (" %s\n", _("URL to GET or POST (default: /)")); |
| 638 | 649 | ||
