mirror of
https://github.com/fergalmoran/DnsServer.git
synced 2025-12-22 09:29:50 +00:00
WebServiceSettingsApi: updated settings API for new options.
This commit is contained in:
@@ -311,6 +311,7 @@ namespace DnsServerCore
|
|||||||
jsonWriter.WriteBoolean("enableDnsOverHttp", _dnsWebService.DnsServer.EnableDnsOverHttp);
|
jsonWriter.WriteBoolean("enableDnsOverHttp", _dnsWebService.DnsServer.EnableDnsOverHttp);
|
||||||
jsonWriter.WriteBoolean("enableDnsOverTls", _dnsWebService.DnsServer.EnableDnsOverTls);
|
jsonWriter.WriteBoolean("enableDnsOverTls", _dnsWebService.DnsServer.EnableDnsOverTls);
|
||||||
jsonWriter.WriteBoolean("enableDnsOverHttps", _dnsWebService.DnsServer.EnableDnsOverHttps);
|
jsonWriter.WriteBoolean("enableDnsOverHttps", _dnsWebService.DnsServer.EnableDnsOverHttps);
|
||||||
|
jsonWriter.WriteBoolean("enableDnsOverHttp3", _dnsWebService.DnsServer.EnableDnsOverHttp3);
|
||||||
jsonWriter.WriteBoolean("enableDnsOverQuic", _dnsWebService.DnsServer.EnableDnsOverQuic);
|
jsonWriter.WriteBoolean("enableDnsOverQuic", _dnsWebService.DnsServer.EnableDnsOverQuic);
|
||||||
jsonWriter.WriteNumber("dnsOverUdpProxyPort", _dnsWebService.DnsServer.DnsOverUdpProxyPort);
|
jsonWriter.WriteNumber("dnsOverUdpProxyPort", _dnsWebService.DnsServer.DnsOverUdpProxyPort);
|
||||||
jsonWriter.WriteNumber("dnsOverTcpProxyPort", _dnsWebService.DnsServer.DnsOverTcpProxyPort);
|
jsonWriter.WriteNumber("dnsOverTcpProxyPort", _dnsWebService.DnsServer.DnsOverTcpProxyPort);
|
||||||
@@ -346,27 +347,14 @@ namespace DnsServerCore
|
|||||||
//recursion
|
//recursion
|
||||||
jsonWriter.WriteString("recursion", _dnsWebService.DnsServer.Recursion.ToString());
|
jsonWriter.WriteString("recursion", _dnsWebService.DnsServer.Recursion.ToString());
|
||||||
|
|
||||||
jsonWriter.WritePropertyName("recursionDeniedNetworks");
|
jsonWriter.WritePropertyName("recursionNetworkACL");
|
||||||
{
|
{
|
||||||
jsonWriter.WriteStartArray();
|
jsonWriter.WriteStartArray();
|
||||||
|
|
||||||
if (_dnsWebService.DnsServer.RecursionDeniedNetworks is not null)
|
if (_dnsWebService.DnsServer.RecursionNetworkACL is not null)
|
||||||
{
|
{
|
||||||
foreach (NetworkAddress networkAddress in _dnsWebService.DnsServer.RecursionDeniedNetworks)
|
foreach (NetworkAccessControl nac in _dnsWebService.DnsServer.RecursionNetworkACL)
|
||||||
jsonWriter.WriteStringValue(networkAddress.ToString());
|
jsonWriter.WriteStringValue(nac.ToString());
|
||||||
}
|
|
||||||
|
|
||||||
jsonWriter.WriteEndArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
jsonWriter.WritePropertyName("recursionAllowedNetworks");
|
|
||||||
{
|
|
||||||
jsonWriter.WriteStartArray();
|
|
||||||
|
|
||||||
if (_dnsWebService.DnsServer.RecursionAllowedNetworks is not null)
|
|
||||||
{
|
|
||||||
foreach (NetworkAddress networkAddress in _dnsWebService.DnsServer.RecursionAllowedNetworks)
|
|
||||||
jsonWriter.WriteStringValue(networkAddress.ToString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
jsonWriter.WriteEndArray();
|
jsonWriter.WriteEndArray();
|
||||||
@@ -378,6 +366,7 @@ namespace DnsServerCore
|
|||||||
|
|
||||||
jsonWriter.WriteNumber("resolverRetries", _dnsWebService.DnsServer.ResolverRetries);
|
jsonWriter.WriteNumber("resolverRetries", _dnsWebService.DnsServer.ResolverRetries);
|
||||||
jsonWriter.WriteNumber("resolverTimeout", _dnsWebService.DnsServer.ResolverTimeout);
|
jsonWriter.WriteNumber("resolverTimeout", _dnsWebService.DnsServer.ResolverTimeout);
|
||||||
|
jsonWriter.WriteNumber("resolverConcurrency", _dnsWebService.DnsServer.ResolverConcurrency);
|
||||||
jsonWriter.WriteNumber("resolverMaxStackCount", _dnsWebService.DnsServer.ResolverMaxStackCount);
|
jsonWriter.WriteNumber("resolverMaxStackCount", _dnsWebService.DnsServer.ResolverMaxStackCount);
|
||||||
|
|
||||||
//cache
|
//cache
|
||||||
@@ -513,6 +502,7 @@ namespace DnsServerCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
jsonWriter.WriteString("forwarderProtocol", forwarderProtocol.ToString());
|
jsonWriter.WriteString("forwarderProtocol", forwarderProtocol.ToString());
|
||||||
|
jsonWriter.WriteBoolean("concurrentForwarding", _dnsWebService.DnsServer.ConcurrentForwarding);
|
||||||
|
|
||||||
jsonWriter.WriteNumber("forwarderRetries", _dnsWebService.DnsServer.ForwarderRetries);
|
jsonWriter.WriteNumber("forwarderRetries", _dnsWebService.DnsServer.ForwarderRetries);
|
||||||
jsonWriter.WriteNumber("forwarderTimeout", _dnsWebService.DnsServer.ForwarderTimeout);
|
jsonWriter.WriteNumber("forwarderTimeout", _dnsWebService.DnsServer.ForwarderTimeout);
|
||||||
@@ -584,6 +574,8 @@ namespace DnsServerCore
|
|||||||
//general
|
//general
|
||||||
if (request.TryGetQueryOrForm("dnsServerDomain", out string dnsServerDomain))
|
if (request.TryGetQueryOrForm("dnsServerDomain", out string dnsServerDomain))
|
||||||
{
|
{
|
||||||
|
dnsServerDomain = dnsServerDomain.TrimEnd('.');
|
||||||
|
|
||||||
if (!_dnsWebService.DnsServer.ServerDomain.Equals(dnsServerDomain, StringComparison.OrdinalIgnoreCase))
|
if (!_dnsWebService.DnsServer.ServerDomain.Equals(dnsServerDomain, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
_dnsWebService.DnsServer.ServerDomain = dnsServerDomain;
|
_dnsWebService.DnsServer.ServerDomain = dnsServerDomain;
|
||||||
@@ -888,6 +880,18 @@ namespace DnsServerCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (request.TryGetQueryOrForm("enableDnsOverHttp3", bool.Parse, out bool enableDnsOverHttp3))
|
||||||
|
{
|
||||||
|
if (_dnsWebService.DnsServer.EnableDnsOverHttp3 != enableDnsOverHttp3)
|
||||||
|
{
|
||||||
|
if (enableDnsOverHttp3)
|
||||||
|
DnsWebService.ValidateQuicSupport("DNS-over-HTTP/3");
|
||||||
|
|
||||||
|
_dnsWebService.DnsServer.EnableDnsOverHttp3 = enableDnsOverHttp3;
|
||||||
|
restartDnsService = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (request.TryGetQueryOrForm("enableDnsOverQuic", bool.Parse, out bool enableDnsOverQuic))
|
if (request.TryGetQueryOrForm("enableDnsOverQuic", bool.Parse, out bool enableDnsOverQuic))
|
||||||
{
|
{
|
||||||
if (_dnsWebService.DnsServer.EnableDnsOverQuic != enableDnsOverQuic)
|
if (_dnsWebService.DnsServer.EnableDnsOverQuic != enableDnsOverQuic)
|
||||||
@@ -1003,10 +1007,15 @@ namespace DnsServerCore
|
|||||||
|
|
||||||
for (int i = 0; i < strTsigKeyParts.Length; i += 3)
|
for (int i = 0; i < strTsigKeyParts.Length; i += 3)
|
||||||
{
|
{
|
||||||
string keyName = strTsigKeyParts[i + 0].ToLower();
|
string keyName = strTsigKeyParts[i + 0].TrimEnd('.').ToLowerInvariant();
|
||||||
string sharedSecret = strTsigKeyParts[i + 1];
|
string sharedSecret = strTsigKeyParts[i + 1];
|
||||||
string algorithmName = strTsigKeyParts[i + 2];
|
string algorithmName = strTsigKeyParts[i + 2];
|
||||||
|
|
||||||
|
if (DnsClient.IsDomainNameUnicode(keyName))
|
||||||
|
keyName = DnsClient.ConvertDomainNameToAscii(keyName);
|
||||||
|
|
||||||
|
DnsClient.IsDomainNameValid(keyName, true);
|
||||||
|
|
||||||
if (sharedSecret.Length == 0)
|
if (sharedSecret.Length == 0)
|
||||||
tsigKeys.Add(keyName, new TsigKey(keyName, algorithmName));
|
tsigKeys.Add(keyName, new TsigKey(keyName, algorithmName));
|
||||||
else
|
else
|
||||||
@@ -1021,22 +1030,13 @@ namespace DnsServerCore
|
|||||||
if (request.TryGetQueryOrFormEnum("recursion", out DnsServerRecursion recursion))
|
if (request.TryGetQueryOrFormEnum("recursion", out DnsServerRecursion recursion))
|
||||||
_dnsWebService.DnsServer.Recursion = recursion;
|
_dnsWebService.DnsServer.Recursion = recursion;
|
||||||
|
|
||||||
string recursionDeniedNetworks = request.QueryOrForm("recursionDeniedNetworks");
|
string recursionNetworkACL = request.QueryOrForm("recursionNetworkACL");
|
||||||
if (recursionDeniedNetworks is not null)
|
if (recursionNetworkACL is not null)
|
||||||
{
|
{
|
||||||
if ((recursionDeniedNetworks.Length == 0) || recursionDeniedNetworks.Equals("false", StringComparison.OrdinalIgnoreCase))
|
if ((recursionNetworkACL.Length == 0) || recursionNetworkACL.Equals("false", StringComparison.OrdinalIgnoreCase))
|
||||||
_dnsWebService.DnsServer.RecursionDeniedNetworks = null;
|
_dnsWebService.DnsServer.RecursionNetworkACL = null;
|
||||||
else
|
else
|
||||||
_dnsWebService.DnsServer.RecursionDeniedNetworks = recursionDeniedNetworks.Split(NetworkAddress.Parse, ',');
|
_dnsWebService.DnsServer.RecursionNetworkACL = recursionNetworkACL.Split(NetworkAccessControl.Parse, ',');
|
||||||
}
|
|
||||||
|
|
||||||
string recursionAllowedNetworks = request.QueryOrForm("recursionAllowedNetworks");
|
|
||||||
if (recursionAllowedNetworks is not null)
|
|
||||||
{
|
|
||||||
if ((recursionAllowedNetworks.Length == 0) || recursionAllowedNetworks.Equals("false", StringComparison.OrdinalIgnoreCase))
|
|
||||||
_dnsWebService.DnsServer.RecursionAllowedNetworks = null;
|
|
||||||
else
|
|
||||||
_dnsWebService.DnsServer.RecursionAllowedNetworks = recursionAllowedNetworks.Split(NetworkAddress.Parse, ',');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.TryGetQueryOrForm("randomizeName", bool.Parse, out bool randomizeName))
|
if (request.TryGetQueryOrForm("randomizeName", bool.Parse, out bool randomizeName))
|
||||||
@@ -1054,6 +1054,9 @@ namespace DnsServerCore
|
|||||||
if (request.TryGetQueryOrForm("resolverTimeout", int.Parse, out int resolverTimeout))
|
if (request.TryGetQueryOrForm("resolverTimeout", int.Parse, out int resolverTimeout))
|
||||||
_dnsWebService.DnsServer.ResolverTimeout = resolverTimeout;
|
_dnsWebService.DnsServer.ResolverTimeout = resolverTimeout;
|
||||||
|
|
||||||
|
if (request.TryGetQueryOrForm("resolverConcurrency", int.Parse, out int resolverConcurrency))
|
||||||
|
_dnsWebService.DnsServer.ResolverConcurrency = resolverConcurrency;
|
||||||
|
|
||||||
if (request.TryGetQueryOrForm("resolverMaxStackCount", int.Parse, out int resolverMaxStackCount))
|
if (request.TryGetQueryOrForm("resolverMaxStackCount", int.Parse, out int resolverMaxStackCount))
|
||||||
_dnsWebService.DnsServer.ResolverMaxStackCount = resolverMaxStackCount;
|
_dnsWebService.DnsServer.ResolverMaxStackCount = resolverMaxStackCount;
|
||||||
|
|
||||||
@@ -1311,7 +1314,7 @@ namespace DnsServerCore
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_dnsWebService.DnsServer.Forwarders = strForwarders.Split(delegate (string value)
|
NameServerAddress[] forwarders = strForwarders.Split(delegate (string value)
|
||||||
{
|
{
|
||||||
NameServerAddress forwarder = NameServerAddress.Parse(value);
|
NameServerAddress forwarder = NameServerAddress.Parse(value);
|
||||||
|
|
||||||
@@ -1320,9 +1323,15 @@ namespace DnsServerCore
|
|||||||
|
|
||||||
return forwarder;
|
return forwarder;
|
||||||
}, ',');
|
}, ',');
|
||||||
|
|
||||||
|
if (!_dnsWebService.DnsServer.Forwarders.ListEquals(forwarders))
|
||||||
|
_dnsWebService.DnsServer.Forwarders = forwarders;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (request.TryGetQueryOrForm("concurrentForwarding", bool.Parse, out bool concurrentForwarding))
|
||||||
|
_dnsWebService.DnsServer.ConcurrentForwarding = concurrentForwarding;
|
||||||
|
|
||||||
if (request.TryGetQueryOrForm("forwarderRetries", int.Parse, out int forwarderRetries))
|
if (request.TryGetQueryOrForm("forwarderRetries", int.Parse, out int forwarderRetries))
|
||||||
_dnsWebService.DnsServer.ForwarderRetries = forwarderRetries;
|
_dnsWebService.DnsServer.ForwarderRetries = forwarderRetries;
|
||||||
|
|
||||||
@@ -1383,105 +1392,6 @@ namespace DnsServerCore
|
|||||||
StopBlockListUpdateTimer();
|
StopBlockListUpdateTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
//test web service local end points
|
|
||||||
if (restartWebService)
|
|
||||||
{
|
|
||||||
List<IPEndPoint> testTcpEndPoints = new List<IPEndPoint>();
|
|
||||||
List<IPEndPoint> testUdpEndPoints = new List<IPEndPoint>();
|
|
||||||
|
|
||||||
if (_dnsWebService._webServiceHttpPort != oldWebServiceHttpPort)
|
|
||||||
{
|
|
||||||
foreach (IPAddress address in _dnsWebService._webServiceLocalAddresses)
|
|
||||||
testTcpEndPoints.Add(new IPEndPoint(address, _dnsWebService._webServiceHttpPort));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_dnsWebService._webServiceEnableTls && (_webServiceEnablingTls || (_dnsWebService._webServiceTlsPort != oldWebServiceTlsPort)))
|
|
||||||
{
|
|
||||||
foreach (IPAddress address in _dnsWebService._webServiceLocalAddresses)
|
|
||||||
{
|
|
||||||
testTcpEndPoints.Add(new IPEndPoint(address, _dnsWebService._webServiceTlsPort));
|
|
||||||
|
|
||||||
if (_dnsWebService._webServiceEnableHttp3)
|
|
||||||
{
|
|
||||||
if (Socket.OSSupportsIPv6)
|
|
||||||
testUdpEndPoints.Add(new IPEndPoint(IPAddress.IPv6Any, _dnsWebService._webServiceTlsPort));
|
|
||||||
else
|
|
||||||
testUdpEndPoints.Add(new IPEndPoint(IPAddress.Any, _dnsWebService._webServiceTlsPort));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (IPAddress address in _dnsWebService._webServiceLocalAddresses)
|
|
||||||
{
|
|
||||||
if (!oldWebServiceLocalAddresses.Contains(address))
|
|
||||||
{
|
|
||||||
IPEndPoint httpEp = new IPEndPoint(address, _dnsWebService._webServiceHttpPort);
|
|
||||||
if (!testTcpEndPoints.Contains(httpEp))
|
|
||||||
testTcpEndPoints.Add(httpEp);
|
|
||||||
|
|
||||||
if (_dnsWebService._webServiceEnableTls)
|
|
||||||
{
|
|
||||||
IPEndPoint tlsEp = new IPEndPoint(address, _dnsWebService._webServiceTlsPort);
|
|
||||||
if (!testTcpEndPoints.Contains(tlsEp))
|
|
||||||
testTcpEndPoints.Add(tlsEp);
|
|
||||||
|
|
||||||
if (_dnsWebService._webServiceEnableHttp3)
|
|
||||||
{
|
|
||||||
IPEndPoint h3Ep;
|
|
||||||
|
|
||||||
if (Socket.OSSupportsIPv6)
|
|
||||||
h3Ep = new IPEndPoint(IPAddress.IPv6Any, _dnsWebService._webServiceTlsPort);
|
|
||||||
else
|
|
||||||
h3Ep = new IPEndPoint(IPAddress.Any, _dnsWebService._webServiceTlsPort);
|
|
||||||
|
|
||||||
if (!testUdpEndPoints.Contains(h3Ep))
|
|
||||||
testUdpEndPoints.Add(h3Ep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (IPEndPoint ep in testTcpEndPoints)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp))
|
|
||||||
{
|
|
||||||
socket.Bind(ep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SocketException ex)
|
|
||||||
{
|
|
||||||
//revert
|
|
||||||
_dnsWebService._webServiceLocalAddresses = oldWebServiceLocalAddresses;
|
|
||||||
_dnsWebService._webServiceHttpPort = oldWebServiceHttpPort;
|
|
||||||
_dnsWebService._webServiceTlsPort = oldWebServiceTlsPort;
|
|
||||||
|
|
||||||
throw new DnsWebServiceException("Failed to save settings: web service local end point '" + ep.ToString() + "' failed to bind (" + ex.SocketErrorCode.ToString() + ").", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (IPEndPoint ep in testUdpEndPoints)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (Socket socket = new Socket(SocketType.Dgram, ProtocolType.Udp))
|
|
||||||
{
|
|
||||||
socket.Bind(ep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SocketException ex)
|
|
||||||
{
|
|
||||||
//revert
|
|
||||||
_dnsWebService._webServiceLocalAddresses = oldWebServiceLocalAddresses;
|
|
||||||
_dnsWebService._webServiceHttpPort = oldWebServiceHttpPort;
|
|
||||||
_dnsWebService._webServiceTlsPort = oldWebServiceTlsPort;
|
|
||||||
|
|
||||||
throw new DnsWebServiceException("Failed to save settings: web service local end point '" + ep.ToString() + "' failed to bind (" + ex.SocketErrorCode.ToString() + ").", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//save config
|
//save config
|
||||||
_dnsWebService.SaveConfigFile();
|
_dnsWebService.SaveConfigFile();
|
||||||
_dnsWebService._log.SaveConfig();
|
_dnsWebService._log.SaveConfig();
|
||||||
|
|||||||
Reference in New Issue
Block a user