AuthZoneManager: implemented QueryClosestDelegation().

This commit is contained in:
Shreyas Zare
2021-04-03 12:32:23 +05:30
parent f8230ce7a1
commit 2dd9b89e74

View File

@@ -888,6 +888,22 @@ namespace DnsServerCore.Dns.ZoneManagers
return _root.ListSubDomains(domain);
}
public DnsDatagram QueryClosestDelegation(DnsDatagram request)
{
_ = _root.FindZone(request.Question[0].Name, out AuthZone delegation, out _, out _);
if (delegation == null)
{
//no delegation found
return new DnsDatagram(request.Identifier, true, DnsOpcode.StandardQuery, false, false, request.RecursionDesired, true, false, false, DnsResponseCode.Refused, request.Question);
}
//return closest name servers in delegation
IReadOnlyList<DnsResourceRecord> authority = delegation.QueryRecords(DnsResourceRecordType.NS);
IReadOnlyList<DnsResourceRecord> additional = GetAdditionalRecords(authority);
return new DnsDatagram(request.Identifier, true, DnsOpcode.StandardQuery, false, false, request.RecursionDesired, true, false, false, DnsResponseCode.NoError, request.Question, null, authority, additional);
}
public DnsDatagram Query(DnsDatagram request, bool isRecursionAllowed)
{
AuthZone zone = _root.FindZone(request.Question[0].Name, out AuthZone delegation, out AuthZone authZone, out bool hasSubDomains);