summaryrefslogtreecommitdiffstats
path: root/lib/libfetch/http.c
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2002-11-28 12:07:15 +0000
committerdes <des@FreeBSD.org>2002-11-28 12:07:15 +0000
commitb8dad5d242017f8252e395314aed513516be3306 (patch)
treea975785e404c570108050c0b7a4fb3ae6fccd9c4 /lib/libfetch/http.c
parent76681d4bc6ae81d79db586f5960e4d1284f57652 (diff)
downloadFreeBSD-src-b8dad5d242017f8252e395314aed513516be3306.zip
FreeBSD-src-b8dad5d242017f8252e395314aed513516be3306.tar.gz
Implement and document support for an HTTP_REFERER environment variable.
PR: 28171 Submitted by: Andre Albsmeier <andre.albsmeier@mchp.siemens.de> Approved by: re (bmah) MFC after: 1 week
Diffstat (limited to 'lib/libfetch/http.c')
-rw-r--r--lib/libfetch/http.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/lib/libfetch/http.c b/lib/libfetch/http.c
index f28e2ea..00f28e8 100644
--- a/lib/libfetch/http.c
+++ b/lib/libfetch/http.c
@@ -776,10 +776,7 @@ _http_request(struct url *URL, const char *op, struct url_stat *us,
const char *p;
FILE *f;
hdr_t h;
- char *host;
-#ifdef INET6
- char hbuf[MAXHOSTNAMELEN + 1];
-#endif
+ char hbuf[MAXHOSTNAMELEN + 7], *host;
direct = CHECK_FLAG('d');
noredirect = CHECK_FLAG('A');
@@ -831,24 +828,29 @@ _http_request(struct url *URL, const char *op, struct url_stat *us,
host = hbuf;
}
#endif
+ if (url->port != _fetch_default_port(url->scheme)) {
+ if (host != hbuf) {
+ strcpy(hbuf, host);
+ host = hbuf;
+ }
+ snprintf(hbuf + strlen(hbuf),
+ sizeof(hbuf) - strlen(hbuf), ":%d", url->port);
+ }
/* send request */
if (verbose)
- _fetch_info("requesting %s://%s:%d%s",
- url->scheme, host, url->port, url->doc);
+ _fetch_info("requesting %s://%s%s",
+ url->scheme, host, url->doc);
if (purl) {
- _http_cmd(conn, "%s %s://%s:%d%s HTTP/1.1",
- op, url->scheme, host, url->port, url->doc);
+ _http_cmd(conn, "%s %s://%s%s HTTP/1.1",
+ op, url->scheme, host, url->doc);
} else {
_http_cmd(conn, "%s %s HTTP/1.1",
op, url->doc);
}
/* virtual host */
- if (url->port == _fetch_default_port(url->scheme))
- _http_cmd(conn, "Host: %s", host);
- else
- _http_cmd(conn, "Host: %s:%d", host, url->port);
+ _http_cmd(conn, "Host: %s", host);
/* proxy authorization */
if (purl) {
@@ -874,6 +876,13 @@ _http_request(struct url *URL, const char *op, struct url_stat *us,
}
/* other headers */
+ if ((p = getenv("HTTP_REFERER")) != NULL && *p != '\0') {
+ if (strcasecmp(p, "auto") == 0)
+ _http_cmd(conn, "Referer: %s://%s%s",
+ url->scheme, host, url->doc);
+ else
+ _http_cmd(conn, "Referer: %s", p);
+ }
if ((p = getenv("HTTP_USER_AGENT")) != NULL && *p != '\0')
_http_cmd(conn, "User-Agent: %s", p);
else
OpenPOWER on IntegriCloud