diff options
author | Gene Cumm <gene.cumm@gmail.com> | 2015-10-10 10:00:02 -0400 |
---|---|---|
committer | Gene Cumm <gene.cumm@gmail.com> | 2015-10-10 10:00:02 -0400 |
commit | d04e8b2ffd982e58111e03e413136f3b7ec4b9dc (patch) | |
tree | e3cbfdee7e5caa0e7feff70e252a926c41a1c0c8 | |
parent | d27385b833820d1b9d0df5d4b9e3feea84b86cdc (diff) | |
download | syslinux-d04e8b2ffd982e58111e03e413136f3b7ec4b9dc.tar.gz syslinux-d04e8b2ffd982e58111e03e413136f3b7ec4b9dc.tar.xz syslinux-d04e8b2ffd982e58111e03e413136f3b7ec4b9dc.zip |
core/http: Append port number to Host field if needed
HTTP/1.1 header Host must contain the port number if not default for the
protocol. Host isn't a part of HTTP/1.0 but let's implement it right.
Reported-By: Michael DeCandia <michael.decandia@gmail.com>
Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
-rw-r--r-- | core/fs/pxe/http.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/core/fs/pxe/http.c b/core/fs/pxe/http.c index bd18f3cb..f5f49e2b 100644 --- a/core/fs/pxe/http.c +++ b/core/fs/pxe/http.c @@ -211,12 +211,25 @@ void http_open(struct url_info *url, int flags, struct inode *inode, header_bytes += snprintf(header_buf + header_bytes, header_len - header_bytes, " HTTP/1.0\r\n" - "Host: %s\r\n" + "Host: %s", + url->host); + if (header_bytes >= header_len) + goto fail; /* Buffer overflow */ + if (url->port != HTTP_PORT) { + header_bytes += snprintf(header_buf + header_bytes, + header_len - header_bytes, + ":%d", url->port); + if (header_bytes >= header_len) + goto fail; /* Buffer overflow */ + } + header_bytes += snprintf(header_buf + header_bytes, + header_len - header_bytes, + "\r\n" "User-Agent: Syslinux/" VERSION_STR "\r\n" "Connection: close\r\n" "%s" "\r\n", - url->host, cookie_buf ? cookie_buf : ""); + cookie_buf ? cookie_buf : ""); if (header_bytes >= header_len) goto fail; /* Buffer overflow */ |