Pull request 349: 6744 Fix TLD subdomain

Updates AdguardTeam/AdGuardHome#6744.

Squashed commit of the following:

commit d0fe7b6abf05d486c2ac128305d7847cc10fb5cf
Author: Eugene Burkov <[email protected]>
Date:   Thu May 2 15:55:50 2024 +0300

    all: imp doc

commit ecc72430e8433db31b5e928bddfd9871709c1a04
Author: Eugene Burkov <[email protected]>
Date:   Thu May 2 15:18:44 2024 +0300

    proxy: imp code

commit a51959447110c1b53a0d3b4368bb5cdf3aac20f1
Author: Eugene Burkov <[email protected]>
Date:   Sat Apr 27 18:12:19 2024 +0300

    all: fix tld exclusions
This commit is contained in:
Eugene Burkov
2024-05-02 16:35:29 +03:00
parent e35720fca4
commit 6a9f811b12
6 changed files with 23 additions and 19 deletions
+3 -2
View File
@@ -338,11 +338,12 @@ which are sent to `8.8.8.8:53` (along with other requests):
```
Sends requests for `*.host.com` to `1.1.1.1:53` except for `host.com` which is
sent to `8.8.8.8:53` (along with other requests):
sent to `9.9.9.10:53`, and all other requests are sent to `8.8.8.8:53`:
```sh
./dnsproxy\
-u "8.8.8.8:53"
-u "8.8.8.8:53"\
-u "[/host.com/]9.9.9.10:53"\
-u "[/*.host.com/]1.1.1.1:53"
```
+10 -9
View File
@@ -383,19 +383,20 @@ func (uc *UpstreamConfig) getUpstreamsForDomain(fqdn string) (ups []upstream.Ups
return uc.Upstreams
}
var ok bool
fqdn = strings.ToLower(fqdn)
if strings.Count(fqdn, ".") < 2 {
ups, ok = uc.lookupUpstreams(fqdn)
if ok {
return ups
}
fqdn = UnqualifiedNames
} else if uc.SubdomainExclusions.Has(fqdn) {
if uc.SubdomainExclusions.Has(fqdn) {
return uc.lookupSubdomainExclusion(fqdn)
}
ups, ok := uc.lookupUpstreams(fqdn)
if ok {
return ups
}
if _, fqdn, _ = strings.Cut(fqdn, "."); fqdn == "" {
fqdn = UnqualifiedNames
}
for fqdn != "" {
if ups, ok = uc.lookupUpstreams(fqdn); ok {
return ups
+6 -4
View File
@@ -22,8 +22,9 @@ const (
topLevelDomain = "example"
topLevelFQDN = topLevelDomain + "."
firstLevelDomain = "name." + topLevelDomain
firstLevelFQDN = firstLevelDomain + "."
firstLevelDomain = "name." + topLevelDomain
firstLevelFQDN = firstLevelDomain + "."
wildcardFirstLevelDomain = "*." + topLevelDomain
subDomain = "sub." + firstLevelDomain
subFQDN = subDomain + "."
@@ -51,6 +52,7 @@ var testUpstreamConfigLines = []string{
generalUpstream,
"[//]" + unqualifiedUpstream,
"[/" + topLevelDomain + "/]" + tldUpstream,
"[/" + wildcardFirstLevelDomain + "/]#",
"[/" + firstLevelDomain + "/]" + domainUpstream,
"[/" + wildcardDomain + "/]" + wildcardUpstream,
"[/" + generalDomain + "/]#",
@@ -82,7 +84,7 @@ func TestUpstreamConfig_GetUpstreamsForDomain(t *testing.T) {
}, {
name: "unspecified_subdomain",
in: unspecifiedFQDN + topLevelFQDN,
want: []string{tldUpstream},
want: []string{generalUpstream},
}, {
name: "domain",
in: firstLevelFQDN,
@@ -136,7 +138,7 @@ func TestUpstreamConfig_GetUpstreamsForDS(t *testing.T) {
}, {
name: "unspecified_subdomain",
in: unspecifiedFQDN + topLevelFQDN,
want: []string{tldUpstream},
want: []string{generalUpstream},
}, {
name: "domain",
in: firstLevelFQDN,
+1 -1
View File
@@ -93,7 +93,7 @@ func startTestDNSCryptServer(
func TestUpstreamDNSCrypt(t *testing.T) {
// AdGuard DNS (DNSCrypt)
address := "sdns://AQIAAAAAAAAAFDE3Ni4xMDMuMTMwLjEzMDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20"
address := "sdns://AQMAAAAAAAAAETk0LjE0MC4xNC4xNDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20"
u, err := AddressToUpstream(address, &Options{Timeout: dialTimeout})
require.NoError(t, err)
testutil.CleanupAndRequireSuccess(t, u.Close)
+1 -1
View File
@@ -63,7 +63,7 @@ func TestNewUpstreamResolver_validity(t *testing.T) {
wantErrMsg: "",
}, {
name: "sdns",
addr: "sdns://AQIAAAAAAAAAFDE3Ni4xMDMuMTMwLjEzMDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20",
addr: "sdns://AQMAAAAAAAAAETk0LjE0MC4xNC4xNDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20",
wantErrMsg: "",
}, {
name: "tcp",
+2 -2
View File
@@ -159,11 +159,11 @@ func TestUpstreams(t *testing.T) {
}, {
// AdGuard DNS (DNSCrypt)
bootstrap: nil,
address: "sdns://AQIAAAAAAAAAFDE3Ni4xMDMuMTMwLjEzMDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20",
address: "sdns://AQMAAAAAAAAAETk0LjE0MC4xNC4xNDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20",
}, {
// AdGuard Family (DNSCrypt)
bootstrap: googleBoot,
address: "sdns://AQIAAAAAAAAAFDE3Ni4xMDMuMTMwLjEzMjo1NDQzILgxXdexS27jIKRw3C7Wsao5jMnlhvhdRUXWuMm1AFq6ITIuZG5zY3J5cHQuZmFtaWx5Lm5zMS5hZGd1YXJkLmNvbQ",
address: "sdns://AQMAAAAAAAAAETk0LjE0MC4xNC4xNTo1NDQzILgxXdexS27jIKRw3C7Wsao5jMnlhvhdRUXWuMm1AFq6ITIuZG5zY3J5cHQuZmFtaWx5Lm5zMS5hZGd1YXJkLmNvbQ",
}, {
// Cloudflare DNS (DNS-over-HTTPS)
bootstrap: googleBoot,