aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2012-12-19 16:43:28 +0000
committerDavid Shaw <[email protected]>2012-12-19 16:43:28 +0000
commit6c3a76cca064070d0a9e636fedc824415e710451 (patch)
tree74fb7838256fcdb3c7417ff27565ddf6011ed224
parentRemove trailing white space from some files (diff)
downloadgnupg-6c3a76cca064070d0a9e636fedc824415e710451.tar.gz
gnupg-6c3a76cca064070d0a9e636fedc824415e710451.zip
Part of issue 1447: Pass proper Host header when SRV is used.
* common/http.c (send_request, connect_server): Set proper Host header (no :port, host is that of the SRV) when SRV is used in the curl-shim. Backported from cbe98b2cb1e40ba253300e604996681ae191e363
-rw-r--r--util/http.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/util/http.c b/util/http.c
index e5db605a1..2f630ae58 100644
--- a/util/http.c
+++ b/util/http.c
@@ -599,16 +599,18 @@ send_request( HTTP_HD hd, const char *auth, const char *proxy,
authstr?authstr:"",proxy_authstr?proxy_authstr:"" );
else
{
- char portstr[15];
+ char portstr[35];
- if(port!=80)
+ if(port == 80 || (srv && srv->used_server))
+ *portstr = 0;
+ else
sprintf(portstr,":%u",port);
sprintf( request, "%s %s%s HTTP/1.0\r\nHost: %s%s\r\n%s",
hd->req_type == HTTP_REQ_GET ? "GET" :
hd->req_type == HTTP_REQ_HEAD? "HEAD":
hd->req_type == HTTP_REQ_POST? "POST": "OOPS",
- *p == '/'? "":"/", p, server, (port!=80)?portstr:"",
+ *p == '/'? "":"/", p, server, portstr,
authstr?authstr:"");
}
@@ -822,6 +824,7 @@ connect_server( const char *server, ushort port, unsigned int flags,
int connected = 0;
int hostfound = 0;
int chosen = -1;
+ int fakesrv = 0;
struct srventry *srvlist = NULL;
int srvindex;
@@ -885,7 +888,8 @@ connect_server( const char *server, ushort port, unsigned int flags,
srvlist->port=port;
strncpy(srvlist->target,server,MAXDNAME);
srvlist->target[MAXDNAME-1]='\0';
- srvcount=1;
+ srvcount = 1;
+ fakesrv = 1;
}
#ifdef HAVE_GETADDRINFO
@@ -986,7 +990,7 @@ connect_server( const char *server, ushort port, unsigned int flags,
}
#endif /* !HAVE_GETADDRINFO */
- if(chosen > -1 && srv)
+ if(!fakesrv && chosen > -1 && srv)
{
srv->used_server = strdup (srvlist[chosen].target);
srv->used_port = srvlist[chosen].port;