diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-02-28 20:18:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-28 20:18:13 +0100 |
commit | 742093c2f27d79a76dbc45335e6f9458decff567 (patch) | |
tree | 5f630daa82eae63f999b692a79cda8affdf18d7e /libpod/oci_conmon_linux.go | |
parent | 05550ed848d2cbb6417af286dcee6667c0d1adee (diff) | |
parent | b41c864d569357a102ee2335a4947e59e5e2b08a (diff) | |
download | podman-742093c2f27d79a76dbc45335e6f9458decff567.tar.gz podman-742093c2f27d79a76dbc45335e6f9458decff567.tar.bz2 podman-742093c2f27d79a76dbc45335e6f9458decff567.zip |
Merge pull request #5349 from mheon/ensure_exec_suppgroups
Ensure that exec sessions inherit supplemental groups
Diffstat (limited to 'libpod/oci_conmon_linux.go')
-rw-r--r-- | libpod/oci_conmon_linux.go | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/libpod/oci_conmon_linux.go b/libpod/oci_conmon_linux.go index 07d38693f..800f89603 100644 --- a/libpod/oci_conmon_linux.go +++ b/libpod/oci_conmon_linux.go @@ -1252,18 +1252,35 @@ func prepareProcessExec(c *Container, cmd, env []string, tty bool, cwd, user, se } + var addGroups []string + var sgids []uint32 + + // if the user is empty, we should inherit the user that the container is currently running with + if user == "" { + user = c.config.User + addGroups = c.config.Groups + } + overrides := c.getUserOverrides() execUser, err := lookup.GetUserGroupInfo(c.state.Mountpoint, user, overrides) if err != nil { return nil, err } + if len(addGroups) > 0 { + sgids, err = lookup.GetContainerGroups(addGroups, c.state.Mountpoint, overrides) + if err != nil { + return nil, errors.Wrapf(err, "error looking up supplemental groups for container %s exec session %s", c.ID(), sessionID) + } + } + // If user was set, look it up in the container to get a UID to use on // the host - if user != "" { - sgids := make([]uint32, 0, len(execUser.Sgids)) - for _, sgid := range execUser.Sgids { - sgids = append(sgids, uint32(sgid)) + if user != "" || len(sgids) > 0 { + if user != "" { + for _, sgid := range execUser.Sgids { + sgids = append(sgids, uint32(sgid)) + } } processUser := spec.User{ UID: uint32(execUser.Uid), |