=== modified file 'src/acl/Gadgets.cc'
--- src/acl/Gadgets.cc	2009-03-08 19:45:44 +0000
+++ src/acl/Gadgets.cc	2009-05-03 07:21:35 +0000
@@ -309,37 +309,3 @@
 
     *list = NULL;
 }
-
-/*
- * This function traverses all ACL elements referenced
- * by an access list (presumably 'http_access').   If
- * it finds a PURGE method ACL, then it returns TRUE,
- * otherwise FALSE.
- */
-/* XXX: refactor this more sensibly. perhaps have the parser detect it ? */
-int
-aclPurgeMethodInUse(acl_access * a)
-{
-    ACLList *b;
-
-    debugs(28, 6, "aclPurgeMethodInUse: invoked for '" << a->cfgline << "'");
-
-    for (; a; a = a->next) {
-        for (b = a->aclList; b; b = b->next) {
-            ACLStrategised<HttpRequestMethod> *tempAcl = dynamic_cast<ACLStrategised<HttpRequestMethod> *>(b->_acl);
-
-            if (!tempAcl) {
-                debugs(28, 7, "aclPurgeMethodInUse: can't create tempAcl");
-                continue;
-            }
-
-            if (tempAcl->match(METHOD_PURGE)) {
-                debugs(28, 6, "aclPurgeMethodInUse: returning true");
-                return true;
-            }
-        }
-    }
-
-    debugs(28, 6, "aclPurgeMethodInUse: returning false");
-    return false;
-}

=== modified file 'src/acl/Gadgets.h'
--- src/acl/Gadgets.h	2009-03-08 19:45:44 +0000
+++ src/acl/Gadgets.h	2009-05-03 07:21:13 +0000
@@ -37,7 +37,5 @@
 extern void aclCacheMatchFlush(dlink_list * cache);
 /// \ingroup ACLAPI
 extern void dump_acl_access(StoreEntry * entry, const char *name, acl_access * head);
-/// \ingroup ACLAPI
-int aclPurgeMethodInUse(acl_access * a);
 
 #endif /* SQUID_ACL_GADGETS_H */

=== modified file 'src/acl/MethodData.cc'
--- src/acl/MethodData.cc	2009-04-06 13:22:42 +0000
+++ src/acl/MethodData.cc	2009-05-03 07:10:33 +0000
@@ -89,6 +89,10 @@
 
     for (Tail = &values; *Tail; Tail = &((*Tail)->next));
     while ((t = strtokFile())) {
+        if(strcmp(t, "PURGE") == 0) {
+            // we need to use PURGE, can't just blanket-deny it.
+            Config2.onoff.enable_purge = 1;
+        }
         CbDataList<HttpRequestMethod> *q = new CbDataList<HttpRequestMethod> (HttpRequestMethod(t, NULL));
         *(Tail) = q;
         Tail = &q->next;

=== modified file 'src/cache_cf.cc'
--- src/cache_cf.cc	2009-04-12 08:17:19 +0000
+++ src/cache_cf.cc	2009-05-03 07:10:33 +0000
@@ -608,8 +608,10 @@
 
 #endif
 
-    if (aclPurgeMethodInUse(Config.accessList.http))
-        Config2.onoff.enable_purge = 1;
+    // we have reconfigured and in the process disabled any need for PURGE.
+    // turn it off now.
+    if(Config2.onoff.enable_purge == 2)
+        Config2.onoff.enable_purge = 0;
 
     Config2.onoff.mangle_request_headers = httpReqHdrManglersConfigured();
 

=== modified file 'src/main.cc'
--- src/main.cc	2009-04-12 08:17:19 +0000
+++ src/main.cc	2009-05-03 07:10:33 +0000
@@ -709,7 +709,13 @@
 
     errorClean();
     enter_suid();		/* root to read config file */
+
+    // we may have disabled the need for PURGE
+    if(Config2.onoff.enable_purge)
+        Config2.onoff.enable_purge = 2;
+
     parseConfigFile(ConfigFile);
+
     setUmask(Config.umask);
     Mem::Report();
     setEffectiveUser();


