| // Package user is an alias for [github.com/moby/sys/user]. |
| // |
| // Deprecated: use [github.com/moby/sys/user]. |
| package user |
| |
| import ( |
| "io" |
| |
| "github.com/moby/sys/user" |
| ) |
| |
| var ( |
| // ErrNoPasswdEntries is returned if no matching entries were found in /etc/group. |
| ErrNoPasswdEntries = user.ErrNoPasswdEntries |
| // ErrNoGroupEntries is returned if no matching entries were found in /etc/passwd. |
| ErrNoGroupEntries = user.ErrNoGroupEntries |
| // ErrRange is returned if a UID or GID is outside of the valid range. |
| ErrRange = user.ErrRange |
| ) |
| |
| type ( |
| User = user.User |
| |
| Group = user.Group |
| |
| // SubID represents an entry in /etc/sub{u,g}id. |
| SubID = user.SubID |
| |
| // IDMap represents an entry in /proc/PID/{u,g}id_map. |
| IDMap = user.IDMap |
| |
| ExecUser = user.ExecUser |
| ) |
| |
| func ParsePasswdFile(path string) ([]user.User, error) { |
| return user.ParsePasswdFile(path) |
| } |
| |
| func ParsePasswd(passwd io.Reader) ([]user.User, error) { |
| return user.ParsePasswd(passwd) |
| } |
| |
| func ParsePasswdFileFilter(path string, filter func(user.User) bool) ([]user.User, error) { |
| return user.ParsePasswdFileFilter(path, filter) |
| } |
| |
| func ParsePasswdFilter(r io.Reader, filter func(user.User) bool) ([]user.User, error) { |
| return user.ParsePasswdFilter(r, filter) |
| } |
| |
| func ParseGroupFile(path string) ([]user.Group, error) { |
| return user.ParseGroupFile(path) |
| } |
| |
| func ParseGroup(group io.Reader) ([]user.Group, error) { |
| return user.ParseGroup(group) |
| } |
| |
| func ParseGroupFileFilter(path string, filter func(user.Group) bool) ([]user.Group, error) { |
| return user.ParseGroupFileFilter(path, filter) |
| } |
| |
| func ParseGroupFilter(r io.Reader, filter func(user.Group) bool) ([]user.Group, error) { |
| return user.ParseGroupFilter(r, filter) |
| } |
| |
| // GetExecUserPath is a wrapper for GetExecUser. It reads data from each of the |
| // given file paths and uses that data as the arguments to GetExecUser. If the |
| // files cannot be opened for any reason, the error is ignored and a nil |
| // io.Reader is passed instead. |
| func GetExecUserPath(userSpec string, defaults *user.ExecUser, passwdPath, groupPath string) (*user.ExecUser, error) { |
| return user.GetExecUserPath(userSpec, defaults, passwdPath, groupPath) |
| } |
| |
| // GetExecUser parses a user specification string (using the passwd and group |
| // readers as sources for /etc/passwd and /etc/group data, respectively). In |
| // the case of blank fields or missing data from the sources, the values in |
| // defaults is used. |
| // |
| // GetExecUser will return an error if a user or group literal could not be |
| // found in any entry in passwd and group respectively. |
| // |
| // Examples of valid user specifications are: |
| // - "" |
| // - "user" |
| // - "uid" |
| // - "user:group" |
| // - "uid:gid |
| // - "user:gid" |
| // - "uid:group" |
| // |
| // It should be noted that if you specify a numeric user or group id, they will |
| // not be evaluated as usernames (only the metadata will be filled). So attempting |
| // to parse a user with user.Name = "1337" will produce the user with a UID of |
| // 1337. |
| func GetExecUser(userSpec string, defaults *user.ExecUser, passwd, group io.Reader) (*user.ExecUser, error) { |
| return user.GetExecUser(userSpec, defaults, passwd, group) |
| } |
| |
| // GetAdditionalGroups looks up a list of groups by name or group id |
| // against the given /etc/group formatted data. If a group name cannot |
| // be found, an error will be returned. If a group id cannot be found, |
| // or the given group data is nil, the id will be returned as-is |
| // provided it is in the legal range. |
| func GetAdditionalGroups(additionalGroups []string, group io.Reader) ([]int, error) { |
| return user.GetAdditionalGroups(additionalGroups, group) |
| } |
| |
| // GetAdditionalGroupsPath is a wrapper around GetAdditionalGroups |
| // that opens the groupPath given and gives it as an argument to |
| // GetAdditionalGroups. |
| func GetAdditionalGroupsPath(additionalGroups []string, groupPath string) ([]int, error) { |
| return user.GetAdditionalGroupsPath(additionalGroups, groupPath) |
| } |
| |
| func ParseSubIDFile(path string) ([]user.SubID, error) { |
| return user.ParseSubIDFile(path) |
| } |
| |
| func ParseSubID(subid io.Reader) ([]user.SubID, error) { |
| return user.ParseSubID(subid) |
| } |
| |
| func ParseSubIDFileFilter(path string, filter func(user.SubID) bool) ([]user.SubID, error) { |
| return user.ParseSubIDFileFilter(path, filter) |
| } |
| |
| func ParseSubIDFilter(r io.Reader, filter func(user.SubID) bool) ([]user.SubID, error) { |
| return user.ParseSubIDFilter(r, filter) |
| } |
| |
| func ParseIDMapFile(path string) ([]user.IDMap, error) { |
| return user.ParseIDMapFile(path) |
| } |
| |
| func ParseIDMap(r io.Reader) ([]user.IDMap, error) { |
| return user.ParseIDMap(r) |
| } |
| |
| func ParseIDMapFileFilter(path string, filter func(user.IDMap) bool) ([]user.IDMap, error) { |
| return user.ParseIDMapFileFilter(path, filter) |
| } |
| |
| func ParseIDMapFilter(r io.Reader, filter func(user.IDMap) bool) ([]user.IDMap, error) { |
| return user.ParseIDMapFilter(r, filter) |
| } |