diff options
author | Markus Frosch <markus.frosch@icinga.com> | 2018-10-31 15:22:50 +0100 |
---|---|---|
committer | Markus Frosch <markus.frosch@icinga.com> | 2018-11-06 11:32:27 +0100 |
commit | d659f8d99faa0738be0ddcdb822f41e7f8c7f829 (patch) | |
tree | e377ae090555aa37635f641284a080709e98fbe2 | |
parent | 82a634f7bfa433b78560be45ae6b52e1d101a26a (diff) | |
download | monitoring-plugins-d659f8d.tar.gz |
Allow user to specify HTTP method after proxy CONNECT
Simple format, avoids refactoring the CONNECT feature.
-rw-r--r-- | plugins/check_http.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/plugins/check_http.c b/plugins/check_http.c index 86a36c20..1e2a54c8 100644 --- a/plugins/check_http.c +++ b/plugins/check_http.c | |||
@@ -126,6 +126,7 @@ int max_page_len = 0; | |||
126 | int redir_depth = 0; | 126 | int redir_depth = 0; |
127 | int max_depth = 15; | 127 | int max_depth = 15; |
128 | char *http_method; | 128 | char *http_method; |
129 | char *http_method_proxy; | ||
129 | char *http_post_data; | 130 | char *http_post_data; |
130 | char *http_content_type; | 131 | char *http_content_type; |
131 | char buffer[MAX_INPUT_BUFFER]; | 132 | char buffer[MAX_INPUT_BUFFER]; |
@@ -446,6 +447,12 @@ process_arguments (int argc, char **argv) | |||
446 | if (http_method) | 447 | if (http_method) |
447 | free(http_method); | 448 | free(http_method); |
448 | http_method = strdup (optarg); | 449 | http_method = strdup (optarg); |
450 | char *tmp; | ||
451 | if ((tmp = strstr(http_method, ":")) > 0) { | ||
452 | tmp[0] = '\0'; | ||
453 | http_method = http_method; | ||
454 | http_method_proxy = ++tmp; | ||
455 | } | ||
449 | break; | 456 | break; |
450 | case 'd': /* string or substring */ | 457 | case 'd': /* string or substring */ |
451 | strncpy (header_expect, optarg, MAX_INPUT_BUFFER - 1); | 458 | strncpy (header_expect, optarg, MAX_INPUT_BUFFER - 1); |
@@ -566,6 +573,9 @@ process_arguments (int argc, char **argv) | |||
566 | if (http_method == NULL) | 573 | if (http_method == NULL) |
567 | http_method = strdup ("GET"); | 574 | http_method = strdup ("GET"); |
568 | 575 | ||
576 | if (http_method_proxy == NULL) | ||
577 | http_method_proxy = strdup ("GET"); | ||
578 | |||
569 | if (client_cert && !client_privkey) | 579 | if (client_cert && !client_privkey) |
570 | usage4 (_("If you use a client certificate you must also specify a private key file")); | 580 | usage4 (_("If you use a client certificate you must also specify a private key file")); |
571 | 581 | ||
@@ -950,7 +960,7 @@ check_http (void) | |||
950 | 960 | ||
951 | if ( server_address != NULL && strcmp(http_method, "CONNECT") == 0 | 961 | if ( server_address != NULL && strcmp(http_method, "CONNECT") == 0 |
952 | && host_name != NULL && use_ssl == TRUE) | 962 | && host_name != NULL && use_ssl == TRUE) |
953 | asprintf (&buf, "%s %s %s\r\n%s\r\n", "GET", server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); | 963 | asprintf (&buf, "%s %s %s\r\n%s\r\n", http_method_proxy, server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); |
954 | else | 964 | else |
955 | asprintf (&buf, "%s %s %s\r\n%s\r\n", http_method, server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); | 965 | asprintf (&buf, "%s %s %s\r\n%s\r\n", http_method, server_url, host_name ? "HTTP/1.1" : "HTTP/1.0", user_agent); |
956 | 966 | ||
@@ -1581,7 +1591,7 @@ print_help (void) | |||
1581 | printf (" %s\n", _("URL to GET or POST (default: /)")); | 1591 | printf (" %s\n", _("URL to GET or POST (default: /)")); |
1582 | printf (" %s\n", "-P, --post=STRING"); | 1592 | printf (" %s\n", "-P, --post=STRING"); |
1583 | printf (" %s\n", _("URL encoded http POST data")); | 1593 | printf (" %s\n", _("URL encoded http POST data")); |
1584 | printf (" %s\n", "-j, --method=STRING (for example: HEAD, OPTIONS, TRACE, PUT, DELETE, CONNECT)"); | 1594 | printf (" %s\n", "-j, --method=STRING (for example: HEAD, OPTIONS, TRACE, PUT, DELETE, CONNECT, CONNECT:POST)"); |
1585 | printf (" %s\n", _("Set HTTP method.")); | 1595 | printf (" %s\n", _("Set HTTP method.")); |
1586 | printf (" %s\n", "-N, --no-body"); | 1596 | printf (" %s\n", "-N, --no-body"); |
1587 | printf (" %s\n", _("Don't wait for document body: stop reading after headers.")); | 1597 | printf (" %s\n", _("Don't wait for document body: stop reading after headers.")); |
@@ -1668,7 +1678,8 @@ print_help (void) | |||
1668 | printf (" %s\n", _("all these options are needed: -I <proxy> -p <proxy-port> -u <check-url> -S(sl) -j CONNECT -H <webserver>")); | 1678 | printf (" %s\n", _("all these options are needed: -I <proxy> -p <proxy-port> -u <check-url> -S(sl) -j CONNECT -H <webserver>")); |
1669 | printf (" %s\n", _("a STATE_OK will be returned. When the server returns its content but exceeds")); | 1679 | printf (" %s\n", _("a STATE_OK will be returned. When the server returns its content but exceeds")); |
1670 | printf (" %s\n", _("the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,")); | 1680 | printf (" %s\n", _("the 5-second threshold, a STATE_WARNING will be returned. When an error occurs,")); |
1671 | printf (" %s\n", _("a STATE_CRITICAL will be returned.")); | 1681 | printf (" %s\n", _("a STATE_CRITICAL will be returned. By adding a colon to the method you can set the method used")); |
1682 | printf (" %s\n", _("inside the proxied connection: -j CONNECT:POST")); | ||
1672 | 1683 | ||
1673 | #endif | 1684 | #endif |
1674 | 1685 | ||