]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Rename class ACL to Acl::Node (#1631)
authorFrancesco Chemolli <5175948+kinkie@users.noreply.github.com>
Thu, 11 Jan 2024 17:02:06 +0000 (17:02 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Fri, 12 Jan 2024 18:37:45 +0000 (18:37 +0000)
There is a name clash between Squid's ACL and
MS Windows' ACL (http://tinyurl.com/ns-winnt-acl).

85 files changed:
src/AclRegs.cc
src/ExternalACL.h
src/SquidConfig.h
src/acl/Acl.cc
src/acl/Acl.h
src/acl/AdaptationService.h
src/acl/Address.h
src/acl/AllOf.cc
src/acl/AllOf.h
src/acl/AnnotateClient.h
src/acl/AnnotateTransaction.h
src/acl/AnyOf.h
src/acl/Arp.h
src/acl/Asn.cc
src/acl/AtStep.h
src/acl/BoolOps.cc
src/acl/BoolOps.h
src/acl/Certificate.h
src/acl/Checklist.cc
src/acl/Checklist.h
src/acl/ConnMark.h
src/acl/ConnectionsEncrypted.h
src/acl/DestinationAsn.h
src/acl/DestinationDomain.cc
src/acl/DestinationDomain.h
src/acl/DestinationIp.cc
src/acl/DestinationIp.h
src/acl/Eui64.h
src/acl/ExtUser.h
src/acl/FilledChecklist.h
src/acl/Gadgets.cc
src/acl/Gadgets.h
src/acl/HasComponent.h
src/acl/HierCode.h
src/acl/HttpRepHeader.h
src/acl/HttpReqHeader.h
src/acl/HttpStatus.h
src/acl/InnerNode.cc
src/acl/InnerNode.h
src/acl/Ip.h
src/acl/LocalPort.h
src/acl/Makefile.am
src/acl/MaxConnection.h
src/acl/Method.h
src/acl/MyPortName.h
src/acl/Node.h [new file with mode: 0644]
src/acl/Note.h
src/acl/Options.h
src/acl/ParameterizedNode.h
src/acl/PeerName.h
src/acl/Protocol.h
src/acl/Random.h
src/acl/ReplyHeaderStrategy.h
src/acl/RequestHeaderStrategy.h
src/acl/ServerCertificate.h
src/acl/ServerName.h
src/acl/SourceAsn.h
src/acl/SourceDomain.cc
src/acl/SourceDomain.h
src/acl/SquidError.h
src/acl/SslError.h
src/acl/Tag.h
src/acl/Time.h
src/acl/TransactionInitiator.h
src/acl/Tree.cc
src/acl/Tree.h
src/acl/Url.h
src/acl/UrlLogin.h
src/acl/UrlPath.h
src/acl/UrlPort.h
src/acl/forward.h
src/auth/Acl.cc
src/auth/Acl.h
src/auth/AclMaxUserIp.h
src/auth/AclProxyAuth.cc
src/auth/AclProxyAuth.h
src/cache_cf.cc
src/external_acl.cc
src/ident/AclIdent.cc
src/ident/AclIdent.h
src/ip/QosConfig.h
src/main.cc
src/snmp_core.h
src/tests/stub_libauth_acls.cc
src/tests/testACLMaxUserIP.cc

index 58fab91815fb2b22eae2deb30e0f2d3bfe0a0bfc..72e6b152e8697448209194bb620290edcb6eac01 100644 (file)
@@ -59,6 +59,7 @@
 #include "acl/MethodData.h"
 #include "acl/MyPortName.h"
 #include "acl/Note.h"
+#include "acl/Node.h"
 #include "acl/NoteData.h"
 #include "acl/PeerName.h"
 #include "acl/Protocol.h"
@@ -118,7 +119,7 @@ namespace Acl
 template <class Parent>
 class FinalizedParameterizedNode: public Parent
 {
-    MEMPROXY_CLASS(Acl::FinalizedParameterizedNode<Parent>);
+    MEMPROXY_CLASS(FinalizedParameterizedNode<Parent>);
 
 public:
     using Parameters = typename Parent::Parameters;
@@ -192,105 +193,105 @@ Acl::Init()
 {
     /* the registration order does not matter */
 
-    // The explicit return type (ACL*) for lambdas is needed because the type
-    // of the return expression inside lambda is not ACL* but AclFoo* while
-    // Acl::Maker is defined to return ACL*.
-
-    RegisterMaker("all-of", [](TypeName)->ACL* { return new Acl::AllOf; }); // XXX: Add name parameter to ctor
-    RegisterMaker("any-of", [](TypeName)->ACL* { return new Acl::AnyOf; }); // XXX: Add name parameter to ctor
-    RegisterMaker("random", [](TypeName name)->ACL* { return new ACLRandom(name); });
-    RegisterMaker("time", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::CurrentTimeCheck>(name, new ACLTimeData); });
-    RegisterMaker("src_as", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::SourceAsnCheck>(name, new ACLASN); });
-    RegisterMaker("dst_as", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::DestinationAsnCheck>(name, new ACLASN); });
-    RegisterMaker("browser", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::RequestHeaderCheck<Http::HdrType::USER_AGENT> >(name, new ACLRegexData); });
-
-    RegisterMaker("dstdomain", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::DestinationDomainCheck>(name, new ACLDomainData); });
-    RegisterMaker("dstdom_regex", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::DestinationDomainCheck>(name, new ACLRegexData); });
-    Acl::FinalizedParameterizedNode<Acl::DestinationDomainCheck>::PreferAllocatorLabelPrefix("dstdomain+");
-
-    RegisterMaker("dst", [](TypeName)->ACL* { return new ACLDestinationIP; }); // XXX: Add name parameter to ctor
-    RegisterMaker("hier_code", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::HierCodeCheck>(name, new ACLHierCodeData); });
-    RegisterMaker("rep_header", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::HttpRepHeaderCheck>(name, new ACLHTTPHeaderData); });
-    RegisterMaker("req_header", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::HttpReqHeaderCheck>(name, new ACLHTTPHeaderData); });
-    RegisterMaker("http_status", [](TypeName name)->ACL* { return new ACLHTTPStatus(name); });
-    RegisterMaker("maxconn", [](TypeName name)->ACL* { return new ACLMaxConnection(name); });
-    RegisterMaker("method", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::MethodCheck>(name, new ACLMethodData); });
-    RegisterMaker("localip", [](TypeName)->ACL* { return new ACLLocalIP; }); // XXX: Add name parameter to ctor
-    RegisterMaker("localport", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::LocalPortCheck>(name, new ACLIntRange); });
-    RegisterMaker("myportname", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::MyPortNameCheck>(name, new ACLStringData); });
-
-    RegisterMaker("peername", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::PeerNameCheck>(name, new ACLStringData); });
-    RegisterMaker("peername_regex", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::PeerNameCheck>(name, new ACLRegexData); });
-    Acl::FinalizedParameterizedNode<Acl::PeerNameCheck>::PreferAllocatorLabelPrefix("peername+");
-
-    RegisterMaker("proto", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::ProtocolCheck>(name, new ACLProtocolData); });
-    RegisterMaker("referer_regex", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::RequestHeaderCheck<Http::HdrType::REFERER> >(name, new ACLRegexData); });
-    RegisterMaker("rep_mime_type", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::ReplyHeaderCheck<Http::HdrType::CONTENT_TYPE> >(name, new ACLRegexData); });
-    RegisterMaker("req_mime_type", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::RequestHeaderCheck<Http::HdrType::CONTENT_TYPE> >(name, new ACLRegexData); });
-
-    RegisterMaker("srcdomain", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::SourceDomainCheck>(name, new ACLDomainData); });
-    RegisterMaker("srcdom_regex", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::SourceDomainCheck>(name, new ACLRegexData); });
-    Acl::FinalizedParameterizedNode<Acl::SourceDomainCheck>::PreferAllocatorLabelPrefix("srcdomain+");
-
-    RegisterMaker("src", [](TypeName)->ACL* { return new ACLSourceIP; }); // XXX: Add name parameter to ctor
-    RegisterMaker("url_regex", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::UrlCheck>(name, new ACLRegexData); });
-    RegisterMaker("urllogin", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::UrlLoginCheck>(name, new ACLRegexData); });
-    RegisterMaker("urlpath_regex", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::UrlPathCheck>(name, new ACLRegexData); });
-    RegisterMaker("port", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::UrlPortCheck>(name, new ACLIntRange); });
-    RegisterMaker("external", [](TypeName name)->ACL* { return new ACLExternal(name); });
-    RegisterMaker("squid_error", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::SquidErrorCheck>(name, new ACLSquidErrorData); });
-    RegisterMaker("connections_encrypted", [](TypeName name)->ACL* { return new Acl::ConnectionsEncrypted(name); });
-    RegisterMaker("tag", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::TagCheck>(name, new ACLStringData); });
-    RegisterMaker("note", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::NoteCheck>(name, new ACLNoteData); });
-    RegisterMaker("annotate_client", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::AnnotateClientCheck>(name, new ACLAnnotationData); });
-    RegisterMaker("annotate_transaction", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::AnnotateTransactionCheck>(name, new ACLAnnotationData); });
-    RegisterMaker("has", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::HasComponentCheck>(name, new ACLHasComponentData); });
-    RegisterMaker("transaction_initiator", [](TypeName name)->ACL* {return new TransactionInitiator(name);});
+    // The explicit return type (Acl::Node*) for lambdas is needed because the type
+    // of the return expression inside lambda is not Node* but AclFoo* while
+    // Maker is defined to return Node*.
+
+    RegisterMaker("all-of", [](TypeName)->Node* { return new AllOf; }); // XXX: Add name parameter to ctor
+    RegisterMaker("any-of", [](TypeName)->Node* { return new AnyOf; }); // XXX: Add name parameter to ctor
+    RegisterMaker("random", [](TypeName name)->Node* { return new ACLRandom(name); });
+    RegisterMaker("time", [](TypeName name)->Node* { return new FinalizedParameterizedNode<CurrentTimeCheck>(name, new ACLTimeData); });
+    RegisterMaker("src_as", [](TypeName name)->Node* { return new FinalizedParameterizedNode<SourceAsnCheck>(name, new ACLASN); });
+    RegisterMaker("dst_as", [](TypeName name)->Node* { return new FinalizedParameterizedNode<DestinationAsnCheck>(name, new ACLASN); });
+    RegisterMaker("browser", [](TypeName name)->Node* { return new FinalizedParameterizedNode<RequestHeaderCheck<Http::HdrType::USER_AGENT> >(name, new ACLRegexData); });
+
+    RegisterMaker("dstdomain", [](TypeName name)->Node* { return new FinalizedParameterizedNode<DestinationDomainCheck>(name, new ACLDomainData); });
+    RegisterMaker("dstdom_regex", [](TypeName name)->Node* { return new FinalizedParameterizedNode<DestinationDomainCheck>(name, new ACLRegexData); });
+    FinalizedParameterizedNode<DestinationDomainCheck>::PreferAllocatorLabelPrefix("dstdomain+");
+
+    RegisterMaker("dst", [](TypeName)->Node* { return new ACLDestinationIP; }); // XXX: Add name parameter to ctor
+    RegisterMaker("hier_code", [](TypeName name)->Node* { return new FinalizedParameterizedNode<HierCodeCheck>(name, new ACLHierCodeData); });
+    RegisterMaker("rep_header", [](TypeName name)->Node* { return new FinalizedParameterizedNode<HttpRepHeaderCheck>(name, new ACLHTTPHeaderData); });
+    RegisterMaker("req_header", [](TypeName name)->Node* { return new FinalizedParameterizedNode<HttpReqHeaderCheck>(name, new ACLHTTPHeaderData); });
+    RegisterMaker("http_status", [](TypeName name)->Node* { return new ACLHTTPStatus(name); });
+    RegisterMaker("maxconn", [](TypeName name)->Node* { return new ACLMaxConnection(name); });
+    RegisterMaker("method", [](TypeName name)->Node* { return new FinalizedParameterizedNode<MethodCheck>(name, new ACLMethodData); });
+    RegisterMaker("localip", [](TypeName)->Node* { return new ACLLocalIP; }); // XXX: Add name parameter to ctor
+    RegisterMaker("localport", [](TypeName name)->Node* { return new FinalizedParameterizedNode<LocalPortCheck>(name, new ACLIntRange); });
+    RegisterMaker("myportname", [](TypeName name)->Node* { return new FinalizedParameterizedNode<MyPortNameCheck>(name, new ACLStringData); });
+
+    RegisterMaker("peername", [](TypeName name)->Node* { return new FinalizedParameterizedNode<PeerNameCheck>(name, new ACLStringData); });
+    RegisterMaker("peername_regex", [](TypeName name)->Node* { return new FinalizedParameterizedNode<PeerNameCheck>(name, new ACLRegexData); });
+    FinalizedParameterizedNode<PeerNameCheck>::PreferAllocatorLabelPrefix("peername+");
+
+    RegisterMaker("proto", [](TypeName name)->Node* { return new FinalizedParameterizedNode<ProtocolCheck>(name, new ACLProtocolData); });
+    RegisterMaker("referer_regex", [](TypeName name)->Node* { return new FinalizedParameterizedNode<RequestHeaderCheck<Http::HdrType::REFERER> >(name, new ACLRegexData); });
+    RegisterMaker("rep_mime_type", [](TypeName name)->Node* { return new FinalizedParameterizedNode<ReplyHeaderCheck<Http::HdrType::CONTENT_TYPE> >(name, new ACLRegexData); });
+    RegisterMaker("req_mime_type", [](TypeName name)->Node* { return new FinalizedParameterizedNode<RequestHeaderCheck<Http::HdrType::CONTENT_TYPE> >(name, new ACLRegexData); });
+
+    RegisterMaker("srcdomain", [](TypeName name)->Node* { return new FinalizedParameterizedNode<SourceDomainCheck>(name, new ACLDomainData); });
+    RegisterMaker("srcdom_regex", [](TypeName name)->Node* { return new FinalizedParameterizedNode<SourceDomainCheck>(name, new ACLRegexData); });
+    FinalizedParameterizedNode<SourceDomainCheck>::PreferAllocatorLabelPrefix("srcdomain+");
+
+    RegisterMaker("src", [](TypeName)->Node* { return new ACLSourceIP; }); // XXX: Add name parameter to ctor
+    RegisterMaker("url_regex", [](TypeName name)->Node* { return new FinalizedParameterizedNode<UrlCheck>(name, new ACLRegexData); });
+    RegisterMaker("urllogin", [](TypeName name)->Node* { return new FinalizedParameterizedNode<UrlLoginCheck>(name, new ACLRegexData); });
+    RegisterMaker("urlpath_regex", [](TypeName name)->Node* { return new FinalizedParameterizedNode<UrlPathCheck>(name, new ACLRegexData); });
+    RegisterMaker("port", [](TypeName name)->Node* { return new FinalizedParameterizedNode<UrlPortCheck>(name, new ACLIntRange); });
+    RegisterMaker("external", [](TypeName name)->Node* { return new ACLExternal(name); });
+    RegisterMaker("squid_error", [](TypeName name)->Node* { return new FinalizedParameterizedNode<SquidErrorCheck>(name, new ACLSquidErrorData); });
+    RegisterMaker("connections_encrypted", [](TypeName name)->Node* { return new ConnectionsEncrypted(name); });
+    RegisterMaker("tag", [](TypeName name)->Node* { return new FinalizedParameterizedNode<TagCheck>(name, new ACLStringData); });
+    RegisterMaker("note", [](TypeName name)->Node* { return new FinalizedParameterizedNode<NoteCheck>(name, new ACLNoteData); });
+    RegisterMaker("annotate_client", [](TypeName name)->Node* { return new FinalizedParameterizedNode<AnnotateClientCheck>(name, new ACLAnnotationData); });
+    RegisterMaker("annotate_transaction", [](TypeName name)->Node* { return new FinalizedParameterizedNode<AnnotateTransactionCheck>(name, new ACLAnnotationData); });
+    RegisterMaker("has", [](TypeName name)->Node* { return new FinalizedParameterizedNode<HasComponentCheck>(name, new ACLHasComponentData); });
+    RegisterMaker("transaction_initiator", [](TypeName name)->Node* {return new TransactionInitiator(name);});
 
 #if USE_LIBNETFILTERCONNTRACK
