diff --git a/cmd/cli/cli.go b/cmd/cli/cli.go index e7253c2..2009ab5 100644 --- a/cmd/cli/cli.go +++ b/cmd/cli/cli.go @@ -259,8 +259,11 @@ func initCLI() { return } + status, err := s.Status() + isCtrldInstalled := !errors.Is(err, service.ErrNotInstalled) + // If pin code was set, do not allow running start command. - if status, _ := s.Status(); status == service.StatusRunning { + if status == service.StatusRunning { if err := checkDeactivationPin(s); isCheckDeactivationPinErr(err) { os.Exit(deactivationPinInvalidExitCode) } @@ -276,8 +279,18 @@ func initCLI() { {func() error { return doGenerateNextDNSConfig(nextdns) }, true}, {func() error { return ensureUninstall(s) }, false}, {func() error { + // If ctrld is installed, we should not save current DNS settings, because: + // + // - The DNS settings was being set by ctrld already. + // - We could not determine the state of DNS settings before installing ctrld. + if isCtrldInstalled { + return nil + } + // Save current DNS so we can restore later. - withEachPhysicalInterfaces("", "save DNS settings", saveCurrentStaticDNS) + withEachPhysicalInterfaces("", "save DNS settings", func(i *net.Interface) error { + return saveCurrentStaticDNS(i) + }) return nil }, false}, {s.Install, false}, diff --git a/cmd/cli/prog.go b/cmd/cli/prog.go index 03f2105..2b5accc 100644 --- a/cmd/cli/prog.go +++ b/cmd/cli/prog.go @@ -5,6 +5,7 @@ import ( "context" "errors" "fmt" + "io/fs" "math/rand" "net" "net/netip" @@ -729,13 +730,13 @@ func saveCurrentStaticDNS(iface *net.Interface) error { return nil } file := savedStaticDnsSettingsFilePath(iface) - if err := os.Remove(file); err != nil && !errors.Is(err, os.ErrNotExist) { - mainLog.Load().Warn().Err(err).Msg("could not remove old static DNS settings file") - } ns, _ := currentStaticDNS(iface) if len(ns) == 0 { return nil } + if err := os.Remove(file); err != nil && !errors.Is(err, fs.ErrNotExist) { + mainLog.Load().Warn().Err(err).Msg("could not remove old static DNS settings file") + } mainLog.Load().Debug().Msgf("DNS settings for %s is static, saving ...", iface.Name) if err := os.WriteFile(file, []byte(strings.Join(ns, ",")), 0600); err != nil { mainLog.Load().Err(err).Msgf("could not save DNS settings for iface: %s", iface.Name)