mirror of
https://github.com/GoogleContainerTools/kaniko
synced 2026-10-22 10:38:44 +02:00
Add secondary group impersonation w/ !cgo support
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"syscall"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func SyscallCredentials(userStr string) (*syscall.Credential, error) {
|
||||
uid, gid, err := GetUIDAndGIDFromString(userStr, true)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get uid/gid")
|
||||
}
|
||||
|
||||
u, err := Lookup(userStr)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "lookup")
|
||||
}
|
||||
logrus.Infof("util.Lookup returned: %+v", u)
|
||||
|
||||
var groups []uint32
|
||||
|
||||
gidStr, err := groupIDs(u)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "group ids for user")
|
||||
}
|
||||
|
||||
for _, g := range gidStr {
|
||||
i, err := strconv.ParseUint(g, 10, 32)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "parseuint")
|
||||
}
|
||||
|
||||
groups = append(groups, uint32(i))
|
||||
}
|
||||
|
||||
return &syscall.Credential{
|
||||
Uid: uid,
|
||||
Gid: gid,
|
||||
Groups: groups,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user