This patch add a new ACL type: max_body_size. This will be matched when
the client's HTTP request body is greater than X bytes.

Example: 

acl users max_body_size 100000


Comments and suggestions are welcome...


diff -Nur squid-2.5.STABLE4-20040208/src/acl.c 
squid-2.5.STABLE4-20040208-diegows/src/acl.c
--- squid-2.5.STABLE4-20040208/src/acl.c        Thu Jan 15 04:43:57 2004
+++ squid-2.5.STABLE4-20040208-diegows/src/acl.c        Sun Feb  8 15:49:57 2004
@@ -178,6 +178,8 @@
        return ACL_MAX_USER_IP;
     if (!strcmp(s, "external"))
        return ACL_EXTERNAL;
+    if (!strcmp(s, "max_body_size"))
+       return ACL_MAX_BODY_SIZE;
     if (!strcmp(s, "urllogin"))
        return ACL_URLLOGIN;
     return ACL_NONE;
@@ -254,6 +256,8 @@
        return "max_user_ip";
     if (type == ACL_EXTERNAL)
        return "external";
+    if (type == ACL_MAX_BODY_SIZE)
+       return "max_body_size";
     if (type == ACL_URLLOGIN)
        return "urllogin";
     return "ERROR";
@@ -757,6 +761,7 @@
     case ACL_SRC_ASN:
     case ACL_MAXCONN:
     case ACL_DST_ASN:
+    case ACL_MAX_BODY_SIZE:
        aclParseIntlist(&A->data);
        break;
     case ACL_MAX_USER_IP:
@@ -1587,6 +1592,8 @@
        k = clientdbEstablished(checklist->src_addr, 0);
        return ((k > ((intlist *) ae->data)->i) ? 1 : 0);
        /* NOTREACHED */
+    case ACL_MAX_BODY_SIZE:
+       return ((r->content_length > ((intlist *) ae->data)->i) ? 1 : 0);
     case ACL_URL_PORT:
        return aclMatchIntegerRange(ae->data, (int) r->port);
        /* NOTREACHED */
@@ -2149,6 +2156,9 @@
        case ACL_MAXCONN:
            intlistDestroy((intlist **) & a->data);
            break;
+       case ACL_MAX_BODY_SIZE:
+           intlistDestroy((intlist **) & a->data);
+           break;
        case ACL_MAX_USER_IP:
            aclDestroyUserMaxIP(&a->data);
            break;
@@ -2557,6 +2567,7 @@
     case ACL_SRC_ASN:
     case ACL_MAXCONN:
     case ACL_DST_ASN:
+    case ACL_MAX_BODY_SIZE:
        return aclDumpIntlistList(a->data);
     case ACL_MAX_USER_IP:
        return aclDumpUserMaxIP(a->data);
diff -Nur squid-2.5.STABLE4-20040208/src/cf.data.pre 
squid-2.5.STABLE4-20040208-diegows/src/cf.data.pre
--- squid-2.5.STABLE4-20040208/src/cf.data.pre  Wed Feb  4 14:42:28 2004
+++ squid-2.5.STABLE4-20040208-diegows/src/cf.data.pre  Sun Feb  8 19:29:05 2004
@@ -2082,6 +2082,10 @@
          # effect in rules that affect the reply data stream such as
          # http_reply_access.
 
+       acl aclname max_body_size <bytes>
+         # This will be matched when the client's HTTP Request Body is
+         # greater than <bytes>.
+
        acl acl_name external class_name [arguments...]
          # external ACL lookup via a helper class defined by the
          # external_acl_type directive.
diff -Nur squid-2.5.STABLE4-20040208/src/enums.h 
squid-2.5.STABLE4-20040208-diegows/src/enums.h
--- squid-2.5.STABLE4-20040208/src/enums.h      Wed Feb  4 14:42:28 2004
+++ squid-2.5.STABLE4-20040208-diegows/src/enums.h      Sun Feb  8 15:34:06 2004
@@ -137,6 +137,7 @@
     ACL_MAX_USER_IP,
     ACL_EXTERNAL,
     ACL_URLLOGIN,
+    ACL_MAX_BODY_SIZE,
     ACL_ENUM_MAX
 } squid_acl;
 

Reply via email to