]> granicus.if.org Git - pdns/commitdiff
rec: Don't go Bogus if the auth zone delegation test takes too long
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 1 Jul 2019 10:03:55 +0000 (12:03 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 1 Jul 2019 10:03:55 +0000 (12:03 +0200)
pdns/recursordist/test-syncres_cc.cc
pdns/recursordist/test-syncres_cc.hh
pdns/recursordist/test-syncres_cc4.cc

index b95b56e0f5f059f6030210af3e87f60deb577ed0..a77be26454dad3be39774acce7e736b1f39faba5 100644 (file)
@@ -414,7 +414,7 @@ void generateKeyMaterial(const DNSName& name, unsigned int algo, uint8_t digest,
   dsAnchors[name].insert(keys[name].second);
 }
 
-int genericDSAndDNSKEYHandler(LWResult* res, const DNSName& domain, DNSName auth, int type, const testkeysset_t& keys, bool proveCut)
+int genericDSAndDNSKEYHandler(LWResult* res, const DNSName& domain, DNSName auth, int type, const testkeysset_t& keys, bool proveCut, boost::optional<time_t> now)
 {
   if (type == QType::DS) {
     auth.chopOff();
@@ -422,7 +422,7 @@ int genericDSAndDNSKEYHandler(LWResult* res, const DNSName& domain, DNSName auth
     setLWResult(res, 0, true, false, true);
 
     if (addDS(domain, 300, res->d_records, keys, DNSResourceRecord::ANSWER)) {
-      addRRSIG(keys, res->d_records, auth, 300);
+      addRRSIG(keys, res->d_records, auth, 300, false, boost::none, boost::none, now);
     }
     else {
       addRecordToLW(res, auth, QType::SOA, "foo. bar. 2017032800 1800 900 604800 86400", DNSResourceRecord::AUTHORITY, 86400);
@@ -431,7 +431,7 @@ int genericDSAndDNSKEYHandler(LWResult* res, const DNSName& domain, DNSName auth
       const auto it = keys.find(auth);
       if (it != keys.cend()) {
         /* sign the SOA */
-        addRRSIG(keys, res->d_records, auth, 300);
+        addRRSIG(keys, res->d_records, auth, 300, false, boost::none, boost::none, now);
         /* add a NSEC denying the DS */
         std::set<uint16_t> types = { QType::NSEC };
         if (proveCut) {
@@ -439,7 +439,7 @@ int genericDSAndDNSKEYHandler(LWResult* res, const DNSName& domain, DNSName auth
         }
 
         addNSECRecordToLW(domain, DNSName("z") + domain, types, 600, res->d_records);
-        addRRSIG(keys, res->d_records, auth, 300);
+        addRRSIG(keys, res->d_records, auth, 300, false, boost::none, boost::none, now);
       }
     }
 
index 93d7e6f433a8760cd134cba8864b69f6cd68f5e7..db63a00230323b58c454328db9a3c2a69eb62be6 100644 (file)
@@ -73,7 +73,7 @@ void generateKeyMaterial(const DNSName& name, unsigned int algo, uint8_t digest,
 
 void generateKeyMaterial(const DNSName& name, unsigned int algo, uint8_t digest, testkeysset_t& keys, map<DNSName,dsmap_t>& dsAnchors);
 
-int genericDSAndDNSKEYHandler(LWResult* res, const DNSName& domain, DNSName auth, int type, const testkeysset_t& keys, bool proveCut=true);
+int genericDSAndDNSKEYHandler(LWResult* res, const DNSName& domain, DNSName auth, int type, const testkeysset_t& keys, bool proveCut=true, boost::optional<time_t> now=boost::none);
 
 int basicRecordsForQnameMinimization(LWResult* res, const DNSName& domain, int type);
 
index aceff1ff1f8a86b0bf72ba929e7c717e3b8aee44..49f712069bdaf9e9375a36a7dc05b59e84f41b0c 100644 (file)
@@ -137,11 +137,16 @@ BOOST_AUTO_TEST_CASE(test_auth_zone_delegation) {
   generateKeyMaterial(g_rootdnsname, DNSSECKeeper::RSASHA512, DNSSECKeeper::SHA384, keys, luaconfsCopy.dsAnchors);
   g_luaconfs.setState(luaconfsCopy);
 
-  sr->setAsyncCallback([&queriesCount,target,targetAddr,nsAddr,authZone,keys](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
+  /* make sure that the signature inception and validity times are computed
+     based on the SyncRes time, not the current one, in case the function
+     takes too long. */
+  const time_t fixedNow = sr->getNow().tv_sec;
+
+  sr->setAsyncCallback([&queriesCount,target,targetAddr,nsAddr,authZone,keys,fixedNow](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
 
       queriesCount++;
       if (type == QType::DS || type == QType::DNSKEY) {
-        return genericDSAndDNSKEYHandler(res, domain, DNSName("."), type, keys, domain == authZone);
+        return genericDSAndDNSKEYHandler(res, domain, DNSName("."), type, keys, domain == authZone, fixedNow);
       }
 
       if (ip == ComboAddress(nsAddr.toString(), 53) && domain == target) {