MCPcopy
hub / github.com/passteque/gluetun / CreateUser

Method CreateUser

internal/alpine/users.go:15–54  ·  view source on GitHub ↗

CreateUser creates a user in Alpine with the given UID.

(username string, uid int)

Source from the content-addressed store, hash-verified

13
14// CreateUser creates a user in Alpine with the given UID.
15func (a *Alpine) CreateUser(username string, uid int) (createdUsername string, err error) {
16 UIDStr := strconv.Itoa(uid)
17 u, err := a.lookupID(UIDStr)
18 _, unknownUID := err.(user.UnknownUserIdError)
19 if err != nil && !unknownUID {
20 return "", err
21 }
22
23 if u != nil {
24 if u.Username == username {
25 return "", nil
26 }
27 return u.Username, nil
28 }
29
30 u, err = a.lookup(username)
31 _, unknownUsername := err.(user.UnknownUserError)
32 if err != nil && !unknownUsername {
33 return "", err
34 }
35
36 if u != nil {
37 return "", fmt.Errorf("%w: with name %s for ID %s instead of %d",
38 ErrUserAlreadyExists, username, u.Uid, uid)
39 }
40
41 const permission = fs.FileMode(0o644)
42 file, err := os.OpenFile(a.passwdPath, os.O_APPEND|os.O_WRONLY, permission)
43 if err != nil {
44 return "", err
45 }
46 s := fmt.Sprintf("%s:x:%d:::/dev/null:/sbin/nologin\n", username, uid)
47 _, err = file.WriteString(s)
48 if err != nil {
49 _ = file.Close()
50 return "", err
51 }
52
53 return username, file.Close()
54}

Callers 1

_mainFunction · 0.80

Calls 2

CloseMethod · 0.80
ErrorfMethod · 0.65

Tested by

no test coverage detected