]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/acl/HttpHeaderData.cc
2 * Copyright (C) 1996-2016 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.
9 /* DEBUG: section 28 Access Control */
13 #include "acl/Checklist.h"
14 #include "acl/HttpHeaderData.h"
15 #include "acl/RegexData.h"
16 #include "base/RegexPattern.h"
17 #include "ConfigParser.h"
19 #include "HttpHeaderTools.h"
20 #include "sbuf/SBuf.h"
22 /* Construct an ACLHTTPHeaderData that uses an ACLRegex rule with the value of the
23 * selected header from a given request.
25 * TODO: This can be generalised by making the type of the regex_rule into a
26 * template parameter - so that we can use different rules types in future.
28 ACLHTTPHeaderData::ACLHTTPHeaderData() : hdrId(Http::HdrType::BAD_HDR
), regex_rule(new ACLRegexData
)
31 ACLHTTPHeaderData::~ACLHTTPHeaderData()
37 ACLHTTPHeaderData::match(HttpHeader
* hdr
)
42 debugs(28, 3, "aclHeaderData::match: checking '" << hdrName
<< "'");
45 if (hdrId
!= Http::HdrType::BAD_HDR
) {
48 value
= hdr
->getStrOrList(hdrId
);
50 if (!hdr
->getByNameIfPresent(hdrName
, value
))
55 return regex_rule
->match(cvalue
.c_str());
59 ACLHTTPHeaderData::dump() const
62 sl
.push_back(SBuf(hdrName
));
63 #if __cplusplus >= 201103L
64 sl
.splice(sl
.end(), regex_rule
->dump());
66 // temp is needed until c++11 move-constructor
67 SBufList temp
= regex_rule
->dump();
68 sl
.splice(sl
.end(), temp
);
74 ACLHTTPHeaderData::parse()
76 char* t
= ConfigParser::strtokFile();
79 hdrId
= Http::HeaderLookupTable
.lookup(hdrName
).id
;
84 ACLHTTPHeaderData::empty() const
86 return (hdrId
== Http::HdrType::BAD_HDR
&& hdrName
.isEmpty()) || regex_rule
->empty();
89 ACLData
<HttpHeader
*> *
90 ACLHTTPHeaderData::clone() const
92 /* Header's don't clone yet. */
93 ACLHTTPHeaderData
* result
= new ACLHTTPHeaderData
;
94 result
->regex_rule
= regex_rule
->clone();
95 result
->hdrId
= hdrId
;
96 result
->hdrName
= hdrName
;