diff --git a/hostinfo/hostinfo.go b/hostinfo/hostinfo.go index 328ec8c2d..3175a4a0a 100644 --- a/hostinfo/hostinfo.go +++ b/hostinfo/hostinfo.go @@ -20,27 +20,33 @@ import ( "tailscale.com/version" ) -var osVersion func() string // non-nil on some platforms - // New returns a partially populated Hostinfo for the current host. func New() *tailcfg.Hostinfo { hostname, _ := os.Hostname() hostname = dnsname.FirstLabel(hostname) - var osv string - if osVersion != nil { - osv = osVersion() - } return &tailcfg.Hostinfo{ IPNVersion: version.Long, Hostname: hostname, OS: version.OS(), - OSVersion: osv, + OSVersion: getOSVersion(), Package: packageType(), GoArch: runtime.GOARCH, DeviceModel: deviceModel(), } } +var osVersion func() string // non-nil on some platforms + +func getOSVersion() string { + if s, _ := osVersionAtomic.Load().(string); s != "" { + return s + } + if osVersion != nil { + return osVersion() + } + return "" +} + func packageType() string { switch runtime.GOOS { case "windows": @@ -86,11 +92,17 @@ func GetEnvType() EnvType { return e } -var deviceModelAtomic atomic.Value // of string +var ( + deviceModelAtomic atomic.Value // of string + osVersionAtomic atomic.Value // of string +) // SetDeviceModel sets the device model for use in Hostinfo updates. func SetDeviceModel(model string) { deviceModelAtomic.Store(model) } +// SetOSVersion sets the OS version. +func SetOSVersion(v string) { osVersionAtomic.Store(v) } + func deviceModel() string { s, _ := deviceModelAtomic.Load().(string) return s diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 439a54928..914f4d7f2 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -2275,7 +2275,7 @@ func applyPrefsToHostinfo(hi *tailcfg.Hostinfo, prefs *ipn.Prefs) { if h := prefs.Hostname; h != "" { hi.Hostname = h } - if v := prefs.OSVersion; v != "" { + if v := prefs.OSVersion; v != "" && hi.OSVersion == "" { hi.OSVersion = v // The Android app annotates when Google Play Services diff --git a/ipn/prefs.go b/ipn/prefs.go index 02e1ffc42..f2eb16dee 100644 --- a/ipn/prefs.go +++ b/ipn/prefs.go @@ -128,9 +128,15 @@ type Prefs struct { Hostname string // OSVersion overrides tailcfg.Hostinfo's OSVersion. + // + // Deprecated: we're in the process of deleting this and using + // hostinfo.SetFoo methods instead. OSVersion string // DeviceModel overrides tailcfg.Hostinfo's DeviceModel. + // + // Deprecated: we're in the process of deleting this and using + // hostinfo.SetFoo methods instead. DeviceModel string // NotepadURLs is a debugging setting that opens OAuth URLs in