diff options
Diffstat (limited to 'plugins/check_http.c')
-rw-r--r-- | plugins/check_http.c | 112 |
1 files changed, 54 insertions, 58 deletions
diff --git a/plugins/check_http.c b/plugins/check_http.c index 6b952c37..cffe810f 100644 --- a/plugins/check_http.c +++ b/plugins/check_http.c | |||
@@ -475,9 +475,6 @@ check_http (void) | |||
475 | int sslerr; | 475 | int sslerr; |
476 | #endif | 476 | #endif |
477 | 477 | ||
478 | if (verbose) | ||
479 | printf ("%s://%s:%d%s [%s]\n", server_type, server_address, server_port, server_url, host_name); | ||
480 | |||
481 | /* try to connect to the host at the given port number */ | 478 | /* try to connect to the host at the given port number */ |
482 | #ifdef HAVE_SSL | 479 | #ifdef HAVE_SSL |
483 | if (use_ssl == TRUE) { | 480 | if (use_ssl == TRUE) { |
@@ -515,9 +512,6 @@ check_http (void) | |||
515 | asprintf (&buf, "%sAuthorization: Basic %s\r\n", buf, auth); | 512 | asprintf (&buf, "%sAuthorization: Basic %s\r\n", buf, auth); |
516 | } | 513 | } |
517 | 514 | ||
518 | if (verbose) | ||
519 | printf ("%s://%s:%d%s\n", server_type, server_address, server_port, server_url); | ||
520 | |||
521 | /* either send http POST data */ | 515 | /* either send http POST data */ |
522 | if (http_post_data) { | 516 | if (http_post_data) { |
523 | asprintf (&buf, "%sContent-Type: application/x-www-form-urlencoded\r\n", buf); | 517 | asprintf (&buf, "%sContent-Type: application/x-www-form-urlencoded\r\n", buf); |
@@ -787,69 +781,71 @@ redir (char *pos, char *status_line) | |||
787 | 781 | ||
788 | while (pos) { | 782 | while (pos) { |
789 | 783 | ||
790 | if (sscanf (pos, "%[Ll]%*[Oo]%*[Cc]%*[Aa]%*[Tt]%*[Ii]%*[Oo]%*[Nn]:%n", xx, &i) > 0) { | 784 | if (sscanf (pos, "%[Ll]%*[Oo]%*[Cc]%*[Aa]%*[Tt]%*[Ii]%*[Oo]%*[Nn]:%n", xx, &i) < 1) { |
791 | |||
792 | pos += i; | ||
793 | pos += strspn (pos, " \t\r\n"); | ||
794 | 785 | ||
795 | /* URI_HTTP, URI_HOST, URI_PORT, URI_PATH */ | 786 | pos += (size_t) strcspn (pos, "\r\n"); |
796 | if (sscanf (pos, HD1, type, addr, port, url) == 4) { | 787 | pos += (size_t) strspn (pos, "\r\n"); |
797 | use_ssl = server_type_check (type); | 788 | if (strlen(pos) == 0) |
798 | i = atoi (port); | 789 | die (STATE_UNKNOWN, |
799 | } | 790 | _("UNKNOWN - Could not find redirect location - %s%s\n"), |
800 | 791 | status_line, (display_html ? "</A>" : "")); | |
801 | /* URI_HTTP URI_HOST URI_PATH */ | 792 | continue; |
802 | else if (sscanf (pos, HD2, type, addr, url) == 3 ) { | 793 | } |
803 | use_ssl = server_type_check (type); | ||
804 | i = server_port_check (use_ssl); | ||
805 | } | ||
806 | 794 | ||
807 | /* URI_HTTP URI_HOST URI_PORT */ | 795 | pos += i; |
808 | else if(sscanf (pos, HD3, type, addr, port) == 3) { | 796 | pos += strspn (pos, " \t\r\n"); |
809 | strcpy (url, HTTP_URL); | ||
810 | use_ssl = server_type_check (type); | ||
811 | i = atoi (port); | ||
812 | } | ||
813 | 797 | ||
814 | /* URI_HTTP URI_HOST */ | 798 | url = realloc (url, strcspn (pos, "\r\n")); |
815 | else if(sscanf (pos, HD4, type, addr) == 2) { | 799 | if (url == NULL) |
816 | strcpy (url, HTTP_URL); | 800 | die (STATE_UNKNOWN, _("ERROR: could not allocate url\n")); |
817 | use_ssl = server_type_check (type); | ||
818 | i = server_port_check (use_ssl); | ||
819 | } | ||
820 | 801 | ||
821 | /* URI_PATH */ | 802 | /* URI_HTTP, URI_HOST, URI_PORT, URI_PATH */ |
822 | else if (sscanf (pos, HD5, url) == 1) { | 803 | if (sscanf (pos, HD1, type, addr, port, url) == 4) { |
823 | /* relative url */ | 804 | use_ssl = server_type_check (type); |
824 | if ((url[0] != '/')) { | 805 | i = atoi (port); |
825 | if ((x = strrchr(url, '/'))) | 806 | } |
826 | *x = '\0'; | ||
827 | asprintf (&server_url, "%s/%s", server_url, url); | ||
828 | } | ||
829 | i = server_port; | ||
830 | strcpy (type, server_type); | ||
831 | strcpy (addr, host_name); | ||
832 | } | ||
833 | 807 | ||
834 | else { | 808 | /* URI_HTTP URI_HOST URI_PATH */ |
835 | die (STATE_UNKNOWN, | 809 | else if (sscanf (pos, HD2, type, addr, url) == 3 ) { |
836 | _("UNKNOWN - Could not parse redirect location - %s%s\n"), | 810 | use_ssl = server_type_check (type); |
837 | pos, (display_html ? "</A>" : "")); | 811 | i = server_port_check (use_ssl); |
838 | } | 812 | } |
839 | 813 | ||
840 | break; | 814 | /* URI_HTTP URI_HOST URI_PORT */ |
815 | else if(sscanf (pos, HD3, type, addr, port) == 3) { | ||
816 | strcpy (url, HTTP_URL); | ||
817 | use_ssl = server_type_check (type); | ||
818 | i = atoi (port); | ||
819 | } | ||
841 | 820 | ||
842 | } else { | 821 | /* URI_HTTP URI_HOST */ |
822 | else if(sscanf (pos, HD4, type, addr) == 2) { | ||
823 | strcpy (url, HTTP_URL); | ||
824 | use_ssl = server_type_check (type); | ||
825 | i = server_port_check (use_ssl); | ||
826 | } | ||
843 | 827 | ||
844 | pos += (size_t) strcspn (pos, "\r\n"); | 828 | /* URI_PATH */ |
845 | pos += (size_t) strspn (pos, "\r\n"); | 829 | else if (sscanf (pos, HD5, url) == 1) { |
846 | if (strlen(pos) == 0) | 830 | /* relative url */ |
847 | die (STATE_UNKNOWN, | 831 | if ((url[0] != '/')) { |
848 | _("UNKNOWN - Could not find redirect location - %s%s\n"), | 832 | if ((x = strrchr(url, '/'))) |
849 | status_line, (display_html ? "</A>" : "")); | 833 | *x = '\0'; |
834 | asprintf (&server_url, "%s/%s", server_url, url); | ||
835 | } | ||
836 | i = server_port; | ||
837 | strcpy (type, server_type); | ||
838 | strcpy (addr, host_name); | ||
839 | } | ||
850 | 840 | ||
841 | else { | ||
842 | die (STATE_UNKNOWN, | ||
843 | _("UNKNOWN - Could not parse redirect location - %s%s\n"), | ||
844 | pos, (display_html ? "</A>" : "")); | ||
851 | } | 845 | } |
852 | 846 | ||
847 | break; | ||
848 | |||
853 | } /* end while (pos) */ | 849 | } /* end while (pos) */ |
854 | 850 | ||
855 | if (++redir_depth > max_depth) | 851 | if (++redir_depth > max_depth) |