log referer in accesslog if present.

This commit is contained in:
Joris Vink 2018-06-29 22:37:48 +02:00
parent 6dca7d51e6
commit 4a8d8ab7f8
3 changed files with 20 additions and 2 deletions

View File

@ -35,6 +35,7 @@ extern "C" {
#define HTTP_BODY_MAX_LEN 1024000
#define HTTP_URI_LEN 2000
#define HTTP_USERAGENT_LEN 256
#define HTTP_REFERER_LEN 256
#define HTTP_REQ_HEADER_MAX 25
#define HTTP_MAX_QUERY_ARGS 20
#define HTTP_MAX_COOKIES 10
@ -219,6 +220,7 @@ struct http_request {
const char *path;
const char *host;
const char *agent;
const char *referer;
struct connection *owner;
u_int8_t *headers;
struct kore_buf *http_body;

View File

@ -31,6 +31,7 @@ struct kore_log_packet {
char host[KORE_DOMAINNAME_LEN];
char path[HTTP_URI_LEN];
char agent[HTTP_USERAGENT_LEN];
char referer[HTTP_REFERER_LEN];
#if !defined(KORE_NO_TLS)
char cn[X509_CN_LENGTH];
#endif
@ -110,9 +111,9 @@ kore_accesslog_write(const void *data, u_int32_t len)
(void)strftime(tbuf, sizeof(tbuf), "%d/%b/%Y:%H:%M:%S %z", tm);
l = asprintf(&buf,
"%s - %s [%s] \"%s %s HTTP/1.1\" %d %zu \"-\" \"%s\"\n",
"%s - %s [%s] \"%s %s HTTP/1.1\" %d %zu \"%s\" \"%s\"\n",
addr, cn, tbuf, method, logpacket.path, logpacket.status,
logpacket.length, logpacket.agent);
logpacket.length, logpacket.referer, logpacket.agent);
if (l == -1) {
kore_log(LOG_WARNING,
"kore_accesslog_write(): asprintf(): %s", errno_s);
@ -171,6 +172,17 @@ kore_accesslog(struct http_request *req)
sizeof(logpacket.agent));
}
if (req->referer != NULL) {
if (kore_strlcpy(logpacket.referer, req->referer,
sizeof(logpacket.referer)) >= sizeof(logpacket.referer)) {
kore_log(LOG_NOTICE,
"kore_accesslog: referer truncated");
}
} else {
(void)kore_strlcpy(logpacket.referer, "-",
sizeof(logpacket.referer));
}
#if !defined(KORE_NO_TLS)
memset(logpacket.cn, '\0', sizeof(logpacket.cn));
if (req->owner->cert != NULL) {

View File

@ -685,6 +685,10 @@ http_header_recv(struct netbuf *nb)
if (req->agent == NULL &&
!strcasecmp(hdr->header, "user-agent"))
req->agent = hdr->value;
if (req->referer == NULL &&
!strcasecmp(hdr->header, "referer"))
req->referer = hdr->value;
}
if (req->flags & HTTP_REQUEST_EXPECT_BODY) {