mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 16:50:58 +00:00 
			
		
		
		
	net: make go DNS use localhost if resolv.conf is missing or empty
Per resolv.conf man page, "If this file does not exist, only the name server on the local machine will be queried." This behavior also occurs if file is present but unreadable, or if no nameservers are listed. Fixes #10566 Change-Id: Id5716da0eae534d5ebfafea111bbc657f302e307 Reviewed-on: https://go-review.googlesource.com/9380 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
		
							parent
							
								
									7556948ebf
								
							
						
					
					
						commit
						f390135733
					
				
					 8 changed files with 134 additions and 75 deletions
				
			
		|  | @ -171,23 +171,26 @@ func TestReloadResolvConfFail(t *testing.T) { | |||
| 	r := newResolvConfTest(t) | ||||
| 	defer r.Close() | ||||
| 
 | ||||
| 	// resolv.conf.tmp does not exist yet | ||||
| 	r.Start() | ||||
| 	if _, err := goLookupIP("golang.org"); err == nil { | ||||
| 		t.Fatal("goLookupIP(missing) succeeded") | ||||
| 	} | ||||
| 
 | ||||
| 	r.SetConf("nameserver 8.8.8.8") | ||||
| 
 | ||||
| 	if _, err := goLookupIP("golang.org"); err != nil { | ||||
| 		t.Fatalf("goLookupIP(missing; good) failed: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	// Using a bad resolv.conf while we had a good | ||||
| 	// one before should not update the config | ||||
| 	// Using an empty resolv.conf should use localhost as servers | ||||
| 	r.SetConf("") | ||||
| 	if _, err := goLookupIP("golang.org"); err != nil { | ||||
| 		t.Fatalf("goLookupIP(missing; good; bad) failed: %v", err) | ||||
| 
 | ||||
| 	if len(cfg.dnsConfig.servers) != len(defaultNS) { | ||||
| 		t.Fatalf("goLookupIP(missing; good; bad) failed: servers=%v, want: %v", cfg.dnsConfig.servers, defaultNS) | ||||
| 	} | ||||
| 
 | ||||
| 	for i := range cfg.dnsConfig.servers { | ||||
| 		if cfg.dnsConfig.servers[i] != defaultNS[i] { | ||||
| 			t.Fatalf("goLookupIP(missing; good; bad) failed: servers=%v, want: %v", cfg.dnsConfig.servers, defaultNS) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func TestReloadResolvConfChange(t *testing.T) { | ||||
|  | @ -198,19 +201,25 @@ func TestReloadResolvConfChange(t *testing.T) { | |||
| 	r := newResolvConfTest(t) | ||||
| 	defer r.Close() | ||||
| 
 | ||||
| 	r.SetConf("nameserver 8.8.8.8") | ||||
| 	r.Start() | ||||
| 	r.SetConf("nameserver 8.8.8.8") | ||||
| 
 | ||||
| 	if _, err := goLookupIP("golang.org"); err != nil { | ||||
| 		t.Fatalf("goLookupIP(good) failed: %v", err) | ||||
| 	} | ||||
| 	r.WantServers([]string{"8.8.8.8"}) | ||||
| 
 | ||||
| 	// Using a bad resolv.conf when we had a good one | ||||
| 	// before should not update the config | ||||
| 	// Using an empty resolv.conf should use localhost as servers | ||||
| 	r.SetConf("") | ||||
| 	if _, err := goLookupIP("golang.org"); err != nil { | ||||
| 		t.Fatalf("goLookupIP(good; bad) failed: %v", err) | ||||
| 
 | ||||
| 	if len(cfg.dnsConfig.servers) != len(defaultNS) { | ||||
| 		t.Fatalf("goLookupIP(missing; good; bad) failed: servers=%v, want: %v", cfg.dnsConfig.servers, defaultNS) | ||||
| 	} | ||||
| 
 | ||||
| 	for i := range cfg.dnsConfig.servers { | ||||
| 		if cfg.dnsConfig.servers[i] != defaultNS[i] { | ||||
| 			t.Fatalf("goLookupIP(missing; good; bad) failed: servers=%v, want: %v", cfg.dnsConfig.servers, defaultNS) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// A new good config should get picked up | ||||
|  | @ -238,9 +247,7 @@ func BenchmarkGoLookupIPWithBrokenNameServer(b *testing.B) { | |||
| 	testHookUninstaller.Do(func() { uninstallTestHooks() }) | ||||
| 
 | ||||
| 	onceLoadConfig.Do(loadDefaultConfig) | ||||
| 	if cfg.dnserr != nil || cfg.dnsConfig == nil { | ||||
| 		b.Fatalf("loadConfig failed: %v", cfg.dnserr) | ||||
| 	} | ||||
| 
 | ||||
| 	// This looks ugly but it's safe as long as benchmarks are run | ||||
| 	// sequentially in package testing. | ||||
| 	orig := cfg.dnsConfig | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alex A Skinner
						Alex A Skinner