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:
Aaron Klotz
2022-11-24 15:51:19 -07:00
parent 3b0de97e07
commit 6e33d2da2b
6 changed files with 131 additions and 2 deletions

View File

@ -6,6 +6,12 @@
package winutil
import (
"fmt"
"os/user"
"runtime"
)
const regBase = ``
func getPolicyString(name, defval string) string { return defval }
@ -17,3 +23,7 @@ func getRegString(name, defval string) string { return defval }
func getRegInteger(name string, defval uint64) uint64 { return defval }
func isSIDValidPrincipal(uid string) bool { return false }
func lookupPseudoUser(uid string) (*user.User, error) {
return nil, fmt.Errorf("unimplemented on %v", runtime.GOOS)
}