From befd8e4e6819092197429aea13cf32c1d1eaa84b Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 2 Apr 2021 02:17:50 -0700 Subject: [PATCH] net/dns: replace managerImpl with OSConfigurator in code. Signed-off-by: David Anderson --- net/dns/direct.go | 12 +++++++----- net/dns/manager.go | 18 +++++------------- net/dns/manager_default.go | 2 +- net/dns/manager_freebsd.go | 2 +- net/dns/manager_linux.go | 2 +- net/dns/manager_openbsd.go | 2 +- net/dns/manager_windows.go | 12 ++++++++---- net/dns/nm.go | 12 ++++++------ net/dns/noop.go | 10 ++++------ net/dns/osconfig.go | 2 +- net/dns/resolvconf.go | 12 +++++++----- net/dns/resolved.go | 11 +++++++---- 12 files changed, 49 insertions(+), 48 deletions(-) diff --git a/net/dns/direct.go b/net/dns/direct.go index 5c89b4274..d896b8b59 100644 --- a/net/dns/direct.go +++ b/net/dns/direct.go @@ -110,12 +110,11 @@ func isResolvedRunning() bool { // or as cleanup if the program terminates unexpectedly. type directManager struct{} -func newDirectManager() managerImpl { +func newDirectManager() directManager { return directManager{} } -// Up implements managerImpl. -func (m directManager) Up(config OSConfig) error { +func (m directManager) Set(config OSConfig) error { // Write the tsConf file. buf := new(bytes.Buffer) writeResolvConf(buf, config.Nameservers, config.Domains) @@ -160,8 +159,11 @@ func (m directManager) Up(config OSConfig) error { return nil } -// Down implements managerImpl. -func (m directManager) Down() error { +func (m directManager) RoutingMode() RoutingMode { + return RoutingModeNone +} + +func (m directManager) Close() error { if _, err := os.Stat(backupConf); err != nil { // If the backup file does not exist, then Up never ran successfully. if os.IsNotExist(err) { diff --git a/net/dns/manager.go b/net/dns/manager.go index f56c89c06..d47c16819 100644 --- a/net/dns/manager.go +++ b/net/dns/manager.go @@ -23,19 +23,11 @@ import ( // Such operations should be wrapped in a timeout context. const reconfigTimeout = time.Second -type managerImpl interface { - // Up updates system DNS settings to match the given configuration. - Up(OSConfig) error - // Down undoes the effects of Up. - // It is idempotent and performs no action if Up has never been called. - Down() error -} - // Manager manages system DNS settings. type Manager struct { logf logger.Logf - impl managerImpl + impl OSConfigurator config OSConfig } @@ -60,7 +52,7 @@ func (m *Manager) Set(config OSConfig) error { m.logf("Set: %+v", config) if len(config.Nameservers) == 0 { - err := m.impl.Down() + err := m.impl.Set(OSConfig{}) // If we save the config, we will not retry next time. Only do this on success. if err == nil { m.config = config @@ -68,7 +60,7 @@ func (m *Manager) Set(config OSConfig) error { return err } - err := m.impl.Up(config) + err := m.impl.Set(config) // If we save the config, we will not retry next time. Only do this on success. if err == nil { m.config = config @@ -78,11 +70,11 @@ func (m *Manager) Set(config OSConfig) error { } func (m *Manager) Up() error { - return m.impl.Up(m.config) + return m.impl.Set(m.config) } func (m *Manager) Down() error { - return m.impl.Down() + return m.impl.Close() } // Cleanup restores the system DNS configuration to its original state diff --git a/net/dns/manager_default.go b/net/dns/manager_default.go index 013a957f9..732e3cb73 100644 --- a/net/dns/manager_default.go +++ b/net/dns/manager_default.go @@ -8,7 +8,7 @@ package dns import "tailscale.com/types/logger" -func newManager(logger.Logf, string) managerImpl { +func newManager(logger.Logf, string) OSConfigurator { // TODO(dmytro): on darwin, we should use a macOS-specific method such as scutil. // This is currently not implemented. Editing /etc/resolv.conf does not work, // as most applications use the system resolver, which disregards it. diff --git a/net/dns/manager_freebsd.go b/net/dns/manager_freebsd.go index bde838412..5b2d12195 100644 --- a/net/dns/manager_freebsd.go +++ b/net/dns/manager_freebsd.go @@ -6,7 +6,7 @@ package dns import "tailscale.com/types/logger" -func newManager(logf logger.Logf, _ string) managerImpl { +func newManager(logf logger.Logf, _ string) OSConfigurator { switch { case isResolvconfActive(): return newResolvconfManager(logf) diff --git a/net/dns/manager_linux.go b/net/dns/manager_linux.go index 9d3771874..c1517c3c9 100644 --- a/net/dns/manager_linux.go +++ b/net/dns/manager_linux.go @@ -6,7 +6,7 @@ package dns import "tailscale.com/types/logger" -func newManager(logf logger.Logf, interfaceName string) managerImpl { +func newManager(logf logger.Logf, interfaceName string) OSConfigurator { switch { case isResolvedActive(): return newResolvedManager() diff --git a/net/dns/manager_openbsd.go b/net/dns/manager_openbsd.go index 48f365e65..5289c3f9e 100644 --- a/net/dns/manager_openbsd.go +++ b/net/dns/manager_openbsd.go @@ -6,6 +6,6 @@ package dns import "tailscale.com/types/logger" -func newManager(logger.Logf, string) managerImpl { +func newManager(logger.Logf, string) OSConfigurator { return newDirectManager() } diff --git a/net/dns/manager_windows.go b/net/dns/manager_windows.go index 5744a47c1..4cd12f328 100644 --- a/net/dns/manager_windows.go +++ b/net/dns/manager_windows.go @@ -25,7 +25,7 @@ type windowsManager struct { guid string } -func newManager(logf logger.Logf, interfaceName string) managerImpl { +func newManager(logf logger.Logf, interfaceName string) OSConfigurator { return windowsManager{ logf: logf, guid: interfaceName, @@ -64,7 +64,7 @@ func (m windowsManager) setDomains(basePath string, domains []string) error { return setRegistryString(path, "SearchList", value) } -func (m windowsManager) Up(config OSConfig) error { +func (m windowsManager) Set(config OSConfig) error { var ipsv4 []string var ipsv6 []string @@ -113,6 +113,10 @@ func (m windowsManager) Up(config OSConfig) error { return nil } -func (m windowsManager) Down() error { - return m.Up(OSConfig{Nameservers: nil, Domains: nil}) +func (m windowsManager) RoutingMode() RoutingMode { + return RoutingModeNone +} + +func (m windowsManager) Close() error { + return m.Set(OSConfig{}) } diff --git a/net/dns/nm.go b/net/dns/nm.go index 0dbe52f71..e5f8601ee 100644 --- a/net/dns/nm.go +++ b/net/dns/nm.go @@ -53,7 +53,7 @@ type nmManager struct { interfaceName string } -func newNMManager(interfaceName string) managerImpl { +func newNMManager(interfaceName string) nmManager { return nmManager{ interfaceName: interfaceName, } @@ -61,8 +61,7 @@ func newNMManager(interfaceName string) managerImpl { type nmConnectionSettings map[string]map[string]dbus.Variant -// Up implements managerImpl. -func (m nmManager) Up(config OSConfig) error { +func (m nmManager) Set(config OSConfig) error { ctx, cancel := context.WithTimeout(context.Background(), reconfigTimeout) defer cancel() @@ -199,7 +198,8 @@ func (m nmManager) Up(config OSConfig) error { return nil } -// Down implements managerImpl. -func (m nmManager) Down() error { - return m.Up(OSConfig{Nameservers: nil, Domains: nil}) +func (m nmManager) RoutingMode() RoutingMode { return RoutingModeNone } + +func (m nmManager) Close() error { + return m.Set(OSConfig{}) } diff --git a/net/dns/noop.go b/net/dns/noop.go index a1b2eaa24..3b102c7fc 100644 --- a/net/dns/noop.go +++ b/net/dns/noop.go @@ -8,12 +8,10 @@ package dns type noopManager struct{} -// Up implements managerImpl. -func (m noopManager) Up(OSConfig) error { return nil } +func (m noopManager) Set(OSConfig) error { return nil } +func (m noopManager) RoutingMode() RoutingMode { return RoutingModeNone } +func (m noopManager) Close() error { return nil } -// Down implements managerImpl. -func (m noopManager) Down() error { return nil } - -func newNoopManager() managerImpl { +func newNoopManager() noopManager { return noopManager{} } diff --git a/net/dns/osconfig.go b/net/dns/osconfig.go index 84175fa2f..78f0c24f4 100644 --- a/net/dns/osconfig.go +++ b/net/dns/osconfig.go @@ -27,7 +27,7 @@ type OSConfigurator interface { // If cfg nil or the zero value, all Tailscale-related DNS // configuration is removed. // Set must not be called after Close. - Set(cfg *OSConfig) error + Set(cfg OSConfig) error // DNSRoutingMode reports the DNS routing capabilities of this OS // configurator. RoutingMode() RoutingMode diff --git a/net/dns/resolvconf.go b/net/dns/resolvconf.go index 7806ad621..aeddf47be 100644 --- a/net/dns/resolvconf.go +++ b/net/dns/resolvconf.go @@ -101,7 +101,7 @@ type resolvconfManager struct { impl resolvconfImpl } -func newResolvconfManager(logf logger.Logf) managerImpl { +func newResolvconfManager(logf logger.Logf) resolvconfManager { impl := getResolvconfImpl() logf("resolvconf implementation is %s", impl) @@ -115,8 +115,7 @@ func newResolvconfManager(logf logger.Logf) managerImpl { // when running resolvconfLegacy, hopefully placing our config first. const resolvconfConfigName = "tun-tailscale.inet" -// Up implements managerImpl. -func (m resolvconfManager) Up(config OSConfig) error { +func (m resolvconfManager) Set(config OSConfig) error { stdin := new(bytes.Buffer) writeResolvConf(stdin, config.Nameservers, config.Domains) // dns_direct.go @@ -139,8 +138,11 @@ func (m resolvconfManager) Up(config OSConfig) error { return nil } -// Down implements managerImpl. -func (m resolvconfManager) Down() error { +func (m resolvconfManager) RoutingMode() RoutingMode { + return RoutingModeNone +} + +func (m resolvconfManager) Close() error { var cmd *exec.Cmd switch m.impl { case resolvconfOpenresolv: diff --git a/net/dns/resolved.go b/net/dns/resolved.go index 46aa4f754..e478c6af1 100644 --- a/net/dns/resolved.go +++ b/net/dns/resolved.go @@ -77,12 +77,12 @@ func isResolvedActive() bool { // resolvedManager uses the systemd-resolved DBus API. type resolvedManager struct{} -func newResolvedManager() managerImpl { +func newResolvedManager() resolvedManager { return resolvedManager{} } // Up implements managerImpl. -func (m resolvedManager) Up(config OSConfig) error { +func (m resolvedManager) Set(config OSConfig) error { ctx, cancel := context.WithTimeout(context.Background(), reconfigTimeout) defer cancel() @@ -151,8 +151,11 @@ func (m resolvedManager) Up(config OSConfig) error { return nil } -// Down implements managerImpl. -func (m resolvedManager) Down() error { +func (m resolvedManager) RoutingMode() RoutingMode { + return RoutingModeNone +} + +func (m resolvedManager) Close() error { ctx, cancel := context.WithTimeout(context.Background(), reconfigTimeout) defer cancel()