From: Alex Rousskov Date: Sun, 8 Mar 2009 19:45:44 +0000 (-0600) Subject: Split ACL.{cc,h} and src/acl_noncore.cc into acl/Acl and acl/Gadgets, moving X-Git-Tag: SQUID_3_2_0_1~1111^2~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c15d448c0ca84377717b20bfd692cb31074f6479;p=thirdparty%2Fsquid.git Split ACL.{cc,h} and src/acl_noncore.cc into acl/Acl and acl/Gadgets, moving high-level global functions into Gadgets and leaving basic API types in Acl. Moved horrific acl_access::containsPURGE into aclPurgeMethodInUse to avoid exposing basic ACL API to "strategy" templates and HTTP-specific PURGE method. The aclPurgeMethodInUse global lives in acl/libacls, which is a top-level library that already contains a lot of data-specific code. Context: SourceLayout: acl/, take 1 --- diff --git a/src/acl.cc b/src/acl/Acl.cc similarity index 90% rename from src/acl.cc rename to src/acl/Acl.cc index 2dda02b1b2..b996c70b8d 100644 --- a/src/acl.cc +++ b/src/acl/Acl.cc @@ -33,12 +33,10 @@ */ #include "config.h" -#include "ACL.h" -#include "ACLChecklist.h" +#include "acl/Acl.h" +#include "acl/Checklist.h" #include "ConfigParser.h" #include "dlink.h" -/* for special-case PURGE test */ -#include "HttpRequestMethod.h" const char *AclMatchedName = NULL; @@ -278,12 +276,12 @@ ACL::checklistMatches(ACLChecklist *checklist) { int rv; - if (NULL == checklist->request && requiresRequest()) { + if (!checklist->hasRequest() && requiresRequest()) { debugs(28, 1, "ACL::checklistMatches WARNING: '" << name << "' ACL is used but there is no HTTP request -- not matching."); return 0; } - if (NULL == checklist->reply && requiresReply()) { + if (!checklist->hasReply() && requiresReply()) { debugs(28, 1, "ACL::checklistMatches WARNING: '" << name << "' ACL is used but there is no HTTP reply -- not matching."); return 0; } @@ -321,35 +319,6 @@ ACL::~ACL() safe_free(cfgline); } -#include "ACLStrategised.h" -bool -acl_access::containsPURGE() const -{ - acl_access const *a = this; - ACLList *b; - - debugs(28, 6, "acl_access::containsPURGE: invoked for '" << cfgline << "'"); - - for (; a; a = a->next) { - for (b = a->aclList; b; b = b->next) { - ACLStrategised *tempAcl = dynamic_cast *>(b->_acl); - - if (!tempAcl) { - debugs(28, 7, "acl_access::containsPURGE: can't create tempAcl"); - continue; - } - - if (tempAcl->match(METHOD_PURGE)) { - debugs(28, 6, "acl_access::containsPURGE: returning true"); - return true; - } - } - } - - debugs(28, 6, "acl_access::containsPURGE: returning false"); - return false; -} - /* to be split into separate files in the future */ CBDATA_CLASS_INIT(acl_access); diff --git a/src/ACL.h b/src/acl/Acl.h similarity index 75% rename from src/ACL.h rename to src/acl/Acl.h index 374bca5077..cd5834aa33 100644 --- a/src/ACL.h +++ b/src/acl/Acl.h @@ -38,46 +38,9 @@ #include "Array.h" #include "cbdata.h" #include "dlink.h" -/** - \todo FIXME: finish splitting out the dependencies here - * - typedefs should not be needed to parse this. - */ -#include "typedefs.h" class ConfigParser; - -/* acl.c */ - -/// \ingroup ACLAPI -SQUIDCEXTERN void aclDestroyAccessList(acl_access **list); -/// \ingroup ACLAPI -SQUIDCEXTERN void aclDestroyAcls(ACL **); -/// \ingroup ACLAPI -SQUIDCEXTERN void aclDestroyAclList(ACLList **); -/// \ingroup ACLAPI -SQUIDCEXTERN void aclParseAccessLine(ConfigParser &parser, acl_access **); -/// \ingroup ACLAPI -SQUIDCEXTERN void aclParseAclList(ConfigParser &parser, ACLList **); -/// \ingroup ACLAPI -SQUIDCEXTERN int aclIsProxyAuth(const char *name); -/// \ingroup ACLAPI -SQUIDCEXTERN err_type aclGetDenyInfoPage(acl_deny_info_list ** head, const char *name, int redirect_allowed); - -/// \ingroup ACLAPI -SQUIDCEXTERN void aclParseDenyInfoLine(struct acl_deny_info_list **); - -/// \ingroup ACLAPI -SQUIDCEXTERN void aclDestroyDenyInfoList(struct acl_deny_info_list **); -/// \ingroup ACLAPI -SQUIDCEXTERN wordlist *aclDumpGeneric(const ACL *); -/// \ingroup ACLAPI -SQUIDCEXTERN 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); -/// \ingroup ACLAPI -extern const char *AclMatchedName; /* NULL */ +class ACLChecklist; /// \ingroup ACLAPI class ACL @@ -154,7 +117,6 @@ class acl_access public: void *operator new(size_t); void operator delete(void *); - bool containsPURGE() const; allow_t allow; ACLList *aclList; char *cfgline; @@ -194,4 +156,8 @@ public: MEMPROXY_CLASS_INLINE(acl_proxy_auth_match_cache); + +/// \ingroup ACLAPI +extern const char *AclMatchedName; /* NULL */ + #endif /* SQUID_ACL_H */ diff --git a/src/acl_noncore.cc b/src/acl/Gadgets.cc similarity index 91% rename from src/acl_noncore.cc rename to src/acl/Gadgets.cc index baa6b3eeaa..d2b5c5272e 100644 --- a/src/acl_noncore.cc +++ b/src/acl/Gadgets.cc @@ -39,8 +39,10 @@ */ #include "squid.h" -#include "ACL.h" -#include "ACLChecklist.h" +#include "acl/Acl.h" +#include "acl/Checklist.h" +#include "acl/Strategised.h" +#include "acl/Gadgets.h" #include "ConfigParser.h" #include "errorpage.h" #include "HttpRequest.h" @@ -318,5 +320,26 @@ aclDestroyDenyInfoList(acl_deny_info_list ** list) int aclPurgeMethodInUse(acl_access * a) { - return a->containsPURGE(); + ACLList *b; + + debugs(28, 6, "aclPurgeMethodInUse: invoked for '" << a->cfgline << "'"); + + for (; a; a = a->next) { + for (b = a->aclList; b; b = b->next) { + ACLStrategised *tempAcl = dynamic_cast *>(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; } diff --git a/src/acl/Gadgets.h b/src/acl/Gadgets.h new file mode 100644 index 0000000000..f33bdf4426 --- /dev/null +++ b/src/acl/Gadgets.h @@ -0,0 +1,43 @@ +#ifndef SQUID_ACL_GADGETS_H +#define SQUID_ACL_GADGETS_H + +#include "config.h" +#include "enums.h" /* for err_type */ + +struct dlink_list; +class StoreEntry; +class ConfigParser; +class acl_access; +class ACL; +class ACLList; +struct acl_deny_info_list; +class wordlist; + +/// \ingroup ACLAPI +extern void aclDestroyAccessList(acl_access **list); +/// \ingroup ACLAPI +extern void aclDestroyAcls(ACL **); +/// \ingroup ACLAPI +extern void aclDestroyAclList(ACLList **); +/// \ingroup ACLAPI +extern void aclParseAccessLine(ConfigParser &parser, acl_access **); +/// \ingroup ACLAPI +extern void aclParseAclList(ConfigParser &parser, ACLList **); +/// \ingroup ACLAPI +extern int aclIsProxyAuth(const char *name); +/// \ingroup ACLAPI +extern err_type aclGetDenyInfoPage(acl_deny_info_list ** head, const char *name, int redirect_allowed); +/// \ingroup ACLAPI +extern void aclParseDenyInfoLine(acl_deny_info_list **); +/// \ingroup ACLAPI +extern void aclDestroyDenyInfoList(acl_deny_info_list **); +/// \ingroup ACLAPI +extern wordlist *aclDumpGeneric(const ACL *); +/// \ingroup ACLAPI +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 */