From: Stephan Bosch Date: Mon, 30 Sep 2019 13:10:42 +0000 (+0200) Subject: iputils.hh: NetmaskTree: Make the iterator reference a normal reference rather than... X-Git-Tag: auth-4.3.0-beta2~20^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c888097c7a2c2812412dc08e831137db1e9c057;p=thirdparty%2Fpdns.git iputils.hh: NetmaskTree: Make the iterator reference a normal reference rather than a pointer. This is possible now that the iterator type is no longer dictated by the internal std::set. This changes the NetmaskTree::iterator API, but it makes it more standard, less cumbersome, and less confusing. --- diff --git a/pdns/dnsdist-lua.cc b/pdns/dnsdist-lua.cc index a2979bac0b..8e69b44754 100644 --- a/pdns/dnsdist-lua.cc +++ b/pdns/dnsdist-lua.cc @@ -1087,8 +1087,8 @@ void setupLuaConfig(bool client, bool configCheck) boost::format fmt("%-24s %8d %8d %-10s %-20s %s\n"); g_outputBuffer = (fmt % "What" % "Seconds" % "Blocks" % "Warning" % "Action" % "Reason").str(); for(const auto& e: slow) { - if(now < e->second.until) - g_outputBuffer+= (fmt % e->first.toString() % (e->second.until.tv_sec - now.tv_sec) % e->second.blocks % (e->second.warning ? "true" : "false") % DNSAction::typeToString(e->second.action != DNSAction::Action::None ? e->second.action : g_dynBlockAction) % e->second.reason).str(); + if(now < e.second.until) + g_outputBuffer+= (fmt % e.first.toString() % (e.second.until.tv_sec - now.tv_sec) % e.second.blocks % (e.second.warning ? "true" : "false") % DNSAction::typeToString(e.second.action != DNSAction::Action::None ? e.second.action : g_dynBlockAction) % e.second.reason).str(); } auto slow2 = g_dynblockSMT.getCopy(); slow2.visit([&now, &fmt](const SuffixMatchTree& node) { diff --git a/pdns/dnsdist-web.cc b/pdns/dnsdist-web.cc index a089a9f6c3..d6a04d4ec2 100644 --- a/pdns/dnsdist-web.cc +++ b/pdns/dnsdist-web.cc @@ -395,15 +395,15 @@ static void connectionThread(int sock, ComboAddress remote) struct timespec now; gettime(&now); for(const auto& e: *nmg) { - if(now < e->second.until ) { + if(now < e.second.until ) { Json::object thing{ - {"reason", e->second.reason}, - {"seconds", (double)(e->second.until.tv_sec - now.tv_sec)}, - {"blocks", (double)e->second.blocks}, - {"action", DNSAction::typeToString(e->second.action != DNSAction::Action::None ? e->second.action : g_dynBlockAction) }, - {"warning", e->second.warning } + {"reason", e.second.reason}, + {"seconds", (double)(e.second.until.tv_sec - now.tv_sec)}, + {"blocks", (double)e.second.blocks}, + {"action", DNSAction::typeToString(e.second.action != DNSAction::Action::None ? e.second.action : g_dynBlockAction) }, + {"warning", e.second.warning } }; - obj.insert({e->first.toString(), thing}); + obj.insert({e.first.toString(), thing}); } } diff --git a/pdns/filterpo.cc b/pdns/filterpo.cc index ef37ac3ac8..a5e4705e17 100644 --- a/pdns/filterpo.cc +++ b/pdns/filterpo.cc @@ -619,14 +619,14 @@ void DNSFilterEngine::Zone::dump(FILE* fp) const } for (const auto pair : d_qpolAddr) { - dumpAddrPolicy(fp, pair->first, DNSName("rpz-client-ip.") + d_domain, pair->second); + dumpAddrPolicy(fp, pair.first, DNSName("rpz-client-ip.") + d_domain, pair.second); } for (const auto pair : d_propolNSAddr) { - dumpAddrPolicy(fp, pair->first, DNSName("rpz-nsip.") + d_domain, pair->second); + dumpAddrPolicy(fp, pair.first, DNSName("rpz-nsip.") + d_domain, pair.second); } for (const auto pair : d_postpolAddr) { - dumpAddrPolicy(fp, pair->first, DNSName("rpz-ip.") + d_domain, pair->second); + dumpAddrPolicy(fp, pair.first, DNSName("rpz-ip.") + d_domain, pair.second); } } diff --git a/pdns/iputils.hh b/pdns/iputils.hh index 6bebacfa98..69c9a9ec8e 100644 --- a/pdns/iputils.hh +++ b/pdns/iputils.hh @@ -854,9 +854,9 @@ private: public: class Iterator { public: - typedef node_type* value_type; - typedef node_type* reference; - typedef void pointer; + typedef node_type value_type; + typedef node_type& reference; + typedef node_type* pointer; typedef std::forward_iterator_tag iterator_category; typedef size_type difference_type; @@ -894,6 +894,15 @@ public: throw std::logic_error( "NetmaskTree::Iterator::operator*: iterator is invalid"); } + return d_node->node; + } + + pointer operator->() + { + if (d_node == nullptr) { + throw std::logic_error( + "NetmaskTree::Iterator::operator->: iterator is invalid"); + } return &d_node->node; } @@ -1315,9 +1324,9 @@ public: for(auto iter = tree.begin(); iter != tree.end(); ++iter) { if(iter != tree.begin()) str <<", "; - if(!((*iter)->second)) + if(!(iter->second)) str<<"!"; - str<<(*iter)->first.toString(); + str<first.toString(); } return str.str(); } @@ -1325,7 +1334,7 @@ public: void toStringVector(vector* vec) const { for(auto iter = tree.begin(); iter != tree.end(); ++iter) { - vec->push_back(((*iter)->second ? "" : "!") + (*iter)->first.toString()); + vec->push_back((iter->second ? "" : "!") + iter->first.toString()); } } diff --git a/pdns/sortlist.cc b/pdns/sortlist.cc index c1743389d2..11d309bc0b 100644 --- a/pdns/sortlist.cc +++ b/pdns/sortlist.cc @@ -13,7 +13,7 @@ int SortList::getMaxOrder(const Netmask& formask) const auto place = d_sortlist.lookup(formask); if(place && place->first == formask) { for(const auto& o : place->second.d_orders) - order = std::max(order, o->second); // aki, shouldn't this be o.second? + order = std::max(order, o.second); } return order; diff --git a/pdns/test-iputils_hh.cc b/pdns/test-iputils_hh.cc index dc14bf558d..9a531cf063 100644 --- a/pdns/test-iputils_hh.cc +++ b/pdns/test-iputils_hh.cc @@ -623,7 +623,7 @@ BOOST_AUTO_TEST_CASE(test_iterator) { BOOST_CHECK_EQUAL(std::distance(masks_set1.begin(), masks_set1.end()), std::distance(masks_set2.begin(), masks_set2.end())); for (auto entry: masks_set1) { - Netmask mask = entry->first.getNormalized(); + Netmask mask = entry.first.getNormalized(); BOOST_CHECK(masks_set2.find(mask) != masks_set2.end()); } @@ -643,7 +643,7 @@ BOOST_AUTO_TEST_CASE(test_iterator) { BOOST_CHECK_EQUAL(std::distance(masks_set1_cp1.begin(), masks_set1_cp1.end()), std::distance(masks_set2.begin(), masks_set2.end())); for (auto entry: masks_set1_cp1) { - Netmask mask = entry->first.getNormalized(); + Netmask mask = entry.first.getNormalized(); BOOST_CHECK(masks_set2.find(mask) != masks_set2.end()); } @@ -663,7 +663,7 @@ BOOST_AUTO_TEST_CASE(test_iterator) { BOOST_CHECK_EQUAL(std::distance(masks_set1_cp2.begin(), masks_set1_cp2.end()), std::distance(masks_set2.begin(), masks_set2.end())); for (auto entry: masks_set1_cp2) { - Netmask mask = entry->first.getNormalized(); + Netmask mask = entry.first.getNormalized(); BOOST_CHECK(masks_set2.find(mask) != masks_set2.end()); } @@ -684,7 +684,7 @@ BOOST_AUTO_TEST_CASE(test_iterator) { BOOST_CHECK_EQUAL(std::distance(masks_set1_cp3.begin(), masks_set1_cp3.end()), std::distance(masks_set2.begin(), masks_set2.end())); for (auto entry: masks_set1_cp3) { - Netmask mask = entry->first.getNormalized(); + Netmask mask = entry.first.getNormalized(); BOOST_CHECK(masks_set2.find(mask) != masks_set2.end()); } @@ -693,12 +693,12 @@ BOOST_AUTO_TEST_CASE(test_iterator) { } // copy contents to an std::set - std::set::node_type *> masks_set1_cp4(masks_set1_cp3.begin(), masks_set1_cp3.end()); + std::set::node_type> masks_set1_cp4(masks_set1_cp3.begin(), masks_set1_cp3.end()); // check set equality BOOST_CHECK_EQUAL(masks_set1_cp4.size(), masks_set2.size()); for (auto entry: masks_set1_cp4) { - Netmask mask = entry->first.getNormalized(); + Netmask mask = entry.first.getNormalized(); BOOST_CHECK(masks_set2.find(mask) != masks_set2.end()); } @@ -706,7 +706,7 @@ BOOST_AUTO_TEST_CASE(test_iterator) { Netmask maskl = mask.getNormalized(); bool found = false; for (auto entry: masks_set1_cp4) { - Netmask maskr = entry->first.getNormalized(); + Netmask maskr = entry.first.getNormalized(); if (maskl == maskr) found = true; @@ -779,7 +779,7 @@ BOOST_AUTO_TEST_CASE(test_iterator) { BOOST_CHECK_EQUAL(std::distance(masks_set1_cp5.begin(), masks_set1_cp5.end()), std::distance(masks_set2.begin(), masks_set2.end())); for (auto entry: masks_set1_cp5) { - Netmask mask = entry->first.getNormalized(); + Netmask mask = entry.first.getNormalized(); BOOST_CHECK(masks_set2.find(mask) != masks_set2.end()); }