%la for intercepted connections This patch adjusts the %la logformat code handling for intercepted connections based on the following rules: - If the corresponding http_port or https_port option has an explicit listening host name or IP address, then log the IP address. - Otherwise, log a dash character. Also adjusts %lp logformat code handling for intercepted connections to always log the port number from the corresponding http_port or https_port option. === modified file 'src/AccessLogEntry.h' --- src/AccessLogEntry.h 2011-08-20 08:21:11 +0000 +++ src/AccessLogEntry.h 2011-08-27 14:38:03 +0000 @@ -39,6 +39,7 @@ #if ICAP_CLIENT #include "adaptation/icap/Elements.h" #endif +#include "ProtoPort.h" /* forward decls */ class HttpReply; @@ -148,6 +149,7 @@ const char *ssluser; #endif + http_port_list *port; } cache; === modified file 'src/cf.data.pre' --- src/cf.data.pre 2011-08-30 09:10:14 +0000 +++ src/cf.data.pre 2011-09-06 14:54:38 +0000 @@ -2897,6 +2897,13 @@ >la Local IP address the client connected to >lp Local port number the client connected to + la Local IP address the client connection uses. + This tag includes the direct client connections + plus the intercepted connections. + lp Local port number the client connection uses. + This tag includes the direct client connetions + plus the intercepted connections. + log_addr; + if (getConn() != NULL) { + al.cache.caddr = getConn()->log_addr; + al.cache.port = cbdataReference(getConn()->port); + } al.cache.requestSize = req_sz; al.cache.requestHeadersSize = req_sz; === modified file 'src/format/Format.cc' --- src/format/Format.cc 2011-08-25 12:32:02 +0000 +++ src/format/Format.cc 2011-09-06 15:49:38 +0000 @@ -365,14 +365,30 @@ } break; - case LFT_CLIENT_LOCAL_IP_OLD_31: + case LFT_CLIENT_LOCAL_USED_IP: + if (al->tcpClient != NULL) { + if ((al->request->flags.spoof_client_ip || al->request->flags.intercepted) && al->cache.port) { + if (!al->cache.port->s.IsAnyAddr()) + out = al->cache.port->s.NtoA(tmp, sizeof(tmp)); + } else + out = al->tcpClient->local.NtoA(tmp, sizeof(tmp)); + } + break; case LFT_CLIENT_LOCAL_IP: if (al->tcpClient != NULL) { out = al->tcpClient->local.NtoA(tmp,sizeof(tmp)); } break; - case LFT_CLIENT_LOCAL_PORT_OLD_31: + case LFT_CLIENT_LOCAL_USED_PORT: + if (al->tcpClient != NULL) { + if ((al->request->flags.spoof_client_ip || al->request->flags.intercepted) && al->cache.port) + outint = al->cache.port->s.GetPort(); + else + outint = al->tcpClient->local.GetPort(); + doint = 1; + } + break; case LFT_CLIENT_LOCAL_PORT: if (al->tcpClient != NULL) { outint = al->tcpClient->local.GetPort(); === modified file 'src/format/Tokens.cc' --- src/format/Tokens.cc 2011-08-29 11:46:04 +0000 +++ src/format/Tokens.cc 2011-09-06 15:49:38 +0000 @@ -62,9 +62,9 @@ static struct TokenTableEntry TokenTable2C[] = { {">la", LFT_CLIENT_LOCAL_IP}, - {"la", LFT_CLIENT_LOCAL_IP_OLD_31}, + {"la", LFT_CLIENT_LOCAL_USED_IP}, {">lp", LFT_CLIENT_LOCAL_PORT}, - {"lp", LFT_CLIENT_LOCAL_PORT_OLD_31}, + {"lp", LFT_CLIENT_LOCAL_USED_PORT}, /*{ "lA", LFT_LOCAL_NAME }, */ {"la\" instead."); type = LFT_CLIENT_LOCAL_IP; break; - case LFT_CLIENT_LOCAL_PORT_OLD_31: + case LFT_CLIENT_LOCAL_USED_PORT: debugs(46, 0, "WARNING: The \"lp\" formatting code is deprecated. Use the \">lp\" instead."); type = LFT_CLIENT_LOCAL_PORT; break; === modified file 'src/format/Tokens.h' --- src/format/Tokens.h 2011-08-25 12:32:02 +0000 +++ src/format/Tokens.h 2011-09-06 15:49:38 +0000 @@ -35,9 +35,9 @@ LFT_SERVER_PORT, LFT_CLIENT_LOCAL_IP, - LFT_CLIENT_LOCAL_IP_OLD_31, + LFT_CLIENT_LOCAL_USED_IP, LFT_CLIENT_LOCAL_PORT, - LFT_CLIENT_LOCAL_PORT_OLD_31, + LFT_CLIENT_LOCAL_USED_PORT, /*LFT_LOCAL_NAME, */ LFT_SERVER_LOCAL_IP, === modified file 'src/log/access_log.cc' --- src/log/access_log.cc 2011-08-21 00:12:49 +0000 +++ src/log/access_log.cc 2011-08-27 14:36:50 +0000 @@ -596,6 +596,7 @@ HTTPMSGUNLOCK(aLogEntry->icap.reply); HTTPMSGUNLOCK(aLogEntry->icap.request); #endif + cbdataReferenceDone(aLogEntry->cache.port); } int