Hi all.

I need to make squid-2.5.STABLE5 write information into access.log during downloading 
process but not after downloading whole file. Is there any official patches for that?

P.S. I have found patch-aa for squid-2.5.STABLE1, but it does not work (even in 
STABLE1). Maybe somebody can find an errors in this patch?

Best regards,
slivarez


********************patch-aa*************************
--- access_log.c.orig   Sun Jun 16 18:25:40 2002
+++ access_log.c        Mon Mar 31 11:23:03 2003
@@ -223,7 +223,11 @@
     return buf;
 }
 
+#ifdef ACLOG
+char *
+#else
 static char *
+#endif
 accessLogFormatName(const char *name)
 {
     if (NULL == name)
--- client_side.c.orig  Mon Sep 23 11:04:03 2002
+++ client_side.c       Mon Mar 31 14:58:13 2003
@@ -1,4 +1,3 @@
-
 /*
  * $Id: client_side.c,v 1.561.2.20 2002/09/23 04:04:03 wessels Exp $
  *
@@ -2096,6 +2096,98 @@
        kb_incr(&statCounter.client_http.kbytes_out, size);
        if (isTcpHit(http->log_type))
            kb_incr(&statCounter.client_http.hit_kbytes_out, size);
+
+#ifdef ACLOG
+       {
+       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 */
+       }
+#endif
+
     }
 #if SIZEOF_SIZE_T == 4
     if (http->out.size > 0x7FFF0000) {
--- main.c.orig Mon Mar 31 14:10:38 2003
+++ main.c      Mon Mar 31 15:09:48 2003
@@ -35,6 +35,11 @@
 
 #include "squid.h"
 
+#ifdef ACLOG
+int acfd = -1;
+char *acfifo = NULL;
+#endif
+
 /* for error reporting from xmalloc and friends */
 extern void (*failure_notify) (const char *);
 
@@ -95,6 +100,9 @@
        "       -s        Enable logging to syslog.\n"
        "       -u port   Specify ICP port number (default: %d), disable with 0.\n"
        "       -v        Print version.\n"
+#ifdef ACLOG
+       "       -x fifo   Print account log to fifo. default: /dev/null :))\n"
+#endif
        "       -z        Create swap directories\n"
        "       -C        Do not catch fatal signals.\n"
        "       -D        Disable initial DNS tests.\n"
@@ -115,7 +123,12 @@
     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"
+#ifdef ACLOG
+                       "x:"
+#endif
+                       "z?")) != -1) {
        switch (c) {
        case 'C':
            opt_catch_signals = 0;
@@ -222,6 +235,11 @@
            printf("Squid Cache: Version %s\nconfigure options: %s\n", version_string, 
SQUID_CONFIGURE_OPTIONS);
            exit(0);
            /* NOTREACHED */
+#ifdef ACLOG
+       case 'x': 
+               acfifo = optarg;
+               break;
+#endif
        case 'z':
            opt_create_swap_dirs = 1;
            break;
@@ -571,6 +589,22 @@
        eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10.0, 1);
        eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15.0, 1);
     }
+
+#ifdef ACLOG
+       if (!configured_once && acfifo)
+               for (;;) {
+                       if ((acfd = open(acfifo, O_WRONLY)) < 0) {
+                               if (errno == EINTR)
+                                       continue;
+                               if (errno == ENOENT &&
+                                               mkfifo(acfifo, 0644) < 0)
+                                       err(1, acfifo);
+                               continue;
+                       }
+                       break;
+               }
+#endif
+
     configured_once = 1;
 }
*************************end of patch*******************************

Reply via email to