From 6c4dd71d6ac2d71247173b5cc1d70591ee497548 Mon Sep 17 00:00:00 2001 From: Marcin Szamotulski Date: Tue, 25 Oct 2022 18:04:16 +0200 Subject: [PATCH] dns-actions: make sure TTLs are strictly greater than 0 Otherwise the local root monitoring thread will busy loop. --- .../PeerSelection/RootPeersDNS/DNSActions.hs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ouroboros-network/src/Ouroboros/Network/PeerSelection/RootPeersDNS/DNSActions.hs b/ouroboros-network/src/Ouroboros/Network/PeerSelection/RootPeersDNS/DNSActions.hs index 15cfdd1cca..21deeb7218 100644 --- a/ouroboros-network/src/Ouroboros/Network/PeerSelection/RootPeersDNS/DNSActions.hs +++ b/ouroboros-network/src/Ouroboros/Network/PeerSelection/RootPeersDNS/DNSActions.hs @@ -175,6 +175,8 @@ getResolver resolvConf = do -- The IPv4 and IPv6 addresses the node will be using should determine the -- LookupReqs so that we can avoid lookups for address types that wont be used. -- +-- It guarantees that returned TTLs are strictly greater than 0. +-- ioDNSActions :: LookupReqs -> DNSActions DNS.Resolver IOException IO ioDNSActions = @@ -315,7 +317,7 @@ ioDNSActions = --TODO: we can get the SOA TTL on NXDOMAIN here if we want to where selectA DNS.DNSMessage { DNS.answer } = - [ (IPv4 addr, ttl) + [ (IPv4 addr, fixupTTL ttl) | DNS.ResourceRecord { DNS.rdata = DNS.RD_A addr, DNS.rrttl = ttl @@ -338,7 +340,7 @@ ioDNSActions = --TODO: we can get the SOA TTL on NXDOMAIN here if we want to where selectAAAA DNS.DNSMessage { DNS.answer } = - [ (IPv6 addr, ttl) + [ (IPv6 addr, fixupTTL ttl) | DNS.ResourceRecord { DNS.rdata = DNS.RD_AAAA addr, DNS.rrttl = ttl @@ -371,3 +373,13 @@ ioDNSActions = (Right r6, Left e4) -> return ([e4], r6) (Left e6, Right r4) -> return ([e6], r4) (Right r6, Right r4) -> return ([], r6 <> r4) + + +-- +-- Utils +-- + + +fixupTTL :: DNS.TTL -> DNS.TTL +fixupTTL 0 = maxBound +fixupTTL a = a