diff options
author | Giuseppe Scrivano <gscrivan@redhat.com> | 2019-09-21 20:24:53 +0200 |
---|---|---|
committer | Giuseppe Scrivano <gscrivan@redhat.com> | 2019-09-21 22:11:10 +0200 |
commit | 497678d9e348d10027b0b71de41a6aea11e5aba2 (patch) | |
tree | 6dd3b18602944aa8851ceefca221d87dae2d946e /libpod | |
parent | fb353f6f421656cafba05a885c921ca73daa5d70 (diff) | |
download | podman-497678d9e348d10027b0b71de41a6aea11e5aba2.tar.gz podman-497678d9e348d10027b0b71de41a6aea11e5aba2.tar.bz2 podman-497678d9e348d10027b0b71de41a6aea11e5aba2.zip |
exec: set HOME also with exec sessions
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/oci_internal_linux.go | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/libpod/oci_internal_linux.go b/libpod/oci_internal_linux.go index 4df1e4010..a90af32ed 100644 --- a/libpod/oci_internal_linux.go +++ b/libpod/oci_internal_linux.go @@ -200,13 +200,16 @@ func prepareProcessExec(c *Container, cmd, env []string, tty bool, cwd, user, se pspec.Cwd = cwd } + + overrides := c.getUserOverrides() + execUser, err := lookup.GetUserGroupInfo(c.state.Mountpoint, user, overrides) + if err != nil { + return nil, err + } + // If user was set, look it up in the container to get a UID to use on // the host if user != "" { - execUser, err := lookup.GetUserGroupInfo(c.state.Mountpoint, user, nil) - if err != nil { - return nil, err - } sgids := make([]uint32, 0, len(execUser.Sgids)) for _, sgid := range execUser.Sgids { sgids = append(sgids, uint32(sgid)) @@ -220,6 +223,17 @@ func prepareProcessExec(c *Container, cmd, env []string, tty bool, cwd, user, se pspec.User = processUser } + hasHomeSet := false + for _, s := range pspec.Env { + if strings.HasPrefix(s, "HOME=") { + hasHomeSet = true + break + } + } + if !hasHomeSet { + pspec.Env = append(pspec.Env, fmt.Sprintf("HOME=%s", execUser.Home)) + } + processJSON, err := json.Marshal(pspec) if err != nil { return nil, err |