Surround IPv6 literals with [] in Host: headers

This commit is contained in:
Mukund Sivaraman 2011-02-07 18:00:39 +05:30
parent 736e052dc1
commit 121a11d8e5

View File

@ -268,6 +268,7 @@ static int
establish_http_connection (struct conn_s *connptr, struct request_s *request) establish_http_connection (struct conn_s *connptr, struct request_s *request)
{ {
char portbuff[7]; char portbuff[7];
char dst[sizeof(struct in6_addr)];
/* Build a port string if it's not a standard port */ /* Build a port string if it's not a standard port */
if (request->port != HTTP_PORT && request->port != HTTP_PORT_SSL) if (request->port != HTTP_PORT && request->port != HTTP_PORT_SSL)
@ -275,12 +276,23 @@ establish_http_connection (struct conn_s *connptr, struct request_s *request)
else else
portbuff[0] = '\0'; portbuff[0] = '\0';
return write_message (connptr->server_fd, if (inet_pton(AF_INET6, request->host, dst) > 0) {
"%s %s HTTP/1.0\r\n" /* host is an IPv6 address literal, so surround it with
"Host: %s%s\r\n" * [] */
"Connection: close\r\n", return write_message (connptr->server_fd,
request->method, request->path, "%s %s HTTP/1.0\r\n"
request->host, portbuff); "Host: [%s]%s\r\n"
"Connection: close\r\n",
request->method, request->path,
request->host, portbuff);
} else {
return write_message (connptr->server_fd,
"%s %s HTTP/1.0\r\n"
"Host: %s%s\r\n"
"Connection: close\r\n",
request->method, request->path,
request->host, portbuff);
}
} }
/* /*