-    RegisterMaker("clientside_mark", [](TypeName)->ACL* { return new Acl::ConnMark; }); // XXX: Add name parameter to ctor
-    RegisterMaker("client_connection_mark", [](TypeName)->ACL* { return new Acl::ConnMark; }); // XXX: Add name parameter to ctor
+    RegisterMaker("clientside_mark", [](TypeName)->Node* { return new ConnMark; }); // XXX: Add name parameter to ctor
+    RegisterMaker("client_connection_mark", [](TypeName)->Node* { return new ConnMark; }); // XXX: Add name parameter to ctor
 #endif
 
 #if USE_OPENSSL
-    RegisterMaker("ssl_error", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::CertificateErrorCheck>(name, new ACLSslErrorData); });
+    RegisterMaker("ssl_error", [](TypeName name)->Node* { return new FinalizedParameterizedNode<CertificateErrorCheck>(name, new ACLSslErrorData); });
 
-    RegisterMaker("user_cert", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::ClientCertificateCheck>(name, new ACLCertificateData(Ssl::GetX509UserAttribute, "*")); });
-    RegisterMaker("ca_cert", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::ClientCertificateCheck>(name, new ACLCertificateData(Ssl::GetX509CAAttribute, "*")); });
-    Acl::FinalizedParameterizedNode<Acl::ClientCertificateCheck>::PreferAllocatorLabelPrefix("user_cert+");
+    RegisterMaker("user_cert", [](TypeName name)->Node* { return new FinalizedParameterizedNode<ClientCertificateCheck>(name, new ACLCertificateData(Ssl::GetX509UserAttribute, "*")); });
+    RegisterMaker("ca_cert", [](TypeName name)->Node* { return new FinalizedParameterizedNode<ClientCertificateCheck>(name, new ACLCertificateData(Ssl::GetX509CAAttribute, "*")); });
+    FinalizedParameterizedNode<ClientCertificateCheck>::PreferAllocatorLabelPrefix("user_cert+");
 
-    RegisterMaker("server_cert_fingerprint", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::ServerCertificateCheck>(name, new ACLCertificateData(Ssl::GetX509Fingerprint, nullptr, true)); });
-    RegisterMaker("at_step", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::AtStepCheck>(name, new ACLAtStepData); });
+    RegisterMaker("server_cert_fingerprint", [](TypeName name)->Node* { return new FinalizedParameterizedNode<ServerCertificateCheck>(name, new ACLCertificateData(Ssl::GetX509Fingerprint, nullptr, true)); });
+    RegisterMaker("at_step", [](TypeName name)->Node* { return new FinalizedParameterizedNode<AtStepCheck>(name, new ACLAtStepData); });
 
-    RegisterMaker("ssl::server_name", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::ServerNameCheck>(name, new ACLServerNameData); });
-    RegisterMaker("ssl::server_name_regex", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::ServerNameCheck>(name, new ACLRegexData); });
-    Acl::FinalizedParameterizedNode<Acl::ServerNameCheck>::PreferAllocatorLabelPrefix("ssl::server_name+");
+    RegisterMaker("ssl::server_name", [](TypeName name)->Node* { return new FinalizedParameterizedNode<ServerNameCheck>(name, new ACLServerNameData); });
+    RegisterMaker("ssl::server_name_regex", [](TypeName name)->Node* { return new FinalizedParameterizedNode<ServerNameCheck>(name, new ACLRegexData); });
+    FinalizedParameterizedNode<ServerNameCheck>::PreferAllocatorLabelPrefix("ssl::server_name+");
 #endif
 
 #if USE_SQUID_EUI
-    RegisterMaker("arp", [](TypeName name)->ACL* { return new ACLARP(name); });
-    RegisterMaker("eui64", [](TypeName name)->ACL* { return new ACLEui64(name); });
+    RegisterMaker("arp", [](TypeName name)->Node* { return new ACLARP(name); });
+    RegisterMaker("eui64", [](TypeName name)->Node* { return new ACLEui64(name); });
 #endif
 
 #if USE_IDENT
-    RegisterMaker("ident", [](TypeName name)->ACL* { return new ACLIdent(new ACLUserData, name); });
-    RegisterMaker("ident_regex", [](TypeName name)->ACL* { return new ACLIdent(new ACLRegexData, name); });
+    RegisterMaker("ident", [](TypeName name)->Node* { return new ACLIdent(new ACLUserData, name); });
+    RegisterMaker("ident_regex", [](TypeName name)->Node* { return new ACLIdent(new ACLRegexData, name); });
 #endif
 
 #if USE_AUTH
-    RegisterMaker("ext_user", [](TypeName name)->ACL* { return new ACLExtUser(new ACLUserData, name); });
-    RegisterMaker("ext_user_regex", [](TypeName name)->ACL* { return new ACLExtUser(new ACLRegexData, name); });
-    RegisterMaker("proxy_auth", [](TypeName name)->ACL* { return new ACLProxyAuth(new ACLUserData, name); });
-    RegisterMaker("proxy_auth_regex", [](TypeName name)->ACL* { return new ACLProxyAuth(new ACLRegexData, name); });
-    RegisterMaker("max_user_ip", [](TypeName name)->ACL* { return new ACLMaxUserIP(name); });
+    RegisterMaker("ext_user", [](TypeName name)->Node* { return new ACLExtUser(new ACLUserData, name); });
+    RegisterMaker("ext_user_regex", [](TypeName name)->Node* { return new ACLExtUser(new ACLRegexData, name); });
+    RegisterMaker("proxy_auth", [](TypeName name)->Node* { return new ACLProxyAuth(new ACLUserData, name); });
+    RegisterMaker("proxy_auth_regex", [](TypeName name)->Node* { return new ACLProxyAuth(new ACLRegexData, name); });
+    RegisterMaker("max_user_ip", [](TypeName name)->Node* { return new ACLMaxUserIP(name); });
 #endif
 
 #if USE_ADAPTATION
