From 2dd9b89e745b244dda6c19f7aec5964c81e1fd12 Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sat, 3 Apr 2021 12:32:23 +0530 Subject: [PATCH] AuthZoneManager: implemented QueryClosestDelegation(). --- .../Dns/ZoneManagers/AuthZoneManager.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/DnsServerCore/Dns/ZoneManagers/AuthZoneManager.cs b/DnsServerCore/Dns/ZoneManagers/AuthZoneManager.cs index fe224605..ca81c919 100644 --- a/DnsServerCore/Dns/ZoneManagers/AuthZoneManager.cs +++ b/DnsServerCore/Dns/ZoneManagers/AuthZoneManager.cs @@ -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 authority = delegation.QueryRecords(DnsResourceRecordType.NS); + IReadOnlyList 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);