]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
iputils.hh: NetmaskTree: Make the iterator reference a normal reference rather than...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Mon, 30 Sep 2019 13:10:42 +0000 (15:10 +0200)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 11 Feb 2020 19:54:03 +0000 (20:54 +0100)
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.

pdns/dnsdist-lua.cc
pdns/dnsdist-web.cc
pdns/filterpo.cc
pdns/iputils.hh
pdns/sortlist.cc
pdns/test-iputils_hh.cc

index a2979bac0b020f64cceed9f2c3e7434083a85009..8e69b44754d3085d897c47f37ccc882bcfcc7e22 100644 (file)
@@ -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<DynBlock>& node) {
index a089a9f6c3f17359998627d0b63a3cd5df031c28..d6a04d4ec254b5b1b7e49bcb33d0fa198041cc1f 100644 (file)
@@ -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});
           }
         }
 
index ef37ac3ac88b75ba07713e12dfd2d1a4bf79aae9..a5e4705e17e2590c070be727284c2aaacbb72ad0 100644 (file)
@@ -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);
   }
 }
index 6bebacfa98c701ebb16565eb5f8317075cac8bf2..69c9a9ec8e15cf528515de0292893d01929641fc 100644 (file)
@@ -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<<iter->first.toString();
     }
     return str.str();
   }
@@ -1325,7 +1334,7 @@ public:
   void toStringVector(vector<string>* 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());
     }
   }
 
index c1743389d205e70d27d9f5d928948f21d37f04dd..11d309bc0bbe370a9971b9ea4a5e0dbf8de07c69 100644 (file)
@@ -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;
index dc14bf558d3b232fa85458c58304a2df02e59062..9a531cf063825498a01acc8bf445e106aa35744b 100644 (file)
@@ -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<NetmaskTree<int>::node_type *> masks_set1_cp4(masks_set1_cp3.begin(), masks_set1_cp3.end());
+  std::set<NetmaskTree<int>::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());
   }