ipn/ipnauth, util/winutil: add temporary LookupPseudoUser workaround to address os/user.LookupId errors on Windows
I added util/winutil/LookupPseudoUser, which essentially consists of the bits that I am in the process of adding to Go's standard library. We check the provided SID for "S-1-5-x" where 17 <= x <= 20 (which are the known pseudo-users) and then manually populate a os/user.User struct with the correct information. Fixes https://github.com/tailscale/tailscale/issues/869 Fixes https://github.com/tailscale/tailscale/issues/2894 Signed-off-by: Aaron Klotz <aaron@tailscale.com>
This commit is contained in:
@@ -5,6 +5,10 @@
|
||||
// Package winutil contains misc Windows/Win32 helper functions.
|
||||
package winutil
|
||||
|
||||
import (
|
||||
"os/user"
|
||||
)
|
||||
|
||||
// RegBase is the registry path inside HKEY_LOCAL_MACHINE where registry settings
|
||||
// are stored. This constant is a non-empty string only when GOOS=windows.
|
||||
const RegBase = regBase
|
||||
@@ -62,3 +66,13 @@ func GetRegInteger(name string, defval uint64) uint64 {
|
||||
func IsSIDValidPrincipal(uid string) bool {
|
||||
return isSIDValidPrincipal(uid)
|
||||
}
|
||||
|
||||
// LookupPseudoUser attempts to resolve the user specified by uid by checking
|
||||
// against well-known pseudo-users on Windows. This is a temporary workaround
|
||||
// until https://github.com/golang/go/issues/49509 is resolved and shipped.
|
||||
//
|
||||
// This function will only work on GOOS=windows. Trying to run it on any other
|
||||
// OS will always return an error.
|
||||
func LookupPseudoUser(uid string) (*user.User, error) {
|
||||
return lookupPseudoUser(uid)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user