Search squid archive

Logging ACL name with requests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I'm trying to log the name of the ACL that allowed/denied access for a particular request. I have a patch that seems to work fine on all my machines except one. On that one machine it'll work fine for several hours, but then begins logging other garbage; sometimes parts of URLs, other times it's just random bytes. I think my patch is correct and this machine has a problem, but I'd appreciate it if someone could take a look.

My real goal is to associate a username with requests that are allowed based on a whitelisted IP. I had originally done this using an external acl helper, but found that it was too slow and would cause connections to randomly fail. So instead I now generate a .conf file that is included with my main squid config which looks like this:

acl foo src 10.3.4.0/24
acl foo src 10.4.5.0/24
http_access allow foo

acl bar src 120.3.4.0/24
acl bar src 120.4.5.0/24
http_access allow bar

hence why I'm then trying to log the name of the ACL that allowed the connection. If there's a different way of doing that I'm open to suggestions.

Here's the patch, I allowed the ACL to be accessible via its own token or to replace the user one if the user is null.

Thanks,
--Will

Index: squid3-3.1.19/src/AccessLogEntry.h
===================================================================
--- squid3-3.1.19.orig/src/AccessLogEntry.h 2012-02-05 06:51:32.000000000 -0500
+++ squid3-3.1.19/src/AccessLogEntry.h	2012-03-29 00:57:22.000000000 -0400
@@ -96,6 +96,7 @@
                 msec(0),
                 rfc931 (NULL),
                 authuser (NULL),
+                aclname (NULL),
                 extuser(NULL)
 #if USE_SSL
                 ,ssluser(NULL)
@@ -114,6 +115,7 @@
         int msec;
         const char *rfc931;
         const char *authuser;
+        const char *aclname;
         const char *extuser;
 #if USE_SSL

Index: squid3-3.1.19/src/access_log.cc
===================================================================
--- squid3-3.1.19.orig/src/access_log.cc	2012-02-05 06:51:32.000000000 -0500
+++ squid3-3.1.19/src/access_log.cc	2012-03-29 01:01:43.000000000 -0400
@@ -404,6 +404,7 @@
     LFT_TAG,
     LFT_IO_SIZE_TOTAL,
     LFT_EXT_LOG,
+    LFT_ACCEPTED_ACL,

 #if USE_ADAPTATION
     LTF_ADAPTATION_SUM_XACT_TIMES,
@@ -561,6 +562,7 @@
     {"et", LFT_TAG},
     {"st", LFT_IO_SIZE_TOTAL},
     {"ea", LFT_EXT_LOG},
+    {"ACL", LFT_ACCEPTED_ACL},

     {"%", LFT_PERCENT},

@@ -1017,6 +1019,9 @@
             if (!out)
                 out = accessLogFormatName(al->cache.extuser);

+            if (!out)
+                out = accessLogFormatName(al->cache.aclname);
+
 #if USE_SSL

             if (!out)
@@ -1182,6 +1187,10 @@

             break;

+        case LFT_ACCEPTED_ACL:
+            out = al->cache.aclname;
+            break;
+
         case LFT_PERCENT:
             out = "%";

@@ -1764,6 +1773,9 @@
     if (!user)
         user = accessLogFormatName(al->cache.extuser);

+    if (!user)
+        user = accessLogFormatName(al->cache.aclname);
+
 #if USE_SSL

     if (!user)
@@ -2431,6 +2443,7 @@

     safe_free(aLogEntry->headers.reply);
     safe_free(aLogEntry->cache.authuser);
+    safe_free(aLogEntry->cache.aclname);

     safe_free(aLogEntry->headers.adapted_request);
     HTTPMSGUNLOCK(aLogEntry->adapted_request);
Index: squid3-3.1.19/src/client_side.cc
===================================================================
--- squid3-3.1.19.orig/src/client_side.cc 2012-02-05 06:51:32.000000000 -0500
+++ squid3-3.1.19/src/client_side.cc	2012-04-01 22:13:11.000000000 -0400
@@ -558,6 +558,8 @@

         al.cache.msec = tvSubMsec(start_time, current_time);

+        al.cache.aclname = xstrdup( aclname );
+
         if (request)
             prepareLogWithRequestDetails(request, &al);

Index: squid3-3.1.19/src/client_side_request.cc
===================================================================
--- squid3-3.1.19.orig/src/client_side_request.cc 2012-02-05 06:51:32.000000000 -0500 +++ squid3-3.1.19/src/client_side_request.cc 2012-04-01 22:13:24.000000000 -0400
@@ -588,6 +588,8 @@
     else if (http->request->auth_user_request != NULL)
proxy_auth_msg = http->request->auth_user_request->denyMessage("<null>");

+    http->aclname = AclMatchedName;
+
     if (answer != ACCESS_ALLOWED) {
         /* Send an error */
int require_auth = (answer == ACCESS_REQ_PROXY_AUTH || aclIsProxyAuth(AclMatchedName));
Index: squid3-3.1.19/src/client_side_request.h
===================================================================
--- squid3-3.1.19.orig/src/client_side_request.h 2012-02-05 06:51:32.000000000 -0500 +++ squid3-3.1.19/src/client_side_request.h 2012-03-26 22:54:59.000000000 -0400
@@ -98,6 +98,7 @@
     HttpRequest *request;		/* Parsed URL ... */
     char *uri;
     char *log_uri;
+    const char *aclname;

     struct {
         int64_t offset;


[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux