2020-06-08 14:52:16 +08:00
|
|
|
package staros
|
|
|
|
|
|
|
|
|
|
import (
|
2026-06-09 18:10:19 +08:00
|
|
|
"fmt"
|
2020-06-08 14:52:16 +08:00
|
|
|
"os/user"
|
|
|
|
|
"strconv"
|
|
|
|
|
)
|
|
|
|
|
|
2026-06-09 18:10:19 +08:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-08 14:52:16 +08:00
|
|
|
// GetUidGid
|
|
|
|
|
func GetUidGid(uname string) (uint32, uint32, string, error) {
|
|
|
|
|
usr, err := user.Lookup(uname)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, 0, "", err
|
|
|
|
|
}
|
2026-06-09 18:10:19 +08:00
|
|
|
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
|
2020-06-08 14:52:16 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetUid
|
|
|
|
|
func GetUid(uname string) (uint32, error) {
|
|
|
|
|
usr, err := user.Lookup(uname)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
2026-06-09 18:10:19 +08:00
|
|
|
return parseUint32Identity("uid", usr.Uid)
|
2020-06-08 14:52:16 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetGid
|
|
|
|
|
func GetGid(uname string) (uint32, error) {
|
2026-06-09 18:10:19 +08:00
|
|
|
usr, err := user.Lookup(uname)
|
2020-06-08 14:52:16 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
2026-06-09 18:10:19 +08:00
|
|
|
return parseUint32Identity("gid", usr.Gid)
|
2020-06-08 14:52:16 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetGidByName
|
|
|
|
|
func GetGidByName(uname string) (uint32, error) {
|
2026-06-09 18:10:19 +08:00
|
|
|
usr, err := user.LookupGroup(uname)
|
2020-06-08 14:52:16 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
2026-06-09 18:10:19 +08:00
|
|
|
return parseUint32Identity("gid", usr.Gid)
|
2020-06-08 14:52:16 +08:00
|
|
|
}
|