From 53873094ff9468428b900cdc7b0a714efabdcbc5 Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sat, 17 Apr 2021 14:13:20 +0530 Subject: [PATCH] CacheZone: fixed bug in ContainsNameServerRecords() that caused returning true when the NS record contains special cache record. Code updated to use DnsResourceRecord.IsExpired() method to check if record is expired. Minor code refactoring done. --- DnsServerCore/Dns/Zones/CacheZone.cs | 30 ++++++++++------------------ 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/DnsServerCore/Dns/Zones/CacheZone.cs b/DnsServerCore/Dns/Zones/CacheZone.cs index 36140558..9d4a91f8 100644 --- a/DnsServerCore/Dns/Zones/CacheZone.cs +++ b/DnsServerCore/Dns/Zones/CacheZone.cs @@ -43,11 +43,8 @@ namespace DnsServerCore.Dns.Zones { DnsResourceRecord record = records[0]; - if (!serveStale && record.IsStale) - return Array.Empty(); //record is stale - - if (record.TtlValue < 1u) - return Array.Empty(); //ttl expired + if (record.IsExpired(serveStale)) + return Array.Empty(); //record expired if (filterSpecialCacheRecords) { @@ -62,11 +59,8 @@ namespace DnsServerCore.Dns.Zones foreach (DnsResourceRecord record in records) { - if (!serveStale && record.IsStale) - continue; //record is stale - - if (record.TtlValue < 1u) - continue; //ttl expired + if (record.IsExpired(serveStale)) + continue; //record expired if (filterSpecialCacheRecords) { @@ -102,7 +96,7 @@ namespace DnsServerCore.Dns.Zones //call trying to cache failure record if (_entries.TryGetValue(type, out IReadOnlyList existingRecords)) { - if ((existingRecords.Count > 0) && !(existingRecords[0].RDATA is DnsCache.DnsFailureRecord) && (serveStale || !existingRecords[0].IsStale)) + if ((existingRecords.Count > 0) && !(existingRecords[0].RDATA is DnsCache.DnsFailureRecord) && !existingRecords[0].IsExpired(serveStale)) return; //skip to avoid overwriting a useful record with a failure record } } @@ -147,7 +141,7 @@ namespace DnsServerCore.Dns.Zones foreach (DnsResourceRecord record in entry.Value) { - if ((record.TtlValue < 1u) || (!serveStale && record.IsStale)) + if (record.IsExpired(serveStale)) { //record expired isExpired = true; @@ -161,7 +155,7 @@ namespace DnsServerCore.Dns.Zones foreach (DnsResourceRecord record in entry.Value) { - if ((record.TtlValue < 1u) || (!serveStale && record.IsStale)) + if (record.IsExpired(serveStale)) continue; //record expired, skip it if (newRecords == null) @@ -202,9 +196,9 @@ namespace DnsServerCore.Dns.Zones List anyRecords = new List(); foreach (KeyValuePair> entry in _entries) - anyRecords.AddRange(FilterExpiredRecords(type, entry.Value, serveStale, true)); + anyRecords.AddRange(entry.Value); - return anyRecords; + return FilterExpiredRecords(type, anyRecords, serveStale, true); } if (_entries.TryGetValue(type, out IReadOnlyList existingRecords)) @@ -223,10 +217,8 @@ namespace DnsServerCore.Dns.Zones if (record.IsStale) continue; - if (record.TtlValue < 1u) - continue; - - return true; + if (record.RDATA is DnsNSRecord) + return true; } return false;