mirror of
https://github.com/GoogleContainerTools/kaniko
synced 2026-10-17 15:26:14 +02:00
Avoid returning the UID when resolving the GIDs. (#2689)
* Fix GetUIDAndGIDFromString test. * Avoid returning by default the UID when resolving the GIDs.
This commit is contained in:
+23
-23
@@ -387,41 +387,48 @@ func getUIDAndGID(userStr string, groupStr string, fallbackToUID bool) (uint32,
|
||||
return 0, 0, err
|
||||
}
|
||||
|
||||
gid, err := getGIDFromName(groupStr, fallbackToUID)
|
||||
if err != nil {
|
||||
if errors.Is(err, fallbackToUIDError) {
|
||||
return uid32, uid32, nil
|
||||
if groupStr != "" {
|
||||
gid32, err := getGIDFromName(groupStr)
|
||||
if err != nil {
|
||||
if errors.Is(err, fallbackToUIDError) {
|
||||
return uid32, uid32, nil
|
||||
}
|
||||
return 0, 0, err
|
||||
}
|
||||
return 0, 0, err
|
||||
return uid32, gid32, nil
|
||||
}
|
||||
return uid32, gid, nil
|
||||
|
||||
if fallbackToUID {
|
||||
return uid32, uid32, nil
|
||||
}
|
||||
|
||||
return uid32, 0, nil
|
||||
}
|
||||
|
||||
// getGID tries to parse the gid or falls back to getGroupFromName if it's not an id
|
||||
func getGID(groupStr string, fallbackToUID bool) (uint32, error) {
|
||||
// getGID tries to parse the gid
|
||||
func getGID(groupStr string) (uint32, error) {
|
||||
gid, err := strconv.ParseUint(groupStr, 10, 32)
|
||||
if err != nil {
|
||||
return 0, fallbackToUIDOrError(err, fallbackToUID)
|
||||
return 0, err
|
||||
}
|
||||
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) {
|
||||
func getGIDFromName(groupStr string) (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)
|
||||
var groupErr user.UnknownGroupError
|
||||
if errors.As(err, &groupErr) {
|
||||
return getGID(groupStr)
|
||||
}
|
||||
group, err = user.LookupGroupId(groupStr)
|
||||
if err != nil {
|
||||
return getGID(groupStr, fallbackToUID)
|
||||
return getGID(groupStr)
|
||||
}
|
||||
}
|
||||
return getGID(group.Gid, fallbackToUID)
|
||||
return getGID(group.Gid)
|
||||
}
|
||||
|
||||
var fallbackToUIDError = new(fallbackToUIDErrorType)
|
||||
@@ -432,13 +439,6 @@ func (e fallbackToUIDErrorType) Error() string {
|
||||
return "fallback to uid"
|
||||
}
|
||||
|
||||
func fallbackToUIDOrError(err error, fallbackToUID bool) error {
|
||||
if fallbackToUID {
|
||||
return fallbackToUIDError
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// LookupUser will try to lookup the userStr inside the passwd file.
|
||||
// If the user does not exists, the function will fallback to parsing the userStr as an uid.
|
||||
func LookupUser(userStr string) (*user.User, error) {
|
||||
|
||||
Reference in New Issue
Block a user