aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Thomas Guyot-Sionnest <dermoth@users.sourceforge.net> 2008-08-08 02:25:47 +0000
committerGravatar Thomas Guyot-Sionnest <dermoth@users.sourceforge.net> 2008-08-08 02:25:47 +0000
commit0378f34d85e4fa2d83bae745c44649ccfb9744bb (patch)
tree57d1f258d7b5bcb798b119f134bdd2cd04f382a7
parent2367f82090e7ff0cc2b0b23590b62f9eb33df528 (diff)
downloadmonitoring-plugins-0378f34d85e4fa2d83bae745c44649ccfb9744bb.tar.gz
Re-structure the HTTP 1.1 headers to prevent 301s on servers with virtual hosts
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@2030 f882894a-f735-0410-b71e-b25c423dba1c
-rw-r--r--NEWS1
-rw-r--r--THANKS.in1
-rw-r--r--plugins/check_http.c20
3 files changed, 13 insertions, 9 deletions
diff --git a/NEWS b/NEWS
index 2e33951b..168aee5e 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ This file documents the major additions and syntax changes between releases.
check_procs now captures stderr in external command and adds to plugin output
check_snmp now only prints perfdata for non numeric values (#1867716)
check_icmp now supports packet size modification
+ check_http now sends the Host header first to fix 301s on servers with vitrual hosts (Michael Harris).
1.4.12 27th May 2008
Added ./check_nt -v INSTANCES to count number of instances (Alessandro Ren)
diff --git a/THANKS.in b/THANKS.in
index 718d0f32..b9a49615 100644
--- a/THANKS.in
+++ b/THANKS.in
@@ -236,3 +236,4 @@ Jan Wagner
Christian Schneemann
Rob Windsor
Hilko Bengen
+Michael Harris
diff --git a/plugins/check_http.c b/plugins/check_http.c
index 07e0079e..f81026f8 100644
--- a/plugins/check_http.c
+++ b/plugins/check_http.c
@@ -743,21 +743,23 @@ check_http (void)
if (check_cert == TRUE) {
result = np_net_ssl_check_cert(days_till_exp);
np_net_ssl_cleanup();
- if(sd) close(sd);
+ if (sd) close(sd);
return result;
}
}
#endif /* HAVE_SSL */
- asprintf (&buf, "%s %s HTTP/1.0\r\n%s\r\n", http_method, server_url, user_agent);
+ /* If a hostname is provided, use HTTP/1.1 and send the hostname before the
+ * Useragent. This fixes an issue with getting 301 responses from servers
+ * with virtual hosts */
+ if (host_name)
+ asprintf (&buf, "%s %s HTTP/1.1\r\nHost: %s\r\n%s\r\n", http_method, server_url, host_name, user_agent);
+ else
+ asprintf (&buf, "%s %s HTTP/1.0\r\n%s\r\n", http_method, server_url, user_agent);
/* tell HTTP/1.1 servers not to keep the connection alive */
asprintf (&buf, "%sConnection: close\r\n", buf);
- /* optionally send the host header info */
- if (host_name)
- asprintf (&buf, "%sHost: %s:%d\r\n", buf, host_name, server_port);
-
/* optionally send any other header tag */
if (http_opt_headers_count) {
for (i = 0; i < http_opt_headers_count ; i++) {
@@ -835,7 +837,7 @@ check_http (void)
#ifdef HAVE_SSL
np_net_ssl_cleanup();
#endif
- if(sd) close(sd);
+ if (sd) close(sd);
/* reset the alarm */
alarm (0);
@@ -1101,13 +1103,13 @@ redir (char *pos, char *status_line)
}
/* URI_HTTP URI_HOST URI_PORT */
- else if(sscanf (pos, HD3, type, addr, &i) == 3) {
+ else if (sscanf (pos, HD3, type, addr, &i) == 3) {
strcpy (url, HTTP_URL);
use_ssl = server_type_check (type);
}
/* URI_HTTP URI_HOST */
- else if(sscanf (pos, HD4, type, addr) == 2) {
+ else if (sscanf (pos, HD4, type, addr) == 2) {
strcpy (url, HTTP_URL);
use_ssl = server_type_check (type);
i = server_port_check (use_ssl);