-    RegisterMaker("adaptation_service", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::AdaptationServiceCheck>(name, new ACLAdaptationServiceData); });
+    RegisterMaker("adaptation_service", [](TypeName name)->Node* { return new FinalizedParameterizedNode<AdaptationServiceCheck>(name, new ACLAdaptationServiceData); });
 #endif
 
 #if SQUID_SNMP
-    RegisterMaker("snmp_community", [](TypeName name)->ACL* { return new Acl::FinalizedParameterizedNode<Acl::SnmpCommunityCheck>(name, new ACLStringData); });
+    RegisterMaker("snmp_community", [](TypeName name)->Node* { return new FinalizedParameterizedNode<SnmpCommunityCheck>(name, new ACLStringData); });
 #endif
 }
 
index 0ce746156210a9f51dda1729eeb85386a9392a0b..98a38a50bcf88882cb272991d477dd9e02da9206 100644 (file)
@@ -17,7 +17,7 @@ class external_acl;
 class external_acl_data;
 class StoreEntry;
 
-class ACLExternal : public ACL
+class ACLExternal : public Acl::Node
 {
     MEMPROXY_CLASS(ACLExternal);
 
@@ -40,7 +40,7 @@ public:
     bool empty () const override;
 
 private:
-    static void StartLookup(ACLFilledChecklist &, const ACL &);
+    static void StartLookup(ACLFilledChecklist &, const Acl::Node &);
     static void LookupDone(void *data, const ExternalACLEntryPointer &);
     void startLookup(ACLFilledChecklist *, external_acl_data *, bool inBackground) const;
     Acl::Answer aclMatchExternal(external_acl_data *, ACLFilledChecklist *) const;
index a065d1cd4497d9d263f05bd0b2356bfba46b56b9..3a8649acfe3e75daf2b30468676742c70c28309a 100644 (file)
@@ -353,7 +353,7 @@ public:
 
     std::chrono::nanoseconds paranoid_hit_validation;
 
-    class ACL *aclList;
+    class Acl::Node *aclList;
 
     struct {
         acl_access *http;
index 489eab53b870a05666e8aa37b84db27d4e32c5c7..8cc5c5b3948b59ae6ec56171aa79c244e85aa143 100644 (file)
@@ -31,16 +31,16 @@ const char *AclMatchedName = nullptr;
 
 namespace Acl {
 
-/// ACL type name comparison functor
+/// Acl::Node type name comparison functor
 class TypeNameCmp {
 public:
     bool operator()(TypeName a, TypeName b) const { return strcmp(a, b) < 0; }
 };
 
-/// ACL makers indexed by ACL type name
+/// Acl::Node makers indexed by Node type name
 typedef std::map<TypeName, Maker, TypeNameCmp> Makers;
 
-/// registered ACL Makers
+/// registered Acl::Node Makers
 static Makers &
 TheMakers()
 {
@@ -48,9 +48,9 @@ TheMakers()
     return Registry;
 }
 
-/// creates an ACL object of the named (and already registered) ACL child type
+/// creates an Acl::Node object of the named (and already registered) Node child type
 static
-ACL *
+Acl::Node *
 Make(TypeName typeName)
 {
     const auto pos = TheMakers().find(typeName);
@@ -60,7 +60,7 @@ Make(TypeName typeName)
         assert(false); // not reached
     }
 
-    ACL *result = (pos->second)(pos->first);
+    auto *result = (pos->second)(pos->first);
     debugs(28, 4, typeName << '=' << result);
     assert(result);
     return result;
@@ -103,34 +103,32 @@ Acl::SetKey(SBuf &keyStorage, const char *keyParameterName, const char *newKey)
 }
 
 void *
-ACL::operator new (size_t)
+Acl::Node::operator new (size_t)
 {
-    fatal ("unusable ACL::new");
+    fatal ("unusable Acl::Node::new");
     return (void *)1;
 }
 
-void
-ACL::operator delete (void *)
+void Acl::Node::operator delete(void *)
 {
-    fatal ("unusable ACL::delete");
+    fatal ("unusable Acl::Node::delete");
 }
 
-ACL *
-ACL::FindByName(const char *name)
+Acl::Node *
+Acl::Node::FindByName(const char *name)
 {
-    ACL *a;
-    debugs(28, 9, "ACL::FindByName '" << name << "'");
+    debugs(28, 9, "name=" << name);
 
-    for (a = Config.aclList; a; a = a->next)
+    for (auto *a = Config.aclList; a; a = a->next)
         if (!strcasecmp(a->name, name))
             return a;
 
-    debugs(28, 9, "ACL::FindByName found no match");
+    debugs(28, 9, "found no match");
 
     return nullptr;
 }
 
-ACL::ACL() :
+Acl::Node::Node() :
     cfgline(nullptr),
     next(nullptr),
     registered(false)
@@ -138,13 +136,14 @@ ACL::ACL() :
     *name = 0;
 }
 
-bool ACL::valid () const
+bool
+Acl::Node::valid() const
 {
     return true;
 }
 
 bool
-ACL::matches(ACLChecklist *checklist) const
+Acl::Node::matches(ACLChecklist *checklist) const
 {
     debugs(28, 5, "checking " << name);
 
@@ -169,7 +168,7 @@ ACL::matches(ACLChecklist *checklist) const
             checklist->verifyAle();
 
         // have to cast because old match() API is missing const
-        result = const_cast<ACL*>(this)->match(checklist);
+        result = const_cast<Node*>(this)->match(checklist);
     }
 
     const char *extra = checklist->asyncInProgress() ? " async" : "";
@@ -178,7 +177,7 @@ ACL::matches(ACLChecklist *checklist) const
 }
 
 void
-ACL::context(const char *aName, const char *aCfgLine)
+Acl::Node::context(const char *aName, const char *aCfgLine)
 {
     name[0] = '\0';
     if (aName)
@@ -189,11 +188,11 @@ ACL::context(const char *aName, const char *aCfgLine)
 }
 
 void
-ACL::ParseAclLine(ConfigParser &parser, ACL ** head)
+Acl::Node::ParseAclLine(ConfigParser &parser, Node ** head)
 {
     /* we're already using strtok() to grok the line */
     char *t = nullptr;
-    ACL *A = nullptr;
+    Node *A = nullptr;
     LOCAL_ARRAY(char, aclname, ACL_NAME_SZ);
     int new_acl = 0;
 
@@ -307,13 +306,13 @@ ACL::ParseAclLine(ConfigParser &parser, ACL ** head)
 }
 
 bool
-ACL::isProxyAuth() const
+Acl::Node::isProxyAuth() const
 {
     return false;
 }
 
 void
