From 7132b782d4a2fc3899ecd6746e3dd2bcb22843a0 Mon Sep 17 00:00:00 2001 From: Aaron Klotz Date: Thu, 18 Apr 2024 10:14:27 -0600 Subject: [PATCH] hostinfo: use Distro field for distinguishing Windows Server builds Some editions of Windows server share the same build number as their client counterpart; we must use an additional field found in the OS version information to distinguish between them. Even though "Distro" has Linux connotations, it is the most appropriate hostinfo field. What is Windows Server if not an alternate distribution of Windows? This PR populates Distro with "Server" when applicable. Fixes #11785 Signed-off-by: Aaron Klotz --- cmd/derper/depaware.txt | 1 + cmd/tailscale/depaware.txt | 1 + cmd/tailscaled/depaware.txt | 1 + hostinfo/hostinfo_windows.go | 10 ++++++++++ 4 files changed, 13 insertions(+) diff --git a/cmd/derper/depaware.txt b/cmd/derper/depaware.txt index a776c4cb3..58c5e26ac 100644 --- a/cmd/derper/depaware.txt +++ b/cmd/derper/depaware.txt @@ -157,6 +157,7 @@ tailscale.com/cmd/derper dependencies: (generated by github.com/tailscale/depawa tailscale.com/util/syspolicy from tailscale.com/ipn tailscale.com/util/vizerror from tailscale.com/tailcfg+ W 💣 tailscale.com/util/winutil from tailscale.com/hostinfo+ + W 💣 tailscale.com/util/winutil/winenv from tailscale.com/hostinfo tailscale.com/version from tailscale.com/derp+ tailscale.com/version/distro from tailscale.com/envknob+ tailscale.com/wgengine/filter from tailscale.com/types/netmap diff --git a/cmd/tailscale/depaware.txt b/cmd/tailscale/depaware.txt index 9870aeb42..dcd4924ef 100644 --- a/cmd/tailscale/depaware.txt +++ b/cmd/tailscale/depaware.txt @@ -166,6 +166,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep tailscale.com/util/vizerror from tailscale.com/tailcfg+ 💣 tailscale.com/util/winutil from tailscale.com/clientupdate+ W 💣 tailscale.com/util/winutil/authenticode from tailscale.com/clientupdate + W 💣 tailscale.com/util/winutil/winenv from tailscale.com/hostinfo tailscale.com/version from tailscale.com/client/web+ tailscale.com/version/distro from tailscale.com/client/web+ tailscale.com/wgengine/capture from tailscale.com/cmd/tailscale/cli diff --git a/cmd/tailscaled/depaware.txt b/cmd/tailscaled/depaware.txt index 5fe355855..06ad2f3f7 100644 --- a/cmd/tailscaled/depaware.txt +++ b/cmd/tailscaled/depaware.txt @@ -399,6 +399,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de 💣 tailscale.com/util/winutil from tailscale.com/clientupdate+ W 💣 tailscale.com/util/winutil/authenticode from tailscale.com/clientupdate+ W tailscale.com/util/winutil/policy from tailscale.com/ipn/ipnlocal + W 💣 tailscale.com/util/winutil/winenv from tailscale.com/hostinfo tailscale.com/util/zstdframe from tailscale.com/control/controlclient+ tailscale.com/version from tailscale.com/client/web+ tailscale.com/version/distro from tailscale.com/client/web+ diff --git a/hostinfo/hostinfo_windows.go b/hostinfo/hostinfo_windows.go index d74d1db42..b789efb28 100644 --- a/hostinfo/hostinfo_windows.go +++ b/hostinfo/hostinfo_windows.go @@ -13,18 +13,28 @@ import ( "golang.org/x/sys/windows/registry" "tailscale.com/types/ptr" "tailscale.com/util/winutil" + "tailscale.com/util/winutil/winenv" ) func init() { + distroName = lazyDistroName.Get osVersion = lazyOSVersion.Get packageType = lazyPackageType.Get } var ( + lazyDistroName = &lazyAtomicValue[string]{f: ptr.To(distroNameWindows)} lazyOSVersion = &lazyAtomicValue[string]{f: ptr.To(osVersionWindows)} lazyPackageType = &lazyAtomicValue[string]{f: ptr.To(packageTypeWindows)} ) +func distroNameWindows() string { + if winenv.IsWindowsServer() { + return "Server" + } + return "" +} + func osVersionWindows() string { major, minor, build := windows.RtlGetNtVersionNumbers() s := fmt.Sprintf("%d.%d.%d", major, minor, build)