]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Simpler test for PURGE method
authorAmos Jeffries <squid3@treenet.co.nz>
Sun, 28 Jun 2009 08:11:27 +0000 (20:11 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Sun, 28 Jun 2009 08:11:27 +0000 (20:11 +1200)
Uses a tri-state setting on enable_purge and acl parsing to
detect PURGE method addition/removal instead of a complicated ACL
creation test post-configure.

This removes the annoying false errors about temp ACL and some minor
speed up in all actions that parse squid.conf.

src/acl/Gadgets.cc
src/acl/Gadgets.h
src/acl/MethodData.cc
src/cache_cf.cc
src/main.cc

index d2b5c5272e2c9a28a4939e314d457429cb393bf3..1e555f0e6986a909f0c9b29695693cf575b7cd69 100644 (file)
@@ -309,37 +309,3 @@ aclDestroyDenyInfoList(acl_deny_info_list ** list)
 
     *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;
-}
index f33bdf4426369436f49b260172a282dc7c7c0ef0..6c913b1a2b9fa4193c90eed13086351cc332f421 100644 (file)
@@ -37,7 +37,5 @@ extern wordlist *aclDumpGeneric(const ACL *);
 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 */
index b502f7be4872cf799ddf832e2adb36eabd25d97d..ad6cf3c9034b6cb5b1dc8ef01a543c9f55e4ab54 100644 (file)
@@ -89,6 +89,10 @@ ACLMethodData::parse()
 
     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;
index 0510c4e6b1fd41e27c9a0ee6e6da2512b465ee11..3f379b7315f6e1e0435c1710aa430e580654077b 100644 (file)
@@ -620,8 +620,10 @@ configDoConfigure(void)
 
 #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();
 
index 5a57f25ee95068bfd59a9091e3a89937c6ed22d6..2c785168d515d8d4b7707759816ab148ae3a1fcd 100644 (file)
@@ -709,7 +709,13 @@ mainReconfigureFinish(void *)
 
     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();