mirror of
https://github.com/containers/podman.git
synced 2025-06-05 14:06:01 +08:00
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>
This commit is contained in:
@ -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 != "" {
|
if c.config.User != "" {
|
||||||
// User and Group must go together
|
// User and Group must go together
|
||||||
g.SetProcessUID(uint32(execUser.Uid))
|
g.SetProcessUID(uint32(execUser.Uid))
|
||||||
|
@ -194,10 +194,22 @@ var _ = Describe("Podman run", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("podman run environment test", func() {
|
It("podman run environment test", func() {
|
||||||
session := podmanTest.Podman([]string{"run", "--rm", "--env", "FOO=BAR,BAZ", ALPINE, "printenv", "FOO"})
|
session := podmanTest.Podman([]string{"run", "--rm", ALPINE, "printenv", "HOME"})
|
||||||
session.WaitWithDefaultTimeout()
|
session.WaitWithDefaultTimeout()
|
||||||
Expect(session.ExitCode()).To(Equal(0))
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
match, _ := session.GrepString("BAR,BAZ")
|
match, _ := session.GrepString("/root")
|
||||||
|
Expect(match).Should(BeTrue())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"run", "--rm", "--env", "HOME=/foo", ALPINE, "printenv", "HOME"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
match, _ = session.GrepString("/foo")
|
||||||
|
Expect(match).Should(BeTrue())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"run", "--rm", "--env", "FOO=BAR,BAZ", ALPINE, "printenv", "FOO"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
match, _ = session.GrepString("BAR,BAZ")
|
||||||
Expect(match).Should(BeTrue())
|
Expect(match).Should(BeTrue())
|
||||||
|
|
||||||
session = podmanTest.Podman([]string{"run", "--rm", "--env", "PATH=/bin", ALPINE, "printenv", "PATH"})
|
session = podmanTest.Podman([]string{"run", "--rm", "--env", "PATH=/bin", ALPINE, "printenv", "PATH"})
|
||||||
|
Reference in New Issue
Block a user