Zone: updated QueryCache() implementation to return only name servers with glue records available in cache.

This commit is contained in:
Shreyas Zare
2019-06-02 14:55:15 +05:30
parent 37e3b2eb00
commit f1545ea852

View File

@@ -806,12 +806,17 @@ namespace DnsServerCore
}
}
DnsResourceRecord[] nameServers = closestZone.QueryClosestCachedNameServers(serveStale);
if (nameServers != null)
while (closestZone != null)
{
DnsResourceRecord[] additional = QueryGlueRecords(rootZone, nameServers, serveStale);
DnsResourceRecord[] nameServers = closestZone.QueryClosestCachedNameServers(serveStale);
if (nameServers == null)
break;
return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, DnsOpcode.StandardQuery, false, false, request.Header.RecursionDesired, true, false, false, DnsResponseCode.NoError, 1, 0, (ushort)nameServers.Length, (ushort)additional.Length), request.Question, new DnsResourceRecord[] { }, nameServers, additional);
DnsResourceRecord[] additional = QueryGlueRecords(rootZone, nameServers, serveStale);
if (additional.Length > 0)
return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, DnsOpcode.StandardQuery, false, false, request.Header.RecursionDesired, true, false, false, DnsResponseCode.NoError, 1, 0, (ushort)nameServers.Length, (ushort)additional.Length), request.Question, new DnsResourceRecord[] { }, nameServers, additional);
closestZone = closestZone._parentZone;
}
return new DnsDatagram(new DnsHeader(request.Header.Identifier, true, DnsOpcode.StandardQuery, false, false, request.Header.RecursionDesired, true, false, false, DnsResponseCode.Refused, 1, 0, 0, 0), request.Question, new DnsResourceRecord[] { }, new DnsResourceRecord[] { }, new DnsResourceRecord[] { });