diff --git a/Apps/FailoverApp/Address.cs b/Apps/FailoverApp/Address.cs index cf60fd9e..f92272d9 100644 --- a/Apps/FailoverApp/Address.cs +++ b/Apps/FailoverApp/Address.cs @@ -147,6 +147,10 @@ namespace Failover public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + switch (question.Type) { case DnsResourceRecordType.A: diff --git a/Apps/FailoverApp/CNAME.cs b/Apps/FailoverApp/CNAME.cs index 785b7e43..6239532f 100644 --- a/Apps/FailoverApp/CNAME.cs +++ b/Apps/FailoverApp/CNAME.cs @@ -120,6 +120,9 @@ namespace Failover { DnsQuestionRecord question = request.Question[0]; + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + using JsonDocument jsonDocument = JsonDocument.Parse(appRecordData); JsonElement jsonAppRecordData = jsonDocument.RootElement; diff --git a/Apps/GeoContinentApp/Address.cs b/Apps/GeoContinentApp/Address.cs index 63b51f05..b718ee5a 100644 --- a/Apps/GeoContinentApp/Address.cs +++ b/Apps/GeoContinentApp/Address.cs @@ -19,6 +19,7 @@ along with this program. If not, see . using DnsServerCore.ApplicationCommon; using MaxMind.GeoIP2.Responses; +using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; @@ -78,6 +79,10 @@ namespace GeoContinent public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + switch (question.Type) { case DnsResourceRecordType.A: diff --git a/Apps/GeoContinentApp/CNAME.cs b/Apps/GeoContinentApp/CNAME.cs index 1433083c..325f8cff 100644 --- a/Apps/GeoContinentApp/CNAME.cs +++ b/Apps/GeoContinentApp/CNAME.cs @@ -76,6 +76,11 @@ namespace GeoContinent public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { + DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + using JsonDocument jsonDocument = JsonDocument.Parse(appRecordData); JsonElement jsonAppRecordData = jsonDocument.RootElement; JsonElement jsonContinent = default; @@ -114,10 +119,10 @@ namespace GeoContinent IReadOnlyList answers; - if (request.Question[0].Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex - answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME + if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex + answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME else - answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) }; + answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) }; EDnsOption[] options; diff --git a/Apps/GeoCountryApp/Address.cs b/Apps/GeoCountryApp/Address.cs index 5d49c9b1..37ce8506 100644 --- a/Apps/GeoCountryApp/Address.cs +++ b/Apps/GeoCountryApp/Address.cs @@ -19,6 +19,7 @@ along with this program. If not, see . using DnsServerCore.ApplicationCommon; using MaxMind.GeoIP2.Responses; +using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; @@ -78,6 +79,10 @@ namespace GeoCountry public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + switch (question.Type) { case DnsResourceRecordType.A: diff --git a/Apps/GeoCountryApp/CNAME.cs b/Apps/GeoCountryApp/CNAME.cs index 569d5e57..7df06aca 100644 --- a/Apps/GeoCountryApp/CNAME.cs +++ b/Apps/GeoCountryApp/CNAME.cs @@ -76,6 +76,11 @@ namespace GeoCountry public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { + DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + using JsonDocument jsonDocument = JsonDocument.Parse(appRecordData); JsonElement jsonAppRecordData = jsonDocument.RootElement; JsonElement jsonCountry = default; @@ -114,10 +119,10 @@ namespace GeoCountry IReadOnlyList answers; - if (request.Question[0].Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex - answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME + if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex + answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME else - answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) }; + answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) }; EDnsOption[] options; diff --git a/Apps/GeoDistanceApp/Address.cs b/Apps/GeoDistanceApp/Address.cs index 3e2ddc76..31a7bb2e 100644 --- a/Apps/GeoDistanceApp/Address.cs +++ b/Apps/GeoDistanceApp/Address.cs @@ -95,6 +95,10 @@ namespace GeoDistance public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + switch (question.Type) { case DnsResourceRecordType.A: diff --git a/Apps/GeoDistanceApp/CNAME.cs b/Apps/GeoDistanceApp/CNAME.cs index e9edae6b..e971c3bc 100644 --- a/Apps/GeoDistanceApp/CNAME.cs +++ b/Apps/GeoDistanceApp/CNAME.cs @@ -93,6 +93,11 @@ namespace GeoDistance public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { + DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + Location location = null; bool ecsUsed = false; @@ -146,10 +151,10 @@ namespace GeoDistance IReadOnlyList answers; - if (request.Question[0].Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex - answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME + if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex + answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.ANAME, DnsClass.IN, appRecordTtl, new DnsANAMERecordData(cname)) }; //use ANAME else - answers = new DnsResourceRecord[] { new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) }; + answers = new DnsResourceRecord[] { new DnsResourceRecord(question.Name, DnsResourceRecordType.CNAME, DnsClass.IN, appRecordTtl, new DnsCNAMERecordData(cname)) }; EDnsOption[] options; diff --git a/Apps/SplitHorizonApp/SimpleAddress.cs b/Apps/SplitHorizonApp/SimpleAddress.cs index 2117ce2d..1872f073 100644 --- a/Apps/SplitHorizonApp/SimpleAddress.cs +++ b/Apps/SplitHorizonApp/SimpleAddress.cs @@ -18,6 +18,7 @@ along with this program. If not, see . */ using DnsServerCore.ApplicationCommon; +using System; using System.Collections.Generic; using System.IO; using System.Net; @@ -139,6 +140,10 @@ namespace SplitHorizon public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + switch (question.Type) { case DnsResourceRecordType.A: diff --git a/Apps/SplitHorizonApp/SimpleCNAME.cs b/Apps/SplitHorizonApp/SimpleCNAME.cs index c0ed93c2..4b80897f 100644 --- a/Apps/SplitHorizonApp/SimpleCNAME.cs +++ b/Apps/SplitHorizonApp/SimpleCNAME.cs @@ -50,6 +50,11 @@ namespace SplitHorizon public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { + DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + using JsonDocument jsonDocument = JsonDocument.Parse(appRecordData); JsonElement jsonAppRecordData = jsonDocument.RootElement; JsonElement jsonCname = default; @@ -105,7 +110,6 @@ namespace SplitHorizon if (string.IsNullOrEmpty(cname)) return Task.FromResult(null); - DnsQuestionRecord question = request.Question[0]; IReadOnlyList answers; if (question.Name.Equals(zoneName, StringComparison.OrdinalIgnoreCase)) //check for zone apex diff --git a/Apps/WhatIsMyDnsApp/App.cs b/Apps/WhatIsMyDnsApp/App.cs index a997212d..1bc308c5 100644 --- a/Apps/WhatIsMyDnsApp/App.cs +++ b/Apps/WhatIsMyDnsApp/App.cs @@ -18,6 +18,7 @@ along with this program. If not, see . */ using DnsServerCore.ApplicationCommon; +using System; using System.Net; using System.Net.Sockets; using System.Threading.Tasks; @@ -47,26 +48,31 @@ namespace WhatIsMyDns public Task ProcessRequestAsync(DnsDatagram request, IPEndPoint remoteEP, DnsTransportProtocol protocol, bool isRecursionAllowed, string zoneName, string appRecordName, uint appRecordTtl, string appRecordData) { + DnsQuestionRecord question = request.Question[0]; + + if (!question.Name.Equals(appRecordName, StringComparison.OrdinalIgnoreCase)) + return Task.FromResult(null); + DnsResourceRecord answer; - switch (request.Question[0].Type) + switch (question.Type) { case DnsResourceRecordType.A: if (remoteEP.AddressFamily != AddressFamily.InterNetwork) return Task.FromResult(null); - answer = new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.A, DnsClass.IN, appRecordTtl, new DnsARecordData(remoteEP.Address)); + answer = new DnsResourceRecord(question.Name, DnsResourceRecordType.A, DnsClass.IN, appRecordTtl, new DnsARecordData(remoteEP.Address)); break; case DnsResourceRecordType.AAAA: if (remoteEP.AddressFamily != AddressFamily.InterNetworkV6) return Task.FromResult(null); - answer = new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.AAAA, DnsClass.IN, appRecordTtl, new DnsAAAARecordData(remoteEP.Address)); + answer = new DnsResourceRecord(question.Name, DnsResourceRecordType.AAAA, DnsClass.IN, appRecordTtl, new DnsAAAARecordData(remoteEP.Address)); break; case DnsResourceRecordType.TXT: - answer = new DnsResourceRecord(request.Question[0].Name, DnsResourceRecordType.TXT, DnsClass.IN, appRecordTtl, new DnsTXTRecordData(remoteEP.Address.ToString())); + answer = new DnsResourceRecord(question.Name, DnsResourceRecordType.TXT, DnsClass.IN, appRecordTtl, new DnsTXTRecordData(remoteEP.Address.ToString())); break; default: