diff --git a/container_test.go b/container_test.go index 7646bb3793..b4e6551a34 100644 --- a/container_test.go +++ b/container_test.go @@ -849,6 +849,23 @@ func TestUser(t *testing.T) { if !strings.Contains(string(output), "uid=1(daemon) gid=1(daemon)") { t.Error(string(output)) } + + // Test an wrong username + container, err = builder.Create(&Config{ + Image: GetTestImage(runtime).ID, + Cmd: []string{"id"}, + + User: "unkownuser", + }, + ) + if err != nil { + t.Fatal(err) + } + defer runtime.Destroy(container) + output, err = container.Output() + if container.State.ExitCode == 0 { + t.Fatal("Starting container with wrong uid should fail but it passed.") + } } func TestMultipleContainers(t *testing.T) { diff --git a/utils/utils.go b/utils/utils.go index ea5c08e60e..c1f5f6a00c 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -702,6 +702,9 @@ func ParseRepositoryTag(repos string) (string, string) { return repos, "" } +// UserLookup check if the given username or uid is present in /etc/passwd +// and returns the user struct. +// If the username is not found, an error is returned. func UserLookup(uid string) (*user.User, error) { file, err := ioutil.ReadFile("/etc/passwd") if err != nil {