diff --git a/cmd/tailscale/cli/cli_test.go b/cmd/tailscale/cli/cli_test.go index fecdb76b2..6765a3cc9 100644 --- a/cmd/tailscale/cli/cli_test.go +++ b/cmd/tailscale/cli/cli_test.go @@ -402,6 +402,28 @@ func TestCheckForAccidentalSettingReverts(t *testing.T) { }, want: accidentalUpPrefix + " --hostname=foo --exit-node=100.64.5.7", }, + { + name: "ignore_login_server_synonym", + flags: []string{"--login-server=https://controlplane.tailscale.com"}, + curPrefs: &ipn.Prefs{ + ControlURL: "https://login.tailscale.com", + AllowSingleHosts: true, + CorpDNS: true, + NetfilterMode: preftype.NetfilterOn, + }, + want: "", // not an error + }, + { + name: "ignore_login_server_synonym_on_other_change", + flags: []string{"--netfilter-mode=off"}, + curPrefs: &ipn.Prefs{ + ControlURL: "https://login.tailscale.com", + AllowSingleHosts: true, + CorpDNS: false, + NetfilterMode: preftype.NetfilterOn, + }, + want: accidentalUpPrefix + " --netfilter-mode=off --accept-dns=false", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/cmd/tailscale/cli/up.go b/cmd/tailscale/cli/up.go index 5c0c3f905..4dbb63510 100644 --- a/cmd/tailscale/cli/up.go +++ b/cmd/tailscale/cli/up.go @@ -586,6 +586,9 @@ func checkForAccidentalSettingReverts(flagSet *flag.FlagSet, curPrefs, newPrefs if reflect.DeepEqual(valCur, valNew) { continue } + if flagName == "login-server" && isLoginServerSynonym(valCur) && isLoginServerSynonym(valNew) { + continue + } missing = append(missing, fmtFlagValueArg(flagName, valCur)) } if len(missing) == 0 { @@ -632,6 +635,10 @@ func applyImplicitPrefs(prefs, oldPrefs *ipn.Prefs, curUser string) { } } +func isLoginServerSynonym(val interface{}) bool { + return val == "https://login.tailscale.com" || val == "https://controlplane.tailscale.com" +} + func flagAppliesToOS(flag, goos string) bool { switch flag { case "netfilter-mode", "snat-subnet-routes":