From c6973841348e0c5096fef8dfba11db25defa8afa Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sat, 19 Jun 2021 14:21:09 +0530 Subject: [PATCH] CacheZone: implemented DnsSpecialCacheRecord. --- DnsServerCore/Dns/Zones/CacheZone.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/DnsServerCore/Dns/Zones/CacheZone.cs b/DnsServerCore/Dns/Zones/CacheZone.cs index 9d4a91f8..64df13fe 100644 --- a/DnsServerCore/Dns/Zones/CacheZone.cs +++ b/DnsServerCore/Dns/Zones/CacheZone.cs @@ -48,7 +48,7 @@ namespace DnsServerCore.Dns.Zones if (filterSpecialCacheRecords) { - if ((record.RDATA is DnsCache.DnsNXRecord) || (record.RDATA is DnsCache.DnsEmptyRecord) || (record.RDATA is DnsCache.DnsFailureRecord)) + if (record.RDATA is DnsCache.DnsSpecialCacheRecord) return Array.Empty(); //special cache record } @@ -64,7 +64,7 @@ namespace DnsServerCore.Dns.Zones if (filterSpecialCacheRecords) { - if ((record.RDATA is DnsCache.DnsNXRecord) || (record.RDATA is DnsCache.DnsEmptyRecord) || (record.RDATA is DnsCache.DnsFailureRecord)) + if (record.RDATA is DnsCache.DnsSpecialCacheRecord) continue; //special cache record } @@ -91,12 +91,13 @@ namespace DnsServerCore.Dns.Zones public void SetRecords(DnsResourceRecordType type, IReadOnlyList records, bool serveStale) { - if ((records.Count > 0) && (records[0].RDATA is DnsCache.DnsFailureRecord)) + bool isFailureRecord = (records.Count > 0) && (records[0].RDATA is DnsCache.DnsSpecialCacheRecord splRecord) && splRecord.IsFailure; + if (isFailureRecord) { //call trying to cache failure record if (_entries.TryGetValue(type, out IReadOnlyList existingRecords)) { - if ((existingRecords.Count > 0) && !(existingRecords[0].RDATA is DnsCache.DnsFailureRecord) && !existingRecords[0].IsExpired(serveStale)) + if ((existingRecords.Count > 0) && !(existingRecords[0].RDATA is DnsCache.DnsSpecialCacheRecord existingSplRecord && existingSplRecord.IsFailure) && !existingRecords[0].IsExpired(serveStale)) return; //skip to avoid overwriting a useful record with a failure record } } @@ -104,7 +105,7 @@ namespace DnsServerCore.Dns.Zones //set records _entries[type] = records; - if (serveStale && (records.Count > 0) && !(records[0].RDATA is DnsCache.DnsFailureRecord)) + if (serveStale && !isFailureRecord) { //remove stale CNAME entry only when serve stale is enabled //making sure current record is not a failure record causing removal of useful stale CNAME record