DnsWebService: added catalog zone support. Updated dns config file format for supporting new options.

This commit is contained in:
Shreyas Zare
2024-09-14 19:19:59 +05:30
parent bdda47db3f
commit 9aa6dcac0e

View File

@@ -138,6 +138,7 @@ namespace DnsServerCore
Directory.CreateDirectory(_configFolder); Directory.CreateDirectory(_configFolder);
Directory.CreateDirectory(Path.Combine(_configFolder, "blocklists")); Directory.CreateDirectory(Path.Combine(_configFolder, "blocklists"));
Directory.CreateDirectory(Path.Combine(_configFolder, "zones"));
_log = new LogManager(_configFolder); _log = new LogManager(_configFolder);
_authManager = new AuthManager(_configFolder, _log); _authManager = new AuthManager(_configFolder, _log);
@@ -463,6 +464,7 @@ namespace DnsServerCore
//zones //zones
_webService.MapGetAndPost("/api/zones/list", _zonesApi.ListZones); _webService.MapGetAndPost("/api/zones/list", _zonesApi.ListZones);
_webService.MapGetAndPost("/api/zones/catalogs/list", _zonesApi.ListCatalogZones);
_webService.MapGetAndPost("/api/zones/create", _zonesApi.CreateZoneAsync); _webService.MapGetAndPost("/api/zones/create", _zonesApi.CreateZoneAsync);
_webService.MapGetAndPost("/api/zones/import", _zonesApi.ImportZoneAsync); _webService.MapGetAndPost("/api/zones/import", _zonesApi.ImportZoneAsync);
_webService.MapGetAndPost("/api/zones/export", _zonesApi.ExportZoneAsync); _webService.MapGetAndPost("/api/zones/export", _zonesApi.ExportZoneAsync);
@@ -1005,15 +1007,28 @@ namespace DnsServerCore
else else
_dnsServer.Recursion = DnsServerRecursion.AllowOnlyForPrivateNetworks; //default for security reasons _dnsServer.Recursion = DnsServerRecursion.AllowOnlyForPrivateNetworks; //default for security reasons
string strRecursionDeniedNetworks = Environment.GetEnvironmentVariable("DNS_SERVER_RECURSION_DENIED_NETWORKS"); string strRecursionNetworkACL = Environment.GetEnvironmentVariable("DNS_SERVER_RECURSION_NETWORK_ACL");
if (!string.IsNullOrEmpty(strRecursionDeniedNetworks)) if (!string.IsNullOrEmpty(strRecursionNetworkACL))
_dnsServer.RecursionDeniedNetworks = strRecursionDeniedNetworks.Split(NetworkAddress.Parse, ','); {
_dnsServer.RecursionNetworkACL = strRecursionNetworkACL.Split(NetworkAccessControl.Parse, ',');
}
else
{
NetworkAddress[] recursionDeniedNetworks = null;
NetworkAddress[] recursionAllowedNetworks = null;
string strRecursionAllowedNetworks = Environment.GetEnvironmentVariable("DNS_SERVER_RECURSION_ALLOWED_NETWORKS"); string strRecursionDeniedNetworks = Environment.GetEnvironmentVariable("DNS_SERVER_RECURSION_DENIED_NETWORKS");
if (!string.IsNullOrEmpty(strRecursionAllowedNetworks)) if (!string.IsNullOrEmpty(strRecursionDeniedNetworks))
_dnsServer.RecursionAllowedNetworks = strRecursionAllowedNetworks.Split(NetworkAddress.Parse, ','); recursionDeniedNetworks = strRecursionDeniedNetworks.Split(NetworkAddress.Parse, ',');
_dnsServer.RandomizeName = true; //default true to enable security feature string strRecursionAllowedNetworks = Environment.GetEnvironmentVariable("DNS_SERVER_RECURSION_ALLOWED_NETWORKS");
if (!string.IsNullOrEmpty(strRecursionAllowedNetworks))
recursionAllowedNetworks = strRecursionAllowedNetworks.Split(NetworkAddress.Parse, ',');
_dnsServer.RecursionNetworkACL = AuthZoneInfo.ConvertDenyAllowToACL(recursionDeniedNetworks, recursionAllowedNetworks);
}
_dnsServer.RandomizeName = false; //default false to allow resolving from bad name servers
_dnsServer.QnameMinimization = true; //default true to enable privacy feature _dnsServer.QnameMinimization = true; //default true to enable privacy feature
_dnsServer.NsRevalidation = false; //default false to allow resolving misconfigured zones _dnsServer.NsRevalidation = false; //default false to allow resolving misconfigured zones
@@ -1117,9 +1132,6 @@ namespace DnsServerCore
_authManager.SetPermission(PermissionSection.Zones, ntpDomain, _authManager.GetGroup(Group.ADMINISTRATORS), PermissionFlag.ViewModifyDelete); _authManager.SetPermission(PermissionSection.Zones, ntpDomain, _authManager.GetGroup(Group.ADMINISTRATORS), PermissionFlag.ViewModifyDelete);
_authManager.SetPermission(PermissionSection.Zones, ntpDomain, _authManager.GetGroup(Group.DNS_ADMINISTRATORS), PermissionFlag.ViewModifyDelete); _authManager.SetPermission(PermissionSection.Zones, ntpDomain, _authManager.GetGroup(Group.DNS_ADMINISTRATORS), PermissionFlag.ViewModifyDelete);
_authManager.SaveConfigFile(); _authManager.SaveConfigFile();
Directory.CreateDirectory(Path.Combine(_dnsServer.ConfigFolder, "zones"));
_dnsServer.AuthZoneManager.SaveZoneFile(ntpDomain);
} }
} }
} }
@@ -1208,7 +1220,7 @@ namespace DnsServerCore
int version = bR.ReadByte(); int version = bR.ReadByte();
if ((version >= 28) && (version <= 36)) if ((version >= 28) && (version <= 37))
{ {
ReadConfigFrom(bR, version); ReadConfigFrom(bR, version);
} }
@@ -1219,7 +1231,9 @@ namespace DnsServerCore
//new default settings //new default settings
DnsClientConnection.IPv4SourceAddresses = null; DnsClientConnection.IPv4SourceAddresses = null;
DnsClientConnection.IPv6SourceAddresses = null; DnsClientConnection.IPv6SourceAddresses = null;
_appsApi.EnableAutomaticUpdate = true;
_webServiceEnableHttp3 = _webServiceEnableTls && IsQuicSupported(); _webServiceEnableHttp3 = _webServiceEnableTls && IsQuicSupported();
_dnsServer.EnableDnsOverHttp3 = _dnsServer.EnableDnsOverHttps && IsQuicSupported();
_dnsServer.ResponsiblePersonInternal = null; _dnsServer.ResponsiblePersonInternal = null;
_dnsServer.AuthZoneManager.UseSoaSerialDateScheme = false; _dnsServer.AuthZoneManager.UseSoaSerialDateScheme = false;
_dnsServer.ZoneTransferAllowedNetworks = null; _dnsServer.ZoneTransferAllowedNetworks = null;
@@ -1231,11 +1245,12 @@ namespace DnsServerCore
_dnsServer.EDnsClientSubnetIpv6Override = null; _dnsServer.EDnsClientSubnetIpv6Override = null;
_dnsServer.QpmLimitBypassList = null; _dnsServer.QpmLimitBypassList = null;
_dnsServer.BlockingBypassList = null; _dnsServer.BlockingBypassList = null;
_dnsServer.ResolverConcurrency = 2;
_dnsServer.CacheZoneManager.ServeStaleAnswerTtl = CacheZoneManager.SERVE_STALE_ANSWER_TTL; _dnsServer.CacheZoneManager.ServeStaleAnswerTtl = CacheZoneManager.SERVE_STALE_ANSWER_TTL;
_dnsServer.CacheZoneManager.ServeStaleResetTtl = CacheZoneManager.SERVE_STALE_RESET_TTL; _dnsServer.CacheZoneManager.ServeStaleResetTtl = CacheZoneManager.SERVE_STALE_RESET_TTL;
_dnsServer.ServeStaleMaxWaitTime = DnsServer.SERVE_STALE_MAX_WAIT_TIME; _dnsServer.ServeStaleMaxWaitTime = DnsServer.SERVE_STALE_MAX_WAIT_TIME;
_dnsServer.ConcurrentForwarding = true;
_dnsServer.ResolverLogManager = _log; _dnsServer.ResolverLogManager = _log;
_appsApi.EnableAutomaticUpdate = true;
_dnsServer.StatsManager.EnableInMemoryStats = false; _dnsServer.StatsManager.EnableInMemoryStats = false;
} }
else else
@@ -1329,8 +1344,8 @@ namespace DnsServerCore
if (version >= 34) if (version >= 34)
{ {
DnsClientConnection.IPv4SourceAddresses = ReadNetworkAddresses(bR); DnsClientConnection.IPv4SourceAddresses = AuthZoneInfo.ReadNetworkAddressesFrom(bR);
DnsClientConnection.IPv6SourceAddresses = ReadNetworkAddresses(bR); DnsClientConnection.IPv6SourceAddresses = AuthZoneInfo.ReadNetworkAddressesFrom(bR);
} }
else else
{ {
@@ -1356,7 +1371,7 @@ namespace DnsServerCore
if (version >= 33) if (version >= 33)
{ {
_dnsServer.AuthZoneManager.UseSoaSerialDateScheme = bR.ReadBoolean(); _dnsServer.AuthZoneManager.UseSoaSerialDateScheme = bR.ReadBoolean();
_dnsServer.ZoneTransferAllowedNetworks = ReadNetworkAddresses(bR); _dnsServer.ZoneTransferAllowedNetworks = AuthZoneInfo.ReadNetworkAddressesFrom(bR);
} }
else else
{ {
@@ -1365,7 +1380,7 @@ namespace DnsServerCore
} }
if (version >= 34) if (version >= 34)
_dnsServer.NotifyAllowedNetworks = ReadNetworkAddresses(bR); _dnsServer.NotifyAllowedNetworks = AuthZoneInfo.ReadNetworkAddressesFrom(bR);
else else
_dnsServer.NotifyAllowedNetworks = null; _dnsServer.NotifyAllowedNetworks = null;
@@ -1413,7 +1428,7 @@ namespace DnsServerCore
_dnsServer.QpmLimitIPv6PrefixLength = bR.ReadInt32(); _dnsServer.QpmLimitIPv6PrefixLength = bR.ReadInt32();
if (version >= 34) if (version >= 34)
_dnsServer.QpmLimitBypassList = ReadNetworkAddresses(bR); _dnsServer.QpmLimitBypassList = AuthZoneInfo.ReadNetworkAddressesFrom(bR);
else else
_dnsServer.QpmLimitBypassList = null; _dnsServer.QpmLimitBypassList = null;
@@ -1456,6 +1471,11 @@ namespace DnsServerCore
_dnsServer.EnableDnsOverTls = bR.ReadBoolean(); _dnsServer.EnableDnsOverTls = bR.ReadBoolean();
_dnsServer.EnableDnsOverHttps = bR.ReadBoolean(); _dnsServer.EnableDnsOverHttps = bR.ReadBoolean();
if (version >= 37)
_dnsServer.EnableDnsOverHttp3 = bR.ReadBoolean();
else
_dnsServer.EnableDnsOverHttp3 = _dnsServer.EnableDnsOverHttps && IsQuicSupported();
if (version >= 32) if (version >= 32)
{ {
_dnsServer.EnableDnsOverQuic = bR.ReadBoolean(); _dnsServer.EnableDnsOverQuic = bR.ReadBoolean();
@@ -1554,8 +1574,16 @@ namespace DnsServerCore
//recursion //recursion
_dnsServer.Recursion = (DnsServerRecursion)bR.ReadByte(); _dnsServer.Recursion = (DnsServerRecursion)bR.ReadByte();
_dnsServer.RecursionDeniedNetworks = ReadNetworkAddresses(bR); if (version >= 37)
_dnsServer.RecursionAllowedNetworks = ReadNetworkAddresses(bR); {
_dnsServer.RecursionNetworkACL = AuthZoneInfo.ReadNetworkACLFrom(bR);
}
else
{
NetworkAddress[] recursionDeniedNetworks = AuthZoneInfo.ReadNetworkAddressesFrom(bR);
NetworkAddress[] recursionAllowedNetworks = AuthZoneInfo.ReadNetworkAddressesFrom(bR);
_dnsServer.RecursionNetworkACL = AuthZoneInfo.ConvertDenyAllowToACL(recursionDeniedNetworks, recursionAllowedNetworks);
}
_dnsServer.RandomizeName = bR.ReadBoolean(); _dnsServer.RandomizeName = bR.ReadBoolean();
_dnsServer.QnameMinimization = bR.ReadBoolean(); _dnsServer.QnameMinimization = bR.ReadBoolean();
@@ -1563,6 +1591,12 @@ namespace DnsServerCore
_dnsServer.ResolverRetries = bR.ReadInt32(); _dnsServer.ResolverRetries = bR.ReadInt32();
_dnsServer.ResolverTimeout = bR.ReadInt32(); _dnsServer.ResolverTimeout = bR.ReadInt32();
if (version >= 37)
_dnsServer.ResolverConcurrency = bR.ReadInt32();
else
_dnsServer.ResolverConcurrency = 2;
_dnsServer.ResolverMaxStackCount = bR.ReadInt32(); _dnsServer.ResolverMaxStackCount = bR.ReadInt32();
//cache //cache
@@ -1603,7 +1637,7 @@ namespace DnsServerCore
_dnsServer.AllowTxtBlockingReport = bR.ReadBoolean(); _dnsServer.AllowTxtBlockingReport = bR.ReadBoolean();
if (version >= 33) if (version >= 33)
_dnsServer.BlockingBypassList = ReadNetworkAddresses(bR); _dnsServer.BlockingBypassList = AuthZoneInfo.ReadNetworkAddressesFrom(bR);
else else
_dnsServer.BlockingBypassList = null; _dnsServer.BlockingBypassList = null;
@@ -1712,6 +1746,11 @@ namespace DnsServerCore
} }
} }
if (version >= 37)
_dnsServer.ConcurrentForwarding = bR.ReadBoolean();
else
_dnsServer.ConcurrentForwarding = true;
_dnsServer.ForwarderRetries = bR.ReadInt32(); _dnsServer.ForwarderRetries = bR.ReadInt32();
_dnsServer.ForwarderTimeout = bR.ReadInt32(); _dnsServer.ForwarderTimeout = bR.ReadInt32();
_dnsServer.ForwarderConcurrency = bR.ReadInt32(); _dnsServer.ForwarderConcurrency = bR.ReadInt32();
@@ -1820,6 +1859,7 @@ namespace DnsServerCore
{ {
_dnsServer.Recursion = (DnsServerRecursion)bR.ReadByte(); _dnsServer.Recursion = (DnsServerRecursion)bR.ReadByte();
NetworkAddress[] recursionDeniedNetworks = null;
{ {
int count = bR.ReadByte(); int count = bR.ReadByte();
if (count > 0) if (count > 0)
@@ -1829,15 +1869,15 @@ namespace DnsServerCore
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
networks[i] = NetworkAddress.ReadFrom(bR); networks[i] = NetworkAddress.ReadFrom(bR);
_dnsServer.RecursionDeniedNetworks = networks; recursionDeniedNetworks = networks;
} }
else else
{ {
_dnsServer.RecursionDeniedNetworks = null; recursionDeniedNetworks = null;
} }
} }
NetworkAddress[] recursionAllowedNetworks = null;
{ {
int count = bR.ReadByte(); int count = bR.ReadByte();
if (count > 0) if (count > 0)
@@ -1847,13 +1887,15 @@ namespace DnsServerCore
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
networks[i] = NetworkAddress.ReadFrom(bR); networks[i] = NetworkAddress.ReadFrom(bR);
_dnsServer.RecursionAllowedNetworks = networks; recursionAllowedNetworks = networks;
} }
else else
{ {
_dnsServer.RecursionAllowedNetworks = null; recursionAllowedNetworks = null;
} }
} }
_dnsServer.RecursionNetworkACL = AuthZoneInfo.ConvertDenyAllowToACL(recursionDeniedNetworks, recursionAllowedNetworks);
} }
else else
{ {
@@ -1881,7 +1923,7 @@ namespace DnsServerCore
if (version >= 12) if (version >= 12)
_dnsServer.RandomizeName = bR.ReadBoolean(); _dnsServer.RandomizeName = bR.ReadBoolean();
else else
_dnsServer.RandomizeName = true; //default true to enable security feature _dnsServer.RandomizeName = false; //default false to allow resolving from bad name servers
if (version >= 15) if (version >= 15)
_dnsServer.QnameMinimization = bR.ReadBoolean(); _dnsServer.QnameMinimization = bR.ReadBoolean();
@@ -2346,7 +2388,7 @@ namespace DnsServerCore
private void WriteConfigTo(BinaryWriter bW) private void WriteConfigTo(BinaryWriter bW)
{ {
bW.Write(Encoding.ASCII.GetBytes("DS")); //format bW.Write(Encoding.ASCII.GetBytes("DS")); //format
bW.Write((byte)36); //version bW.Write((byte)37); //version
//web service //web service
{ {
@@ -2388,8 +2430,8 @@ namespace DnsServerCore
localEP.WriteTo(bW); localEP.WriteTo(bW);
} }
WriteNetworkAddresses(DnsClientConnection.IPv4SourceAddresses, bW); AuthZoneInfo.WriteNetworkAddressesTo(DnsClientConnection.IPv4SourceAddresses, bW);
WriteNetworkAddresses(DnsClientConnection.IPv6SourceAddresses, bW); AuthZoneInfo.WriteNetworkAddressesTo(DnsClientConnection.IPv6SourceAddresses, bW);
bW.Write(_zonesApi.DefaultRecordTtl); bW.Write(_zonesApi.DefaultRecordTtl);
@@ -2400,8 +2442,8 @@ namespace DnsServerCore
bW.Write(_dnsServer.AuthZoneManager.UseSoaSerialDateScheme); bW.Write(_dnsServer.AuthZoneManager.UseSoaSerialDateScheme);
WriteNetworkAddresses(_dnsServer.ZoneTransferAllowedNetworks, bW); AuthZoneInfo.WriteNetworkAddressesTo(_dnsServer.ZoneTransferAllowedNetworks, bW);
WriteNetworkAddresses(_dnsServer.NotifyAllowedNetworks, bW); AuthZoneInfo.WriteNetworkAddressesTo(_dnsServer.NotifyAllowedNetworks, bW);
bW.Write(_appsApi.EnableAutomaticUpdate); bW.Write(_appsApi.EnableAutomaticUpdate);
@@ -2439,7 +2481,7 @@ namespace DnsServerCore
bW.Write(_dnsServer.QpmLimitIPv4PrefixLength); bW.Write(_dnsServer.QpmLimitIPv4PrefixLength);
bW.Write(_dnsServer.QpmLimitIPv6PrefixLength); bW.Write(_dnsServer.QpmLimitIPv6PrefixLength);
WriteNetworkAddresses(_dnsServer.QpmLimitBypassList, bW); AuthZoneInfo.WriteNetworkAddressesTo(_dnsServer.QpmLimitBypassList, bW);
bW.Write(_dnsServer.ClientTimeout); bW.Write(_dnsServer.ClientTimeout);
bW.Write(_dnsServer.TcpSendTimeout); bW.Write(_dnsServer.TcpSendTimeout);
@@ -2454,6 +2496,7 @@ namespace DnsServerCore
bW.Write(_dnsServer.EnableDnsOverHttp); bW.Write(_dnsServer.EnableDnsOverHttp);
bW.Write(_dnsServer.EnableDnsOverTls); bW.Write(_dnsServer.EnableDnsOverTls);
bW.Write(_dnsServer.EnableDnsOverHttps); bW.Write(_dnsServer.EnableDnsOverHttps);
bW.Write(_dnsServer.EnableDnsOverHttp3);
bW.Write(_dnsServer.EnableDnsOverQuic); bW.Write(_dnsServer.EnableDnsOverQuic);
bW.Write(_dnsServer.DnsOverUdpProxyPort); bW.Write(_dnsServer.DnsOverUdpProxyPort);
@@ -2492,9 +2535,7 @@ namespace DnsServerCore
//recursion //recursion
bW.Write((byte)_dnsServer.Recursion); bW.Write((byte)_dnsServer.Recursion);
AuthZoneInfo.WriteNetworkACLTo(_dnsServer.RecursionNetworkACL, bW);
WriteNetworkAddresses(_dnsServer.RecursionDeniedNetworks, bW);
WriteNetworkAddresses(_dnsServer.RecursionAllowedNetworks, bW);
bW.Write(_dnsServer.RandomizeName); bW.Write(_dnsServer.RandomizeName);
bW.Write(_dnsServer.QnameMinimization); bW.Write(_dnsServer.QnameMinimization);
@@ -2502,6 +2543,7 @@ namespace DnsServerCore
bW.Write(_dnsServer.ResolverRetries); bW.Write(_dnsServer.ResolverRetries);
bW.Write(_dnsServer.ResolverTimeout); bW.Write(_dnsServer.ResolverTimeout);
bW.Write(_dnsServer.ResolverConcurrency);
bW.Write(_dnsServer.ResolverMaxStackCount); bW.Write(_dnsServer.ResolverMaxStackCount);
//cache //cache
@@ -2527,7 +2569,7 @@ namespace DnsServerCore
bW.Write(_dnsServer.EnableBlocking); bW.Write(_dnsServer.EnableBlocking);
bW.Write(_dnsServer.AllowTxtBlockingReport); bW.Write(_dnsServer.AllowTxtBlockingReport);
WriteNetworkAddresses(_dnsServer.BlockingBypassList, bW); AuthZoneInfo.WriteNetworkAddressesTo(_dnsServer.BlockingBypassList, bW);
bW.Write((byte)_dnsServer.BlockingType); bW.Write((byte)_dnsServer.BlockingType);
@@ -2599,6 +2641,7 @@ namespace DnsServerCore
forwarder.WriteTo(bW); forwarder.WriteTo(bW);
} }
bW.Write(_dnsServer.ConcurrentForwarding);
bW.Write(_dnsServer.ForwarderRetries); bW.Write(_dnsServer.ForwarderRetries);
bW.Write(_dnsServer.ForwarderTimeout); bW.Write(_dnsServer.ForwarderTimeout);
bW.Write(_dnsServer.ForwarderConcurrency); bW.Write(_dnsServer.ForwarderConcurrency);
@@ -2611,33 +2654,34 @@ namespace DnsServerCore
} }
} }
private static NetworkAddress[] ReadNetworkAddresses(BinaryReader bR) #endregion
#region secondary catalog zones
private void AuthZoneManager_SecondaryCatalogZoneAdded(object sender, SecondaryCatalogEventArgs e)
{ {
int count = bR.ReadByte(); AuthZoneInfo sourceZoneInfo = new AuthZoneInfo(sender as ApexZone);
if (count < 1) AuthZoneInfo zoneInfo = e.ZoneInfo;
return null;
NetworkAddress[] networks = new NetworkAddress[count]; //clone user/group permissions from source zone
Permission sourceZonePermissions = _authManager.GetPermission(PermissionSection.Zones, sourceZoneInfo.Name);
for (int i = 0; i < count; i++) foreach (KeyValuePair<User, PermissionFlag> userPermission in sourceZonePermissions.UserPermissions)
networks[i] = NetworkAddress.ReadFrom(bR); _authManager.SetPermission(PermissionSection.Zones, zoneInfo.Name, userPermission.Key, userPermission.Value);
return networks; foreach (KeyValuePair<Group, PermissionFlag> groupPermissions in sourceZonePermissions.GroupPermissions)
_authManager.SetPermission(PermissionSection.Zones, zoneInfo.Name, groupPermissions.Key, groupPermissions.Value);
//set default permissions
_authManager.SetPermission(PermissionSection.Zones, zoneInfo.Name, _authManager.GetGroup(Group.ADMINISTRATORS), PermissionFlag.ViewModifyDelete);
_authManager.SetPermission(PermissionSection.Zones, zoneInfo.Name, _authManager.GetGroup(Group.DNS_ADMINISTRATORS), PermissionFlag.ViewModifyDelete);
_authManager.SaveConfigFile();
} }
private static void WriteNetworkAddresses(IReadOnlyCollection<NetworkAddress> networkAddresses, BinaryWriter bW) private void AuthZoneManager_SecondaryCatalogZoneRemoved(object sender, SecondaryCatalogEventArgs e)
{ {
if (networkAddresses is null) _authManager.RemoveAllPermissions(PermissionSection.Zones, e.ZoneInfo.Name);
{ _authManager.SaveConfigFile();
bW.Write((byte)0);
}
else
{
bW.Write(Convert.ToByte(networkAddresses.Count));
foreach (NetworkAddress network in networkAddresses)
network.WriteTo(bW);
}
} }
#endregion #endregion
@@ -2674,6 +2718,8 @@ namespace DnsServerCore
_dnsServer.DnsApplicationManager.LoadAllApplications(); _dnsServer.DnsApplicationManager.LoadAllApplications();
//load all zones files //load all zones files
_dnsServer.AuthZoneManager.SecondaryCatalogZoneAdded += AuthZoneManager_SecondaryCatalogZoneAdded;
_dnsServer.AuthZoneManager.SecondaryCatalogZoneRemoved += AuthZoneManager_SecondaryCatalogZoneRemoved;
_dnsServer.AuthZoneManager.LoadAllZoneFiles(); _dnsServer.AuthZoneManager.LoadAllZoneFiles();
InspectAndFixZonePermissions(); InspectAndFixZonePermissions();
@@ -2731,7 +2777,7 @@ namespace DnsServerCore
} }
//start web service //start web service
await TryStartWebServiceAsync(new IPAddress[] { IPAddress.Any, IPAddress.IPv6Any }, 5380, 53443); await TryStartWebServiceAsync([IPAddress.Any, IPAddress.IPv6Any], 5380, 53443);
//start dns and dhcp //start dns and dhcp
await _dnsServer.StartAsync(); await _dnsServer.StartAsync();