package staros import ( "fmt" "os/user" "strconv" ) func parseUint32Identity(kind, raw string) (uint32, error) { value, err := strconv.ParseUint(raw, 10, 32) if err != nil { return 0, fmt.Errorf("parse %s %q: %w", kind, raw, err) } return uint32(value), nil } // GetUidGid func GetUidGid(uname string) (uint32, uint32, string, error) { usr, err := user.Lookup(uname) if err != nil { return 0, 0, "", err } uid, err := parseUint32Identity("uid", usr.Uid) if err != nil { return 0, 0, "", err } gid, err := parseUint32Identity("gid", usr.Gid) if err != nil { return 0, 0, "", err } return uid, gid, usr.HomeDir, nil } // GetUid func GetUid(uname string) (uint32, error) { usr, err := user.Lookup(uname) if err != nil { return 0, err } return parseUint32Identity("uid", usr.Uid) } // GetGid func GetGid(uname string) (uint32, error) { usr, err := user.Lookup(uname) if err != nil { return 0, err } return parseUint32Identity("gid", usr.Gid) } // GetGidByName func GetGidByName(uname string) (uint32, error) { usr, err := user.LookupGroup(uname) if err != nil { return 0, err } return parseUint32Identity("gid", usr.Gid) }