]> git.ipfire.org Git - thirdparty/squid.git/blob - src/acl/NoteData.cc
Merged from trunk
[thirdparty/squid.git] / src / acl / NoteData.cc
1 /*
2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
3 *
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.
7 */
8
9 #include "squid.h"
10 #include "acl/Acl.h"
11 #include "acl/Checklist.h"
12 #include "acl/NoteData.h"
13 #include "acl/StringData.h"
14 #include "ConfigParser.h"
15 #include "Debug.h"
16 #include "sbuf/StringConvert.h"
17 #include "wordlist.h"
18
19 ACLNoteData::ACLNoteData() : values(new ACLStringData)
20 {}
21
22 ACLNoteData::~ACLNoteData()
23 {
24 delete values;
25 }
26
27 bool
28 ACLNoteData::match(NotePairs::Entry *entry)
29 {
30 if (entry->name.cmp(name.termedBuf()) != 0)
31 return false; // name mismatch
32
33 // a name-only note ACL matches any value; others require a values match
34 return values->empty() ||
35 values->match(entry->value.termedBuf());
36 }
37
38 SBufList
39 ACLNoteData::dump() const
40 {
41 SBufList sl;
42 sl.push_back(StringToSBuf(name));
43 #if __cplusplus >= 201103L
44 sl.splice(sl.end(), values->dump());
45 #else
46 // temp is needed until c++11 move constructor
47 SBufList temp = values->dump();
48 sl.splice(sl.end(), temp);
49 #endif
50 return sl;
51 }
52
53 void
54 ACLNoteData::parse()
55 {
56 char* t = ConfigParser::strtokFile();
57 assert (t != NULL);
58 name = t;
59 values->parse();
60 }
61
62 bool
63 ACLNoteData::empty() const
64 {
65 return name.size() == 0;
66 }
67
68 ACLData<NotePairs::Entry *> *
69 ACLNoteData::clone() const
70 {
71 ACLNoteData * result = new ACLNoteData;
72 result->values = dynamic_cast<ACLStringData*>(values->clone());
73 assert(result->values);
74 result->name = name;
75 return result;
76 }
77