diff --git a/cmd/buildkitd/main_windows.go b/cmd/buildkitd/main_windows.go index 196e4c6f7526..309cac0c0e35 100644 --- a/cmd/buildkitd/main_windows.go +++ b/cmd/buildkitd/main_windows.go @@ -8,6 +8,7 @@ import ( "net" _ "github.com/moby/buildkit/solver/llbsolver/ops" + _ "github.com/moby/buildkit/util/system/getuserinfo" "github.com/pkg/errors" ) diff --git a/util/system/getuserinfo/userinfo_windows.go b/util/system/getuserinfo/userinfo_windows.go new file mode 100644 index 000000000000..13da39fdc9f0 --- /dev/null +++ b/util/system/getuserinfo/userinfo_windows.go @@ -0,0 +1,44 @@ +package getuserinfo + +import ( + "encoding/json" + "fmt" + "os" + + "golang.org/x/sys/windows" + + "github.com/docker/docker/pkg/idtools" + "github.com/docker/docker/pkg/reexec" +) + +const ( + getUserInfoCmd = "get-user-info" +) + +func init() { + reexec.Register(getUserInfoCmd, userInfoMain) +} + +func userInfoMain() { + if len(os.Args) != 2 { + fmt.Println("Usage: get-user-info usernameOrGroup") + os.Exit(1) + } + username := os.Args[1] + sid, _, _, err := windows.LookupSID("", username) + if err != nil { + fmt.Println(err) + os.Exit(3) + } + + ident := idtools.Identity{ + SID: sid.String(), + } + + asJson, err := json.Marshal(ident) + if err != nil { + fmt.Println(err) + os.Exit(5) + } + fmt.Fprintf(os.Stdout, "%s", string(asJson)) +}