diff options
author | Giuseppe Scrivano <gscrivan@redhat.com> | 2019-09-20 14:45:20 +0200 |
---|---|---|
committer | Giuseppe Scrivano <gscrivan@redhat.com> | 2019-09-20 16:01:38 +0200 |
commit | e42e1c45ae761b203dd5312c22ee7992eef322dc (patch) | |
tree | 1f70235f041c4ac9aa083b9014b6615d707e5430 /libpod | |
parent | 7ed1816900b9e1cc8087f8256e836eb62d0c6295 (diff) | |
download | podman-e42e1c45ae761b203dd5312c22ee7992eef322dc.tar.gz podman-e42e1c45ae761b203dd5312c22ee7992eef322dc.tar.bz2 podman-e42e1c45ae761b203dd5312c22ee7992eef322dc.zip |
container: make sure $HOME is always set
If the HOME environment variable is not set, make sure it is set to
the configuration found in the container /etc/passwd file.
It was previously depending on a runc behavior that always set HOME
when it is not set. The OCI runtime specifications do not require
HOME to be set so move the logic to libpod.
Closes: https://github.com/debarshiray/toolbox/issues/266
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/container_internal_linux.go | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/libpod/container_internal_linux.go b/libpod/container_internal_linux.go index 4bbbef5db..355b9bea4 100644 --- a/libpod/container_internal_linux.go +++ b/libpod/container_internal_linux.go @@ -279,6 +279,17 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) { } } + hasHomeSet := false + for _, s := range c.config.Spec.Process.Env { + if strings.HasPrefix(s, "HOME=") { + hasHomeSet = true + break + } + } + if !hasHomeSet { + c.config.Spec.Process.Env = append(c.config.Spec.Process.Env, fmt.Sprintf("HOME=%s", execUser.Home)) + } + if c.config.User != "" { // User and Group must go together g.SetProcessUID(uint32(execUser.Uid)) |