ipn/ipnlocal: only check CanUseExitNode if we are attempting to use one (#14230)

In https://github.com/tailscale/tailscale/pull/13726 we added logic to
`checkExitNodePrefsLocked` to error out on platforms where using an
exit node is unsupported in order to give users more obvious feedback
than having this silently fail downstream.

The above change neglected to properly check whether the device in
question was actually trying to use an exit node when doing the check
and was incorrectly returning an error on any calls to
`checkExitNodePrefsLocked` on platforms where using an exit node is not
supported as a result.

This change remedies this by adding a check to see whether the device is
attempting to use an exit node before doing the `CanUseExitNode` check.

Updates https://github.com/tailscale/corp/issues/24835

Signed-off-by: Mario Minardi <mario@tailscale.com>
pull/14231/head
Mario Minardi 2 days ago committed by GitHub
parent 4d33f30f91
commit 26de518413
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -3740,11 +3740,16 @@ func updateExitNodeUsageWarning(p ipn.PrefsView, state *netmon.State, healthTrac
} }
func (b *LocalBackend) checkExitNodePrefsLocked(p *ipn.Prefs) error { func (b *LocalBackend) checkExitNodePrefsLocked(p *ipn.Prefs) error {
tryingToUseExitNode := p.ExitNodeIP.IsValid() || p.ExitNodeID != ""
if !tryingToUseExitNode {
return nil
}
if err := featureknob.CanUseExitNode(); err != nil { if err := featureknob.CanUseExitNode(); err != nil {
return err return err
} }
if (p.ExitNodeIP.IsValid() || p.ExitNodeID != "") && p.AdvertisesExitNode() { if p.AdvertisesExitNode() {
return errors.New("Cannot advertise an exit node and use an exit node at the same time.") return errors.New("Cannot advertise an exit node and use an exit node at the same time.")
} }
return nil return nil

Loading…
Cancel
Save