From eeac4ec5a67f1316230649711bdbdd5015a2ad6c Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sun, 11 Apr 2021 17:42:05 +0530 Subject: [PATCH] DnsServer: implemented `UseNxDomainForBlocking` option. --- DnsServerCore/Dns/DnsServer.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/DnsServerCore/Dns/DnsServer.cs b/DnsServerCore/Dns/DnsServer.cs index f80df940..9338534e 100644 --- a/DnsServerCore/Dns/DnsServer.cs +++ b/DnsServerCore/Dns/DnsServer.cs @@ -111,6 +111,7 @@ namespace DnsServerCore.Dns int _cachePrefetchTrigger = 9; int _cachePrefetchSampleIntervalInMinutes = 5; int _cachePrefetchSampleEligibilityHitsPerHour = 30; + bool _useNxDomainForBlocking; LogManager _queryLog; readonly StatsManager _stats; @@ -1501,11 +1502,16 @@ namespace DnsServerCore.Dns response = _blockListZoneManager.Query(request); //check in block list zone if (response == null) - return null; + return null; //domain not blocked in block list zone + + //domain is blocked in block list zone } else { //domain is blocked in blocked zone + if (_useNxDomainForBlocking && (request.Question[0].Type != DnsResourceRecordType.TXT)) + return new DnsDatagram(request.Identifier, true, DnsOpcode.StandardQuery, false, false, request.RecursionDesired, true, false, false, DnsResponseCode.NxDomain, request.Question); + IReadOnlyList answer = null; IReadOnlyList authority = null; @@ -1794,7 +1800,7 @@ namespace DnsServerCore.Dns switch (response.RCODE) { case DnsResponseCode.NoError: - case DnsResponseCode.NameError: + case DnsResponseCode.NxDomain: taskCompletionSource.SetResult(response); break; @@ -2842,6 +2848,12 @@ namespace DnsServerCore.Dns } } + public bool UseNxDomainForBlocking + { + get { return _useNxDomainForBlocking; } + set { _useNxDomainForBlocking = value; } + } + public LogManager LogManager { get { return _log; }