From f655b98db642d2623cadb96488ad6e02055c620b Mon Sep 17 00:00:00 2001 From: Kyle McMartin Date: Sun, 4 May 2025 19:23:25 -0700 Subject: [PATCH] Deduplicate OSConfig.SearchDomains before SetDNS (#12360) Rather than do this in each implementation, filter the unified Config.SearchDomains list before calling into the OSConfig layer. This ensures that when GetBaseConfig rereads that already written resolv.conf search line, we don't end up growing the same tailnet entry multiple times. Updates #12360 Signed-off-by: Kyle McMartin --- net/dns/manager.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/net/dns/manager.go b/net/dns/manager.go index 64bf12c6b..a463a842a 100644 --- a/net/dns/manager.go +++ b/net/dns/manager.go @@ -394,7 +394,18 @@ func (m *Manager) compileConfig(cfg Config) (rcfg resolver.Config, ocfg OSConfig defaultRoutes = append(defaultRoutes, &dnstype.Resolver{Addr: ip.String()}) } rcfg.Routes["."] = defaultRoutes - ocfg.SearchDomains = append(ocfg.SearchDomains, baseCfg.SearchDomains...) + + seen := map[dnsname.FQDN]bool{} + SearchDomains := append(ocfg.SearchDomains, baseCfg.SearchDomains...) + // deduplicate our list of SearchDomains + ocfg.SearchDomains = []dnsname.FQDN{} + for _, sd := range SearchDomains { + if seen[sd] { + continue + } + ocfg.SearchDomains = append(ocfg.SearchDomains, sd) + seen[sd] = true + } } return rcfg, ocfg, nil