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 | ||
