Группа :: Система/Серверы
Пакет: squid
Главная Изменения Спек Патчи Загрузить Bugs and FR
Патч: patch-aa.patch
diff -Nur squid-2.5.STABLE6.orig/src/access_log.c squid-2.5.STABLE6/src/access_log.c
--- squid-2.5.STABLE6.orig/src/access_log.c 2004-07-23 11:49:01 +0600
+++ squid-2.5.STABLE6/src/access_log.c 2004-07-23 13:00:57 +0600
@@ -224,7 +224,7 @@
return buf;
}
-static char *
+char *
accessLogFormatName(const char *name)
{
if (NULL == name)
diff -Nur squid-2.5.STABLE6.orig/src/client_side.c squid-2.5.STABLE6/src/client_side.c
--- squid-2.5.STABLE6.orig/src/client_side.c 2004-07-23 11:49:01 +0600
+++ squid-2.5.STABLE6/src/client_side.c 2004-07-23 13:01:24 +0600
@@ -2186,6 +2186,94 @@
kb_incr(&statCounter.client_http.kbytes_out, size);
if (isTcpHit(http->log_type))
kb_incr(&statCounter.client_http.hit_kbytes_out, size);
+ {
+ extern int acfd;
+ extern char *acfifo; /* XXX: for error handling */
+
+ if (acfd > -1) {
+ AccessLogEntry * al = &http->al;
+ const char *client = NULL;
+ char *user = NULL;
+ extern char *accessLogFormatName(const char *name);
+ char buf[0x4000];
+ int n;
+
+ ConnStateData *conn = http->conn;
+ request_t *request = http->request;
+ MemObject *mem = NULL;
+
+ if (http->entry)
+ mem = http->entry->mem_obj;
+ if (http->out.size || http->log_type) {
+ http->al.icp.opcode = ICP_INVALID;
+ http->al.url = http->log_uri;
+ if (mem) {
+ http->al.http.code = mem->reply->sline.status;
+ http->al.http.content_type =
+ strBuf(mem->reply->content_type);
+ }
+ http->al.cache.caddr = conn->log_addr;
+ http->al.cache.size = http->out.size;
+ http->al.cache.code = http->log_type;
+ http->al.cache.msec = tvSubMsec(http->start,
+ current_time);
+ if (request) {
+ Packer p;
+ MemBuf mb;
+ memBufDefInit(&mb);
+ packerToMemInit(&p, &mb);
+ httpHeaderPackInto(&request->header, &p);
+ http->al.http.method = request->method;
+ http->al.http.version = request->http_ver;
+ http->al.headers.request = xstrdup(mb.buf);
+ http->al.hier = request->hier;
+ if (request->auth_user_request) {
+ http->al.cache.authuser = xstrdup(
+ authenticateUserRequestUsername(
+ request->auth_user_request));
+ authenticateAuthUserRequestUnlock(
+ request->auth_user_request);
+ request->auth_user_request = NULL;
+ }
+ if (conn->rfc931[0])
+ http->al.cache.rfc931 = conn->rfc931;
+ packerClean(&p);
+ memBufClean(&mb);
+ }
+
+ if (Config.onoff.log_fqdn)
+ client = fqdncache_gethostbyaddr(
+ al->cache.caddr, FQDN_LOOKUP_IF_MISS);
+ if (client == NULL)
+ client = inet_ntoa(al->cache.caddr);
+
+ user = accessLogFormatName(al->cache.authuser ?
+ al->cache.authuser : al->cache.rfc931);
+ n = snprintf(buf, sizeof buf,
+ "%9d.%03d %6d %s %s/%03d %ld (+%ld) "
+ "%s %s %s%s/%s %s\n",
+ (int) current_time.tv_sec,
+ (int) current_time.tv_usec / 1000,
+ al->cache.msec,
+ client,
+ log_tags[al->cache.code],
+ al->http.code,
+ (long int) al->cache.size,
+ size,
+ al->url,
+ user && *user ? user : dash_str,
+ al->hier.ping.timedout ? "TIMEOUT_" : "",
+ hier_strings[al->hier.code],
+ al->hier.host,
+ al->http.content_type);
+
+ /* XXX: blocking write */
+ write(acfd, buf, n > sizeof buf ? sizeof buf : n);
+
+ safe_free(user);
+ }
+ } /* if */
+ }
}
#if SIZEOF_SIZE_T == 4
if (http->out.size > 0x7FFF0000) {
diff -Nur squid-2.5.STABLE6.orig/src/main.c squid-2.5.STABLE6/src/main.c
--- squid-2.5.STABLE6.orig/src/main.c 2004-07-23 11:49:01 +0600
+++ squid-2.5.STABLE6/src/main.c 2004-07-23 13:01:55 +0600
@@ -35,6 +35,10 @@
#include "squid.h"
+int acfd = -1;
+char *acfifo = NULL;
+
+
/* for error reporting from xmalloc and friends */
extern void (*failure_notify) (const char *);
@@ -95,6 +99,7 @@
" -s Enable logging to syslog.\n"
" -u port Specify ICP port number (default: %d), disable with 0.\n"
" -v Print version.\n"
+ " -x fifo Print account log to fifo. default: /dev/null :))\n"
" -z Create swap directories\n"
" -C Do not catch fatal signals.\n"
" -D Disable initial DNS tests.\n"
@@ -115,7 +120,10 @@
extern char *optarg;
int c;
- while ((c = getopt(argc, argv, "CDFNRSVYXa:d:f:hk:m::su:vz?")) != -1) {
+ while ((c = getopt(argc, argv,
+ "CDFNRSVYXa:d:f:hk:m::su:v"
+ "x:"
+ "z?")) != -1) {
switch (c) {
case 'C':
opt_catch_signals = 0;
@@ -222,6 +230,9 @@
printf("Squid Cache: Version %s\nconfigure options: %s\n", version_string, SQUID_CONFIGURE_OPTIONS);
exit(0);
/* NOTREACHED */
+ case 'x':
+ acfifo = optarg;
+ break;
case 'z':
opt_create_swap_dirs = 1;
break;
@@ -579,6 +590,18 @@
eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10.0, 1);
eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15.0, 1);
}
+ if (!configured_once && acfifo)
+ for (;;) {
+ if ((acfd = open(acfifo, O_WRONLY)) < 0) {
+ if (errno == EINTR)
+ continue;
+ if (errno == ENOENT &&
+ mkfifo(acfifo, 0640) < 0)
+ err(1, acfifo);
+ continue;
+ }
+ break;
+ }
configured_once = 1;
}