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
*/
#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;
{
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;
}
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<HttpRequestMethod> *tempAcl = dynamic_cast<ACLStrategised<HttpRequestMethod> *>(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);
#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
public:
void *operator new(size_t);
void operator delete(void *);
- bool containsPURGE() const;
allow_t allow;
ACLList *aclList;
char *cfgline;
MEMPROXY_CLASS_INLINE(acl_proxy_auth_match_cache);
+
+/// \ingroup ACLAPI
+extern const char *AclMatchedName; /* NULL */
+
#endif /* SQUID_ACL_H */
*/
#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"
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<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;
}
--- /dev/null
+#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 */