diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/check_http.c | 182 |
1 files changed, 100 insertions, 82 deletions
diff --git a/plugins/check_http.c b/plugins/check_http.c index eba8ac27..e2047edd 100644 --- a/plugins/check_http.c +++ b/plugins/check_http.c | |||
| @@ -40,22 +40,22 @@ enum { | |||
| 40 | #include <ssl.h> | 40 | #include <ssl.h> |
| 41 | #include <err.h> | 41 | #include <err.h> |
| 42 | #include <rand.h> | 42 | #include <rand.h> |
| 43 | #endif | 43 | #else |
| 44 | 44 | # ifdef HAVE_OPENSSL_SSL_H | |
| 45 | #ifdef HAVE_OPENSSL_SSL_H | 45 | # include <openssl/rsa.h> |
| 46 | #include <openssl/rsa.h> | 46 | # include <openssl/crypto.h> |
| 47 | #include <openssl/crypto.h> | 47 | # include <openssl/x509.h> |
| 48 | #include <openssl/x509.h> | 48 | # include <openssl/pem.h> |
| 49 | #include <openssl/pem.h> | 49 | # include <openssl/ssl.h> |
| 50 | #include <openssl/ssl.h> | 50 | # include <openssl/err.h> |
| 51 | #include <openssl/err.h> | 51 | # include <openssl/rand.h> |
| 52 | #include <openssl/rand.h> | 52 | # endif |
| 53 | #endif | 53 | #endif |
| 54 | 54 | ||
| 55 | #ifdef HAVE_SSL | 55 | #ifdef HAVE_SSL |
| 56 | int check_cert = FALSE; | 56 | int check_cert = FALSE; |
| 57 | int days_till_exp; | 57 | int days_till_exp; |
| 58 | char *randbuff = ""; | 58 | char *randbuff; |
| 59 | SSL_CTX *ctx; | 59 | SSL_CTX *ctx; |
| 60 | SSL *ssl; | 60 | SSL *ssl; |
| 61 | X509 *server_cert; | 61 | X509 *server_cert; |
| @@ -84,14 +84,6 @@ struct timeval tv; | |||
| 84 | 84 | ||
| 85 | #define server_port_check(use_ssl) (use_ssl ? HTTPS_PORT : HTTP_PORT) | 85 | #define server_port_check(use_ssl) (use_ssl ? HTTPS_PORT : HTTP_PORT) |
| 86 | 86 | ||
| 87 | /* per RFC 2396 */ | ||
| 88 | |||
| 89 | #define HDR_LOCATION "%*[Ll]%*[Oo]%*[Cc]%*[Aa]%*[Tt]%*[Ii]%*[Oo]%*[Nn]: " | ||
| 90 | #define URI_HTTP "%[HTPShtps]://" | ||
| 91 | #define URI_HOST "%[-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]" | ||
| 92 | #define URI_PORT ":%[0123456789]" | ||
| 93 | #define URI_PATH "%[-_.!~*'();/?:@&=+$,%#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]" | ||
| 94 | |||
| 95 | #define HTTP_URL "/" | 87 | #define HTTP_URL "/" |
| 96 | #define CRLF "\r\n" | 88 | #define CRLF "\r\n" |
| 97 | 89 | ||
| @@ -100,9 +92,9 @@ int specify_port = FALSE; | |||
| 100 | int server_port = HTTP_PORT; | 92 | int server_port = HTTP_PORT; |
| 101 | char server_port_text[6] = ""; | 93 | char server_port_text[6] = ""; |
| 102 | char server_type[6] = "http"; | 94 | char server_type[6] = "http"; |
| 103 | char *server_address = ""; | 95 | char *server_address; |
| 104 | char *host_name = ""; | 96 | char *host_name; |
| 105 | char *server_url = ""; | 97 | char *server_url; |
| 106 | int server_url_length; | 98 | int server_url_length; |
| 107 | int server_expect_yn = 0; | 99 | int server_expect_yn = 0; |
| 108 | char server_expect[MAX_INPUT_BUFFER] = HTTP_EXPECT; | 100 | char server_expect[MAX_INPUT_BUFFER] = HTTP_EXPECT; |
| @@ -118,8 +110,8 @@ int use_ssl = FALSE; | |||
| 118 | int verbose = FALSE; | 110 | int verbose = FALSE; |
| 119 | int sd; | 111 | int sd; |
| 120 | int min_page_len = 0; | 112 | int min_page_len = 0; |
| 121 | char *http_method = "GET"; | 113 | char *http_method; |
| 122 | char *http_post_data = ""; | 114 | char *http_post_data; |
| 123 | char buffer[MAX_INPUT_BUFFER]; | 115 | char buffer[MAX_INPUT_BUFFER]; |
| 124 | 116 | ||
| 125 | int process_arguments (int, char **); | 117 | int process_arguments (int, char **); |
| @@ -136,7 +128,7 @@ main (int argc, char **argv) | |||
| 136 | int result = STATE_UNKNOWN; | 128 | int result = STATE_UNKNOWN; |
| 137 | 129 | ||
| 138 | /* Set default URL. Must be malloced for subsequent realloc if --onredirect=follow */ | 130 | /* Set default URL. Must be malloced for subsequent realloc if --onredirect=follow */ |
| 139 | asprintf (&server_url, "%s", HTTP_URL); | 131 | server_url = strdup(HTTP_URL); |
| 140 | server_url_length = strlen(server_url); | 132 | server_url_length = strlen(server_url); |
| 141 | 133 | ||
| 142 | if (process_arguments (argc, argv) == ERROR) | 134 | if (process_arguments (argc, argv) == ERROR) |
| @@ -161,8 +153,7 @@ main (int argc, char **argv) | |||
| 161 | #ifdef HAVE_SSL | 153 | #ifdef HAVE_SSL |
| 162 | if (use_ssl && check_cert == TRUE) { | 154 | if (use_ssl && check_cert == TRUE) { |
| 163 | if (connect_SSL () != OK) | 155 | if (connect_SSL () != OK) |
| 164 | die (STATE_CRITICAL, | 156 | die (STATE_CRITICAL, _("HTTP CRITICAL - Could not make SSL connection\n")); |
| 165 | _("HTTP CRITICAL - Could not make SSL connection\n")); | ||
| 166 | if ((server_cert = SSL_get_peer_certificate (ssl)) != NULL) { | 157 | if ((server_cert = SSL_get_peer_certificate (ssl)) != NULL) { |
| 167 | result = check_certificate (&server_cert); | 158 | result = check_certificate (&server_cert); |
| 168 | X509_free (server_cert); | 159 | X509_free (server_cert); |
| @@ -313,16 +304,16 @@ process_arguments (int argc, char **argv) | |||
| 313 | break; | 304 | break; |
| 314 | /* Note: H, I, and u must be malloc'd or will fail on redirects */ | 305 | /* Note: H, I, and u must be malloc'd or will fail on redirects */ |
| 315 | case 'H': /* Host Name (virtual host) */ | 306 | case 'H': /* Host Name (virtual host) */ |
| 316 | asprintf (&host_name, "%s", optarg); | 307 | host_name = strdup (optarg); |
| 317 | break; | 308 | break; |
| 318 | case 'I': /* Server IP-address */ | 309 | case 'I': /* Server IP-address */ |
| 319 | asprintf (&server_address, "%s", optarg); | 310 | server_address = strdup(optarg); |
| 320 | break; | 311 | break; |
| 321 | case 'u': /* Host or server */ | 312 | case 'u': /* URL path */ |
| 322 | asprintf (&server_url, "%s", optarg); | 313 | asprintf (&server_url, "%s", optarg); |
| 323 | server_url_length = strlen (server_url); | 314 | server_url_length = strlen (server_url); |
| 324 | break; | 315 | break; |
| 325 | case 'p': /* Host or server */ | 316 | case 'p': /* Server port */ |
| 326 | if (!is_intnonneg (optarg)) | 317 | if (!is_intnonneg (optarg)) |
| 327 | usage2 (_("invalid port number"), optarg); | 318 | usage2 (_("invalid port number"), optarg); |
| 328 | else { | 319 | else { |
| @@ -335,8 +326,9 @@ process_arguments (int argc, char **argv) | |||
| 335 | user_auth[MAX_INPUT_BUFFER - 1] = 0; | 326 | user_auth[MAX_INPUT_BUFFER - 1] = 0; |
| 336 | break; | 327 | break; |
| 337 | case 'P': /* HTTP POST data in URL encoded format */ | 328 | case 'P': /* HTTP POST data in URL encoded format */ |
| 338 | asprintf (&http_method, "%s", "POST"); | 329 | if (http_method || http_post_data) break; |
| 339 | asprintf (&http_post_data, "%s", optarg); | 330 | http_method = strdup("POST"); |
| 331 | http_post_data = strdup(optarg); | ||
| 340 | break; | 332 | break; |
| 341 | case 's': /* string or substring */ | 333 | case 's': /* string or substring */ |
| 342 | strncpy (string_expect, optarg, MAX_INPUT_BUFFER - 1); | 334 | strncpy (string_expect, optarg, MAX_INPUT_BUFFER - 1); |
| @@ -391,22 +383,25 @@ process_arguments (int argc, char **argv) | |||
| 391 | 383 | ||
| 392 | c = optind; | 384 | c = optind; |
| 393 | 385 | ||
| 394 | if (strcmp (server_address, "") == 0 && c < argc) | 386 | if (server_address == NULL && c < argc) |
| 395 | asprintf (&server_address, "%s", argv[c++]); | 387 | server_address = strdup (argv[c++]); |
| 396 | 388 | ||
| 397 | if (strcmp (host_name, "") == 0 && c < argc) | 389 | if (host_name == NULL && c < argc) |
| 398 | asprintf (&host_name, "%s", argv[c++]); | 390 | asprintf (&host_name, "%s", argv[c++]); |
| 399 | 391 | ||
| 400 | if (strcmp (server_address ,"") == 0) { | 392 | if (server_address == NULL) { |
| 401 | if (strcmp (host_name, "") == 0) | 393 | if (host_name == NULL) |
| 402 | usage (_("check_http: you must specify a server address or host name\n")); | 394 | usage (_("check_http: you must specify a server address or host name\n")); |
| 403 | else | 395 | else |
| 404 | asprintf (&server_address, "%s", host_name); | 396 | server_address = strdup (host_name); |
| 405 | } | 397 | } |
| 406 | 398 | ||
| 407 | if (check_critical_time && critical_time>(double)socket_timeout) | 399 | if (check_critical_time && critical_time>(double)socket_timeout) |
| 408 | socket_timeout = (int)critical_time + 1; | 400 | socket_timeout = (int)critical_time + 1; |
| 409 | 401 | ||
| 402 | if (http_method == NULL) | ||
| 403 | http_method = strdup ("GET"); | ||
| 404 | |||
| 410 | return TRUE; | 405 | return TRUE; |
| 411 | } | 406 | } |
| 412 | 407 | ||
| @@ -455,21 +450,34 @@ base64 (char *bin, size_t len) | |||
| 455 | 450 | ||
| 456 | 451 | ||
| 457 | 452 | ||
| 453 | /* per RFC 2396 */ | ||
| 454 | #define HDR_LOCATION "%*[Ll]%*[Oo]%*[Cc]%*[Aa]%*[Tt]%*[Ii]%*[Oo]%*[Nn]: " | ||
| 455 | #define URI_HTTP "%[HTPShtps]://" | ||
| 456 | #define URI_HOST "%[-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]" | ||
| 457 | #define URI_PORT ":%[0123456789]" | ||
| 458 | #define URI_PATH "%[-_.!~*'();/?:@&=+$,%#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]" | ||
| 459 | #define HD1 HDR_LOCATION URI_HTTP URI_HOST URI_PORT URI_PATH | ||
| 460 | #define HD2 HDR_LOCATION URI_HTTP URI_HOST URI_PATH | ||
| 461 | #define HD3 HDR_LOCATION URI_HTTP URI_HOST URI_PORT | ||
| 462 | #define HD4 HDR_LOCATION URI_HTTP URI_HOST | ||
| 463 | #define HD5 HDR_LOCATION URI_PATH | ||
| 464 | |||
| 458 | int | 465 | int |
| 459 | check_http (void) | 466 | check_http (void) |
| 460 | { | 467 | { |
| 461 | char *msg = NULL; | 468 | char *msg; |
| 462 | char *status_line = ""; | 469 | char *status_line; |
| 463 | char *header = NULL; | 470 | char *header; |
| 464 | char *page = ""; | 471 | char *page; |
| 465 | char *auth = NULL; | 472 | char *auth; |
| 466 | int i = 0; | 473 | int i = 0; |
| 467 | size_t pagesize = 0; | 474 | size_t pagesize = 0; |
| 468 | char *full_page = ""; | 475 | char *full_page; |
| 469 | char *buf = NULL; | 476 | char *buf; |
| 470 | char *pos = ""; | 477 | char *pos; |
| 471 | char *x = NULL; | 478 | char *x; |
| 472 | char *orig_url = NULL; | 479 | char *orig_url; |
| 480 | long microsec; | ||
| 473 | double elapsed_time; | 481 | double elapsed_time; |
| 474 | int page_len = 0; | 482 | int page_len = 0; |
| 475 | #ifdef HAVE_SSL | 483 | #ifdef HAVE_SSL |
| @@ -504,7 +512,7 @@ check_http (void) | |||
| 504 | asprintf (&buf, "%s %s HTTP/1.0\r\n", http_method, server_url); | 512 | asprintf (&buf, "%s %s HTTP/1.0\r\n", http_method, server_url); |
| 505 | 513 | ||
| 506 | /* optionally send the host header info (not clear if it's usable) */ | 514 | /* optionally send the host header info (not clear if it's usable) */ |
| 507 | if (strcmp (host_name, "")) | 515 | if (host_name) |
| 508 | asprintf (&buf, "%sHost: %s\r\n", buf, host_name); | 516 | asprintf (&buf, "%sHost: %s\r\n", buf, host_name); |
| 509 | 517 | ||
| 510 | /* send user agent */ | 518 | /* send user agent */ |
| @@ -512,13 +520,13 @@ check_http (void) | |||
| 512 | buf, clean_revstring (revision), VERSION); | 520 | buf, clean_revstring (revision), VERSION); |
| 513 | 521 | ||
| 514 | /* optionally send the authentication info */ | 522 | /* optionally send the authentication info */ |
| 515 | if (strcmp (user_auth, "")) { | 523 | if (strlen(user_auth)) { |
| 516 | auth = base64 (user_auth, strlen (user_auth)); | 524 | auth = base64 (user_auth, strlen (user_auth)); |
| 517 | asprintf (&buf, "%sAuthorization: Basic %s\r\n", buf, auth); | 525 | asprintf (&buf, "%sAuthorization: Basic %s\r\n", buf, auth); |
| 518 | } | 526 | } |
| 519 | 527 | ||
| 520 | /* either send http POST data */ | 528 | /* either send http POST data */ |
| 521 | if (strlen (http_post_data)) { | 529 | if (http_post_data) { |
| 522 | asprintf (&buf, "%sContent-Type: application/x-www-form-urlencoded\r\n", buf); | 530 | asprintf (&buf, "%sContent-Type: application/x-www-form-urlencoded\r\n", buf); |
| 523 | asprintf (&buf, "%sContent-Length: %i\r\n\r\n", buf, strlen (http_post_data)); | 531 | asprintf (&buf, "%sContent-Length: %i\r\n\r\n", buf, strlen (http_post_data)); |
| 524 | asprintf (&buf, "%s%s%s", buf, http_post_data, CRLF); | 532 | asprintf (&buf, "%s%s%s", buf, http_post_data, CRLF); |
| @@ -543,6 +551,7 @@ check_http (void) | |||
| 543 | #endif | 551 | #endif |
| 544 | 552 | ||
| 545 | /* fetch the page */ | 553 | /* fetch the page */ |
| 554 | full_page = strdup(""); | ||
| 546 | while ((i = my_recv ()) > 0) { | 555 | while ((i = my_recv ()) > 0) { |
| 547 | buffer[i] = '\0'; | 556 | buffer[i] = '\0'; |
| 548 | asprintf (&full_page, "%s%s", full_page, buffer); | 557 | asprintf (&full_page, "%s%s", full_page, buffer); |
| @@ -663,42 +672,49 @@ check_http (void) | |||
| 663 | while (pos) { | 672 | while (pos) { |
| 664 | server_address = realloc (server_address, MAX_IPV4_HOSTLENGTH + 1); | 673 | server_address = realloc (server_address, MAX_IPV4_HOSTLENGTH + 1); |
| 665 | if (server_address == NULL) | 674 | if (server_address == NULL) |
| 666 | die (STATE_UNKNOWN, | 675 | die (STATE_UNKNOWN,_("ERROR: could not allocate server_address")); |
| 667 | _("HTTP UNKNOWN: could not allocate server_address")); | ||
| 668 | if (strcspn (pos, "\r\n") > (size_t)server_url_length) { | 676 | if (strcspn (pos, "\r\n") > (size_t)server_url_length) { |
| 669 | server_url = realloc (server_url, strcspn (pos, "\r\n")); | 677 | server_url = realloc (server_url, strcspn (pos, "\r\n")); |
| 670 | if (server_url == NULL) | 678 | if (server_url == NULL) |
| 671 | die (STATE_UNKNOWN, | 679 | die (STATE_UNKNOWN, _("ERROR: could not allocate server_url")); |
| 672 | _("HTTP UNKNOWN: could not allocate server_url")); | ||
| 673 | server_url_length = strcspn (pos, "\r\n"); | 680 | server_url_length = strcspn (pos, "\r\n"); |
| 674 | } | 681 | } |
| 675 | if (sscanf (pos, HDR_LOCATION URI_HTTP URI_HOST URI_PORT URI_PATH, server_type, server_address, server_port_text, server_url) == 4) { | 682 | /* HDR_LOCATION, URI_HTTP, URI_HOST, URI_PORT, URI_PATH */ |
| 676 | asprintf (&host_name, "%s", server_address); | 683 | if (sscanf (pos, HD1, server_type, server_address, server_port_text, server_url) == 4) { |
| 684 | if (host_name != NULL) free(host_name); | ||
| 685 | host_name = strdup(server_address); | ||
| 677 | use_ssl = server_type_check (server_type); | 686 | use_ssl = server_type_check (server_type); |
| 678 | server_port = atoi (server_port_text); | 687 | server_port = atoi (server_port_text); |
| 679 | check_http (); | 688 | check_http (); |
| 680 | } | 689 | } |
| 681 | else if (sscanf (pos, HDR_LOCATION URI_HTTP URI_HOST URI_PATH, server_type, server_address, server_url) == 3 ) { | 690 | /* HDR_LOCATION URI_HTTP URI_HOST URI_PATH */ |
| 682 | asprintf (&host_name, "%s", server_address); | 691 | else if (sscanf (pos, HD2, server_type, server_address, server_url) == 3 ) { |
| 692 | if (host_name != NULL) free(host_name); | ||
| 693 | host_name = strdup(server_address); | ||
| 683 | use_ssl = server_type_check (server_type); | 694 | use_ssl = server_type_check (server_type); |
| 684 | server_port = server_port_check (use_ssl); | 695 | server_port = server_port_check (use_ssl); |
| 685 | check_http (); | 696 | check_http (); |
| 686 | } | 697 | } |
| 687 | else if (sscanf (pos, HDR_LOCATION URI_HTTP URI_HOST URI_PORT, server_type, server_address, server_port_text) == 3) { | 698 | /* HDR_LOCATION URI_HTTP URI_HOST URI_PORT */ |
| 688 | asprintf (&host_name, "%s", server_address); | 699 | else if(sscanf (pos, HD3, server_type, server_address, server_port_text) == 3) { |
| 700 | if (host_name != NULL) free(host_name); | ||
| 701 | host_name = strdup(server_address); | ||
| 689 | strcpy (server_url, "/"); | 702 | strcpy (server_url, "/"); |
| 690 | use_ssl = server_type_check (server_type); | 703 | use_ssl = server_type_check (server_type); |
| 691 | server_port = atoi (server_port_text); | 704 | server_port = atoi (server_port_text); |
| 692 | check_http (); | 705 | check_http (); |
| 693 | } | 706 | } |
| 694 | else if (sscanf (pos, HDR_LOCATION URI_HTTP URI_HOST, server_type, server_address) == 2) { | 707 | /* HDR_LOCATION URI_HTTP URI_HOST */ |
| 695 | asprintf (&host_name, "%s", server_address); | 708 | else if(sscanf (pos, HD4, server_type, server_address) == 2) { |
| 709 | if (host_name != NULL) free(host_name); | ||
| 710 | host_name = strdup(server_address); | ||
| 696 | strcpy (server_url, "/"); | 711 | strcpy (server_url, "/"); |
| 697 | use_ssl = server_type_check (server_type); | 712 | use_ssl = server_type_check (server_type); |
| 698 | server_port = server_port_check (use_ssl); | 713 | server_port = server_port_check (use_ssl); |
| 699 | check_http (); | 714 | check_http (); |
| 700 | } | 715 | } |
| 701 | else if (sscanf (pos, HDR_LOCATION URI_PATH, server_url) == 1) { | 716 | /* HDR_LOCATION URI_PATH */ |
| 717 | else if (sscanf (pos, HD5, server_url) == 1) { | ||
| 702 | if ((server_url[0] != '/') && (x = strrchr(orig_url, '/'))) { | 718 | if ((server_url[0] != '/') && (x = strrchr(orig_url, '/'))) { |
| 703 | *x = '\0'; | 719 | *x = '\0'; |
| 704 | asprintf (&server_url, "%s/%s", orig_url, server_url); | 720 | asprintf (&server_url, "%s/%s", orig_url, server_url); |
| @@ -721,10 +737,11 @@ check_http (void) | |||
| 721 | printf (_("WARNING")); | 737 | printf (_("WARNING")); |
| 722 | else if (onredirect == STATE_CRITICAL) | 738 | else if (onredirect == STATE_CRITICAL) |
| 723 | printf (_("CRITICAL")); | 739 | printf (_("CRITICAL")); |
| 724 | elapsed_time = delta_time (tv); | 740 | microsec = deltime (tv); |
| 725 | asprintf (&msg, _(" - %s - %.3f second response time %s%s|time=%.3f\n"), | 741 | elapsed_time = (double)microsec / 1.0e6; |
| 742 | asprintf (&msg, _(" - %s - %.3f second response time %s%s|time=%ldus size=%dB\n"), | ||
| 726 | status_line, elapsed_time, timestamp, | 743 | status_line, elapsed_time, timestamp, |
| 727 | (display_html ? "</A>" : ""), elapsed_time); | 744 | (display_html ? "</A>" : ""), microsec, pagesize); |
| 728 | die (onredirect, "%s", msg); | 745 | die (onredirect, "%s", msg); |
| 729 | } /* end if (strstr (status_line, "30[0-4]") */ | 746 | } /* end if (strstr (status_line, "30[0-4]") */ |
| 730 | 747 | ||
| @@ -733,10 +750,11 @@ check_http (void) | |||
| 733 | 750 | ||
| 734 | 751 | ||
| 735 | /* check elapsed time */ | 752 | /* check elapsed time */ |
| 736 | elapsed_time = delta_time (tv); | 753 | microsec = deltime (tv); |
| 737 | asprintf (&msg, _("HTTP problem: %s - %.3f second response time %s%s|time=%.3f\n"), | 754 | elapsed_time = (double)microsec / 1.0e6; |
| 755 | asprintf (&msg, _("HTTP problem: %s - %.3f second response time %s%s|time=%ldus size=%dB\n"), | ||
| 738 | status_line, elapsed_time, timestamp, | 756 | status_line, elapsed_time, timestamp, |
| 739 | (display_html ? "</A>" : ""), elapsed_time); | 757 | (display_html ? "</A>" : ""), microsec, pagesize); |
| 740 | if (check_critical_time == TRUE && elapsed_time > critical_time) | 758 | if (check_critical_time == TRUE && elapsed_time > critical_time) |
| 741 | die (STATE_CRITICAL, "%s", msg); | 759 | die (STATE_CRITICAL, "%s", msg); |
| 742 | if (check_warning_time == TRUE && elapsed_time > warning_time) | 760 | if (check_warning_time == TRUE && elapsed_time > warning_time) |
| @@ -747,14 +765,14 @@ check_http (void) | |||
| 747 | 765 | ||
| 748 | if (strlen (string_expect)) { | 766 | if (strlen (string_expect)) { |
| 749 | if (strstr (page, string_expect)) { | 767 | if (strstr (page, string_expect)) { |
| 750 | printf (_("HTTP OK %s - %.3f second response time %s%s|time=%.3f\n"), | 768 | printf (_("HTTP OK %s - %.3f second response time %s%s|time=%ldus size=%dB\n"), |
| 751 | status_line, elapsed_time, | 769 | status_line, elapsed_time, |
| 752 | timestamp, (display_html ? "</A>" : ""), elapsed_time); | 770 | timestamp, (display_html ? "</A>" : ""), microsec, pagesize); |
| 753 | exit (STATE_OK); | 771 | exit (STATE_OK); |
| 754 | } | 772 | } |
| 755 | else { | 773 | else { |
| 756 | printf (_("CRITICAL - string not found%s|time=%.3f\n"), | 774 | printf (_("CRITICAL - string not found%s|time=%ldus\n size=%dB"), |
| 757 | (display_html ? "</A>" : ""), elapsed_time); | 775 | (display_html ? "</A>" : ""), microsec, pagesize); |
| 758 | exit (STATE_CRITICAL); | 776 | exit (STATE_CRITICAL); |
| 759 | } | 777 | } |
| 760 | } | 778 | } |
| @@ -762,15 +780,15 @@ check_http (void) | |||
| 762 | if (strlen (regexp)) { | 780 | if (strlen (regexp)) { |
| 763 | errcode = regexec (&preg, page, REGS, pmatch, 0); | 781 | errcode = regexec (&preg, page, REGS, pmatch, 0); |
| 764 | if (errcode == 0) { | 782 | if (errcode == 0) { |
| 765 | printf (_("HTTP OK %s - %.3f second response time %s%s|time=%.3f\n"), | 783 | printf (_("HTTP OK %s - %.3f second response time %s%s|time=%ldus size=%dB\n"), |
| 766 | status_line, elapsed_time, | 784 | status_line, elapsed_time, |
| 767 | timestamp, (display_html ? "</A>" : ""), elapsed_time); | 785 | timestamp, (display_html ? "</A>" : ""), microsec, pagesize); |
| 768 | exit (STATE_OK); | 786 | exit (STATE_OK); |
| 769 | } | 787 | } |
| 770 | else { | 788 | else { |
| 771 | if (errcode == REG_NOMATCH) { | 789 | if (errcode == REG_NOMATCH) { |
| 772 | printf (_("CRITICAL - pattern not found%s|time=%.3f\n"), | 790 | printf (_("CRITICAL - pattern not found%s|time=%ldus size=%dB\n"), |
| 773 | (display_html ? "</A>" : ""), elapsed_time); | 791 | (display_html ? "</A>" : ""), microsec, pagesize); |
| 774 | exit (STATE_CRITICAL); | 792 | exit (STATE_CRITICAL); |
| 775 | } | 793 | } |
| 776 | else { | 794 | else { |
| @@ -790,9 +808,9 @@ check_http (void) | |||
| 790 | exit (STATE_WARNING); | 808 | exit (STATE_WARNING); |
| 791 | } | 809 | } |
| 792 | /* We only get here if all tests have been passed */ | 810 | /* We only get here if all tests have been passed */ |
| 793 | asprintf (&msg, _("HTTP OK %s - %.3f second response time %s%s|time=%.3f\n"), | 811 | asprintf (&msg, _("HTTP OK %s - %.3f second response time %s%s|time=%ldus size=%dB\n"), |
| 794 | status_line, (float)elapsed_time, | 812 | status_line, elapsed_time, |
| 795 | timestamp, (display_html ? "</A>" : ""), elapsed_time); | 813 | timestamp, (display_html ? "</A>" : ""), microsec, pagesize); |
| 796 | die (STATE_OK, "%s", msg); | 814 | die (STATE_OK, "%s", msg); |
| 797 | return STATE_UNKNOWN; | 815 | return STATE_UNKNOWN; |
| 798 | } | 816 | } |
