diff options
author | David Shaw <[email protected]> | 2012-12-19 16:43:28 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2012-12-19 16:43:28 +0000 |
commit | 6c3a76cca064070d0a9e636fedc824415e710451 (patch) | |
tree | 74fb7838256fcdb3c7417ff27565ddf6011ed224 | |
parent | Remove trailing white space from some files (diff) | |
download | gnupg-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.c | 14 |
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; |