]> Cypherpunks repositories - gostls13.git/commitdiff
net: allow single dot in resolv.conf search statement
authorAndy Pan <panjf2000@gmail.com>
Mon, 15 Aug 2022 15:09:00 +0000 (23:09 +0800)
committerGopher Robot <gobot@golang.org>
Fri, 19 Aug 2022 03:01:14 +0000 (03:01 +0000)
A single dot in a search statement doesn't affect DNS lookup, so just ignore it and a syntax error.

Fixes #54124

Change-Id: Idd43bd34c5c16af50cba51f0b6e24f992eec6e57
Reviewed-on: https://go-review.googlesource.com/c/go/+/423875
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
src/net/dnsconfig_unix.go
src/net/dnsconfig_unix_test.go
src/net/testdata/search-single-dot-resolv.conf [new file with mode: 0644]

index 3ba6d44fc3a9c9e477c27dce0e6b83ed2725355f..65098f68275e4b38376dccb194d0a2c151e3ee94 100644 (file)
@@ -64,9 +64,13 @@ func dnsReadConfig(filename string) *dnsConfig {
                        }
 
                case "search": // set search path to given servers
-                       conf.search = make([]string, len(f)-1)
-                       for i := 0; i < len(conf.search); i++ {
-                               conf.search[i] = ensureRooted(f[i+1])
+                       conf.search = make([]string, 0, len(f)-1)
+                       for i := 1; i < len(f); i++ {
+                               name := ensureRooted(f[i])
+                               if name == "." {
+                                       continue
+                               }
+                               conf.search = append(conf.search, name)
                        }
 
                case "options": // magic options
index 513f624b005d0474c17f1d949329ec19da3f28f9..9be751f2e3e7c12c8ea91b977ed026355910f5f5 100644 (file)
@@ -52,6 +52,16 @@ var dnsReadConfigTests = []struct {
                        attempts: 2,
                },
        },
+       {
+               name: "testdata/search-single-dot-resolv.conf",
+               want: &dnsConfig{
+                       servers:  []string{"8.8.8.8:53"},
+                       search:   []string{},
+                       ndots:    1,
+                       timeout:  5 * time.Second,
+                       attempts: 2,
+               },
+       },
        {
                name: "testdata/empty-resolv.conf",
                want: &dnsConfig{
@@ -166,6 +176,9 @@ func TestDNSReadConfig(t *testing.T) {
        getHostname = func() (string, error) { return "host.domain.local", nil }
 
        for _, tt := range dnsReadConfigTests {
+               if len(tt.want.search) == 0 {
+                       tt.want.search = append(tt.want.search, dnsDefaultSearch()...)
+               }
                conf := dnsReadConfig(tt.name)
                if conf.err != nil {
                        t.Fatal(conf.err)
diff --git a/src/net/testdata/search-single-dot-resolv.conf b/src/net/testdata/search-single-dot-resolv.conf
new file mode 100644 (file)
index 0000000..934cd3e
--- /dev/null
@@ -0,0 +1,5 @@
+# /etc/resolv.conf
+
+domain localdomain
+search .
+nameserver 8.8.8.8