|
| 1 | +// Package user is an alias for [github.com/moby/sys/user]. |
| 2 | +// |
| 3 | +// Deprecated: use [github.com/moby/sys/user]. |
| 4 | +package user |
| 5 | + |
| 6 | +import ( |
| 7 | + "io" |
| 8 | + |
| 9 | + "github.com/moby/sys/user" |
| 10 | +) |
| 11 | + |
| 12 | +var ( |
| 13 | + // ErrNoPasswdEntries is returned if no matching entries were found in /etc/group. |
| 14 | + ErrNoPasswdEntries = user.ErrNoPasswdEntries |
| 15 | + // ErrNoGroupEntries is returned if no matching entries were found in /etc/passwd. |
| 16 | + ErrNoGroupEntries = user.ErrNoGroupEntries |
| 17 | + // ErrRange is returned if a UID or GID is outside of the valid range. |
| 18 | + ErrRange = user.ErrRange |
| 19 | +) |
| 20 | + |
| 21 | +type ( |
| 22 | + User = user.User |
| 23 | + |
| 24 | + Group = user.Group |
| 25 | + |
| 26 | + // SubID represents an entry in /etc/sub{u,g}id. |
| 27 | + SubID = user.SubID |
| 28 | + |
| 29 | + // IDMap represents an entry in /proc/PID/{u,g}id_map. |
| 30 | + IDMap = user.IDMap |
| 31 | + |
| 32 | + ExecUser = user.ExecUser |
| 33 | +) |
| 34 | + |
| 35 | +func ParsePasswdFile(path string) ([]user.User, error) { |
| 36 | + return user.ParsePasswdFile(path) |
| 37 | +} |
| 38 | + |
| 39 | +func ParsePasswd(passwd io.Reader) ([]user.User, error) { |
| 40 | + return user.ParsePasswd(passwd) |
| 41 | +} |
| 42 | + |
| 43 | +func ParsePasswdFileFilter(path string, filter func(user.User) bool) ([]user.User, error) { |
| 44 | + return user.ParsePasswdFileFilter(path, filter) |
| 45 | +} |
| 46 | + |
| 47 | +func ParsePasswdFilter(r io.Reader, filter func(user.User) bool) ([]user.User, error) { |
| 48 | + return user.ParsePasswdFilter(r, filter) |
| 49 | +} |
| 50 | + |
| 51 | +func ParseGroupFile(path string) ([]user.Group, error) { |
| 52 | + return user.ParseGroupFile(path) |
| 53 | +} |
| 54 | + |
| 55 | +func ParseGroup(group io.Reader) ([]user.Group, error) { |
| 56 | + return user.ParseGroup(group) |
| 57 | +} |
| 58 | + |
| 59 | +func ParseGroupFileFilter(path string, filter func(user.Group) bool) ([]user.Group, error) { |
| 60 | + return user.ParseGroupFileFilter(path, filter) |
| 61 | +} |
| 62 | + |
| 63 | +func ParseGroupFilter(r io.Reader, filter func(user.Group) bool) ([]user.Group, error) { |
| 64 | + return user.ParseGroupFilter(r, filter) |
| 65 | +} |
| 66 | + |
| 67 | +// GetExecUserPath is a wrapper for GetExecUser. It reads data from each of the |
| 68 | +// given file paths and uses that data as the arguments to GetExecUser. If the |
| 69 | +// files cannot be opened for any reason, the error is ignored and a nil |
| 70 | +// io.Reader is passed instead. |
| 71 | +func GetExecUserPath(userSpec string, defaults *user.ExecUser, passwdPath, groupPath string) (*user.ExecUser, error) { |
| 72 | + return user.GetExecUserPath(userSpec, defaults, passwdPath, groupPath) |
| 73 | +} |
| 74 | + |
| 75 | +// GetExecUser parses a user specification string (using the passwd and group |
| 76 | +// readers as sources for /etc/passwd and /etc/group data, respectively). In |
| 77 | +// the case of blank fields or missing data from the sources, the values in |
| 78 | +// defaults is used. |
| 79 | +// |
| 80 | +// GetExecUser will return an error if a user or group literal could not be |
| 81 | +// found in any entry in passwd and group respectively. |
| 82 | +// |
| 83 | +// Examples of valid user specifications are: |
| 84 | +// - "" |
| 85 | +// - "user" |
| 86 | +// - "uid" |
| 87 | +// - "user:group" |
| 88 | +// - "uid:gid |
| 89 | +// - "user:gid" |
| 90 | +// - "uid:group" |
| 91 | +// |
| 92 | +// It should be noted that if you specify a numeric user or group id, they will |
| 93 | +// not be evaluated as usernames (only the metadata will be filled). So attempting |
| 94 | +// to parse a user with user.Name = "1337" will produce the user with a UID of |
| 95 | +// 1337. |
| 96 | +func GetExecUser(userSpec string, defaults *user.ExecUser, passwd, group io.Reader) (*user.ExecUser, error) { |
| 97 | + return user.GetExecUser(userSpec, defaults, passwd, group) |
| 98 | +} |
| 99 | + |
| 100 | +// GetAdditionalGroups looks up a list of groups by name or group id |
| 101 | +// against the given /etc/group formatted data. If a group name cannot |
| 102 | +// be found, an error will be returned. If a group id cannot be found, |
| 103 | +// or the given group data is nil, the id will be returned as-is |
| 104 | +// provided it is in the legal range. |
| 105 | +func GetAdditionalGroups(additionalGroups []string, group io.Reader) ([]int, error) { |
| 106 | + return user.GetAdditionalGroups(additionalGroups, group) |
| 107 | +} |
| 108 | + |
| 109 | +// GetAdditionalGroupsPath is a wrapper around GetAdditionalGroups |
| 110 | +// that opens the groupPath given and gives it as an argument to |
| 111 | +// GetAdditionalGroups. |
| 112 | +func GetAdditionalGroupsPath(additionalGroups []string, groupPath string) ([]int, error) { |
| 113 | + return user.GetAdditionalGroupsPath(additionalGroups, groupPath) |
| 114 | +} |
| 115 | + |
| 116 | +func ParseSubIDFile(path string) ([]user.SubID, error) { |
| 117 | + return user.ParseSubIDFile(path) |
| 118 | +} |
| 119 | + |
| 120 | +func ParseSubID(subid io.Reader) ([]user.SubID, error) { |
| 121 | + return user.ParseSubID(subid) |
| 122 | +} |
| 123 | + |
| 124 | +func ParseSubIDFileFilter(path string, filter func(user.SubID) bool) ([]user.SubID, error) { |
| 125 | + return user.ParseSubIDFileFilter(path, filter) |
| 126 | +} |
| 127 | + |
| 128 | +func ParseSubIDFilter(r io.Reader, filter func(user.SubID) bool) ([]user.SubID, error) { |
| 129 | + return user.ParseSubIDFilter(r, filter) |
| 130 | +} |
| 131 | + |
| 132 | +func ParseIDMapFile(path string) ([]user.IDMap, error) { |
| 133 | + return user.ParseIDMapFile(path) |
| 134 | +} |
| 135 | + |
| 136 | +func ParseIDMap(r io.Reader) ([]user.IDMap, error) { |
| 137 | + return user.ParseIDMap(r) |
| 138 | +} |
| 139 | + |
| 140 | +func ParseIDMapFileFilter(path string, filter func(user.IDMap) bool) ([]user.IDMap, error) { |
| 141 | + return user.ParseIDMapFileFilter(path, filter) |
| 142 | +} |
| 143 | + |
| 144 | +func ParseIDMapFilter(r io.Reader, filter func(user.IDMap) bool) ([]user.IDMap, error) { |
| 145 | + return user.ParseIDMapFilter(r, filter) |
| 146 | +} |
0 commit comments