-
Notifications
You must be signed in to change notification settings - Fork 13
/
user.go
37 lines (30 loc) · 887 Bytes
/
user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package user
import (
"fmt"
"os/user"
"strconv"
)
const DefaultUser = "user"
func GetUser(name string) (uid, gid int64, homedir, username string, err error) {
var u *user.User
if name == "" {
u, err = user.Current()
if err != nil {
return uid, gid, homedir, username, fmt.Errorf("failed to get current user: %w", err)
}
} else {
u, err = user.Lookup(name)
if err != nil {
return uid, gid, homedir, username, fmt.Errorf("failed to lookup user '%s': %w", name, err)
}
}
parsedUID, err := strconv.ParseInt(u.Uid, 10, 32)
if err != nil {
return uid, gid, homedir, username, fmt.Errorf("failed to parse UID '%s': %w", u.Uid, err)
}
parsedGID, err := strconv.ParseInt(u.Gid, 10, 32)
if err != nil {
return uid, gid, homedir, username, fmt.Errorf("failed to parse GID '%s': %w", u.Gid, err)
}
return parsedUID, parsedGID, u.HomeDir, u.Username, nil
}