]> git.ipfire.org Git - thirdparty/squid.git/blame - src/acl/Eui64.cc
Source Format Enforcement (#532)
[thirdparty/squid.git] / src / acl / Eui64.cc
CommitLineData
a98c2da5 1/*
77b1029d 2 * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
a98c2da5 3 *
bbc27441
AJ
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.
a98c2da5
AJ
7 */
8
bbc27441
AJ
9/* DEBUG: section 28 Access Control */
10
582c2af2 11#include "squid.h"
a98c2da5
AJ
12
13#if USE_SQUID_EUI
14
15#include "acl/Eui64.h"
16#include "acl/FilledChecklist.h"
582c2af2 17#include "Debug.h"
a98c2da5 18#include "eui/Eui64.h"
9b859d6f 19#include "globals.h"
96d89ea0 20#include "ip/Address.h"
a98c2da5 21
a98c2da5
AJ
22ACL *
23ACLEui64::clone() const
24{
25 return new ACLEui64(*this);
26}
27
fdd757c5 28ACLEui64::ACLEui64 (char const *theClass) : class_ (theClass)
a98c2da5
AJ
29{}
30
fdd757c5 31ACLEui64::ACLEui64 (ACLEui64 const & old) : eui64Data(old.eui64Data), class_ (old.class_)
a98c2da5 32{
a98c2da5
AJ
33}
34
a98c2da5
AJ
35char const *
36ACLEui64::typeString() const
37{
38 return class_;
39}
40
41bool
42ACLEui64::empty () const
43{
fdd757c5 44 return eui64Data.empty();
a98c2da5
AJ
45}
46
47Eui::Eui64 *
48aclParseEuiData(const char *t)
49{
50 char buf[256];
51 Eui::Eui64 *q = new Eui::Eui64;
52 debugs(28, 5, "aclParseEuiData: " << t);
53
54 if (sscanf(t, "%[0-9a-fA-F:]", buf) != 1) {
fa84c01d 55 debugs(28, DBG_CRITICAL, "aclParseEuiData: Bad EUI-64 address: '" << t << "'");
2dd66a22 56 delete q;
a98c2da5
AJ
57 return NULL;
58 }
59
60 if (!q->decode(buf)) {
fa84c01d
FC
61 debugs(28, DBG_CRITICAL, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
62 debugs(28, DBG_CRITICAL, "aclParseEuiData: Ignoring invalid EUI-64 acl entry: can't parse '" << buf << "'");
2dd66a22 63 delete q;
a98c2da5
AJ
64 return NULL;
65 }
66
67 return q;
68}
69
a98c2da5
AJ
70/*******************/
71/* aclParseEuiList */
72/*******************/
73void
74ACLEui64::parse()
a98c2da5 75{
16c5ad96 76 while (const char * t = ConfigParser::strtokFile()) {
68acf08e
FC
77 if (Eui::Eui64 * q = aclParseEuiData(t)) {
78 eui64Data.insert(*q);
2dd66a22 79 delete q;
68acf08e 80 }
a98c2da5
AJ
81 }
82}
83
84int
85ACLEui64::match(ACLChecklist *cl)
86{
87 ACLFilledChecklist *checklist = Filled(cl);
88
89 /* IPv4 does not do EUI-64 (yet) */
4dd643d5 90 if (!checklist->src_addr.isIPv6()) {
a98c2da5
AJ
91 debugs(14, 3, "ACLEui64::match: IPv6 Required for EUI-64 Lookups. Skipping " << checklist->src_addr );
92 return 0;
93 }
94
736a7789 95 Eui::Eui64 lookingFor;
fdd757c5
FC
96 if (lookingFor.lookup(checklist->src_addr)) {
97 bool found = (eui64Data.find(lookingFor) != eui64Data.end());
98 debugs(28, 3, checklist->src_addr << "' " << (found ? "found" : "NOT found"));
99 return found;
a98c2da5
AJ
100 }
101
fdd757c5 102 debugs(28, 3, checklist->src_addr << " NOT found");
a98c2da5
AJ
103 return 0;
104}
105
9b859d6f 106SBufList
a98c2da5
AJ
107ACLEui64::dump() const
108{
fdd757c5 109 SBufList sl;
b06c45a5 110 for (auto i = eui64Data.begin(); i != eui64Data.end(); ++i) {
68acf08e 111 static char buf[48];
fdd757c5
FC
112 i->encode(buf,48);
113 sl.push_back(SBuf(buf));
114 }
115 return sl;
a98c2da5
AJ
116}
117
118#endif /* USE_SQUID_EUI */
f53969cc 119