From 7975f07f4236ac28e3cffe7bd773500f1d56516a Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sat, 3 Apr 2021 12:33:32 +0530 Subject: [PATCH] ResolverPrefetchDnsCache: fixed prefetch query handling so that auth zone is also queried along with cache zone to get the most relevant closest name servers. --- DnsServerCore/Dns/ResolverPrefetchDnsCache.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/DnsServerCore/Dns/ResolverPrefetchDnsCache.cs b/DnsServerCore/Dns/ResolverPrefetchDnsCache.cs index 6eda39b7..36605f46 100644 --- a/DnsServerCore/Dns/ResolverPrefetchDnsCache.cs +++ b/DnsServerCore/Dns/ResolverPrefetchDnsCache.cs @@ -47,7 +47,24 @@ namespace DnsServerCore.Dns if (_prefetchQuery.Equals(request.Question[0])) { //return closest name servers so that the recursive resolver queries them to refreshes cache instead of returning response from cache - return _cacheZoneManager.QueryClosestDelegation(request); + DnsDatagram authResponse = _authZoneManager.QueryClosestDelegation(request); + DnsDatagram cacheResponse = _cacheZoneManager.QueryClosestDelegation(request); + + if ((authResponse.Authority.Count > 0) && (cacheResponse.Authority.Count > 0)) + { + if (authResponse.Authority[0].Name.Length >= cacheResponse.Authority[0].Name.Length) + return authResponse; + + return cacheResponse; + } + else if (authResponse.Authority.Count > 0) + { + return authResponse; + } + else + { + return cacheResponse; + } } return base.Query(request, serveStale);