Imported Upstream version 1.4.15

This commit is contained in:
Jan Wagner 2013-11-26 23:57:29 +01:00
parent 882cdeecca
commit 047baae1ca
386 changed files with 60019 additions and 38317 deletions

View file

@ -100,17 +100,20 @@ int server_url_length;
int server_expect_yn = 0;
char server_expect[MAX_INPUT_BUFFER] = HTTP_EXPECT;
char string_expect[MAX_INPUT_BUFFER] = "";
char output_string_search[30] = "";
double warning_time = 0;
int check_warning_time = FALSE;
double critical_time = 0;
int check_critical_time = FALSE;
char user_auth[MAX_INPUT_BUFFER] = "";
char proxy_auth[MAX_INPUT_BUFFER] = "";
int display_html = FALSE;
char **http_opt_headers;
int http_opt_headers_count = 0;
int onredirect = STATE_OK;
int followsticky = STICKY_NONE;
int use_ssl = FALSE;
int use_sni = FALSE;
int verbose = FALSE;
int sd;
int min_page_len = 0;
@ -177,7 +180,8 @@ process_arguments (int argc, char **argv)
char *p;
enum {
INVERT_REGEX = CHAR_MAX + 1
INVERT_REGEX = CHAR_MAX + 1,
SNI_OPTION
};
int option = 0;
@ -186,12 +190,14 @@ process_arguments (int argc, char **argv)
{"link", no_argument, 0, 'L'},
{"nohtml", no_argument, 0, 'n'},
{"ssl", no_argument, 0, 'S'},
{"sni", no_argument, 0, SNI_OPTION},
{"post", required_argument, 0, 'P'},
{"method", required_argument, 0, 'j'},
{"IP-address", required_argument, 0, 'I'},
{"url", required_argument, 0, 'u'},
{"port", required_argument, 0, 'p'},
{"authorization", required_argument, 0, 'a'},
{"proxy_authorization", required_argument, 0, 'b'},
{"string", required_argument, 0, 's'},
{"expect", required_argument, 0, 'e'},
{"regex", required_argument, 0, 'r'},
@ -229,7 +235,7 @@ process_arguments (int argc, char **argv)
}
while (1) {
c = getopt_long (argc, argv, "Vvh46t:c:w:A:k:H:P:j:T:I:a:e:p:s:R:r:u:f:C:nlLSm:M:N", longopts, &option);
c = getopt_long (argc, argv, "Vvh46t:c:w:A:k:H:P:j:T:I:a:b:e:p:s:R:r:u:f:C:nlLSm:M:N", longopts, &option);
if (c == -1 || c == EOF)
break;
@ -302,6 +308,9 @@ process_arguments (int argc, char **argv)
if (specify_port == FALSE)
server_port = HTTPS_PORT;
break;
case SNI_OPTION:
use_sni = TRUE;
break;
case 'f': /* onredirect */
if (!strcmp (optarg, "stickyport"))
onredirect = STATE_DEPENDENT, followsticky = STICKY_HOST|STICKY_PORT;
@ -350,6 +359,10 @@ process_arguments (int argc, char **argv)
strncpy (user_auth, optarg, MAX_INPUT_BUFFER - 1);
user_auth[MAX_INPUT_BUFFER - 1] = 0;
break;
case 'b': /* proxy-authorization info */
strncpy (proxy_auth, optarg, MAX_INPUT_BUFFER - 1);
proxy_auth[MAX_INPUT_BUFFER - 1] = 0;
break;
case 'P': /* HTTP POST data in URL encoded format; ignored if settings already */
if (! http_post_data)
http_post_data = strdup (optarg);
@ -721,7 +734,10 @@ get_content_length (const char *headers)
/* Skip to the end of the header, including continuation lines. */
while (*s && !(*s == '\n' && (s[1] != ' ' && s[1] != '\t')))
s++;
s++;
/* Avoid stepping over end-of-string marker */
if (*s)
s++;
/* Process this header. */
if (value && value > field+2) {
@ -778,6 +794,7 @@ check_http (void)
int i = 0;
size_t pagesize = 0;
char *full_page;
char *full_page_new;
char *buf;
char *pos;
long microsec;
@ -790,7 +807,7 @@ check_http (void)
die (STATE_CRITICAL, _("HTTP CRITICAL - Unable to open TCP socket\n"));
#ifdef HAVE_SSL
if (use_ssl == TRUE) {
np_net_ssl_init_with_hostname(sd, host_name);
np_net_ssl_init_with_hostname(sd, (use_sni ? host_name : NULL));
if (check_cert == TRUE) {
result = np_net_ssl_check_cert(days_till_exp);
np_net_ssl_cleanup();
@ -836,6 +853,12 @@ check_http (void)
asprintf (&buf, "%sAuthorization: Basic %s\r\n", buf, auth);
}
/* optionally send the proxy authentication info */
if (strlen(proxy_auth)) {
base64_encode_alloc (proxy_auth, strlen (proxy_auth), &auth);
asprintf (&buf, "%sProxy-Authorization: Basic %s\r\n", buf, auth);
}
/* either send http POST data (any data, not only POST)*/
if (http_post_data) {
if (http_content_type) {
@ -859,7 +882,9 @@ check_http (void)
full_page = strdup("");
while ((i = my_recv (buffer, MAX_INPUT_BUFFER-1)) > 0) {
buffer[i] = '\0';
asprintf (&full_page, "%s%s", full_page, buffer);
asprintf (&full_page_new, "%s%s", full_page, buffer);
free (full_page);
full_page = full_page_new;
pagesize += i;
if (no_body && document_headers_done (full_page)) {
@ -1013,7 +1038,11 @@ check_http (void)
if (strlen (string_expect)) {
if (!strstr (page, string_expect)) {
asprintf (&msg, _("%sstring not found, "), msg);
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);
}
asprintf (&msg, _("%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;
}
}
@ -1291,8 +1320,8 @@ print_help (void)
printf ("\n");
printf (_(UT_HELP_VRSN));
printf (_(UT_EXTRA_OPTS));
printf (UT_HELP_VRSN);
printf (UT_EXTRA_OPTS);
printf (" %s\n", "-H, --hostname=ADDRESS");
printf (" %s\n", _("Host name argument for servers using host headers (virtual host)"));
@ -1303,11 +1332,13 @@ print_help (void)
printf (" %s", _("Port number (default: "));
printf ("%d)\n", HTTP_PORT);
printf (_(UT_IPv46));
printf (UT_IPv46);
#ifdef HAVE_SSL
printf (" %s\n", "-S, --ssl");
printf (" %s\n", _("Connect via SSL. Port defaults to 443"));
printf (" %s\n", "--sni");
printf (" %s\n", _("Enable SSL/TLS hostname extension support (SNI)"));
printf (" %s\n", "-C, --certificate=INTEGER");
printf (" %s\n", _("Minimum number of days a certificate has to be valid. Port defaults to 443"));
printf (" %s\n", _("(when this option is used the URL is not checked.)\n"));
@ -1346,6 +1377,8 @@ print_help (void)
printf (" %s\n", "-a, --authorization=AUTH_PAIR");
printf (" %s\n", _("Username:password on sites with basic authentication"));
printf (" %s\n", "-b, --proxy-authorization=AUTH_PAIR");
printf (" %s\n", _("Username:password on proxy-servers with basic authentication"));
printf (" %s\n", "-A, --useragent=STRING");
printf (" %s\n", _("String to be sent in http header as \"User Agent\""));
printf (" %s\n", "-k, --header=STRING");
@ -1358,11 +1391,11 @@ print_help (void)
printf (" %s\n", "-m, --pagesize=INTEGER<:INTEGER>");
printf (" %s\n", _("Minimum page size required (bytes) : Maximum page size required (bytes)"));
printf (_(UT_WARN_CRIT));
printf (UT_WARN_CRIT);
printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
printf (UT_TIMEOUT, DEFAULT_SOCKET_TIMEOUT);
printf (_(UT_VERBOSE));
printf (UT_VERBOSE);
printf ("\n");
printf ("%s\n", _("Notes:"));
@ -1372,8 +1405,6 @@ print_help (void)
printf (" %s\n", _("messages from the host result in STATE_WARNING return values. If you are"));
printf (" %s\n", _("checking a virtual server that uses 'host headers' you must supply the FQDN"));
printf (" %s\n", _("(fully qualified domain name) as the [host_name] argument."));
printf ("\n");
printf (_(UT_EXTRA_OPTS_NOTES));
#ifdef HAVE_SSL
printf ("\n");
@ -1395,7 +1426,7 @@ print_help (void)
printf (" %s\n", _("the certificate is expired."));
#endif
printf (_(UT_SUPPORT));
printf (UT_SUPPORT);
}
@ -1404,11 +1435,12 @@ print_help (void)
void
print_usage (void)
{
printf (_("Usage:"));
printf ("%s\n", _("Usage:"));
printf (" %s -H <vhost> | -I <IP-address> [-u <uri>] [-p <port>]\n",progname);
printf (" [-w <warn time>] [-c <critical time>] [-t <timeout>] [-L]\n");
printf (" [-a auth] [-f <ok | warn | critcal | follow | sticky | stickyport>]\n");
printf (" [-w <warn time>] [-c <critical time>] [-t <timeout>] [-L] [-a auth]\n");
printf (" [-b proxy_auth] [-f <ok|warning|critcal|follow|sticky|stickyport>]\n");
printf (" [-e <expect>] [-s string] [-l] [-r <regex> | -R <case-insensitive regex>]\n");
printf (" [-P string] [-m <min_pg_size>:<max_pg_size>] [-4|-6] [-N] [-M <age>]\n");
printf (" [-A string] [-k string] [-S] [-C <age>] [-T <content-type>] [-j method]\n");
printf (" [-A string] [-k string] [-S] [--sni] [-C <age>] [-T <content-type>]\n");
printf (" [-j method]\n");
}