]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Reformulate condition and comment to make it more clear. 7631/head
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 1 Apr 2019 12:27:27 +0000 (14:27 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Mon, 1 Apr 2019 12:36:15 +0000 (14:36 +0200)
pdns/recursordist/docs/settings.rst
pdns/recursordist/test-syncres_cc.cc
pdns/syncres.cc

index ceb92bcf058a8601c15ddddb224d53d805e1a360..10613c0e1ff6a6aa5e575d36cb0198e8e9297862 100644 (file)
@@ -432,7 +432,7 @@ Can be set at runtime using ``rec_control set-ecs-minimum-ttl 3600``.
 -  Integer
 -  Default: 0 (disabled)
 
-The minumum TTL for an ECS-specific answer to be inserted into the query cache. This condition applies in conjunction with ``ecs-ipv4-cache-bits`` or ``ecs-ipv6-cache-bits``.
+The minimum TTL for an ECS-specific answer to be inserted into the query cache. This condition applies in conjunction with ``ecs-ipv4-cache-bits`` or ``ecs-ipv6-cache-bits``.
 That is, only if both the limits apply, the record will not be cached.
 
 .. _setting-ecs-scope-zero-address:
index 52ca667af6b795eb9796362a9f9d8a96219b0720..4b5e6297225b103aa743da7232ea85819c7bd0f5 100644 (file)
@@ -2175,7 +2175,7 @@ BOOST_AUTO_TEST_CASE(test_ecs_cache_limit_no_ttl_limit_allowed) {
   BOOST_CHECK_EQUAL(res, RCode::NoError);
   BOOST_CHECK_EQUAL(ret.size(), 1);
 
-  /* should have been cached because /24 is more specific than /16 but TTL limit is nof efective */
+  /* should have been cached because /24 is more specific than /16 but TTL limit is nof effective */
   const ComboAddress who("192.0.2.128");
   vector<DNSRecord> cached;
   BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
index 3af79100d42a200439120d5e050fc440b8e146e5..1b71d3c190b1ae2b27b3b308415aa292421e0dfe 100644 (file)
@@ -2421,14 +2421,13 @@ RCode::rcodes_ SyncRes::updateCacheFromRecords(unsigned int depth, LWResult& lwr
     */
     if (i->first.type != QType::NSEC3 && (i->first.type == QType::DS || i->first.type == QType::NS || i->first.type == QType::A || i->first.type == QType::AAAA || isAA || wasForwardRecurse)) {
 
-      bool doCache = i->first.place != DNSResourceRecord::ANSWER || !ednsmask;
-      // if ednsmask is relevant, we do not want to cache if the scope > ecslimit and TTL < limitttl
-      if (!doCache && ednsmask) {
-        bool manyMaskBits = (ednsmask->isIpv4() && ednsmask->getBits() > SyncRes::s_ecsipv4cachelimit) ||
+      bool doCache = true;
+      if (i->first.place == DNSResourceRecord::ANSWER && ednsmask) {
+        // If ednsmask is relevant, we do not want to cache if the scope prefix length is large and TTL is small
+        if (SyncRes::s_ecscachelimitttl > 0) {
+          bool manyMaskBits = (ednsmask->isIpv4() && ednsmask->getBits() > SyncRes::s_ecsipv4cachelimit) ||
             (ednsmask->isIpv6() && ednsmask->getBits() > SyncRes::s_ecsipv6cachelimit);
-        doCache = true;
 
-        if (SyncRes::s_ecscachelimitttl > 0) {
           if (manyMaskBits) {
             uint32_t minttl = UINT32_MAX;
             for (const auto &it : i->second.records) {