group_unix.go 725 B

1234567891011121314151617181920212223242526272829303132
  1. // +build !windows
  2. package listeners
  3. import (
  4. "fmt"
  5. "strconv"
  6. "github.com/opencontainers/runc/libcontainer/user"
  7. "github.com/pkg/errors"
  8. )
  9. func lookupGID(name string) (int, error) {
  10. groupFile, err := user.GetGroupPath()
  11. if err != nil {
  12. return -1, errors.Wrap(err, "error looking up groups")
  13. }
  14. groups, err := user.ParseGroupFileFilter(groupFile, func(g user.Group) bool {
  15. return g.Name == name || strconv.Itoa(g.Gid) == name
  16. })
  17. if err != nil {
  18. return -1, errors.Wrapf(err, "error parsing groups for %s", name)
  19. }
  20. if groups != nil && len(groups) > 0 {
  21. return groups[0].Gid, nil
  22. }
  23. gid, err := strconv.Atoi(name)
  24. if err == nil {
  25. return gid, nil
  26. }
  27. return -1, fmt.Errorf("group %s not found", name)
  28. }