From 87513cba6d8b1483adec6c7f162b3c742730684f Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Tue, 12 Mar 2024 19:01:31 +0700 Subject: [PATCH] cmd/cli: ignore un-usable interfaces on darwin when resetDNS --- cmd/cli/os_darwin.go | 12 ++++++++++++ cmd/cli/os_freebsd.go | 5 +++++ cmd/cli/os_linux.go | 5 +++++ cmd/cli/os_windows.go | 5 +++++ cmd/cli/prog.go | 2 +- 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/cmd/cli/os_darwin.go b/cmd/cli/os_darwin.go index f0f0cd6..f319056 100644 --- a/cmd/cli/os_darwin.go +++ b/cmd/cli/os_darwin.go @@ -56,6 +56,18 @@ func setDNS(iface *net.Interface, nameservers []string) error { return nil } +// resetDnsIgnoreUnusableInterface likes resetDNS, but return a nil error if the interface is not usable. +func resetDnsIgnoreUnusableInterface(iface *net.Interface) error { + if err := resetDNS(iface); err != nil { + // TODO: investiate whether we can detect this without relying on error message. + if strings.Contains(err.Error(), " is not a recognized network service") { + return nil + } + return err + } + return nil +} + // TODO(cuonglm): use system API func resetDNS(iface *net.Interface) error { if ns := savedStaticNameservers(iface); len(ns) > 0 { diff --git a/cmd/cli/os_freebsd.go b/cmd/cli/os_freebsd.go index 2cbfeb4..cc5ff92 100644 --- a/cmd/cli/os_freebsd.go +++ b/cmd/cli/os_freebsd.go @@ -54,6 +54,11 @@ func setDNS(iface *net.Interface, nameservers []string) error { return nil } +// resetDnsIgnoreUnusableInterface likes resetDNS, but return a nil error if the interface is not usable. +func resetDnsIgnoreUnusableInterface(iface *net.Interface) error { + return resetDNS(iface) +} + func resetDNS(iface *net.Interface) error { r, err := dns.NewOSConfigurator(logf, iface.Name) if err != nil { diff --git a/cmd/cli/os_linux.go b/cmd/cli/os_linux.go index 83a8f62..89e9edb 100644 --- a/cmd/cli/os_linux.go +++ b/cmd/cli/os_linux.go @@ -119,6 +119,11 @@ func setDNS(iface *net.Interface, nameservers []string) error { return nil } +// resetDnsIgnoreUnusableInterface likes resetDNS, but return a nil error if the interface is not usable. +func resetDnsIgnoreUnusableInterface(iface *net.Interface) error { + return resetDNS(iface) +} + func resetDNS(iface *net.Interface) (err error) { defer func() { if err == nil { diff --git a/cmd/cli/os_windows.go b/cmd/cli/os_windows.go index 1fd9535..d2f1dd2 100644 --- a/cmd/cli/os_windows.go +++ b/cmd/cli/os_windows.go @@ -67,6 +67,11 @@ func setDNS(iface *net.Interface, nameservers []string) error { return nil } +// resetDnsIgnoreUnusableInterface likes resetDNS, but return a nil error if the interface is not usable. +func resetDnsIgnoreUnusableInterface(iface *net.Interface) error { + return resetDNS(iface) +} + // TODO(cuonglm): should we use system API? func resetDNS(iface *net.Interface) error { resetDNSOnce.Do(func() { diff --git a/cmd/cli/prog.go b/cmd/cli/prog.go index 7094d50..afe297c 100644 --- a/cmd/cli/prog.go +++ b/cmd/cli/prog.go @@ -520,7 +520,7 @@ func (p *prog) resetDNS() { } logger.Debug().Msg("Restoring DNS successfully") if allIfaces { - withEachPhysicalInterfaces(netIface.Name, "reset DNS", resetDNS) + withEachPhysicalInterfaces(netIface.Name, "reset DNS", resetDnsIgnoreUnusableInterface) } }