summaryrefslogtreecommitdiffstats
path: root/plugins/check_http.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/check_http.c')
-rw-r--r--plugins/check_http.c112
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)