]> git.ipfire.org Git - thirdparty/squid.git/blob - src/AccessLogEntry.cc
SourceFormat Enforcement
[thirdparty/squid.git] / src / AccessLogEntry.cc
1 /*
2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #include "squid.h"
10 #include "AccessLogEntry.h"
11 #include "HttpReply.h"
12 #include "HttpRequest.h"
13 #include "SquidConfig.h"
14
15 #if USE_OPENSSL
16 #include "ssl/support.h"
17
18 AccessLogEntry::SslDetails::SslDetails(): user(NULL), bumpMode(::Ssl::bumpEnd)
19 {
20 }
21 #endif /* USE_OPENSSL */
22
23 void
24 AccessLogEntry::getLogClientIp(char *buf, size_t bufsz) const
25 {
26 Ip::Address log_ip;
27
28 #if FOLLOW_X_FORWARDED_FOR
29 if (Config.onoff.log_uses_indirect_client && request)
30 log_ip = request->indirect_client_addr;
31 else
32 #endif
33 if (tcpClient != NULL)
34 log_ip = tcpClient->remote;
35 else if (cache.caddr.isNoAddr()) { // e.g., ICAP OPTIONS lack client
36 strncpy(buf, "-", bufsz);
37 return;
38 } else
39 log_ip = cache.caddr;
40
41 // Apply so-called 'privacy masking' to IPv4 clients
42 // - localhost IP is always shown in full
43 // - IPv4 clients masked with client_netmask
44 // - IPv6 clients use 'privacy addressing' instead.
45
46 if (!log_ip.isLocalhost() && log_ip.isIPv4())
47 log_ip.applyMask(Config.Addrs.client_netmask);
48
49 log_ip.toStr(buf, bufsz);
50 }
51
52 SBuf
53 AccessLogEntry::getLogMethod() const
54 {
55 SBuf method;
56 if (icp.opcode)
57 method.append(icp_opcode_str[icp.opcode]);
58 else if (htcp.opcode)
59 method.append(htcp.opcode);
60 else
61 method = http.method.image();
62 return method;
63 }
64
65 AccessLogEntry::~AccessLogEntry()
66 {
67 safe_free(headers.request);
68
69 #if USE_ADAPTATION
70 safe_free(adapt.last_meta);
71 #endif
72
73 safe_free(headers.reply);
74
75 safe_free(headers.adapted_request);
76 HTTPMSGUNLOCK(adapted_request);
77
78 safe_free(lastAclName);
79 safe_free(lastAclData);
80
81 HTTPMSGUNLOCK(reply);
82 HTTPMSGUNLOCK(request);
83 #if ICAP_CLIENT
84 HTTPMSGUNLOCK(icap.reply);
85 HTTPMSGUNLOCK(icap.request);
86 #endif
87 }
88