From 0c6571a1fca92b40284ba9e78c57536ea8f6fd03 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Wed, 19 Feb 2020 18:55:58 +0100 Subject: [PATCH 01/13] integration: test case for HOME Signed-off-by: Yoan Blanc --- .../dockerfiles/Dockerfile_test_user_home | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 integration/dockerfiles/Dockerfile_test_user_home diff --git a/integration/dockerfiles/Dockerfile_test_user_home b/integration/dockerfiles/Dockerfile_test_user_home new file mode 100644 index 000000000..9a0aeb5a7 --- /dev/null +++ b/integration/dockerfiles/Dockerfile_test_user_home @@ -0,0 +1,27 @@ +# Copyright 2020 Google, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM debian:9.11 + +# default values for the root user. +RUN touch $HOME/hello + +# testuser1 with the default home created by useradd. + +RUN groupadd testgroup && \ + useradd --create-home --gid testgroup testuser + +USER testuser:testgroup + +RUN touch $HOME/hello From 52acd798f8ba5e8007992b60043d9a9fba794619 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Fri, 28 Feb 2020 14:23:45 +0100 Subject: [PATCH 02/13] run: unset any HOME variable after USER ran Running USER didn't reset HOME which had to be explicitly set. Closes #1082 Signed-off-by: Yoan Blanc --- pkg/commands/run.go | 1 + pkg/commands/user.go | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/commands/run.go b/pkg/commands/run.go index 9da6ddeeb..46cade516 100644 --- a/pkg/commands/run.go +++ b/pkg/commands/run.go @@ -77,6 +77,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 { diff --git a/pkg/commands/user.go b/pkg/commands/user.go index 410bb7840..2b8581af9 100644 --- a/pkg/commands/user.go +++ b/pkg/commands/user.go @@ -20,6 +20,7 @@ import ( "fmt" "strings" + "github.com/GoogleContainerTools/kaniko/pkg/constants" "github.com/GoogleContainerTools/kaniko/pkg/dockerfile" "github.com/GoogleContainerTools/kaniko/pkg/util" v1 "github.com/google/go-containerregistry/pkg/v1" @@ -55,8 +56,19 @@ func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu } userStr = userStr + ":" + groupStr } - + config.User = userStr + + // Remove any HOME environment variable previously set. + env := make([]string, 0, len(config.Env)) + for _, v := range config.Env { + if strings.HasPrefix(v, constants.HOME+"=") { + continue + } + env = append(env, v) + } + config.Env = env + return nil } From fec7c126f94e9d63348881b8165dde90af044ccd Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Fri, 28 Feb 2020 18:56:05 +0100 Subject: [PATCH 03/13] run: set userStr Signed-off-by: Yoan Blanc --- pkg/commands/run.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/commands/run.go b/pkg/commands/run.go index 46cade516..f15d93390 100644 --- a/pkg/commands/run.go +++ b/pkg/commands/run.go @@ -71,6 +71,7 @@ func (r *RunCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bui var userStr string // If specified, run the command as a specific user if config.User != "" { + userStr = config.User uid, gid, err := util.GetUIDAndGIDFromString(config.User, true) if err != nil { return err From bfeb40d600047a98bdc9e447dc7cbbeb9b7d4568 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Sat, 29 Feb 2020 12:32:55 +0100 Subject: [PATCH 04/13] integration: test user fancy home Signed-off-by: Yoan Blanc --- integration/dockerfiles/Dockerfile_test_user_home | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/integration/dockerfiles/Dockerfile_test_user_home b/integration/dockerfiles/Dockerfile_test_user_home index 9a0aeb5a7..029127bd6 100644 --- a/integration/dockerfiles/Dockerfile_test_user_home +++ b/integration/dockerfiles/Dockerfile_test_user_home @@ -20,8 +20,13 @@ RUN touch $HOME/hello # testuser1 with the default home created by useradd. RUN groupadd testgroup && \ - useradd --create-home --gid testgroup testuser + useradd --create-home --gid testgroup alice \ + useradd --create-home --home john --gid testgroup bob -USER testuser:testgroup +USER alice:testgroup + +RUN touch $HOME/hello + +USER bob:testgroup RUN touch $HOME/hello From c8d2cb70712cffe474bd81211f8d264e6cf06940 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Sat, 29 Feb 2020 12:38:21 +0100 Subject: [PATCH 05/13] fixup! integration: test user fancy home Signed-off-by: Yoan Blanc --- integration/dockerfiles/Dockerfile_test_user_home | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/dockerfiles/Dockerfile_test_user_home b/integration/dockerfiles/Dockerfile_test_user_home index 029127bd6..cadc695a1 100644 --- a/integration/dockerfiles/Dockerfile_test_user_home +++ b/integration/dockerfiles/Dockerfile_test_user_home @@ -21,7 +21,7 @@ RUN touch $HOME/hello RUN groupadd testgroup && \ useradd --create-home --gid testgroup alice \ - useradd --create-home --home john --gid testgroup bob + useradd --create-home --home /home/john --gid testgroup bob USER alice:testgroup From 55361b2998ff241d719297a49926def010124a69 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Sat, 29 Feb 2020 15:38:24 +0100 Subject: [PATCH 06/13] fixup! fixup! integration: test user fancy home Signed-off-by: Yoan Blanc --- integration/dockerfiles/Dockerfile_test_user_home | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/integration/dockerfiles/Dockerfile_test_user_home b/integration/dockerfiles/Dockerfile_test_user_home index cadc695a1..1444d9d55 100644 --- a/integration/dockerfiles/Dockerfile_test_user_home +++ b/integration/dockerfiles/Dockerfile_test_user_home @@ -20,13 +20,8 @@ RUN touch $HOME/hello # testuser1 with the default home created by useradd. RUN groupadd testgroup && \ - useradd --create-home --gid testgroup alice \ - useradd --create-home --home /home/john --gid testgroup bob + useradd --create-home --gid testgroup alice USER alice:testgroup RUN touch $HOME/hello - -USER bob:testgroup - -RUN touch $HOME/hello From 3d9bb21f75392ed569bfb97467fa9e7adc83452f Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Wed, 4 Mar 2020 06:51:11 +0100 Subject: [PATCH 07/13] user: keep existing HOME env Signed-off-by: Yoan Blanc --- pkg/commands/user.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/pkg/commands/user.go b/pkg/commands/user.go index 2b8581af9..d4b55c1bf 100644 --- a/pkg/commands/user.go +++ b/pkg/commands/user.go @@ -20,7 +20,6 @@ import ( "fmt" "strings" - "github.com/GoogleContainerTools/kaniko/pkg/constants" "github.com/GoogleContainerTools/kaniko/pkg/dockerfile" "github.com/GoogleContainerTools/kaniko/pkg/util" v1 "github.com/google/go-containerregistry/pkg/v1" @@ -59,16 +58,6 @@ func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu config.User = userStr - // Remove any HOME environment variable previously set. - env := make([]string, 0, len(config.Env)) - for _, v := range config.Env { - if strings.HasPrefix(v, constants.HOME+"=") { - continue - } - env = append(env, v) - } - config.Env = env - return nil } From 9e83210b072d35695f158acf4d7b2688569bbd51 Mon Sep 17 00:00:00 2001 From: Tejal Desai Date: Wed, 4 Mar 2020 14:16:24 -0800 Subject: [PATCH 08/13] Rebase over 1105 --- .../Dockerfile_test_user_without_grp | 19 ------------------- pkg/commands/user.go | 3 +-- 2 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 integration/dockerfiles/Dockerfile_test_user_without_grp diff --git a/integration/dockerfiles/Dockerfile_test_user_without_grp b/integration/dockerfiles/Dockerfile_test_user_without_grp deleted file mode 100644 index 5c1f955e9..000000000 --- a/integration/dockerfiles/Dockerfile_test_user_without_grp +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2018 Google, Inc. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -FROM debian:9.11 -RUN groupadd testgroup && \ - useradd --create-home --gid testgroup alice - -USER alice \ No newline at end of file diff --git a/pkg/commands/user.go b/pkg/commands/user.go index d4b55c1bf..410bb7840 100644 --- a/pkg/commands/user.go +++ b/pkg/commands/user.go @@ -55,9 +55,8 @@ func (r *UserCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bu } userStr = userStr + ":" + groupStr } - - config.User = userStr + config.User = userStr return nil } From c5531844167ef932f058054d861cb4e6546a6e24 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Wed, 4 Mar 2020 22:38:57 +0100 Subject: [PATCH 09/13] user_test: docker doesn't care about group really Signed-off-by: Yoan Blanc --- pkg/commands/user_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/commands/user_test.go b/pkg/commands/user_test.go index ad64d22cd..2b99b3505 100644 --- a/pkg/commands/user_test.go +++ b/pkg/commands/user_test.go @@ -57,23 +57,23 @@ var userTests = []struct { { user: "root:root", userObj: &user.User{Uid: "root", Gid: "some"}, - expectedUID: "root:root", + expectedUID: "root", }, { user: "0:root", userObj: &user.User{Uid: "0"}, - expectedUID: "0:root", + expectedUID: "0", }, { user: "root:0", userObj: &user.User{Uid: "root"}, - expectedUID: "root:0", + expectedUID: "root", expectedGID: "f0", }, { user: "0:0", userObj: &user.User{Uid: "0"}, - expectedUID: "0:0", + expectedUID: "0", }, { user: "$envuser", @@ -83,12 +83,12 @@ var userTests = []struct { { user: "root:$envgroup", userObj: &user.User{Uid: "root"}, - expectedUID: "root:grp", + expectedUID: "root", }, { user: "some:grp", userObj: &user.User{Uid: "some"}, - expectedUID: "some:grp", + expectedUID: "some", }, { user: "some", From c7028c6d2f69c2e14d764838a7f991081b1e8b29 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Thu, 5 Mar 2020 16:44:55 +0100 Subject: [PATCH 10/13] run: user LookupId Signed-off-by: Yoan Blanc --- .../dockerfiles/Dockerfile_test_user_home | 12 ++++- pkg/commands/run.go | 39 +++++++++----- pkg/commands/run_test.go | 51 +++++++++---------- 3 files changed, 58 insertions(+), 44 deletions(-) diff --git a/integration/dockerfiles/Dockerfile_test_user_home b/integration/dockerfiles/Dockerfile_test_user_home index 1444d9d55..2bab30dcd 100644 --- a/integration/dockerfiles/Dockerfile_test_user_home +++ b/integration/dockerfiles/Dockerfile_test_user_home @@ -20,8 +20,16 @@ RUN touch $HOME/hello # testuser1 with the default home created by useradd. RUN groupadd testgroup && \ - useradd --create-home --gid testgroup alice + useradd --create-home --gid testgroup alice && \ + useradd --create-home --uid 1111 --home-dir /home/john --gid testgroup bob USER alice:testgroup - RUN touch $HOME/hello + +USER bob +RUN touch $HOME/hello + +USER root + +USER 1111 +RUN touch $HOME/world diff --git a/pkg/commands/run.go b/pkg/commands/run.go index f15d93390..37d531c45 100644 --- a/pkg/commands/run.go +++ b/pkg/commands/run.go @@ -40,7 +40,8 @@ type RunCommand struct { // for testing var ( - userLookup = user.Lookup + userLookup = user.Lookup + userLookupId = user.LookupId ) func (r *RunCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.BuildArgs) error { @@ -68,18 +69,29 @@ func (r *RunCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bui cmd.Stderr = os.Stderr replacementEnvs := buildArgs.ReplacementEnvs(config.Env) cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} - var userStr string + + u := config.User + userAndGroup := strings.Split(u, ":") + userStr, err := util.ResolveEnvironmentReplacement(userAndGroup[0], replacementEnvs, false) + if err != nil { + return errors.Wrapf(err, "resolving user %s", userAndGroup[0]) + } + // If specified, run the command as a specific user - if config.User != "" { - userStr = config.User - uid, gid, err := util.GetUIDAndGIDFromString(config.User, true) + if userStr != "" { + uid, gid, err := util.GetUIDAndGIDFromString(userStr, true) if err != nil { return err } cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid} } - cmd.Env = addDefaultHOME(userStr, replacementEnvs) + env, err := addDefaultHOME(userStr, replacementEnvs) + if err != nil { + return errors.Wrap(err, "adding default HOME variable") + } + + cmd.Env = env if err := cmd.Start(); err != nil { return errors.Wrap(err, "starting command") @@ -102,32 +114,31 @@ func (r *RunCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bui } // addDefaultHOME adds the default value for HOME if it isn't already set -func addDefaultHOME(u string, envs []string) []string { +func addDefaultHOME(u string, envs []string) ([]string, error) { for _, env := range envs { split := strings.SplitN(env, "=", 2) if split[0] == constants.HOME { - return envs + return envs, nil } } // If user isn't set, set default value of HOME if u == "" || u == constants.RootUser { - return append(envs, fmt.Sprintf("%s=%s", constants.HOME, constants.DefaultHOMEValue)) + return append(envs, fmt.Sprintf("%s=%s", constants.HOME, constants.DefaultHOMEValue)), nil } // If user is set to username, set value of HOME to /home/${user} // Otherwise the user is set to uid and HOME is / - home := "/" userObj, err := userLookup(u) if err == nil { - if userObj.HomeDir != "" { - home = userObj.HomeDir + if uo, e := userLookupId(u); e == nil { + userObj = uo } else { - home = fmt.Sprintf("/home/%s", userObj.Username) + return nil, err } } - return append(envs, fmt.Sprintf("%s=%s", constants.HOME, home)) + return append(envs, fmt.Sprintf("%s=%s", constants.HOME, userObj.HomeDir)), nil } // String returns some information about the command for the image config diff --git a/pkg/commands/run_test.go b/pkg/commands/run_test.go index 7e4984eb1..faaf0e944 100644 --- a/pkg/commands/run_test.go +++ b/pkg/commands/run_test.go @@ -18,6 +18,7 @@ package commands import ( "archive/tar" "bytes" + "errors" "io" "io/ioutil" "log" @@ -33,11 +34,13 @@ import ( func Test_addDefaultHOME(t *testing.T) { tests := []struct { - name string - user string - mockUser *user.User - initial []string - expected []string + name string + user string + mockUser *user.User + lookupError error + mockUserId *user.User + initial []string + expected []string }{ { name: "HOME already set", @@ -78,31 +81,19 @@ func Test_addDefaultHOME(t *testing.T) { }, }, { - name: "HOME not set and user set", - user: "www-add", - mockUser: &user.User{ - Username: "www-add", + name: "USER is set using the UID", + user: "newuser", + lookupError: errors.New("User not found"), + mockUserId: &user.User{ + Username: "user", + HomeDir: "/home/user", }, initial: []string{ "PATH=/something/else", }, expected: []string{ "PATH=/something/else", - "HOME=/home/www-add", - }, - }, - { - name: "HOME not set and user is set", - user: "newuser", - mockUser: &user.User{ - Username: "newuser", - }, - initial: []string{ - "PATH=/something/else", - }, - expected: []string{ - "PATH=/something/else", - "HOME=/home/newuser", + "HOME=/home/user", }, }, { @@ -122,10 +113,14 @@ func Test_addDefaultHOME(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - userLookup = func(username string) (*user.User, error) { return test.mockUser, nil } - defer func() { userLookup = user.Lookup }() - actual := addDefaultHOME(test.user, test.initial) - testutil.CheckErrorAndDeepEqual(t, false, nil, test.expected, actual) + userLookup = func(username string) (*user.User, error) { return test.mockUser, test.lookupError } + userLookupId = func(username string) (*user.User, error) { return test.mockUserId, nil } + defer func() { + userLookup = user.Lookup + userLookupId = user.LookupId + }() + actual, err := addDefaultHOME(test.user, test.initial) + testutil.CheckErrorAndDeepEqual(t, false, err, test.expected, actual) }) } } From 67fbdef360e364416333ba697a001ea78a1e05e8 Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Thu, 5 Mar 2020 16:49:13 +0100 Subject: [PATCH 11/13] fixup! run: user LookupId Signed-off-by: Yoan Blanc --- pkg/commands/run.go | 2 +- pkg/commands/user_test.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/commands/run.go b/pkg/commands/run.go index 37d531c45..795bf3e0d 100644 --- a/pkg/commands/run.go +++ b/pkg/commands/run.go @@ -130,7 +130,7 @@ func addDefaultHOME(u string, envs []string) ([]string, error) { // If user is set to username, set value of HOME to /home/${user} // Otherwise the user is set to uid and HOME is / userObj, err := userLookup(u) - if err == nil { + if err != nil { if uo, e := userLookupId(u); e == nil { userObj = uo } else { diff --git a/pkg/commands/user_test.go b/pkg/commands/user_test.go index 2b99b3505..99775b714 100644 --- a/pkg/commands/user_test.go +++ b/pkg/commands/user_test.go @@ -55,23 +55,23 @@ var userTests = []struct { expectedUID: "fakeUser", }, { - user: "root:root", + user: "root", userObj: &user.User{Uid: "root", Gid: "some"}, expectedUID: "root", }, { - user: "0:root", + user: "0", userObj: &user.User{Uid: "0"}, expectedUID: "0", }, { - user: "root:0", + user: "root", userObj: &user.User{Uid: "root"}, expectedUID: "root", expectedGID: "f0", }, { - user: "0:0", + user: "0", userObj: &user.User{Uid: "0"}, expectedUID: "0", }, @@ -81,12 +81,12 @@ var userTests = []struct { expectedUID: "root", }, { - user: "root:$envgroup", + user: "root", userObj: &user.User{Uid: "root"}, expectedUID: "root", }, { - user: "some:grp", + user: "some", userObj: &user.User{Uid: "some"}, expectedUID: "some", }, From bd77f131fd10cf7a41972cb89212146e2498f1ca Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Thu, 5 Mar 2020 17:00:14 +0100 Subject: [PATCH 12/13] fixup! fixup! run: user LookupId Signed-off-by: Yoan Blanc --- pkg/commands/run.go | 4 ++-- pkg/commands/run_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/commands/run.go b/pkg/commands/run.go index 795bf3e0d..b60f185b3 100644 --- a/pkg/commands/run.go +++ b/pkg/commands/run.go @@ -41,7 +41,7 @@ type RunCommand struct { // for testing var ( userLookup = user.Lookup - userLookupId = user.LookupId + userLookupID = user.LookupId ) func (r *RunCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.BuildArgs) error { @@ -131,7 +131,7 @@ func addDefaultHOME(u string, envs []string) ([]string, error) { // Otherwise the user is set to uid and HOME is / userObj, err := userLookup(u) if err != nil { - if uo, e := userLookupId(u); e == nil { + if uo, e := userLookupID(u); e == nil { userObj = uo } else { return nil, err diff --git a/pkg/commands/run_test.go b/pkg/commands/run_test.go index faaf0e944..a28be6da1 100644 --- a/pkg/commands/run_test.go +++ b/pkg/commands/run_test.go @@ -114,10 +114,10 @@ func Test_addDefaultHOME(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { userLookup = func(username string) (*user.User, error) { return test.mockUser, test.lookupError } - userLookupId = func(username string) (*user.User, error) { return test.mockUserId, nil } + userLookupID = func(username string) (*user.User, error) { return test.mockUserId, nil } defer func() { userLookup = user.Lookup - userLookupId = user.LookupId + userLookupID = user.LookupId }() actual, err := addDefaultHOME(test.user, test.initial) testutil.CheckErrorAndDeepEqual(t, false, err, test.expected, actual) From fc668cd2b5513d2186ed48cd5668bdcdca4e9d7d Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Thu, 5 Mar 2020 17:26:04 +0100 Subject: [PATCH 13/13] fixup! fixup! fixup! run: user LookupId Signed-off-by: Yoan Blanc --- pkg/commands/run_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/commands/run_test.go b/pkg/commands/run_test.go index a28be6da1..f6accc3bb 100644 --- a/pkg/commands/run_test.go +++ b/pkg/commands/run_test.go @@ -38,7 +38,7 @@ func Test_addDefaultHOME(t *testing.T) { user string mockUser *user.User lookupError error - mockUserId *user.User + mockUserID *user.User initial []string expected []string }{ @@ -84,7 +84,7 @@ func Test_addDefaultHOME(t *testing.T) { name: "USER is set using the UID", user: "newuser", lookupError: errors.New("User not found"), - mockUserId: &user.User{ + mockUserID: &user.User{ Username: "user", HomeDir: "/home/user", }, @@ -114,7 +114,7 @@ func Test_addDefaultHOME(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { userLookup = func(username string) (*user.User, error) { return test.mockUser, test.lookupError } - userLookupID = func(username string) (*user.User, error) { return test.mockUserId, nil } + userLookupID = func(username string) (*user.User, error) { return test.mockUserID, nil } defer func() { userLookup = user.Lookup userLookupID = user.LookupId