]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/acl/HasComponentData.cc
2 * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
10 #include "acl/HasComponentData.h"
12 #include "ConfigParser.h"
13 #include "sbuf/Algorithms.h"
15 const SBuf
ACLHasComponentData::RequestStr("request");
16 const SBuf
ACLHasComponentData::ResponseStr("response");
17 const SBuf
ACLHasComponentData::AleStr("ALE");
19 ACLHasComponentData::ACLHasComponentData()
20 : componentMethods(coEnd
, nullptr)
24 ACLHasComponentData::parse()
26 const auto tok
= ConfigParser::strtokFile();
28 debugs(28, DBG_CRITICAL
, "FATAL: \"has\" acl argument missing");
35 if (ConfigParser::strtokFile()) {
36 debugs(28, DBG_CRITICAL
, "FATAL: multiple components not supported for \"has\" acl");
43 ACLHasComponentData::match(ACLChecklist
*checklist
)
45 for (const auto method
: componentMethods
)
46 if (method
&& (checklist
->*method
)())
52 ACLHasComponentData::dump() const
55 if (componentMethods
.at(coRequest
))
56 sl
.push_back(RequestStr
);
57 if (componentMethods
.at(coResponse
))
58 sl
.push_back(ResponseStr
);
59 if (componentMethods
.at(coAle
))
65 ACLHasComponentData::parseComponent(const char *token
)
67 if (RequestStr
.cmp(token
) == 0)
68 componentMethods
[coRequest
] = &ACLChecklist::hasRequest
;
69 else if (ResponseStr
.cmp(token
) == 0)
70 componentMethods
[coResponse
] = &ACLChecklist::hasReply
;
71 else if (AleStr
.cmp(token
) == 0)
72 componentMethods
[coAle
] = &ACLChecklist::hasAle
;
74 debugs(28, DBG_CRITICAL
, "FATAL: unsupported component '" << token
<< "' for 'has' acl");