staros/os.go

60 lines
1.1 KiB
Go
Raw Permalink Normal View History

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