Skip to content

Commit

Permalink
Avoid returning the UID when resolving the GIDs.
Browse files Browse the repository at this point in the history
  • Loading branch information
gadiego92 committed Aug 19, 2023
1 parent 8a0af16 commit 71f755f
Showing 1 changed file with 36 additions and 26 deletions.
62 changes: 36 additions & 26 deletions pkg/util/command_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -378,23 +378,51 @@ func getUIDAndGIDFromString(userGroupString string, fallbackToUID bool) (uint32,
}

func getUIDAndGID(userStr string, groupStr string, fallbackToUID bool) (uint32, uint32, error) {
user, err := LookupUser(userStr)
userObj, err := LookupUser(userStr)
if err != nil {
return 0, 0, err
}
uid32, err := getUID(user.Uid)
uid32, err := getUID(userObj.Uid)
if err != nil {
return 0, 0, err
}

gid, err := getGIDFromName(groupStr, fallbackToUID)
if err != nil {
if errors.Is(err, fallbackToUIDError) {
return uid32, uid32, nil
// Same dance with groups
var group *user.Group

if groupStr != "" {

group, err = user.LookupGroup(groupStr)

if err != nil {
// unknown group error could relate to a non existing group
var groupErr *user.UnknownGroupError
if errors.Is(err, groupErr) {
gid32, _ := getGID(groupStr, fallbackToUID)

return uid32, gid32, nil
}
group, err = user.LookupGroupId(groupStr)

if err != nil {
gid32, _ := getGID(groupStr, fallbackToUID)

return uid32, gid32, nil
}
}
return 0, 0, err
}
return uid32, gid, nil

gid := "0"
if fallbackToUID {
gid = userObj.Gid
}
if group != nil {
gid = group.Gid
}

gid32, err := getGID(gid, fallbackToUID)

return uid32, gid32, nil
}

// getGID tries to parse the gid or falls back to getGroupFromName if it's not an id
Expand All @@ -406,24 +434,6 @@ func getGID(groupStr string, fallbackToUID bool) (uint32, error) {
return uint32(gid), nil
}

// getGIDFromName tries to parse the groupStr into an existing group.
// if the group doesn't exist, fallback to getGID to parse non-existing valid GIDs.
func getGIDFromName(groupStr string, fallbackToUID bool) (uint32, error) {
group, err := user.LookupGroup(groupStr)
if err != nil {
// unknown group error could relate to a non existing group
var groupErr *user.UnknownGroupError
if errors.Is(err, groupErr) {
return getGID(groupStr, fallbackToUID)
}
group, err = user.LookupGroupId(groupStr)
if err != nil {
return getGID(groupStr, fallbackToUID)
}
}
return getGID(group.Gid, fallbackToUID)
}

var fallbackToUIDError = new(fallbackToUIDErrorType)

type fallbackToUIDErrorType struct{}
Expand Down

0 comments on commit 71f755f

Please sign in to comment.