Skip to content

Commit 7d73a38

Browse files
committed
net/dns: only populate OSConfig.Hosts when MagicDNS is enabled
Previously we were doing this unconditionally. Updates tailscale#14428 Signed-off-by: Aaron Klotz <[email protected]>
1 parent 2d1f6f1 commit 7d73a38

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

net/dns/manager.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,10 @@ func (m *Manager) compileConfig(cfg Config) (rcfg resolver.Config, ocfg OSConfig
246246
// the OS.
247247
rcfg.Hosts = cfg.Hosts
248248
routes := map[dnsname.FQDN][]*dnstype.Resolver{} // assigned conditionally to rcfg.Routes below.
249+
var propagateHostsToOS bool
249250
for suffix, resolvers := range cfg.Routes {
250251
if len(resolvers) == 0 {
252+
propagateHostsToOS = true
251253
rcfg.LocalDomains = append(rcfg.LocalDomains, suffix)
252254
} else {
253255
routes[suffix] = resolvers
@@ -256,7 +258,7 @@ func (m *Manager) compileConfig(cfg Config) (rcfg resolver.Config, ocfg OSConfig
256258

257259
// Similarly, the OS always gets search paths.
258260
ocfg.SearchDomains = cfg.SearchDomains
259-
if m.goos == "windows" {
261+
if propagateHostsToOS && m.goos == "windows" {
260262
ocfg.Hosts = compileHostEntries(cfg)
261263
}
262264

net/dns/manager_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,76 @@ func TestManager(t *testing.T) {
836836
},
837837
goos: "darwin",
838838
},
839+
{
840+
name: "populate-hosts-magicdns",
841+
in: Config{
842+
Routes: upstreams(
843+
"corp.com", "2.2.2.2",
844+
"ts.com", ""),
845+
Hosts: hosts(
846+
"dave.ts.com.", "1.2.3.4",
847+
"bradfitz.ts.com.", "2.3.4.5"),
848+
SearchDomains: fqdns("ts.com", "universe.tf"),
849+
},
850+
split: true,
851+
os: OSConfig{
852+
Hosts: []*HostEntry{
853+
{
854+
Addr: netip.MustParseAddr("2.3.4.5"),
855+
Hosts: []string{
856+
"bradfitz.ts.com.",
857+
"bradfitz",
858+
},
859+
},
860+
{
861+
Addr: netip.MustParseAddr("1.2.3.4"),
862+
Hosts: []string{
863+
"dave.ts.com.",
864+
"dave",
865+
},
866+
},
867+
},
868+
Nameservers: mustIPs("100.100.100.100"),
869+
SearchDomains: fqdns("ts.com", "universe.tf"),
870+
MatchDomains: fqdns("corp.com", "ts.com"),
871+
},
872+
rs: resolver.Config{
873+
Routes: upstreams("corp.com.", "2.2.2.2"),
874+
Hosts: hosts(
875+
"dave.ts.com.", "1.2.3.4",
876+
"bradfitz.ts.com.", "2.3.4.5"),
877+
LocalDomains: fqdns("ts.com."),
878+
},
879+
goos: "windows",
880+
},
881+
{
882+
// Regression test for https://github.com/tailscale/tailscale/issues/14428
883+
name: "nopopulate-hosts-nomagicdns",
884+
in: Config{
885+
Routes: upstreams(
886+
"corp.com", "2.2.2.2",
887+
"ts.com", "1.1.1.1"),
888+
Hosts: hosts(
889+
"dave.ts.com.", "1.2.3.4",
890+
"bradfitz.ts.com.", "2.3.4.5"),
891+
SearchDomains: fqdns("ts.com", "universe.tf"),
892+
},
893+
split: true,
894+
os: OSConfig{
895+
Nameservers: mustIPs("100.100.100.100"),
896+
SearchDomains: fqdns("ts.com", "universe.tf"),
897+
MatchDomains: fqdns("corp.com", "ts.com"),
898+
},
899+
rs: resolver.Config{
900+
Routes: upstreams(
901+
"corp.com.", "2.2.2.2",
902+
"ts.com", "1.1.1.1"),
903+
Hosts: hosts(
904+
"dave.ts.com.", "1.2.3.4",
905+
"bradfitz.ts.com.", "2.3.4.5"),
906+
},
907+
goos: "windows",
908+
},
839909
}
840910

841911
trIP := cmp.Transformer("ipStr", func(ip netip.Addr) string { return ip.String() })

0 commit comments

Comments
 (0)