From 8a95b657eefc642772dbbcf3793fa180a09196a3 Mon Sep 17 00:00:00 2001 From: Ingmar Stein Date: Mon, 14 Oct 2024 08:54:07 +0200 Subject: [PATCH] Add `filterDomains` setting to `Filter AAAA` app. This allows filtering `AAAA` records only for specific domains. If `filterDomains` is empty, all domains (except the ones listed in `bypassDomains`) will be filtered. See https://github.com/TechnitiumSoftware/DnsServer/discussions/1016 --- Apps/FilterAaaaApp/App.cs | 19 +++++++++++++++++++ Apps/FilterAaaaApp/dnsApp.config | 2 ++ 2 files changed, 21 insertions(+) diff --git a/Apps/FilterAaaaApp/App.cs b/Apps/FilterAaaaApp/App.cs index 37f3110d..76ce2c8b 100644 --- a/Apps/FilterAaaaApp/App.cs +++ b/Apps/FilterAaaaApp/App.cs @@ -40,6 +40,7 @@ namespace FilterAaaa bool _bypassLocalZones; NetworkAddress[] _bypassNetworks; string[] _bypassDomains; + string[] _filterDomains; #endregion @@ -74,6 +75,11 @@ namespace FilterAaaa else _bypassDomains = []; + if (jsonConfig.TryReadArray("filterDomains", out string[] filterDomains)) + _filterDomains = filterDomains; + else + _filterDomains = []; + return Task.CompletedTask; } @@ -95,6 +101,19 @@ namespace FilterAaaa if (question.Type != DnsResourceRecordType.AAAA) return response; + bool filterDomain = _filterDomains.Length == 0; + foreach (string filterDomain in _filterDomains) + { + if (qname.Equals(filterDomain, StringComparison.OrdinalIgnoreCase) || qname.EndsWith("." + filterDomain, StringComparison.OrdinalIgnoreCase)) + { + filterDomain = true; + break; + } + } + + if (!filterDomain) + return response; + bool hasAAAA = false; foreach (DnsResourceRecord record in response.Answer) diff --git a/Apps/FilterAaaaApp/dnsApp.config b/Apps/FilterAaaaApp/dnsApp.config index fd6a6285..23b998c3 100644 --- a/Apps/FilterAaaaApp/dnsApp.config +++ b/Apps/FilterAaaaApp/dnsApp.config @@ -5,5 +5,7 @@ ], "bypassDomains": [ "example.com" + ], + "filterDomains": [ ] } \ No newline at end of file