Fix home and group set for user command

This commit is contained in:
Tejal Desai 2020-01-23 14:59:57 -08:00
parent a2aae6274d
commit 048de00c33
3 changed files with 19 additions and 14 deletions

View File

@ -68,13 +68,12 @@ func (r *RunCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bui
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
replacementEnvs := buildArgs.ReplacementEnvs(config.Env)
cmd.Env = addDefaultHOME(config.User, replacementEnvs)
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
var userStr string
// If specified, run the command as a specific user
if config.User != "" {
userAndGroup := strings.Split(config.User, ":")
userStr := userAndGroup[0]
userStr = userAndGroup[0]
var groupStr string
if len(userAndGroup) > 1 {
groupStr = userAndGroup[1]
@ -101,6 +100,7 @@ func (r *RunCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bui
}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid}
}
cmd.Env = addDefaultHOME(userStr, replacementEnvs)
if err := cmd.Start(); err != nil {
return errors.Wrap(err, "starting command")

View File

@ -40,7 +40,7 @@ func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu
if err != nil {
return err
}
var groupStr string
groupStr := userStr
if len(userAndGroup) > 1 {
groupStr, err = util.ResolveEnvironmentReplacement(userAndGroup[1], replacementEnvs, false)
if err != nil {
@ -48,9 +48,8 @@ func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu
}
}
if groupStr != "" {
userStr = userStr + ":" + groupStr
}
userStr = userStr + ":" + groupStr
config.User = userStr
return nil
}

View File

@ -28,22 +28,23 @@ import (
var userTests = []struct {
user string
expectedUID string
expectedGID string
}{
{
user: "root",
expectedUID: "root",
expectedUID: "root:root",
},
{
user: "root-add",
expectedUID: "root-add",
expectedUID: "root-add:root-add",
},
{
user: "0",
expectedUID: "0",
expectedUID: "0:0",
},
{
user: "fakeUser",
expectedUID: "fakeUser",
expectedUID: "fakeUser:fakeUser",
},
{
user: "root:root",
@ -56,6 +57,7 @@ var userTests = []struct {
{
user: "root:0",
expectedUID: "root:0",
expectedGID: "f0",
},
{
user: "0:0",
@ -63,11 +65,15 @@ var userTests = []struct {
},
{
user: "$envuser",
expectedUID: "root",
expectedUID: "root:root",
},
{
user: "root:$envgroup",
expectedUID: "root:root",
expectedUID: "root:grp",
},
{
user: "some:grp",
expectedUID: "some:grp",
},
}
@ -76,7 +82,7 @@ func TestUpdateUser(t *testing.T) {
cfg := &v1.Config{
Env: []string{
"envuser=root",
"envgroup=root",
"envgroup=grp",
},
}
cmd := UserCommand{