diff options
Diffstat (limited to 'plugins/check_http.c')
-rw-r--r-- | plugins/check_http.c | 303 |
1 files changed, 144 insertions, 159 deletions
diff --git a/plugins/check_http.c b/plugins/check_http.c index 2f693328..c1016bb0 100644 --- a/plugins/check_http.c +++ b/plugins/check_http.c | |||
@@ -24,115 +24,139 @@ | |||
24 | *****************************************************************************/ | 24 | *****************************************************************************/ |
25 | 25 | ||
26 | const char *progname = "check_http"; | 26 | const char *progname = "check_http"; |
27 | #define REVISION "$Revision$" | 27 | const char *revision = "$Revision$"; |
28 | #define COPYRIGHT "1999-2001" | 28 | const char *copyright = "1999-2001"; |
29 | #define AUTHORS "Ethan Galstad/Karl DeBisschop" | 29 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; |
30 | #define EMAIL "kdebisschop@users.sourceforge.net" | ||
31 | 30 | ||
32 | #include "config.h" | ||
33 | #include "common.h" | 31 | #include "common.h" |
34 | #include "netutils.h" | 32 | #include "netutils.h" |
35 | #include "utils.h" | 33 | #include "utils.h" |
36 | 34 | ||
37 | #define SUMMARY "\ | 35 | #define HTTP_EXPECT "HTTP/1." |
36 | enum { | ||
37 | MAX_IPV4_HOSTLENGTH = 255, | ||
38 | HTTP_PORT = 80, | ||
39 | HTTPS_PORT = 443 | ||
40 | }; | ||
41 | |||
42 | void | ||
43 | print_usage (void) | ||
44 | { | ||
45 | printf (_("\ | ||
46 | Usage: %s (-H <vhost> | -I <IP-address>) [-u <uri>] [-p <port>]\n\ | ||
47 | [-w <warn time>] [-c <critical time>] [-t <timeout>] [-L]\n\ | ||
48 | [-a auth] [-f <ok | warn | critcal | follow>] [-e <expect>]\n\ | ||
49 | [-s string] [-l] [-r <regex> | -R <case-insensitive regex>]\n\ | ||
50 | [-P string] [-m min_pg_size] [-4|-6]\n"), progname); | ||
51 | printf (_(UT_HLP_VRS), progname, progname); | ||
52 | } | ||
53 | |||
54 | void | ||
55 | print_help (void) | ||
56 | { | ||
57 | print_revision (progname, revision); | ||
58 | |||
59 | printf (_(COPYRIGHT), copyright, email); | ||
60 | |||
61 | printf (_("\ | ||
38 | This plugin tests the HTTP service on the specified host. It can test\n\ | 62 | This plugin tests the HTTP service on the specified host. It can test\n\ |
39 | normal (http) and secure (https) servers, follow redirects, search for\n\ | 63 | normal (http) and secure (https) servers, follow redirects, search for\n\ |
40 | strings and regular expressions, check connection times, and report on\n\ | 64 | strings and regular expressions, check connection times, and report on\n\ |
41 | certificate expiration times.\n" | 65 | certificate expiration times.\n")); |
66 | |||
67 | print_usage (); | ||
42 | 68 | ||
43 | #define OPTIONS "\ | 69 | printf (_("NOTE: One or both of -H and -I must be specified\n")); |
44 | (-H <vhost> | -I <IP-address>) [-u <uri>] [-p <port>]\n\ | ||
45 | [-w <warn time>] [-c <critical time>] [-t <timeout>] [-L]\n\ | ||
46 | [-a auth] [-f <ok | warn | critcal | follow>] [-e <expect>]\n\ | ||
47 | [-s string] [-l] [-r <regex> | -R <case-insensitive regex>]\n\ | ||
48 | [-P string] [-m min_pg_size] [-4|-6]" | ||
49 | 70 | ||
50 | #define LONGOPTIONS "\ | 71 | printf (_(UT_HELP_VRSN)); |
72 | |||
73 | printf (_("\ | ||
51 | -H, --hostname=ADDRESS\n\ | 74 | -H, --hostname=ADDRESS\n\ |
52 | Host name argument for servers using host headers (virtual host)\n\ | 75 | Host name argument for servers using host headers (virtual host)\n\ |
53 | -I, --IP-address=ADDRESS\n\ | 76 | -I, --IP-address=ADDRESS\n\ |
54 | IP address or name (use numeric address if possible to bypass DNS lookup).\n\ | 77 | IP address or name (use numeric address if possible to bypass DNS lookup).\n\ |
55 | -4, --use-ipv4\n\ | ||
56 | Use IPv4 protocol\n\ | ||
57 | -6, --use-ipv6\n\ | ||
58 | Use IPv6 protocol\n\ | ||
59 | -e, --expect=STRING\n\ | ||
60 | String to expect in first (status) line of server response (default: %s)\n\ | ||
61 | If specified skips all other status line logic (ex: 3xx, 4xx, 5xx processing)\n\ | ||
62 | -s, --string=STRING\n\ | ||
63 | String to expect in the content\n\ | ||
64 | -u, --url=PATH\n\ | ||
65 | URL to GET or POST (default: /)\n\ | ||
66 | -p, --port=INTEGER\n\ | 78 | -p, --port=INTEGER\n\ |
67 | Port number (default: %d)\n\ | 79 | Port number (default: %d)\n"), HTTP_PORT); |
68 | -P, --post=STRING\n\ | 80 | |
69 | URL encoded http POST data\n\ | 81 | printf (_(UT_IPv46)); |
70 | -w, --warning=INTEGER\n\ | ||
71 | Response time to result in warning status (seconds)\n\ | ||
72 | -c, --critical=INTEGER\n\ | ||
73 | Response time to result in critical status (seconds)\n\ | ||
74 | -t, --timeout=INTEGER\n\ | ||
75 | Seconds before connection times out (default: %d)\n\ | ||
76 | -a, --authorization=AUTH_PAIR\n\ | ||
77 | Username:password on sites with basic authentication\n\ | ||
78 | -L, --link=URL\n\ | ||
79 | Wrap output in HTML link (obsoleted by urlize)\n\ | ||
80 | -f, --onredirect=<ok|warning|critical|follow>\n\ | ||
81 | How to handle redirected pages\n%s%s\ | ||
82 | -m, --min=INTEGER\n\ | ||
83 | Minimum page size required (bytes)\n\ | ||
84 | -v, --verbose\n\ | ||
85 | Show details for command-line debugging (do not use with nagios server)\n\ | ||
86 | -h, --help\n\ | ||
87 | Print detailed help screen\n\ | ||
88 | -V, --version\n\ | ||
89 | Print version information\n" | ||
90 | 82 | ||
91 | #ifdef HAVE_SSL | 83 | #ifdef HAVE_SSL |
92 | #define SSLOPTIONS "\ | 84 | printf (_("\ |
93 | -S, --ssl\n\ | 85 | -S, --ssl\n\ |
94 | Connect via SSL\n\ | 86 | Connect via SSL\n\ |
95 | -C, --certificate=INTEGER\n\ | 87 | -C, --certificate=INTEGER\n\ |
96 | Minimum number of days a certificate has to be valid.\n\ | 88 | Minimum number of days a certificate has to be valid.\n\ |
97 | (when this option is used the url is not checked.)\n" | 89 | (when this option is used the url is not checked.)\n")); |
98 | #else | ||
99 | #define SSLOPTIONS "" | ||
100 | #endif | 90 | #endif |
101 | 91 | ||
92 | printf (_("\ | ||
93 | -e, --expect=STRING\n\ | ||
94 | String to expect in first (status) line of server response (default: %s)\n\ | ||
95 | If specified skips all other status line logic (ex: 3xx, 4xx, 5xx processing)\n\ | ||
96 | -s, --string=STRING\n\ | ||
97 | String to expect in the content\n\ | ||
98 | -u, --url=PATH\n\ | ||
99 | URL to GET or POST (default: /)\n\ | ||
100 | -P, --post=STRING\n\ | ||
101 | URL encoded http POST data\n"), HTTP_EXPECT); | ||
102 | |||
102 | #ifdef HAVE_REGEX_H | 103 | #ifdef HAVE_REGEX_H |
103 | #define REGOPTIONS "\ | 104 | printf (_("\ |
104 | -l, --linespan\n\ | 105 | -l, --linespan\n\ |
105 | Allow regex to span newlines (must precede -r or -R)\n\ | 106 | Allow regex to span newlines (must precede -r or -R)\n\ |
106 | -r, --regex, --ereg=STRING\n\ | 107 | -r, --regex, --ereg=STRING\n\ |
107 | Search page for regex STRING\n\ | 108 | Search page for regex STRING\n\ |
108 | -R, --eregi=STRING\n\ | 109 | -R, --eregi=STRING\n\ |
109 | Search page for case-insensitive regex STRING\n" | 110 | Search page for case-insensitive regex STRING\n")); |
110 | #else | ||
111 | #define REGOPTIONS "" | ||
112 | #endif | 111 | #endif |
113 | 112 | ||
114 | #define DESCRIPTION "\ | 113 | printf (_("\ |
115 | This plugin will attempt to open an HTTP connection with the host. Successul\n\ | 114 | -a, --authorization=AUTH_PAIR\n\ |
115 | Username:password on sites with basic authentication\n\ | ||
116 | -L, --link=URL\n\ | ||
117 | Wrap output in HTML link (obsoleted by urlize)\n\ | ||
118 | -f, --onredirect=<ok|warning|critical|follow>\n\ | ||
119 | How to handle redirected pages\n\ | ||
120 | -m, --min=INTEGER\n\ | ||
121 | Minimum page size required (bytes)\n")); | ||
122 | |||
123 | printf (_(UT_WARN_CRIT)); | ||
124 | |||
125 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | ||
126 | |||
127 | printf (_(UT_VERBOSE)); | ||
128 | |||
129 | printf (_("\ | ||
130 | This plugin will attempt to open an HTTP connection with the host. Successful\n\ | ||
116 | connects return STATE_OK, refusals and timeouts return STATE_CRITICAL, other\n\ | 131 | connects return STATE_OK, refusals and timeouts return STATE_CRITICAL, other\n\ |
117 | errors return STATE_UNKNOWN. Successful connects, but incorrect reponse\n\ | 132 | errors return STATE_UNKNOWN. Successful connects, but incorrect reponse\n\ |
118 | messages from the host result in STATE_WARNING return values. If you are\n\ | 133 | messages from the host result in STATE_WARNING return values. If you are\n\ |
119 | checking a virtual server that uses \"host headers\" you must supply the FQDN\n\ | 134 | checking a virtual server that uses 'host headers' you must supply the FQDN\n\ |
120 | \(fully qualified domain name) as the [host_name] argument.\n" | 135 | (fully qualified domain name) as the [host_name] argument.\n")); |
121 | 136 | ||
122 | #define SSLDESCRIPTION "\ | 137 | #ifdef HAVE_SSL |
138 | printf (_("\n\ | ||
123 | This plugin can also check whether an SSL enabled web server is able to\n\ | 139 | This plugin can also check whether an SSL enabled web server is able to\n\ |
124 | serve content (optionally within a specified time) or whether the X509 \n\ | 140 | serve content (optionally within a specified time) or whether the X509 \n\ |
125 | certificate is still valid for the specified number of days.\n\n\ | 141 | certificate is still valid for the specified number of days.\n")); |
142 | printf (_("\n\ | ||
126 | CHECK CONTENT: check_http -w 5 -c 10 --ssl www.verisign.com\n\n\ | 143 | CHECK CONTENT: check_http -w 5 -c 10 --ssl www.verisign.com\n\n\ |
127 | When the 'www.verisign.com' server returns its content within 5 seconds, a\n\ | 144 | When the 'www.verisign.com' server returns its content within 5 seconds, a\n\ |
128 | STATE_OK will be returned. When the server returns its content but exceeds\n\ | 145 | STATE_OK will be returned. When the server returns its content but exceeds\n\ |
129 | the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,\n\ | 146 | the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,\n\ |
130 | a STATE_CRITICAL will be returned.\n\n\ | 147 | a STATE_CRITICAL will be returned.\n\n")); |
148 | |||
149 | printf (_("\ | ||
131 | CHECK CERTIFICATE: check_http www.verisign.com -C 14\n\n\ | 150 | CHECK CERTIFICATE: check_http www.verisign.com -C 14\n\n\ |
132 | When the certificate of 'www.verisign.com' is valid for more than 14 days, a\n\ | 151 | When the certificate of 'www.verisign.com' is valid for more than 14 days, a\n\ |
133 | STATE_OK is returned. When the certificate is still valid, but for less than\n\ | 152 | STATE_OK is returned. When the certificate is still valid, but for less than\n\ |
134 | 14 days, a STATE_WARNING is returned. A STATE_CRITICAL will be returned when\n\ | 153 | 14 days, a STATE_WARNING is returned. A STATE_CRITICAL will be returned when\n\ |
135 | the certificate is expired.\n" | 154 | the certificate is expired.\n")); |
155 | #endif | ||
156 | |||
157 | printf (_(UT_SUPPORT)); | ||
158 | |||
159 | } | ||
136 | 160 | ||
137 | #ifdef HAVE_SSL_H | 161 | #ifdef HAVE_SSL_H |
138 | #include <rsa.h> | 162 | #include <rsa.h> |
@@ -194,13 +218,6 @@ struct timeval tv; | |||
194 | #define URI_PORT ":%[0123456789]" | 218 | #define URI_PORT ":%[0123456789]" |
195 | #define URI_PATH "%[-_.!~*'();/?:@&=+$,%#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]" | 219 | #define URI_PATH "%[-_.!~*'();/?:@&=+$,%#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]" |
196 | 220 | ||
197 | enum { | ||
198 | MAX_IPV4_HOSTLENGTH = 255, | ||
199 | HTTP_PORT = 80, | ||
200 | HTTPS_PORT = 443 | ||
201 | }; | ||
202 | |||
203 | #define HTTP_EXPECT "HTTP/1." | ||
204 | #define HTTP_URL "/" | 221 | #define HTTP_URL "/" |
205 | #define CRLF "\r\n" | 222 | #define CRLF "\r\n" |
206 | 223 | ||
@@ -231,8 +248,6 @@ char *http_method = "GET"; | |||
231 | char *http_post_data = ""; | 248 | char *http_post_data = ""; |
232 | char buffer[MAX_INPUT_BUFFER]; | 249 | char buffer[MAX_INPUT_BUFFER]; |
233 | 250 | ||
234 | void print_usage (void); | ||
235 | void print_help (void); | ||
236 | int process_arguments (int, char **); | 251 | int process_arguments (int, char **); |
237 | static char *base64 (char *bin, int len); | 252 | static char *base64 (char *bin, int len); |
238 | int check_http (void); | 253 | int check_http (void); |
@@ -249,7 +264,7 @@ main (int argc, char **argv) | |||
249 | server_url_length = strlen(server_url); | 264 | server_url_length = strlen(server_url); |
250 | 265 | ||
251 | if (process_arguments (argc, argv) == ERROR) | 266 | if (process_arguments (argc, argv) == ERROR) |
252 | usage ("check_http: could not parse arguments\n"); | 267 | usage (_("check_http: could not parse arguments\n")); |
253 | 268 | ||
254 | if (strstr (timestamp, ":")) { | 269 | if (strstr (timestamp, ":")) { |
255 | if (strstr (server_url, "?")) | 270 | if (strstr (server_url, "?")) |
@@ -271,13 +286,13 @@ main (int argc, char **argv) | |||
271 | if (use_ssl && check_cert == TRUE) { | 286 | if (use_ssl && check_cert == TRUE) { |
272 | if (connect_SSL () != OK) | 287 | if (connect_SSL () != OK) |
273 | terminate (STATE_CRITICAL, | 288 | terminate (STATE_CRITICAL, |
274 | "HTTP CRITICAL - Could not make SSL connection\n"); | 289 | _("HTTP CRITICAL - Could not make SSL connection\n")); |
275 | if ((server_cert = SSL_get_peer_certificate (ssl)) != NULL) { | 290 | if ((server_cert = SSL_get_peer_certificate (ssl)) != NULL) { |
276 | result = check_certificate (&server_cert); | 291 | result = check_certificate (&server_cert); |
277 | X509_free (server_cert); | 292 | X509_free (server_cert); |
278 | } | 293 | } |
279 | else { | 294 | else { |
280 | printf ("ERROR: Cannot retrieve server certificate.\n"); | 295 | printf (_("ERROR: Cannot retrieve server certificate.\n")); |
281 | result = STATE_CRITICAL; | 296 | result = STATE_CRITICAL; |
282 | } | 297 | } |
283 | SSL_shutdown (ssl); | 298 | SSL_shutdown (ssl); |
@@ -348,30 +363,30 @@ process_arguments (int argc, char **argv) | |||
348 | 363 | ||
349 | switch (c) { | 364 | switch (c) { |
350 | case '?': /* usage */ | 365 | case '?': /* usage */ |
351 | usage3 ("unknown argument", optopt); | 366 | usage3 (_("unknown argument"), optopt); |
352 | break; | 367 | break; |
353 | case 'h': /* help */ | 368 | case 'h': /* help */ |
354 | print_help (); | 369 | print_help (); |
355 | exit (STATE_OK); | 370 | exit (STATE_OK); |
356 | break; | 371 | break; |
357 | case 'V': /* version */ | 372 | case 'V': /* version */ |
358 | print_revision (progname, REVISION); | 373 | print_revision (progname, revision); |
359 | exit (STATE_OK); | 374 | exit (STATE_OK); |
360 | break; | 375 | break; |
361 | case 't': /* timeout period */ | 376 | case 't': /* timeout period */ |
362 | if (!is_intnonneg (optarg)) | 377 | if (!is_intnonneg (optarg)) |
363 | usage2 ("timeout interval must be a non-negative integer", optarg); | 378 | usage2 (_("timeout interval must be a non-negative integer"), optarg); |
364 | socket_timeout = atoi (optarg); | 379 | socket_timeout = atoi (optarg); |
365 | break; | 380 | break; |
366 | case 'c': /* critical time threshold */ | 381 | case 'c': /* critical time threshold */ |
367 | if (!is_intnonneg (optarg)) | 382 | if (!is_intnonneg (optarg)) |
368 | usage2 ("invalid critical threshold", optarg); | 383 | usage2 (_("invalid critical threshold"), optarg); |
369 | critical_time = strtod (optarg, NULL); | 384 | critical_time = strtod (optarg, NULL); |
370 | check_critical_time = TRUE; | 385 | check_critical_time = TRUE; |
371 | break; | 386 | break; |
372 | case 'w': /* warning time threshold */ | 387 | case 'w': /* warning time threshold */ |
373 | if (!is_intnonneg (optarg)) | 388 | if (!is_intnonneg (optarg)) |
374 | usage2 ("invalid warning threshold", optarg); | 389 | usage2 (_("invalid warning threshold"), optarg); |
375 | warning_time = strtod (optarg, NULL); | 390 | warning_time = strtod (optarg, NULL); |
376 | check_warning_time = TRUE; | 391 | check_warning_time = TRUE; |
377 | break; | 392 | break; |
@@ -383,7 +398,7 @@ process_arguments (int argc, char **argv) | |||
383 | break; | 398 | break; |
384 | case 'S': /* use SSL */ | 399 | case 'S': /* use SSL */ |
385 | #ifndef HAVE_SSL | 400 | #ifndef HAVE_SSL |
386 | usage ("check_http: invalid option - SSL is not available\n"); | 401 | usage (_("check_http: invalid option - SSL is not available\n")); |
387 | #endif | 402 | #endif |
388 | use_ssl = TRUE; | 403 | use_ssl = TRUE; |
389 | if (specify_port == FALSE) | 404 | if (specify_port == FALSE) |
@@ -392,11 +407,11 @@ process_arguments (int argc, char **argv) | |||
392 | case 'C': /* Check SSL cert validity */ | 407 | case 'C': /* Check SSL cert validity */ |
393 | #ifdef HAVE_SSL | 408 | #ifdef HAVE_SSL |
394 | if (!is_intnonneg (optarg)) | 409 | if (!is_intnonneg (optarg)) |
395 | usage2 ("invalid certificate expiration period", optarg); | 410 | usage2 (_("invalid certificate expiration period"), optarg); |
396 | days_till_exp = atoi (optarg); | 411 | days_till_exp = atoi (optarg); |
397 | check_cert = TRUE; | 412 | check_cert = TRUE; |
398 | #else | 413 | #else |
399 | usage ("check_http: invalid option - SSL is not available\n"); | 414 | usage (_("check_http: invalid option - SSL is not available\n")); |
400 | #endif | 415 | #endif |
401 | break; | 416 | break; |
402 | case 'f': /* onredirect */ | 417 | case 'f': /* onredirect */ |
@@ -411,7 +426,7 @@ process_arguments (int argc, char **argv) | |||
411 | if (!strcmp (optarg, "critical")) | 426 | if (!strcmp (optarg, "critical")) |
412 | onredirect = STATE_CRITICAL; | 427 | onredirect = STATE_CRITICAL; |
413 | if (verbose) | 428 | if (verbose) |
414 | printf("option f:%d \n", onredirect); | 429 | printf(_("option f:%d \n"), onredirect); |
415 | break; | 430 | break; |
416 | /* Note: H, I, and u must be malloc'd or will fail on redirects */ | 431 | /* Note: H, I, and u must be malloc'd or will fail on redirects */ |
417 | case 'H': /* Host Name (virtual host) */ | 432 | case 'H': /* Host Name (virtual host) */ |
@@ -426,7 +441,7 @@ process_arguments (int argc, char **argv) | |||
426 | break; | 441 | break; |
427 | case 'p': /* Host or server */ | 442 | case 'p': /* Host or server */ |
428 | if (!is_intnonneg (optarg)) | 443 | if (!is_intnonneg (optarg)) |
429 | usage2 ("invalid port number", optarg); | 444 | usage2 (_("invalid port number"), optarg); |
430 | server_port = atoi (optarg); | 445 | server_port = atoi (optarg); |
431 | specify_port = TRUE; | 446 | specify_port = TRUE; |
432 | break; | 447 | break; |
@@ -451,7 +466,7 @@ process_arguments (int argc, char **argv) | |||
451 | case 'l': /* linespan */ | 466 | case 'l': /* linespan */ |
452 | case 'r': /* linespan */ | 467 | case 'r': /* linespan */ |
453 | case 'R': /* linespan */ | 468 | case 'R': /* linespan */ |
454 | usage ("check_http: call for regex which was not a compiled option\n"); | 469 | usage (_("check_http: call for regex which was not a compiled option\n")); |
455 | break; | 470 | break; |
456 | #else | 471 | #else |
457 | case 'l': /* linespan */ | 472 | case 'l': /* linespan */ |
@@ -465,7 +480,7 @@ process_arguments (int argc, char **argv) | |||
465 | errcode = regcomp (&preg, regexp, cflags); | 480 | errcode = regcomp (&preg, regexp, cflags); |
466 | if (errcode != 0) { | 481 | if (errcode != 0) { |
467 | (void) regerror (errcode, &preg, errbuf, MAX_INPUT_BUFFER); | 482 | (void) regerror (errcode, &preg, errbuf, MAX_INPUT_BUFFER); |
468 | printf ("Could Not Compile Regular Expression: %s", errbuf); | 483 | printf (_("Could Not Compile Regular Expression: %s"), errbuf); |
469 | return ERROR; | 484 | return ERROR; |
470 | } | 485 | } |
471 | break; | 486 | break; |
@@ -477,7 +492,7 @@ process_arguments (int argc, char **argv) | |||
477 | #ifdef USE_IPV6 | 492 | #ifdef USE_IPV6 |
478 | address_family = AF_INET6; | 493 | address_family = AF_INET6; |
479 | #else | 494 | #else |
480 | usage ("IPv6 support not available\n"); | 495 | usage (_("IPv6 support not available\n")); |
481 | #endif | 496 | #endif |
482 | break; | 497 | break; |
483 | case 'v': /* verbose */ | 498 | case 'v': /* verbose */ |
@@ -499,7 +514,7 @@ process_arguments (int argc, char **argv) | |||
499 | 514 | ||
500 | if (strcmp (server_address ,"") == 0) { | 515 | if (strcmp (server_address ,"") == 0) { |
501 | if (strcmp (host_name, "") == 0) | 516 | if (strcmp (host_name, "") == 0) |
502 | usage ("check_http: you must specify a server address or host name\n"); | 517 | usage (_("check_http: you must specify a server address or host name\n")); |
503 | else | 518 | else |
504 | asprintf (&server_address, "%s", host_name); | 519 | asprintf (&server_address, "%s", host_name); |
505 | } | 520 | } |
@@ -580,14 +595,14 @@ check_http (void) | |||
580 | if (use_ssl == TRUE) { | 595 | if (use_ssl == TRUE) { |
581 | 596 | ||
582 | if (connect_SSL () != OK) { | 597 | if (connect_SSL () != OK) { |
583 | terminate (STATE_CRITICAL, "Unable to open TCP socket"); | 598 | terminate (STATE_CRITICAL, _("Unable to open TCP socket")); |
584 | } | 599 | } |
585 | 600 | ||
586 | if ((server_cert = SSL_get_peer_certificate (ssl)) != NULL) { | 601 | if ((server_cert = SSL_get_peer_certificate (ssl)) != NULL) { |
587 | X509_free (server_cert); | 602 | X509_free (server_cert); |
588 | } | 603 | } |
589 | else { | 604 | else { |
590 | printf ("ERROR: Cannot retrieve server certificate.\n"); | 605 | printf (_("ERROR: Cannot retrieve server certificate.\n")); |
591 | return STATE_CRITICAL; | 606 | return STATE_CRITICAL; |
592 | } | 607 | } |
593 | 608 | ||
@@ -595,7 +610,7 @@ check_http (void) | |||
595 | else { | 610 | else { |
596 | #endif | 611 | #endif |
597 | if (my_tcp_connect (server_address, server_port, &sd) != STATE_OK) | 612 | if (my_tcp_connect (server_address, server_port, &sd) != STATE_OK) |
598 | terminate (STATE_CRITICAL, "Unable to open TCP socket"); | 613 | terminate (STATE_CRITICAL, _("Unable to open TCP socket")); |
599 | #ifdef HAVE_SSL | 614 | #ifdef HAVE_SSL |
600 | } | 615 | } |
601 | #endif | 616 | #endif |
@@ -608,7 +623,7 @@ check_http (void) | |||
608 | 623 | ||
609 | /* send user agent */ | 624 | /* send user agent */ |
610 | asprintf (&buf, "%sUser-Agent: check_http/%s (nagios-plugins %s)\r\n", | 625 | asprintf (&buf, "%sUser-Agent: check_http/%s (nagios-plugins %s)\r\n", |
611 | buf, clean_revstring (REVISION), PACKAGE_VERSION); | 626 | buf, clean_revstring (revision), VERSION); |
612 | 627 | ||
613 | /* optionally send the authentication info */ | 628 | /* optionally send the authentication info */ |
614 | if (strcmp (user_auth, "")) { | 629 | if (strcmp (user_auth, "")) { |
@@ -653,14 +668,14 @@ check_http (void) | |||
653 | if (use_ssl) { | 668 | if (use_ssl) { |
654 | sslerr=SSL_get_error(ssl, i); | 669 | sslerr=SSL_get_error(ssl, i); |
655 | if ( sslerr == SSL_ERROR_SSL ) { | 670 | if ( sslerr == SSL_ERROR_SSL ) { |
656 | terminate (STATE_WARNING, "Client Certificate Required\n"); | 671 | terminate (STATE_WARNING, _("Client Certificate Required\n")); |
657 | } else { | 672 | } else { |
658 | terminate (STATE_CRITICAL, "Error in recv()"); | 673 | terminate (STATE_CRITICAL, _("Error in recv()")); |
659 | } | 674 | } |
660 | } | 675 | } |
661 | else { | 676 | else { |
662 | #endif | 677 | #endif |
663 | terminate (STATE_CRITICAL, "Error in recv()"); | 678 | terminate (STATE_CRITICAL, _("Error in recv()")); |
664 | #ifdef HAVE_SSL | 679 | #ifdef HAVE_SSL |
665 | } | 680 | } |
666 | #endif | 681 | #endif |
@@ -668,7 +683,7 @@ check_http (void) | |||
668 | 683 | ||
669 | /* return a CRITICAL status if we couldn't read any data */ | 684 | /* return a CRITICAL status if we couldn't read any data */ |
670 | if (pagesize == (size_t) 0) | 685 | if (pagesize == (size_t) 0) |
671 | terminate (STATE_CRITICAL, "No data received %s", timestamp); | 686 | terminate (STATE_CRITICAL, _("No data received %s"), timestamp); |
672 | 687 | ||
673 | /* close the connection */ | 688 | /* close the connection */ |
674 | my_close (); | 689 | my_close (); |
@@ -711,10 +726,10 @@ check_http (void) | |||
711 | /* make sure the status line matches the response we are looking for */ | 726 | /* make sure the status line matches the response we are looking for */ |
712 | if (!strstr (status_line, server_expect)) { | 727 | if (!strstr (status_line, server_expect)) { |
713 | if (server_port == HTTP_PORT) | 728 | if (server_port == HTTP_PORT) |
714 | asprintf (&msg, "Invalid HTTP response received from host\n"); | 729 | asprintf (&msg, _("Invalid HTTP response received from host\n")); |
715 | else | 730 | else |
716 | asprintf (&msg, | 731 | asprintf (&msg, |
717 | "Invalid HTTP response received from host on port %d\n", | 732 | _("Invalid HTTP response received from host on port %d\n"), |
718 | server_port); | 733 | server_port); |
719 | terminate (STATE_CRITICAL, msg); | 734 | terminate (STATE_CRITICAL, msg); |
720 | } | 735 | } |
@@ -722,7 +737,7 @@ check_http (void) | |||
722 | 737 | ||
723 | /* Exit here if server_expect was set by user and not default */ | 738 | /* Exit here if server_expect was set by user and not default */ |
724 | if ( server_expect_yn ) { | 739 | if ( server_expect_yn ) { |
725 | asprintf (&msg, "HTTP OK: Status line output matched \"%s\"\n", | 740 | asprintf (&msg, _("HTTP OK: Status line output matched \"%s\"\n"), |
726 | server_expect); | 741 | server_expect); |
727 | if (verbose) | 742 | if (verbose) |
728 | printf ("%s\n",msg); | 743 | printf ("%s\n",msg); |
@@ -737,7 +752,7 @@ check_http (void) | |||
737 | strstr (status_line, "501") || | 752 | strstr (status_line, "501") || |
738 | strstr (status_line, "502") || | 753 | strstr (status_line, "502") || |
739 | strstr (status_line, "503")) { | 754 | strstr (status_line, "503")) { |
740 | terminate (STATE_CRITICAL, "HTTP CRITICAL: %s\n", status_line); | 755 | terminate (STATE_CRITICAL, _("HTTP CRITICAL: %s\n"), status_line); |
741 | } | 756 | } |
742 | 757 | ||
743 | /* client errors result in a warning state */ | 758 | /* client errors result in a warning state */ |
@@ -746,7 +761,7 @@ check_http (void) | |||
746 | strstr (status_line, "402") || | 761 | strstr (status_line, "402") || |
747 | strstr (status_line, "403") || | 762 | strstr (status_line, "403") || |
748 | strstr (status_line, "404")) { | 763 | strstr (status_line, "404")) { |
749 | terminate (STATE_WARNING, "HTTP WARNING: %s\n", status_line); | 764 | terminate (STATE_WARNING, _("HTTP WARNING: %s\n"), status_line); |
750 | } | 765 | } |
751 | 766 | ||
752 | /* check redirected page if specified */ | 767 | /* check redirected page if specified */ |
@@ -763,12 +778,12 @@ check_http (void) | |||
763 | server_address = realloc (server_address, MAX_IPV4_HOSTLENGTH + 1); | 778 | server_address = realloc (server_address, MAX_IPV4_HOSTLENGTH + 1); |
764 | if (server_address == NULL) | 779 | if (server_address == NULL) |
765 | terminate (STATE_UNKNOWN, | 780 | terminate (STATE_UNKNOWN, |
766 | "HTTP UNKNOWN: could not allocate server_address"); | 781 | _("HTTP UNKNOWN: could not allocate server_address")); |
767 | if (strcspn (pos, "\r\n") > server_url_length) { | 782 | if (strcspn (pos, "\r\n") > (size_t)server_url_length) { |
768 | server_url = realloc (server_url, strcspn (pos, "\r\n")); | 783 | server_url = realloc (server_url, strcspn (pos, "\r\n")); |
769 | if (server_url == NULL) | 784 | if (server_url == NULL) |
770 | terminate (STATE_UNKNOWN, | 785 | terminate (STATE_UNKNOWN, |
771 | "HTTP UNKNOWN: could not allocate server_url"); | 786 | _("HTTP UNKNOWN: could not allocate server_url")); |
772 | server_url_length = strcspn (pos, "\r\n"); | 787 | server_url_length = strcspn (pos, "\r\n"); |
773 | } | 788 | } |
774 | if (sscanf (pos, HDR_LOCATION URI_HTTP URI_HOST URI_PORT URI_PATH, server_type, server_address, server_port_text, server_url) == 4) { | 789 | if (sscanf (pos, HDR_LOCATION URI_HTTP URI_HOST URI_PORT URI_PATH, server_type, server_address, server_port_text, server_url) == 4) { |
@@ -807,21 +822,21 @@ check_http (void) | |||
807 | pos += (size_t) strcspn (pos, "\r\n"); | 822 | pos += (size_t) strcspn (pos, "\r\n"); |
808 | pos += (size_t) strspn (pos, "\r\n"); | 823 | pos += (size_t) strspn (pos, "\r\n"); |
809 | } /* end while (pos) */ | 824 | } /* end while (pos) */ |
810 | printf ("UNKNOWN - Could not find redirect location - %s%s", | 825 | printf (_("UNKNOWN - Could not find redirect location - %s%s"), |
811 | status_line, (display_html ? "</A>" : "")); | 826 | status_line, (display_html ? "</A>" : "")); |
812 | exit (STATE_UNKNOWN); | 827 | exit (STATE_UNKNOWN); |
813 | } /* end if (onredirect == STATE_DEPENDENT) */ | 828 | } /* end if (onredirect == STATE_DEPENDENT) */ |
814 | 829 | ||
815 | else if (onredirect == STATE_UNKNOWN) | 830 | else if (onredirect == STATE_UNKNOWN) |
816 | printf ("UNKNOWN"); | 831 | printf (_("UNKNOWN")); |
817 | else if (onredirect == STATE_OK) | 832 | else if (onredirect == STATE_OK) |
818 | printf ("OK"); | 833 | printf (_("OK")); |
819 | else if (onredirect == STATE_WARNING) | 834 | else if (onredirect == STATE_WARNING) |
820 | printf ("WARNING"); | 835 | printf (_("WARNING")); |
821 | else if (onredirect == STATE_CRITICAL) | 836 | else if (onredirect == STATE_CRITICAL) |
822 | printf ("CRITICAL"); | 837 | printf (_("CRITICAL")); |
823 | elapsed_time = delta_time (tv); | 838 | elapsed_time = delta_time (tv); |
824 | asprintf (&msg, " - %s - %.3f second response time %s%s|time=%.3f\n", | 839 | asprintf (&msg, _(" - %s - %.3f second response time %s%s|time=%.3f\n"), |
825 | status_line, elapsed_time, timestamp, | 840 | status_line, elapsed_time, timestamp, |
826 | (display_html ? "</A>" : ""), elapsed_time); | 841 | (display_html ? "</A>" : ""), elapsed_time); |
827 | terminate (onredirect, msg); | 842 | terminate (onredirect, msg); |
@@ -833,7 +848,7 @@ check_http (void) | |||
833 | 848 | ||
834 | /* check elapsed time */ | 849 | /* check elapsed time */ |
835 | elapsed_time = delta_time (tv); | 850 | elapsed_time = delta_time (tv); |
836 | asprintf (&msg, "HTTP problem: %s - %.3f second response time %s%s|time=%.3f\n", | 851 | asprintf (&msg, _("HTTP problem: %s - %.3f second response time %s%s|time=%.3f\n"), |
837 | status_line, elapsed_time, timestamp, | 852 | status_line, elapsed_time, timestamp, |
838 | (display_html ? "</A>" : ""), elapsed_time); | 853 | (display_html ? "</A>" : ""), elapsed_time); |
839 | if (check_critical_time == TRUE && elapsed_time > critical_time) | 854 | if (check_critical_time == TRUE && elapsed_time > critical_time) |
@@ -846,13 +861,13 @@ check_http (void) | |||
846 | 861 | ||
847 | if (strlen (string_expect)) { | 862 | if (strlen (string_expect)) { |
848 | if (strstr (page, string_expect)) { | 863 | if (strstr (page, string_expect)) { |
849 | printf ("HTTP OK %s - %.3f second response time %s%s|time=%.3f\n", | 864 | printf (_("HTTP OK %s - %.3f second response time %s%s|time=%.3f\n"), |
850 | status_line, elapsed_time, | 865 | status_line, elapsed_time, |
851 | timestamp, (display_html ? "</A>" : ""), elapsed_time); | 866 | timestamp, (display_html ? "</A>" : ""), elapsed_time); |
852 | exit (STATE_OK); | 867 | exit (STATE_OK); |
853 | } | 868 | } |
854 | else { | 869 | else { |
855 | printf ("CRITICAL - string not found%s|time=%.3f\n", | 870 | printf (_("CRITICAL - string not found%s|time=%.3f\n"), |
856 | (display_html ? "</A>" : ""), elapsed_time); | 871 | (display_html ? "</A>" : ""), elapsed_time); |
857 | exit (STATE_CRITICAL); | 872 | exit (STATE_CRITICAL); |
858 | } | 873 | } |
@@ -861,20 +876,20 @@ check_http (void) | |||
861 | if (strlen (regexp)) { | 876 | if (strlen (regexp)) { |
862 | errcode = regexec (&preg, page, REGS, pmatch, 0); | 877 | errcode = regexec (&preg, page, REGS, pmatch, 0); |
863 | if (errcode == 0) { | 878 | if (errcode == 0) { |
864 | printf ("HTTP OK %s - %.3f second response time %s%s|time=%.3f\n", | 879 | printf (_("HTTP OK %s - %.3f second response time %s%s|time=%.3f\n"), |
865 | status_line, elapsed_time, | 880 | status_line, elapsed_time, |
866 | timestamp, (display_html ? "</A>" : ""), elapsed_time); | 881 | timestamp, (display_html ? "</A>" : ""), elapsed_time); |
867 | exit (STATE_OK); | 882 | exit (STATE_OK); |
868 | } | 883 | } |
869 | else { | 884 | else { |
870 | if (errcode == REG_NOMATCH) { | 885 | if (errcode == REG_NOMATCH) { |
871 | printf ("CRITICAL - pattern not found%s|time=%.3f\n", | 886 | printf (_("CRITICAL - pattern not found%s|time=%.3f\n"), |
872 | (display_html ? "</A>" : ""), elapsed_time); | 887 | (display_html ? "</A>" : ""), elapsed_time); |
873 | exit (STATE_CRITICAL); | 888 | exit (STATE_CRITICAL); |
874 | } | 889 | } |
875 | else { | 890 | else { |
876 | regerror (errcode, &preg, errbuf, MAX_INPUT_BUFFER); | 891 | regerror (errcode, &preg, errbuf, MAX_INPUT_BUFFER); |
877 | printf ("CRITICAL - Execute Error: %s\n", errbuf); | 892 | printf (_("CRITICAL - Execute Error: %s\n"), errbuf); |
878 | exit (STATE_CRITICAL); | 893 | exit (STATE_CRITICAL); |
879 | } | 894 | } |
880 | } | 895 | } |
@@ -884,12 +899,12 @@ check_http (void) | |||
884 | /* make sure the page is of an appropriate size */ | 899 | /* make sure the page is of an appropriate size */ |
885 | page_len = strlen (page); | 900 | page_len = strlen (page); |
886 | if ((min_page_len > 0) && (page_len < min_page_len)) { | 901 | if ((min_page_len > 0) && (page_len < min_page_len)) { |
887 | printf ("HTTP WARNING: page size too small%s|size=%i\n", | 902 | printf (_("HTTP WARNING: page size too small%s|size=%i\n"), |
888 | (display_html ? "</A>" : ""), page_len ); | 903 | (display_html ? "</A>" : ""), page_len ); |
889 | exit (STATE_WARNING); | 904 | exit (STATE_WARNING); |
890 | } | 905 | } |
891 | /* We only get here if all tests have been passed */ | 906 | /* We only get here if all tests have been passed */ |
892 | asprintf (&msg, "HTTP OK %s - %.3f second response time %s%s|time=%.3f\n", | 907 | asprintf (&msg, _("HTTP OK %s - %.3f second response time %s%s|time=%.3f\n"), |
893 | status_line, (float)elapsed_time, | 908 | status_line, (float)elapsed_time, |
894 | timestamp, (display_html ? "</A>" : ""), elapsed_time); | 909 | timestamp, (display_html ? "</A>" : ""), elapsed_time); |
895 | terminate (STATE_OK, msg); | 910 | terminate (STATE_OK, msg); |
@@ -906,14 +921,14 @@ int connect_SSL (void) | |||
906 | asprintf (&randbuff, "%s", "qwertyuiopasdfghjklqwertyuiopasdfghjkl"); | 921 | asprintf (&randbuff, "%s", "qwertyuiopasdfghjklqwertyuiopasdfghjkl"); |
907 | RAND_seed (randbuff, strlen (randbuff)); | 922 | RAND_seed (randbuff, strlen (randbuff)); |
908 | if (verbose) | 923 | if (verbose) |
909 | printf("SSL seeding: %s\n", (RAND_status()==1 ? "OK" : "Failed") ); | 924 | printf(_("SSL seeding: %s\n"), (RAND_status()==1 ? _("OK") : _("Failed")) ); |
910 | 925 | ||
911 | /* Initialize SSL context */ | 926 | /* Initialize SSL context */ |
912 | SSLeay_add_ssl_algorithms (); | 927 | SSLeay_add_ssl_algorithms (); |
913 | meth = SSLv23_client_method (); | 928 | meth = SSLv23_client_method (); |
914 | SSL_load_error_strings (); | 929 | SSL_load_error_strings (); |
915 | if ((ctx = SSL_CTX_new (meth)) == NULL) { | 930 | if ((ctx = SSL_CTX_new (meth)) == NULL) { |
916 | printf ("CRITICAL - Cannot create SSL context.\n"); | 931 | printf (_("CRITICAL - Cannot create SSL context.\n")); |
917 | return STATE_CRITICAL; | 932 | return STATE_CRITICAL; |
918 | } | 933 | } |
919 | 934 | ||
@@ -937,7 +952,7 @@ int connect_SSL (void) | |||
937 | ERR_print_errors_fp (stderr); | 952 | ERR_print_errors_fp (stderr); |
938 | } | 953 | } |
939 | else { | 954 | else { |
940 | printf ("CRITICAL - Cannot initiate SSL handshake.\n"); | 955 | printf (_("CRITICAL - Cannot initiate SSL handshake.\n")); |
941 | } | 956 | } |
942 | SSL_free (ssl); | 957 | SSL_free (ssl); |
943 | } | 958 | } |
@@ -965,7 +980,7 @@ check_certificate (X509 ** certificate) | |||
965 | /* Generate tm structure to process timestamp */ | 980 | /* Generate tm structure to process timestamp */ |
966 | if (tm->type == V_ASN1_UTCTIME) { | 981 | if (tm->type == V_ASN1_UTCTIME) { |
967 | if (tm->length < 10) { | 982 | if (tm->length < 10) { |
968 | printf ("CRITICAL - Wrong time format in certificate.\n"); | 983 | printf (_("CRITICAL - Wrong time format in certificate.\n")); |
969 | return STATE_CRITICAL; | 984 | return STATE_CRITICAL; |
970 | } | 985 | } |
971 | else { | 986 | else { |
@@ -977,7 +992,7 @@ check_certificate (X509 ** certificate) | |||
977 | } | 992 | } |
978 | else { | 993 | else { |
979 | if (tm->length < 12) { | 994 | if (tm->length < 12) { |
980 | printf ("CRITICAL - Wrong time format in certificate.\n"); | 995 | printf (_("CRITICAL - Wrong time format in certificate.\n")); |
981 | return STATE_CRITICAL; | 996 | return STATE_CRITICAL; |
982 | } | 997 | } |
983 | else { | 998 | else { |
@@ -1006,20 +1021,20 @@ check_certificate (X509 ** certificate) | |||
1006 | stamp.tm_mday, stamp.tm_year + 1900, stamp.tm_hour, stamp.tm_min); | 1021 | stamp.tm_mday, stamp.tm_year + 1900, stamp.tm_hour, stamp.tm_min); |
1007 | 1022 | ||
1008 | if (days_left > 0 && days_left <= days_till_exp) { | 1023 | if (days_left > 0 && days_left <= days_till_exp) { |
1009 | printf ("WARNING - Certificate expires in %d day(s) (%s).\n", days_left, timestamp); | 1024 | printf (_("WARNING - Certificate expires in %d day(s) (%s).\n"), days_left, timestamp); |
1010 | return STATE_WARNING; | 1025 | return STATE_WARNING; |
1011 | } | 1026 | } |
1012 | if (days_left < 0) { | 1027 | if (days_left < 0) { |
1013 | printf ("CRITICAL - Certificate expired on %s.\n", timestamp); | 1028 | printf (_("CRITICAL - Certificate expired on %s.\n"), timestamp); |
1014 | return STATE_CRITICAL; | 1029 | return STATE_CRITICAL; |
1015 | } | 1030 | } |
1016 | 1031 | ||
1017 | if (days_left == 0) { | 1032 | if (days_left == 0) { |
1018 | printf ("WARNING - Certificate expires today (%s).\n", timestamp); | 1033 | printf (_("WARNING - Certificate expires today (%s).\n"), timestamp); |
1019 | return STATE_WARNING; | 1034 | return STATE_WARNING; |
1020 | } | 1035 | } |
1021 | 1036 | ||
1022 | printf ("OK - Certificate will expire on %s.\n", timestamp); | 1037 | printf (_("OK - Certificate will expire on %s.\n"), timestamp); |
1023 | 1038 | ||
1024 | return STATE_OK; | 1039 | return STATE_OK; |
1025 | } | 1040 | } |
@@ -1062,33 +1077,3 @@ my_close (void) | |||
1062 | } | 1077 | } |
1063 | #endif | 1078 | #endif |
1064 | } | 1079 | } |
1065 | |||
1066 | |||
1067 | |||
1068 | void | ||
1069 | print_help (void) | ||
1070 | { | ||
1071 | print_revision (progname, REVISION); | ||
1072 | printf | ||
1073 | ("Copyright (c) %s %s <%s>\n\n%s\n", | ||
1074 | COPYRIGHT, AUTHORS, EMAIL, SUMMARY); | ||
1075 | print_usage (); | ||
1076 | printf ("NOTE: One or both of -H and -I must be specified\n"); | ||
1077 | printf ("\nOptions:\n" LONGOPTIONS "\n", HTTP_EXPECT, HTTP_PORT, | ||
1078 | DEFAULT_SOCKET_TIMEOUT, SSLOPTIONS, REGOPTIONS); | ||
1079 | #ifdef HAVE_SSL | ||
1080 | printf (SSLDESCRIPTION); | ||
1081 | #endif | ||
1082 | } | ||
1083 | |||
1084 | |||
1085 | void | ||
1086 | print_usage (void) | ||
1087 | { | ||
1088 | printf ("\ | ||
1089 | Usage:\n\ | ||
1090 | %s %s\n\ | ||
1091 | %s (-h | --help) for detailed help\n\ | ||
1092 | %s (-V | --version) for version information\n", | ||
1093 | progname, OPTIONS, progname, progname); | ||
1094 | } | ||