-ACL::parseFlags()
+Acl::Node::parseFlags()
 {
     Acl::Options allOptions = options();
     for (const auto lineOption: lineOptions()) {
@@ -324,7 +323,7 @@ ACL::parseFlags()
 }
 
 void
-ACL::dumpWhole(const char * const directiveName, std::ostream &os)
+Acl::Node::dumpWhole(const char * const directiveName, std::ostream &os)
 {
     // XXX: No lineOptions() call here because we do not remember ACL "line"
     // boundaries and associated "line" options; we cannot report them.
@@ -336,7 +335,7 @@ ACL::dumpWhole(const char * const directiveName, std::ostream &os)
 /* ACL result caching routines */
 
 int
-ACL::matchForCache(ACLChecklist *)
+Acl::Node::matchForCache(ACLChecklist *)
 {
     /* This is a fatal to ensure that cacheMatchAcl calls are _only_
      * made for supported acl types */
@@ -354,7 +353,7 @@ ACL::matchForCache(ACLChecklist *)
  * TODO: does a dlink_list perform well enough? Kinkie
  */
 int
-ACL::cacheMatchAcl(dlink_list * cache, ACLChecklist *checklist)
+Acl::Node::cacheMatchAcl(dlink_list * cache, ACLChecklist *checklist)
 {
     acl_proxy_auth_match_cache *auth_match;
     dlink_node *link;
@@ -364,7 +363,7 @@ ACL::cacheMatchAcl(dlink_list * cache, ACLChecklist *checklist)
         auth_match = (acl_proxy_auth_match_cache *)link->data;
 
         if (auth_match->acl_data == this) {
-            debugs(28, 4, "ACL::cacheMatchAcl: cache hit on acl '" << name << "' (" << this << ")");
+            debugs(28, 4, "cache hit on acl '" << name << "' (" << this << ")");
             return auth_match->matchrv;
         }
 
@@ -373,7 +372,7 @@ ACL::cacheMatchAcl(dlink_list * cache, ACLChecklist *checklist)
 
     auth_match = new acl_proxy_auth_match_cache(matchForCache(checklist), this);
     dlinkAddTail(auth_match, &auth_match->link, cache);
-    debugs(28, 4, "ACL::cacheMatchAcl: miss for '" << name << "'. Adding result " << auth_match->matchrv);
+    debugs(28, 4, "miss for acl '" << name << "'. Adding result " << auth_match->matchrv);
     return auth_match->matchrv;
 }
 
@@ -396,19 +395,19 @@ aclCacheMatchFlush(dlink_list * cache)
 }
 
 bool
-ACL::requiresAle() const
+Acl::Node::requiresAle() const
 {
     return false;
 }
 
 bool
-ACL::requiresReply() const
+Acl::Node::requiresReply() const
 {
     return false;
 }
 
 bool
-ACL::requiresRequest() const
+Acl::Node::requiresRequest() const
 {
     return false;
 }
@@ -417,7 +416,7 @@ ACL::requiresRequest() const
 /* Destroy functions */
 /*********************/
 
-ACL::~ACL()
+Acl::Node::~Node()
 {
     debugs(28, 3, "freeing ACL " << name);
     safe_free(cfgline);
@@ -425,10 +424,10 @@ ACL::~ACL()
 }
 
 void
-ACL::Initialize()
+Acl::Node::Initialize()
 {
-    ACL *a = Config.aclList;
-    debugs(53, 3, "ACL::Initialize");
+    auto *a = Config.aclList;
+    debugs(53, 3, "Acl::Node::Initialize");
 
     while (a) {
         a->prepareForUse();
index 11b59f0b975647cc5c975f0b9f6c4255f2f20298..aef6ce1b5fb2e43cd5a1254061360c28b77f1b0f 100644 (file)
@@ -10,8 +10,6 @@
 #define SQUID_ACL_H
 
 #include "acl/forward.h"
-#include "acl/Options.h"
-#include "cbdata.h"
 #include "defines.h"
 #include "dlink.h"
 #include "sbuf/forward.h"
 #include <algorithm>
 #include <ostream>
 
-class ConfigParser;
-
 namespace Acl {
 
 /// the ACL type name known to admins
-typedef const char *TypeName;
-/// a "factory" function for making ACL objects (of some ACL child type)
-typedef ACL *(*Maker)(TypeName typeName);
-/// use the given ACL Maker for all ACLs of the named type
+using TypeName = const char *;
+/// a "factory" function for making Acl::Node objects (of some Node child type)
+using Maker = Node *(*)(TypeName typeName);
+/// use the given Acl::Node Maker for all ACLs of the named type
 void RegisterMaker(TypeName typeName, Maker maker);
 
 /// Validate and store the ACL key parameter for ACL types
@@ -36,82 +32,7 @@ void RegisterMaker(TypeName typeName, Maker maker);
 /// Key comparison is case-insensitive.
 void SetKey(SBuf &keyStorage, const char *keyParameterName, const char *newKey);
 
-} // namespace Acl
-
-/// A configurable condition. A node in the ACL expression tree.
-/// Can evaluate itself in FilledChecklist context.
-/// Does not change during evaluation.
-/// \ingroup ACLAPI
-class ACL
-{
-
-public:
-    void *operator new(size_t);
-    void operator delete(void *);
-
-    static void ParseAclLine(ConfigParser &parser, ACL ** head);
-    static void Initialize();
-    static ACL *FindByName(const char *name);
-
-    ACL();
-    ACL(ACL &&) = delete; // no copying of any kind
-    virtual ~ACL();
-
-    /// sets user-specified ACL name and squid.conf context
-    void context(const char *name, const char *configuration);
-
-    /// Orchestrates matching checklist against the ACL using match(),
-    /// after checking preconditions and while providing debugging.
-    /// \return true if and only if there was a successful match.
-    /// Updates the checklist state on match, async, and failure.
-    bool matches(ACLChecklist *checklist) const;
-
-    /// configures ACL options, throwing on configuration errors
-    void parseFlags();
-
-    /// parses node representation in squid.conf; dies on failures
-    virtual void parse() = 0;
-    virtual char const *typeString() const = 0;
-    virtual bool isProxyAuth() const;
-    virtual SBufList dump() const = 0;
-    virtual bool empty() const = 0;
-    virtual bool valid() const;
-
-    int cacheMatchAcl(dlink_list * cache, ACLChecklist *);
-    virtual int matchForCache(ACLChecklist *checklist);
-
-    virtual void prepareForUse() {}
-
-    // TODO: Find a way to make options() and this method constant
-    /// Prints aggregated "acl" (or similar) directive configuration, including
-    /// the given directive name, ACL name, ACL type, and ACL parameters. The
-    /// printed parameters are collected from all same-name "acl" directives.
-    void dumpWhole(const char *directiveName, std::ostream &);
-
-    char name[ACL_NAME_SZ];
-    char *cfgline;
-    ACL *next; // XXX: remove or at least use refcounting
-    bool registered; ///< added to the global list of ACLs via aclRegister()
-
-private:
-    /// Matches the actual data in checklist against this ACL.
-    virtual int match(ACLChecklist *checklist) = 0; // XXX: missing const
-
-    /// whether our (i.e. shallow) match() requires checklist to have a AccessLogEntry
-    virtual bool requiresAle() const;
-    /// whether our (i.e. shallow) match() requires checklist to have a request
-    virtual bool requiresRequest() const;
-    /// whether our (i.e. shallow) match() requires checklist to have a reply
-    virtual bool requiresReply() const;
-
-    // TODO: Rename to globalOptions(); these are not the only supported options
-    /// \returns (linked) 'global' Options supported by this ACL
-    virtual const Acl::Options &options() { return Acl::NoOptions(); }
-
-    /// \returns (linked) "line" Options supported by this ACL
-    /// \see ACL::options()
-    virtual const Acl::Options &lineOptions() { return Acl::NoOptions(); }
-};
+}  // namespace Acl
 
 /// \ingroup ACLAPI
 typedef enum {
@@ -120,12 +41,12 @@ typedef enum {
     ACCESS_ALLOWED,
     ACCESS_DUNNO,
 
-    // Authentication ACL result states
+    // Authentication Acl::Node result states
     ACCESS_AUTH_REQUIRED,    // Missing Credentials
 } aclMatchCode;
 
 /// \ingroup ACLAPI
-/// ACL check answer
+/// Acl::Node check answer
 namespace Acl {
 
 class Answer
@@ -216,7 +137,7 @@ public:
 };
 
 /// \ingroup ACLAPI
-/// XXX: find a way to remove or at least use a refcounted ACL pointer
+/// XXX: find a way to remove or at least use a refcounted Acl::Node pointer
 extern const char *AclMatchedName;  /* NULL */
 
 #endif /* SQUID_ACL_H */
index 92e7416c2b5a75dfe160be65415616d5a97902c8..fcccb3cd04004b52a23cc3e09308f22db5fd6e3a 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class AdaptationServiceCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 0b085926df0f34b3c35b89839080981346c7734c..5206c6b3d48f6cbc768d7e1498e4d4fe41d31ca8 100644 (file)
@@ -10,6 +10,7 @@
 #define _SQUID_SRC_ACL_ADDRESS_H
 
 #include "acl/Acl.h"
+#include "cbdata.h"
 #include "ip/Address.h"
 
 namespace Acl
index 03365c490814922c04e26912aea3ba8c1ff564a2..b9e92b50e2349aa94ad79b1cbc83fe885c2cece2 100644 (file)
@@ -47,7 +47,7 @@ void
 Acl::AllOf::parse()
 {
     Acl::InnerNode *whole = nullptr;
-    ACL *oldNode = empty() ? nullptr : nodes.front();
+    Acl::Node *oldNode = empty() ? nullptr : nodes.front();
 
     // optimization: this logic reduces subtree hight (number of tree levels)
     if (Acl::OrNode *oldWhole = dynamic_cast<Acl::OrNode*>(oldNode)) {
index 5eea0899124e8c99547de9f19b39df7ee722ae6f..84ac37cc4a974e054c9f3d9f18de7b5ab65ec0a5 100644 (file)
@@ -22,7 +22,7 @@ class AllOf: public Acl::InnerNode
     MEMPROXY_CLASS(AllOf);
 
 public:
-    /* ACL API */
+    /* Acl::Node API */
     char const *typeString() const override;
     void parse() override;
     SBufList dump() const override;
index ce714970c46b3513354ced87e309be38d91ecf87..063921940799d6fda3f4c87d5bd1c5ce0cb7621f 100644 (file)
@@ -18,7 +18,7 @@ namespace Acl
 class AnnotateClientCheck: public Acl::AnnotationCheck
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override { return true; }
 };
index 147fcec75b9741a1e6fc7bb3a6d45f86a5571e1d..09dff766fa8034660d5e05ff69b36594877554c7 100644 (file)
@@ -18,7 +18,7 @@ namespace Acl
 class AnnotateTransactionCheck: public Acl::AnnotationCheck
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override { return true; }
 };
index 91822e0792a54524890e0de9a14910b5884097ba..dd1d61e699ece13e17b2080924b586c67fb8c975 100644 (file)
@@ -20,7 +20,7 @@ class AnyOf: public Acl::OrNode
     MEMPROXY_CLASS(AnyOf);
 
 public:
-    /* ACL API */
+    /* Acl::Node API */
     char const *typeString() const override;
     void parse() override;
 };
index a37415635f9aa612dbac0c50a03f8d082ccda0f9..b826e27782383415417380da3f27d80b925be846 100644 (file)
@@ -9,13 +9,13 @@
 #ifndef SQUID_ACLARP_H
 #define SQUID_ACLARP_H
 
-#include "acl/Acl.h"
+#include "acl/Node.h"
 #include "eui/Eui48.h"
 
 #include <set>
 
 /// \ingroup ACLAPI
-class ACLARP : public ACL
+class ACLARP : public Acl::Node
 {
     MEMPROXY_CLASS(ACLARP);
 
index 499ce4f1f8c7b2fb64e057868fafe41aa2338fa4..5cc427870a035a7dcc1e8bbdddcef9de9c750176 100644 (file)
@@ -116,7 +116,7 @@ static int printRadixNode(struct squid_radix_node *rn, void *sentry);
 }
 #endif
 
-void asnAclInitialize(ACL * acls);
+void asnAclInitialize(Acl::Node * acls);
 
 static void destroyRadixNodeInfo(as_info *);
 
index 6c315da64ed2aa3d2fb882eefd25b2bc7d3821da..0424f4230ba59a00e7705bd4a5e10465ac1b02a7 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class AtStepCheck: public ParameterizedNode< ACLData<XactionStep> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 659d9b4fcd24f84182e581cda59de1258590e49b..e117965422c112dc7322fd1a62d993937e8cd6a8 100644 (file)
@@ -14,7 +14,7 @@
 
 /* Acl::NotNode */
 
-Acl::NotNode::NotNode(ACL *acl)
+Acl::NotNode::NotNode(Acl::Node *acl)
 {
     assert(acl);
     Must(strlen(acl->name) <= sizeof(name)-2);
index 8455214b028daa20397141b460d2436c3792e4b8..d96a07604fb301940b74ae1d2aa29ddbbef8ca72 100644 (file)
@@ -24,10 +24,10 @@ class NotNode: public InnerNode
     MEMPROXY_CLASS(NotNode);
 
 public:
-    explicit NotNode(ACL *acl);
+    explicit NotNode(Acl::Node *acl);
 
 private:
-    /* ACL API */
+    /* Acl::Node API */
     char const *typeString() const override;
     void parse() override;
     SBufList dump() const override;
@@ -64,7 +64,7 @@ public:
     /// on its action
     virtual bool bannedAction(ACLChecklist *, Nodes::const_iterator) const;
 
-    /* ACL API */
+    /* Acl::Node API */
     char const *typeString() const override;
     void parse() override;
 
index 5d0f546354f60849d5e1ce8381d9492ecc61b6c5..08f36cd120dbb5c5c2df2a9101e1cbfa3874ff8c 100644 (file)
@@ -21,7 +21,7 @@ namespace Acl
 class ClientCertificateCheck: public ParameterizedNode< ACLData<X509 *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 813e863c01d54ed90ec09d273195985405ffc3ac..3e697881f6ee0e835f012a32ff102482ee04abf0 100644 (file)
@@ -79,7 +79,7 @@ ACLChecklist::preCheck(const char *what)
 }
 
 bool
-ACLChecklist::matchChild(const Acl::InnerNode *current, Acl::Nodes::const_iterator pos, const ACL *child)
+ACLChecklist::matchChild(const Acl::InnerNode *current, Acl::Nodes::const_iterator pos, const Acl::Node *child)
 {
     assert(current && child);
 
@@ -112,7 +112,7 @@ ACLChecklist::matchChild(const Acl::InnerNode *current, Acl::Nodes::const_iterat
 }
 
 bool
-ACLChecklist::goAsync(AsyncStarter starter, const ACL &acl)
+ACLChecklist::goAsync(AsyncStarter starter, const Acl::Node &acl)
 {
     assert(!asyncInProgress());
     assert(matchLoc_.parent);
@@ -207,7 +207,7 @@ ACLChecklist::nonBlockingCheck(ACLCB * callback_, void *callback_data_)
     callback_data = cbdataReference(callback_data_);
     asyncCaller_ = true;
 
-    /** The ACL List should NEVER be NULL when calling this method.
+    /** The ACL list should NEVER be NULL when calling this method.
      * Always caller should check for NULL and handle appropriate to its needs first.
      * We cannot select a sensible default for all callers here. */
     if (accessList == nullptr) {
index ae0096cc0be02601d3741a0f23c22c0ed19f767d..a5f5bbe2fb92b84bbb7dfb2297981495ff0ce70f 100644 (file)
@@ -9,7 +9,9 @@
 #ifndef SQUID_ACLCHECKLIST_H
 #define SQUID_ACLCHECKLIST_H
 
+#include "acl/Acl.h"
 #include "acl/InnerNode.h"
+#include "cbdata.h"
 #include <stack>
 #include <vector>
 
@@ -29,7 +31,7 @@ class ACLChecklist
 public:
 
     /// a function that initiates asynchronous ACL checks; see goAsync()
-    using AsyncStarter = void (ACLFilledChecklist &, const ACL &);
+    using AsyncStarter = void (ACLFilledChecklist &, const Acl::Node &);
 
 public:
     ACLChecklist();
@@ -104,11 +106,11 @@ public:
 
     /// If slow lookups are allowed, switches into "async in progress" state.
     /// Otherwise, returns false; the caller is expected to handle the failure.
-    bool goAsync(AsyncStarter, const ACL &);
+    bool goAsync(AsyncStarter, const Acl::Node &);
 
     /// Matches (or resumes matching of) a child node while maintaning
     /// resumption breadcrumbs if a [grand]child node goes async.
-    bool matchChild(const Acl::InnerNode *parent, Acl::Nodes::const_iterator pos, const ACL *child);
+    bool matchChild(const Acl::InnerNode *parent, Acl::Nodes::const_iterator pos, const Acl::Node *child);
 
     /// Whether we should continue to match tree nodes or stop/pause.
     bool keepMatching() const { return !finished() && !asyncInProgress(); }
@@ -167,7 +169,7 @@ public:
     void resumeNonBlockingCheck();
 
 private: /* internal methods */
-    /// Position of a child node within an ACL tree.
+    /// Position of a child node within an Acl::Node tree.
     class Breadcrumb
     {
     public:
index 10e56f6b36d69f5a56d665c151a94399035e7a6f..b7c43e329a920dd5156ebca43e47202f07575079 100644 (file)
@@ -9,7 +9,7 @@
 #ifndef SQUID_ACLCONNMARK_H
 #define SQUID_ACLCONNMARK_H
 
-#include "acl/Acl.h"
+#include "acl/Node.h"
 #include "ip/forward.h"
 #include "ip/NfMarkConfig.h"
 #include "parser/Tokenizer.h"
 
 namespace Acl {
 
-class ConnMark : public ACL
+class ConnMark : public Acl::Node
 {
     MEMPROXY_CLASS(ConnMark);
 
 public:
-    /* ACL API */
+    /* Acl::Node API */
     char const *typeString() const override;
     void parse() override;
     int match(ACLChecklist *checklist) override;
index 82cb890954e5bfacb5b24f3179fba766e8bc2b2d..320e40566556b35976571008dcde6b4c2575fabb 100644 (file)
@@ -15,7 +15,7 @@
 namespace Acl
 {
 
-class ConnectionsEncrypted : public ACL
+class ConnectionsEncrypted : public Acl::Node
 {
     MEMPROXY_CLASS(ConnectionsEncrypted);
 
index 7955a8ff96eb7ba6eff37c9f4b7fed7c218e2801..3269bbdac97444bef49e4938e05c7af691e70feb 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class DestinationAsnCheck: public ParameterizedNode< ACLData<Ip::Address> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index 2b86a21e472deda0ed55120b0084f8f57135fadf..eca1e9a0103522f6e6cad1d9044caa8e7d567263 100644 (file)
@@ -19,7 +19,7 @@
 static void LookupDone(const char *, const Dns::LookupDetails &, void *data);
 
 static void
-StartLookup(ACLFilledChecklist &cl, const ACL &)
+StartLookup(ACLFilledChecklist &cl, const Acl::Node &)
 {
     fqdncache_nbgethostbyaddr(cl.dst_addr, LookupDone, &cl);
 }
index 9143bc7a6c89c6f29f601f2514c5f58af59da6fa..99fe8790b4a8346739f22bf8329a44f635ebe171 100644 (file)
@@ -21,7 +21,7 @@ namespace Acl
 class DestinationDomainCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
     const Acl::Options &options() override;
index 6d285ca070bd5b19933ee1d3d614c2de7da64786..6df902eae1e71586c42e9db9537c261fdbc9a55c 100644 (file)
@@ -85,7 +85,7 @@ ACLDestinationIP::match(ACLChecklist *cl)
 }
 
 void
-ACLDestinationIP::StartLookup(ACLFilledChecklist &cl, const ACL &)
+ACLDestinationIP::StartLookup(ACLFilledChecklist &cl, const Acl::Node &)
 {
     ipcache_nbgethostbyname(cl.request->url.host(), LookupDone, &cl);
 }
index 4282852e47627e1c6c6c7d75d8ebd5185cbd81cf..d3cde0b560f3bbfe1326ac376f31cdef62572359 100644 (file)
@@ -18,7 +18,7 @@ class ACLDestinationIP : public ACLIP
     MEMPROXY_CLASS(ACLDestinationIP);
 
 public:
-    static void StartLookup(ACLFilledChecklist &, const ACL &);
+    static void StartLookup(ACLFilledChecklist &, const Acl::Node &);
 
     char const *typeString() const override;
     const Acl::Options &options() override;
index 10c97862912249d4b3b73a13cd5e7c949a2df3b3..a72879e064875a0900c7145e727b91780dd5e9f9 100644 (file)
@@ -9,12 +9,12 @@
 #ifndef SQUID_ACLEUI64_H
 #define SQUID_ACLEUI64_H
 
-#include "acl/Acl.h"
+#include "acl/Node.h"
 #include "eui/Eui64.h"
 
 #include <set>
 
-class ACLEui64 : public ACL
+class ACLEui64 : public Acl::Node
 {
     MEMPROXY_CLASS(ACLEui64);
 
index 358e431cc25826056135e17a029973c698a4ae09..4a90109a4b73edb578eda4e10695eeaab49ddce2 100644 (file)
@@ -15,7 +15,7 @@
 #include "acl/Checklist.h"
 #include "acl/Data.h"
 
-class ACLExtUser : public ACL
+class ACLExtUser : public Acl::Node
 {
     MEMPROXY_CLASS(ACLExtUser);
 
@@ -23,7 +23,7 @@ public:
     ACLExtUser(ACLData<char const *> *newData, char const *);
     ~ACLExtUser() override;
 
-    /* ACL API */
+    /* Acl::Node API */
     char const *typeString() const override;
     void parse() override;
     int match(ACLChecklist *checklist) override;
@@ -31,7 +31,7 @@ public:
     bool empty () const override;
 
 private:
-    /* ACL API */
+    /* Acl::Node API */
     const Acl::Options &lineOptions() override;
 
     ACLData<char const *> *data;
index 83ab54832e6628d31897229539ebbea66ae39cfb..c97c3c7b9bdc8a414b22cc38d8223d2530cba63a 100644 (file)
@@ -10,6 +10,7 @@
 #define SQUID_ACLFILLED_CHECKLIST_H
 
 #include "AccessLogEntry.h"
+#include "acl/Acl.h"
 #include "acl/Checklist.h"
 #include "acl/forward.h"
 #include "base/CbcPointer.h"
index fd65b519fab762926317b9acf484dbc0b8cd469d..fa886af7562638b442d5fb7e807e2bc41d461540 100644 (file)
@@ -10,9 +10,9 @@
  * DEBUG: section 28    Access Control
  *
  * This file contains ACL routines that are not part of the
- * ACL class, nor any other class yet, and that need to be
+ * Acl::Node class, nor any other class yet, and that need to be
  * factored into appropriate places. They are here to reduce
- * unneeded dependencies between the ACL class and the rest
+ * unneeded dependencies between the Acl::Node class and the rest
  * of squid.
  */
 
@@ -30,7 +30,7 @@
 #include <set>
 #include <algorithm>
 
-typedef std::set<ACL*> AclSet;
+using AclSet = std::set<Acl::Node *>;
 /// Accumulates all ACLs to facilitate their clean deletion despite reuse.
 static AclSet *RegisteredAcls; // TODO: Remove when ACLs are refcounted
 
@@ -76,9 +76,7 @@ aclIsProxyAuth(const char *name)
 
     debugs(28, 5, "aclIsProxyAuth: called for " << name);
 
-    ACL *a;
-
-    if ((a = ACL::FindByName(name))) {
+    if (const auto *a = Acl::Node::FindByName(name)) {
         debugs(28, 5, "aclIsProxyAuth: returning " << a->isProxyAuth());
         return a->isProxyAuth();
     }
@@ -218,7 +216,7 @@ aclParseAclList(ConfigParser &, Acl::Tree **treep, const char *label)
 }
 
 void
-aclRegister(ACL *acl)
+aclRegister(Acl::Node *acl)
 {
     if (!acl->registered) {
         if (!RegisteredAcls)
@@ -231,7 +229,7 @@ aclRegister(ACL *acl)
 /// remove registered acl from the centralized deletion set
 static
 void
-aclDeregister(ACL *acl)
+aclDeregister(Acl::Node *acl)
 {
     if (acl->registered) {
         if (RegisteredAcls)
@@ -246,16 +244,16 @@ aclDeregister(ACL *acl)
 
 /// called to delete ALL Acls.
 void
-aclDestroyAcls(ACL ** head)
+aclDestroyAcls(Acl::Node ** head)
 {
     *head = nullptr; // Config.aclList
     if (AclSet *acls = RegisteredAcls) {
         debugs(28, 8, "deleting all " << acls->size() << " ACLs");
         while (!acls->empty()) {
-            ACL *acl = *acls->begin();
-            // We use centralized deletion (this function) so ~ACL should not
+            auto *acl = *acls->begin();
+            // We use centralized deletion (this function) so ~Acl::Node should not
             // delete other ACLs, but we still deregister first to prevent any
-            // accesses to the being-deleted ACL via RegisteredAcls.
+            // accesses to the being-deleted Acl::Node via RegisteredAcls.
             assert(acl->registered); // make sure we are making progress
             aclDeregister(acl);
             delete acl;
index ca1cb8695741016ddc5536674f8b126cc466d4ab..a607f29e481414a2a3415ed6bdb45f0b258b88d6 100644 (file)
@@ -19,13 +19,13 @@ class dlink_list;
 class StoreEntry;
 class wordlist;
 
-/// Register an ACL object for future deletion. Repeated registrations are OK.
+/// Register an Acl::Node object for future deletion. Repeated registrations are OK.
 /// \ingroup ACLAPI
-void aclRegister(ACL *acl);
+void aclRegister(Acl::Node *acl);
 /// \ingroup ACLAPI
 void aclDestroyAccessList(acl_access **list);
 /// \ingroup ACLAPI
-void aclDestroyAcls(ACL **);
+void aclDestroyAcls(Acl::Node **);
 /// \ingroup ACLAPI
 void aclDestroyAclList(ACLList **);
 /// Parses a single line of a "action followed by acls" directive (e.g., http_access).
@@ -54,7 +54,7 @@ void aclParseDenyInfoLine(AclDenyInfoList **);
 /// \ingroup ACLAPI
 void aclDestroyDenyInfoList(AclDenyInfoList **);
 /// \ingroup ACLAPI
-wordlist *aclDumpGeneric(const ACL *);
+wordlist *aclDumpGeneric(const Acl::Node *);
 /// \ingroup ACLAPI
 void aclCacheMatchFlush(dlink_list * cache);
 /// \ingroup ACLAPI
index 9c26689db1adcc788e6cbcea2f47f73aee1fae76..faa7826a25278acb6f3bd209f78bb19139595f4e 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class HasComponentCheck: public ParameterizedNode< ACLData<ACLChecklist *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 24bf04f12b15c32048674cdbcac32795530c6d18..b3fe15d6de62a4d1e11fe22b389f3eb43dcb4816 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class HierCodeCheck: public ParameterizedNode< ACLData<hier_code> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index e1f43610c74e9cf90f30130c3365f650d9d5bdff..8cfc9835afbc7d93b139d7c4b221d0664dbf3b7a 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class HttpRepHeaderCheck: public ParameterizedNode< ACLData<HttpHeader*> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresReply() const override { return true; }
 };
index 0e1e78b6e8e12d7a2207194e3d60a6648a9f6de2..d134a386d186734da0d506812dbece020de86ce0 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class HttpReqHeaderCheck: public ParameterizedNode< ACLData<HttpHeader*> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override { return true; }
 };
index 86d1952a937922d5124e9f8e5f686503e4f16679..9b877aa299a1d8d26b17bd681df4ae969c111018 100644 (file)
@@ -22,7 +22,7 @@ struct acl_httpstatus_data {
 };
 
 /// \ingroup ACLAPI
-class ACLHTTPStatus : public ACL
+class ACLHTTPStatus : public Acl::Node
 {
     MEMPROXY_CLASS(ACLHTTPStatus);
 
index 64568cd2cba07df3b0c156b3a90f4d209e5d927a..585c9e62479ef763c7cf8c2a91715383ff4d2c91 100644 (file)
@@ -33,7 +33,7 @@ Acl::InnerNode::empty() const
 }
 
 void
-Acl::InnerNode::add(ACL *node)
+Acl::InnerNode::add(Acl::Node *node)
 {
     assert(node != nullptr);
     nodes.push_back(node);
@@ -57,7 +57,7 @@ Acl::InnerNode::lineParse()
             ++t;
 
         debugs(28, 3, "looking for ACL " << t);
-        ACL *a = ACL::FindByName(t);
+        auto *a = Acl::Node::FindByName(t);
 
         if (a == nullptr) {
             debugs(28, DBG_CRITICAL, "ERROR: ACL not found: " << t);
index 2b381124d274c06ac22530874317ade60a9c2042..f264a4f1b06f101724e469e3abc4b41cd82a5d77 100644 (file)
@@ -9,16 +9,16 @@
 #ifndef SQUID_ACL_INNER_NODE_H
 #define SQUID_ACL_INNER_NODE_H
 
-#include "acl/Acl.h"
+#include "acl/Node.h"
 #include <vector>
 
 namespace Acl
 {
 
-typedef std::vector<ACL*> Nodes; ///< a collection of nodes
+using Nodes = std::vector<Acl::Node*>; ///< a collection of nodes
 
-/// An intermediate ACL tree node. Manages a collection of child tree nodes.
-class InnerNode: public ACL
+/// An intermediate Acl::Node tree node. Manages a collection of child tree nodes.
+class InnerNode: public Acl::Node
 {
 public:
     // No ~InnerNode() to delete children. They are aclRegister()ed instead.
@@ -29,7 +29,7 @@ public:
     /// the number of children nodes
     Nodes::size_type childrenCount() const { return nodes.size(); }
 
-    /* ACL API */
+    /* Acl::Node API */
     void prepareForUse() override;
     bool empty() const override;
     SBufList dump() const override;
@@ -39,18 +39,18 @@ public:
     size_t lineParse();
 
     /// appends the node to the collection and takes control over it
-    void add(ACL *node);
+    void add(Acl::Node *node);
 
 protected:
     /// checks whether the nodes match, starting with the given one
     /// kids determine what a match means for their type of intermediate nodes
     virtual int doMatch(ACLChecklist *checklist, Nodes::const_iterator start) const = 0;
 
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *checklist) override;
 
     // XXX: use refcounting instead of raw pointers
-    std::vector<ACL*> nodes; ///< children nodes of this intermediate node
+    Nodes nodes; ///< children nodes of this intermediate node
 };
 
 } // namespace Acl
index 3356402c948cd0afc4f6dafdaf9650140c3c5471..aa280cdfc2d719f7b75038426011b0089393d74f 100644 (file)
@@ -9,8 +9,8 @@
 #ifndef SQUID_ACLIP_H
 #define SQUID_ACLIP_H
 
-#include "acl/Acl.h"
 #include "acl/Data.h"
+#include "acl/Node.h"
 #include "ip/Address.h"
 #include "splay.h"
 
@@ -46,7 +46,7 @@ private:
     static bool DecodeMask(const char *asc, Ip::Address &mask, int string_format_type);
 };
 
-class ACLIP : public ACL
+class ACLIP : public Acl::Node
 {
 public:
     void *operator new(size_t);
index 1ca6f5d58b00f396f6d779e3f704835561b9ceff..9b41316f73cdd632fbbae9aa2b7c447cbde6ed75 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class LocalPortCheck: public ParameterizedNode< ACLData<int> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 4dd16ce4da942a26845cebadc446a763d3ecc609..819ae0d3ec88304f474268676ab97b7ba0aabfe8 100644 (file)
@@ -22,6 +22,7 @@ libapi_la_SOURCES = \
        ChecklistFiller.h \
        InnerNode.cc \
        InnerNode.h \
+       Node.h \
        Options.cc \
        Options.h \
        SplayInserter.h \
index 121c6bb9c716a93ac8927718bfbcfe555007eb54..711505addf63d328641198964073d46952af1f32 100644 (file)
@@ -9,10 +9,10 @@
 #ifndef SQUID_ACLMAXCONNECTION_H
 #define SQUID_ACLMAXCONNECTION_H
 
-#include "acl/Acl.h"
+#include "acl/Node.h"
 
 /// \ingroup ACLAPI
-class ACLMaxConnection : public ACL
+class ACLMaxConnection : public Acl::Node
 {
     MEMPROXY_CLASS(ACLMaxConnection);
 
index 96231db5744c2a18a3e1625e83362cdb35b3d5b1..f70d1a56178dc37e4d96f9c57be0985aebd5dd3b 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class MethodCheck: public ParameterizedNode< ACLData<HttpRequestMethod> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index 62a57f762b4d5fbd0750f19c0dfe7f1f8b0af457..d26c72ba7378c4d6ed932917c0a1d64a6b1ad638 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class MyPortNameCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
diff --git a/src/acl/Node.h b/src/acl/Node.h
new file mode 100644 (file)
index 0000000..224a81e
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
+#ifndef SQUID_SRC_ACL_NODE_H
+#define SQUID_SRC_ACL_NODE_H
+
+#include "acl/forward.h"
+#include "acl/Options.h"
+#include "dlink.h"
+
+class ConfigParser;
+
+namespace Acl {
+
+/// A configurable condition. A node in the ACL expression tree.
+/// Can evaluate itself in FilledChecklist context.
+/// Does not change during evaluation.
+/// \ingroup ACLAPI
+class Node
+{
+
+public:
+    void *operator new(size_t);
+    void operator delete(void *);
+
+    static void ParseAclLine(ConfigParser &parser, Acl::Node **head);
+    static void Initialize();
+    static Acl::Node *FindByName(const char *name);
+
+    Node();
+    Node(Node &&) = delete;  // no copying of any kind
+    virtual ~Node();
+
+    /// sets user-specified ACL name and squid.conf context
+    void context(const char *name, const char *configuration);
+
+    /// Orchestrates matching checklist against the Acl::Node using match(),
+    /// after checking preconditions and while providing debugging.
+    /// \return true if and only if there was a successful match.
+    /// Updates the checklist state on match, async, and failure.
+    bool matches(ACLChecklist *checklist) const;
+
+    /// configures Acl::Node options, throwing on configuration errors
+    void parseFlags();
+
+    /// parses node representation in squid.conf; dies on failures
+    virtual void parse() = 0;
+    virtual char const *typeString() const = 0;
+    virtual bool isProxyAuth() const;
+    virtual SBufList dump() const = 0;
+    virtual bool empty() const = 0;
+    virtual bool valid() const;
+
+    int cacheMatchAcl(dlink_list *cache, ACLChecklist *);
+    virtual int matchForCache(ACLChecklist *checklist);
+
+    virtual void prepareForUse() {}
+
+    // TODO: Find a way to make options() and this method constant
+    /// Prints aggregated "acl" (or similar) directive configuration, including
+    /// the given directive name, ACL name, ACL type, and ACL parameters. The
+    /// printed parameters are collected from all same-name "acl" directives.
+    void dumpWhole(const char *directiveName, std::ostream &);
+
+    char name[ACL_NAME_SZ];
+    char *cfgline;
+    Acl::Node *next;  // XXX: remove or at least use refcounting
+    bool registered;  ///< added to the global list of ACLs via aclRegister()
+
+private:
+    /// Matches the actual data in checklist against this Acl::Node.
+    virtual int match(ACLChecklist *checklist) = 0;  // XXX: missing const
+
+    /// whether our (i.e. shallow) match() requires checklist to have a AccessLogEntry
+    virtual bool requiresAle() const;
+    /// whether our (i.e. shallow) match() requires checklist to have a request
+    virtual bool requiresRequest() const;
+    /// whether our (i.e. shallow) match() requires checklist to have a reply
+    virtual bool requiresReply() const;
+
+    // TODO: Rename to globalOptions(); these are not the only supported options
+    /// \returns (linked) 'global' Options supported by this Acl::Node
+    virtual const Acl::Options &options() { return Acl::NoOptions(); }
+
+    /// \returns (linked) "line" Options supported by this Acl::Node
+    /// \see Acl::Node::options()
+    virtual const Acl::Options &lineOptions() { return Acl::NoOptions(); }
+};
+
+} // namespace Acl
+
+#endif /* SQUID_SRC_ACL_NODE_H */
index 0cf32a051259877a464e86364d948650d0343b95..f99b65573982edcfc2cc2eb11f827f356e9ce255 100644 (file)
@@ -31,7 +31,7 @@ public:
 class NoteCheck: public Acl::AnnotationCheck
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override { return true; }
 
index a6139be6368db64060f6cfe17c65a8a56ec28350..b4865e865d2b11143bc988186ca2ed37e5a6646c 100644 (file)
@@ -15,7 +15,7 @@
 #include <iosfwd>
 #include <vector>
 
-// After line continuation is handled by the preprocessor, an ACL object
+// After line continuation is handled by the preprocessor, an Acl::Node object
 // configuration can be visualized as a sequence of same-name "acl ..." lines:
 //
 // L1: acl exampleA typeT parameter1 -i parameter2 parameter3
@@ -27,7 +27,7 @@
 //
 // * Global (e.g., "-n"): Applies to all parameters regardless of where the
 //   option was discovered/parsed (e.g., "-n" on L3 affects parameter2 on L1).
-//   Declared by ACL class kids (or equivalent) via ACL::options().
+//   Declared by Acl::Node class kids (or equivalent) via Acl::Node::options().
 //
 // * Line (e.g., "-i"): Applies to the yet unparsed ACL parameters of the
 //   current "acl ..." line (e.g., "-i" on L1 has no effect on parameter4 on L2)
index a36c75129ecd4571b469aa67f7582fe127026322..0a0f9d5696d45f76b856114fe8cf5eb762f70977 100644 (file)
@@ -9,7 +9,7 @@
 #ifndef SQUID_SRC_ACL_PARAMETERIZEDNODE_H
 #define SQUID_SRC_ACL_PARAMETERIZEDNODE_H
 
-#include "acl/Acl.h"
+#include "acl/Node.h"
 #include "base/Assure.h"
 
 #include <memory>
@@ -20,7 +20,7 @@ namespace Acl
 /// An ACL that manages squid.conf-configured ACL parameters using a given class
 /// P. That P class must support the ACLData<> or equivalent API.
 template <class P>
-class ParameterizedNode: public ACL
+class ParameterizedNode: public Acl::Node
 {
 public:
     using Parameters = P;
@@ -31,7 +31,7 @@ public:
     ~ParameterizedNode() override = default;
 
 protected:
-    /* ACL API */
+    /* Acl::Node API */
     void parse() override { Assure(data); data->parse(); }
     void prepareForUse() override { data->prepareForUse(); }
     SBufList dump() const override { return data->dump(); }
@@ -39,7 +39,7 @@ protected:
     const Acl::Options &lineOptions() override { return data->lineOptions(); }
 
     /// Points to items this ACL is configured to match. A derived class ensures
-    /// that this pointer is never nil after the ACL object construction ends.
+    /// that this pointer is never nil after object construction ends.
     std::unique_ptr<Parameters> data;
 };
 
index d65e294c8eaf542f67bc9a7a9f2e4dfedbf7cc45..2df3e4be0542128f2bceaa71b093500b5d437b1f 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class PeerNameCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 2517cdc6e12fe5dfc28bb53f17c98d92fac17d10..101af5b80e48b279dbac7605553beb6de0095d8f 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class ProtocolCheck: public ParameterizedNode< ACLData<AnyP::ProtocolType> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index 98d66546206936c8b642c4fa9576e9132a3a8de0..20b0a37ebf57160aeb18e3ec0ec62d7a75a76de4 100644 (file)
@@ -9,9 +9,9 @@
 #ifndef SQUID_ACL_RANDOM_H
 #define SQUID_ACL_RANDOM_H
 
-#include "acl/Acl.h"
+#include "acl/Node.h"
 
-class ACLRandom : public ACL
+class ACLRandom : public Acl::Node
 {
     MEMPROXY_CLASS(ACLRandom);
 
index da0b202572208c731586d9b678b2ef13d0766dd3..7b29d0ac3a108e21a4c25a5ad025f4fe2ade2647 100644 (file)
@@ -23,7 +23,7 @@ template <Http::HdrType header>
 class ReplyHeaderCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresReply() const override {return true;}
 };
index 44c20b8b0777df18189a756f2c76fd2f90ce3beb..8ca3c042aaad45dfb9af25e314cc2e2b7c300369 100644 (file)
@@ -22,7 +22,7 @@ template <Http::HdrType header>
 class RequestHeaderCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index 9c195aed231ab0f141b36faca4a8d95e7cee8998..94532b0ee50fe9c89c4a1fa37c3e560a02ace4d3 100644 (file)
@@ -21,7 +21,7 @@ namespace Acl
 class ServerCertificateCheck: public ParameterizedNode< ACLData<X509 *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index a804b2fbeae6b0637de2de49fc7005566d3810a9..f6240e261ab411b206b51e603b9adabf4d4e106e 100644 (file)
@@ -26,7 +26,7 @@ namespace Acl
 class ServerNameCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
     const Acl::Options &options() override;
index 70029b720341dc844ffa00f1d0f6685a7318111b..64adc0b8b7dd47885b742002463d3f403058f465 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class SourceAsnCheck: public ParameterizedNode< ACLData<Ip::Address> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 2922b7d3924d83ebd819277969dc3c61c965bfb4..f3267f15bbafc89408bb176a13c0380585ac882b 100644 (file)
@@ -20,7 +20,7 @@
 static void LookupDone(const char *, const Dns::LookupDetails &, void *data);
 
 static void
-StartLookup(ACLFilledChecklist &checklist, const ACL &)
+StartLookup(ACLFilledChecklist &checklist, const Acl::Node &)
 {
     fqdncache_nbgethostbyaddr(checklist.src_addr, LookupDone, &checklist);
 }
index 9e7acc4572bf4ab9fde55439452425624abe9483..54f1ba7b83d13d5e3243940ed31239da1b79c115 100644 (file)
@@ -21,7 +21,7 @@ namespace Acl
 class SourceDomainCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index b9185b6d23c97600368ee4ac7bde8c1fb82a30f8..9c4fd9b94fb6d93f7e630496af62623ca2ac041e 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class SquidErrorCheck: public ParameterizedNode< ACLData<err_type> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index c1747e27cd89c7db19f230cb94c0a166a77f0b3c..ba2b58927350d8fd7e8e1711eb811928735c1995 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class CertificateErrorCheck: public ParameterizedNode< ACLData<const Security::CertErrors *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 3541b96dd6d0cfd19efd061aaf6c336f03e1a404..9b6464fc9366a7a812563fec05a44bb76066b3e4 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class TagCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 30d1f5a9f57d718e02febcccbf04b4ea6370c614..b0def4cf5063023165bb400ea5f021bfe51fa335 100644 (file)
@@ -20,7 +20,7 @@ namespace Acl
 class CurrentTimeCheck: public ParameterizedNode<ACLTimeData>
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 5b573b27b90e1cf562c56ed6e34fbb56c663d56e..eb2729d9872c9ceca2f0fd234d6198a50d5d845e 100644 (file)
@@ -17,7 +17,7 @@ namespace Acl
 {
 
 /// transaction_initiator ACL
-class TransactionInitiator : public ACL
+class TransactionInitiator : public Acl::Node
 {
     MEMPROXY_CLASS(TransactionInitiator);
 
index 104fb4e66191e198e7e187b5ad67da38bc189b24..1ecf291e46ed262fbdf1415f750c440123fb0d07 100644 (file)
@@ -41,7 +41,7 @@ Acl::Tree::actionAt(const Nodes::size_type pos) const
 }
 
 void
-Acl::Tree::add(ACL *rule, const Acl::Answer &action)
+Acl::Tree::add(Acl::Node *rule, const Acl::Answer &action)
 {
     // either all rules have actions or none
     assert(nodes.size() == actions.size());
@@ -50,7 +50,7 @@ Acl::Tree::add(ACL *rule, const Acl::Answer &action)
 }
 
 void
-Acl::Tree::add(ACL *rule)
+Acl::Tree::add(Acl::Node *rule)
 {
     // either all rules have actions or none
     assert(actions.empty());
index df144dad2d87ba4b2df70c438ce0ca1e36d7a4ca..8e1f76b5e69dea2fa70bd4142b01eb26e58dcdbf 100644 (file)
@@ -9,7 +9,9 @@
 #ifndef SQUID_ACL_TREE_H
 #define SQUID_ACL_TREE_H
 
+#include "acl/Acl.h"
 #include "acl/BoolOps.h"
+#include "cbdata.h"
 #include "sbuf/List.h"
 
 namespace Acl
@@ -36,8 +38,8 @@ public:
     Answer lastAction() const;
 
     /// appends and takes control over the rule with a given action
-    void add(ACL *rule, const Answer &action);
-    void add(ACL *rule); ///< same as InnerNode::add()
+    void add(Acl::Node *rule, const Answer &action);
+    void add(Acl::Node *rule); ///< same as InnerNode::add()
 
 protected:
     /// Acl::OrNode API
index 20d81b5137f862d10541bc6cc0cc658059d8f61e..7a57364cb27e91b11dfdb4e755a129ffa99bb7b4 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class UrlCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index 7c579e9c71aa1742c70f52657af635b2ef066d66..171ba9d62c3da56b8b490d59e74f776c6938b670 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class UrlLoginCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index 0ead4e6764f4301fc4098bae5ab8d5f28319a439..82fe4754e4a9980f2d7c7567e3c27ea9896265db 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class UrlPathCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index 83389bbbc037a40ab304c75af16545fad3c19d16..c08cf726416f9852592997c542d815aaa1e381d8 100644 (file)
@@ -19,7 +19,7 @@ namespace Acl
 class UrlPortCheck: public ParameterizedNode< ACLData<int> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
     bool requiresRequest() const override {return true;}
 };
index f6ccdd990f638b0a79d2312244014055c34dacb7..74d457ceb91bbed54adb66d76bd519b3bb50967d 100644 (file)
@@ -11,7 +11,6 @@
 
 #include "base/RefCount.h"
 
-class ACL;
 class ACLChecklist;
 class ACLFilledChecklist;
 class ACLList;
@@ -22,6 +21,7 @@ class AclSizeLimit;
 namespace Acl
 {
 
+class Node;
 class Address;
 class AndNode;
 class Answer;
index 19847aae89e9428749d6717b135cbb96a8346f15..cb3e6600dcb743580703d2548f6a73be804fcd1b 100644 (file)
@@ -25,7 +25,7 @@
  * \retval ACCESS_ALLOWED       user authenticated and authorized
  */
 Acl::Answer
-AuthenticateAcl(ACLChecklist *ch, const ACL &acl)
+AuthenticateAcl(ACLChecklist *ch, const Acl::Node &acl)
 {
     ACLFilledChecklist *checklist = Filled(ch);
     const auto request = checklist->request;
index dd8c4a71ac32e8ebabf2f506da1f9458d22138c6..756c4a435004a21c4c42905662a13dda6435a0b7 100644 (file)
@@ -19,7 +19,7 @@
 
 class ACLChecklist;
 /// \ingroup AuthAPI
-Acl::Answer AuthenticateAcl(ACLChecklist *, const ACL &);
+Acl::Answer AuthenticateAcl(ACLChecklist *, const Acl::Node &);
 
 #endif /* USE_AUTH */
 #endif /* SQUID_AUTH_ACL_H */
index f6493b7f941865cb4d99816c52b63a35b2c6f30f..fe8df9695a67321ca2177fadf12dc8e57d7399fd 100644 (file)
 
 #if USE_AUTH
 
-#include "acl/Acl.h"
+#include "acl/Node.h"
 #include "auth/UserRequest.h"
 
-class ACLMaxUserIP : public ACL
+class ACLMaxUserIP : public Acl::Node
 {
     MEMPROXY_CLASS(ACLMaxUserIP);
 
index e346852772cf19bc7c751f05b0950667862d5729..1a8bff7e7754632a19f5c0c15a6f730fb587478c 100644 (file)
@@ -103,7 +103,7 @@ ACLProxyAuth::valid() const
 }
 
 void
-ACLProxyAuth::StartLookup(ACLFilledChecklist &cl, const ACL &)
+ACLProxyAuth::StartLookup(ACLFilledChecklist &cl, const Acl::Node &)
 {
     debugs(28, 3, "checking password via authenticator");
 
index 66c7d3dd366f4e6896f259b1d6c3026f38e3f629..b1c96ab89aa9dca0c0e8ea876a30ff579d3a64ba 100644 (file)
 #include "acl/Checklist.h"
 #include "acl/Data.h"
 
-class ACLProxyAuth : public ACL
+class ACLProxyAuth : public Acl::Node
 {
     MEMPROXY_CLASS(ACLProxyAuth);
 
 public:
-    static void StartLookup(ACLFilledChecklist &, const ACL &);
+    static void StartLookup(ACLFilledChecklist &, const Acl::Node &);
 
     ~ACLProxyAuth() override;
     ACLProxyAuth(ACLData<char const *> *, char const *);
 
-    /* ACL API */
+    /* Acl::Node API */
     char const *typeString() const override;
     void parse() override;
     bool isProxyAuth() const override {return true;}
@@ -39,7 +39,7 @@ public:
 private:
     static void LookupDone(void *data);
 
-    /* ACL API */
+    /* Acl::Node API */
     const Acl::Options &lineOptions() override;
 
     int matchProxyAuth(ACLChecklist *);
index bd092e09cf1dc40e12279a35f0fedae85e995f6b..c32900cd80f1eeb0f968cb5d106f08a47577f960 100644 (file)
@@ -15,6 +15,7 @@
 #include "acl/Address.h"
 #include "acl/Gadgets.h"
 #include "acl/MethodData.h"
+#include "acl/Node.h"
 #include "acl/Tree.h"
 #include "anyp/PortCfg.h"
 #include "anyp/UriScheme.h"
@@ -255,7 +256,7 @@ static void free_configuration_includes_quoted_values(bool *recognizeQuotedValue
 static void parse_on_unsupported_protocol(acl_access **access);
 static void dump_on_unsupported_protocol(StoreEntry *entry, const char *name, acl_access *access);
 static void free_on_unsupported_protocol(acl_access **access);
-static void ParseAclWithAction(acl_access **access, const Acl::Answer &action, const char *desc, ACL *acl = nullptr);
+static void ParseAclWithAction(acl_access **access, const Acl::Answer &action, const char *desc, Acl::Node *acl = nullptr);
 static void parse_http_upgrade_request_protocols(HttpUpgradeProtocolAccess **protoGuards);
 static void dump_http_upgrade_request_protocols(StoreEntry *entry, const char *name, HttpUpgradeProtocolAccess *protoGuards);
 static void free_http_upgrade_request_protocols(HttpUpgradeProtocolAccess **protoGuards);
@@ -1491,7 +1492,7 @@ free_SBufList(SBufList *list)
 }
 
 static void
-dump_acl(StoreEntry * entry, const char *name, ACL * ae)
+dump_acl(StoreEntry * entry, const char *name, Acl::Node * ae)
 {
     PackableStream os(*entry);
     while (ae != nullptr) {
@@ -1502,13 +1503,13 @@ dump_acl(StoreEntry * entry, const char *name, ACL * ae)
 }
 
 static void
-parse_acl(ACL ** ae)
+parse_acl(Acl::Node ** ae)
 {
-    ACL::ParseAclLine(LegacyParser, ae);
+    Acl::Node::ParseAclLine(LegacyParser, ae);
 }
 
 static void
-free_acl(ACL ** ae)
+free_acl(Acl::Node ** ae)
 {
     aclDestroyAcls(ae);
 }
@@ -2024,7 +2025,7 @@ dump_AuthSchemes(StoreEntry *entry, const char *name, acl_access *authSchemes)
 #endif /* USE_AUTH */
 
 static void
-ParseAclWithAction(acl_access **access, const Acl::Answer &action, const char *desc, ACL *acl)
+ParseAclWithAction(acl_access **access, const Acl::Answer &action, const char *desc, Acl::Node *acl)
 {
     assert(access);
     SBuf name;
@@ -4724,7 +4725,7 @@ static void parse_ftp_epsv(acl_access **ftp_epsv)
         *ftp_epsv = nullptr;
 
         if (ftpEpsvDeprecatedAction == Acl::Answer(ACCESS_DENIED)) {
-            if (ACL *a = ACL::FindByName("all"))
+            if (auto *a = Acl::Node::FindByName("all"))
                 ParseAclWithAction(ftp_epsv, ftpEpsvDeprecatedAction, "ftp_epsv", a);
             else {
                 self_destruct();
index ed7025b3e2991cc8ac2f1d012c6fc6e8022c7fe5..7238adbc8d69b9b3ccdd09eae27d2bee4cda80d0 100644 (file)
@@ -1014,7 +1014,7 @@ externalAclHandleReply(void *data, const Helper::Reply &reply)
 /// Asks the helper (if needed) or returns the [cached] result (otherwise).
 /// Does not support "background" lookups. See also: ACLExternal::Start().
 void
-ACLExternal::StartLookup(ACLFilledChecklist &checklist, const ACL &acl)
+ACLExternal::StartLookup(ACLFilledChecklist &checklist, const Acl::Node &acl)
 {
     const auto &me = dynamic_cast<const ACLExternal&>(acl);
     me.startLookup(&checklist, me.data, false);
index d2c43dc18a9b757cceaf3e84c53c7c446cc315b8..b8bd57a6f0b235d1c45452b0b4962d0030d7c478 100644 (file)
@@ -88,7 +88,7 @@ ACLIdent::empty () const
 }
 
 void
-ACLIdent::StartLookup(ACLFilledChecklist &cl, const ACL &)
+ACLIdent::StartLookup(ACLFilledChecklist &cl, const Acl::Node &)
 {
     const ConnStateData *conn = cl.conn();
     // check that ACLIdent::match() tested this lookup precondition
index 82cedb417ca422cfb635637aa544e46016d20559..129f5b6bcc8a2b3557bd810026e8c650fcec3eee 100644 (file)
 #include "acl/Data.h"
 
 /// \ingroup ACLAPI
-class ACLIdent : public ACL
+class ACLIdent : public Acl::Node
 {
     MEMPROXY_CLASS(ACLIdent);
 
 public:
-    static void StartLookup(ACLFilledChecklist &, const ACL &);
+    static void StartLookup(ACLFilledChecklist &, const Acl::Node &);
 
     ACLIdent(ACLData<char const *> *newData, char const *);
     ~ACLIdent() override;
 
-    /* ACL API */
+    /* Acl::Node API */
     char const *typeString() const override;
     void parse() override;
     bool isProxyAuth() const override {return true;}
@@ -37,7 +37,7 @@ public:
 private:
     static void LookupDone(const char *ident, void *data);
 
-    /* ACL API */
+    /* Acl::Node API */
     const Acl::Options &lineOptions() override;
 
     ACLData<char const *> *data;
index 37f6eff68ade9d778504744d62f959fa7198107a..630439dfa3c0f0376a94bedc981bee63944832a6 100644 (file)
@@ -28,7 +28,7 @@
 
 class fde;
 
-// TODO: move to new ACL framework
+// TODO: move to new Acl::Node framework
 class acl_tos
 {
     CBDATA_CLASS(acl_tos);
@@ -42,7 +42,7 @@ public:
     tos_t tos;
 };
 
-// TODO: move to new ACL framework
+// TODO: move to new Acl::Node framework
 class acl_nfmark
 {
     CBDATA_CLASS(acl_nfmark);
index ca1877707ffba865dfaacf7275939f88fd01440a..ee0d187522fa4c807b55375b1d0a702b1f2be567 100644 (file)
@@ -806,7 +806,7 @@ serverConnectionsOpen(void)
         icmpEngine.Open();
         netdbInit();
         asnInit();
-        ACL::Initialize();
+        Acl::Node::Initialize();
         peerSelectInit();
 
         carpInit();
index 5b0f1e8474693fdd30d2e9de60de82cd202e6cde..dbfc94c021a7b883ee18f7e3c0029afb7ca3a3e4 100644 (file)
@@ -61,7 +61,7 @@ namespace Acl
 class SnmpCommunityCheck: public ParameterizedNode< ACLData<const char *> >
 {
 public:
-    /* ACL API */
+    /* Acl::Node API */
     int match(ACLChecklist *) override;
 };
 
index 67262f0b4112bf739fb2afe4861759f977bafddc..007b46b8b4f0dd0127a9d6a735d220a1c2309c25 100644 (file)
@@ -15,7 +15,7 @@
 #include "acl/Acl.h" /* for Acl::Answer */
 
 #include "auth/Acl.h"
-Acl::Answer AuthenticateAcl(ACLChecklist *, const ACL &) STUB_RETVAL(ACCESS_DENIED)
+Acl::Answer AuthenticateAcl(ACLChecklist *, const Acl::Node &) STUB_RETVAL(ACCESS_DENIED)
 
 #include "auth/AclMaxUserIp.h"
 ACLMaxUserIP::ACLMaxUserIP (char const *) STUB
index 8878a9ee0fbd048a91d83624523d3dc53851d13e..fea6a8492b90e76cb737384acce0a8b3c21eb6b9 100644 (file)
@@ -64,7 +64,7 @@ public:
 void
 MyTestProgram::startup()
 {
-    Acl::RegisterMaker("max_user_ip", [](Acl::TypeName name)->ACL* { return new ACLMaxUserIP(name); });
+    Acl::RegisterMaker("max_user_ip", [](Acl::TypeName name)->Acl::Node* { return new ACLMaxUserIP(name); });
 }
 
 void
@@ -74,9 +74,9 @@ TestACLMaxUserIP::testParseLine()
     char * line = xstrdup("test max_user_ip -s 1");
     /* seed the parser */
     ConfigParser::SetCfgLine(line);
-    ACL *anACL = nullptr;
+    Acl::Node *anACL = nullptr;
     ConfigParser LegacyParser;
-    ACL::ParseAclLine(LegacyParser, &anACL);
+    Acl::Node::ParseAclLine(LegacyParser, &anACL);
     ACLMaxUserIP *maxUserIpACL = dynamic_cast<ACLMaxUserIP *>(anACL);
     CPPUNIT_ASSERT(maxUserIpACL);
     if (maxUserIpACL) {