From 85b4ff4152f2e87a6f837112d287997fcba71242 Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Sat, 23 Sep 2023 18:12:41 +0530 Subject: [PATCH] WebServiceApi: updated ResolveQueryAsync() to detect if new primary zone is to be created. --- DnsServerCore/WebServiceApi.cs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/DnsServerCore/WebServiceApi.cs b/DnsServerCore/WebServiceApi.cs index 7a8985a6..7ba852d2 100644 --- a/DnsServerCore/WebServiceApi.cs +++ b/DnsServerCore/WebServiceApi.cs @@ -321,8 +321,28 @@ namespace DnsServerCore if (importResponse) { + bool isZoneImport = false; + + if (type == DnsResourceRecordType.AXFR) + { + isZoneImport = true; + } + else + { + foreach (DnsResourceRecord record in dnsResponse.Answer) + { + if (record.Type == DnsResourceRecordType.SOA) + { + if (record.Name.Equals(domain, StringComparison.OrdinalIgnoreCase)) + isZoneImport = true; + + break; + } + } + } + AuthZoneInfo zoneInfo = _dnsWebService.DnsServer.AuthZoneManager.FindAuthZoneInfo(domain); - if ((zoneInfo is null) || ((zoneInfo.Type == AuthZoneType.Secondary) && !zoneInfo.Name.Equals(domain, StringComparison.OrdinalIgnoreCase))) + if ((zoneInfo is null) || ((zoneInfo.Type != AuthZoneType.Primary) && !zoneInfo.Name.Equals(domain, StringComparison.OrdinalIgnoreCase)) || (isZoneImport && !zoneInfo.Name.Equals(domain, StringComparison.OrdinalIgnoreCase))) { if (!_dnsWebService._authManager.IsPermitted(PermissionSection.Zones, session.User, PermissionFlag.Modify)) throw new DnsWebServiceException("Access was denied.");