From: bert hubert Date: Tue, 1 Dec 2015 16:39:59 +0000 (+0100) Subject: move our RPZ blocking to the most GLORIOUS NetmaskTree (thanks Aki!) X-Git-Tag: dnsdist-1.0.0-alpha1~154 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e7604973cf415606eeeb7aa31a8e6f1ac8a8ab3;p=thirdparty%2Fpdns.git move our RPZ blocking to the most GLORIOUS NetmaskTree (thanks Aki!) --- diff --git a/pdns/filterpo.cc b/pdns/filterpo.cc index a466455346..c50f7e55cd 100644 --- a/pdns/filterpo.cc +++ b/pdns/filterpo.cc @@ -64,11 +64,9 @@ DNSFilterEngine::Policy DNSFilterEngine::getQueryPolicy(const DNSName& qname, co return pol; } - for(const auto& qa : z.qpolAddr) { - if(qa.first.match(ca)) { - // cerr<<"Had a hit on the IP address ("<second; } } @@ -90,12 +88,8 @@ DNSFilterEngine::Policy DNSFilterEngine::getPostPolicy(const vector& continue; for(const auto& z : d_zones) { - for(const auto& qa : z.postpolAddr) { - if(qa.first.match(ca)) { - // cerr<<"Had a hit on IP address in answer"<second; } } return Policy{PolicyKind::NoAction}; @@ -105,19 +99,18 @@ void DNSFilterEngine::assureZones(int zone) { if((int)d_zones.size() <= zone) d_zones.resize(zone+1); - } void DNSFilterEngine::addClientTrigger(const Netmask& nm, Policy pol, int zone) { assureZones(zone); - d_zones[zone].qpolAddr.push_back({nm,pol}); + d_zones[zone].qpolAddr.insert(nm).second=pol; } void DNSFilterEngine::addResponseTrigger(const Netmask& nm, Policy pol, int zone) { assureZones(zone); - d_zones[zone].postpolAddr.push_back({nm,pol}); + d_zones[zone].postpolAddr.insert(nm).second=pol; } void DNSFilterEngine::addQNameTrigger(const DNSName& n, Policy pol, int zone) @@ -137,7 +130,7 @@ bool DNSFilterEngine::rmClientTrigger(const Netmask& nm, Policy pol, int zone) assureZones(zone); auto& qpols = d_zones[zone].qpolAddr; - qpols.erase(remove(qpols.begin(), qpols.end(),pair(nm,pol)), qpols.end()); + qpols.erase(nm); return true; } @@ -145,7 +138,7 @@ bool DNSFilterEngine::rmResponseTrigger(const Netmask& nm, Policy pol, int zone) { assureZones(zone); auto& postpols = d_zones[zone].postpolAddr; - postpols.erase(remove(postpols.begin(), postpols.end(),pair(nm,pol)), postpols.end()); + postpols.erase(nm); return true; } diff --git a/pdns/filterpo.hh b/pdns/filterpo.hh index 8633eb338e..95810eb879 100644 --- a/pdns/filterpo.hh +++ b/pdns/filterpo.hh @@ -34,7 +34,6 @@ Verbatim domain names Wildcard versions (*.domain.com does NOT match domain.com) Netmasks (IPv4 and IPv6) - Finally, triggers are grouped in different zones. The "first" zone that has a match is consulted. Then within that zone, rules again have precedences. */ @@ -72,13 +71,16 @@ public: Policy getProcessingPolicy(const DNSName& qname) const; Policy getPostPolicy(const vector& records) const; + size_t size() { + return d_zones.size(); + } private: void assureZones(int zone); struct Zone { std::map qpolName; - std::vector> qpolAddr; + NetmaskTree qpolAddr; std::map propolName; - std::vector> postpolAddr; + NetmaskTree postpolAddr; }; vector d_zones;