From b667d7340c1717720216ebdb1c62052006e7ac5f Mon Sep 17 00:00:00 2001 From: Doug Rabson Date: Wed, 31 Aug 2022 18:02:38 +0100 Subject: [PATCH] libpod: Ensure that generated container names are random Fixes #15569. Signed-off-by: Doug Rabson --- libpod/runtime.go | 8 ++++++++ libpod/runtime_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 libpod/runtime_test.go diff --git a/libpod/runtime.go b/libpod/runtime.go index 9b97fd724c..1503b2344f 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -5,6 +5,7 @@ import ( "context" "errors" "fmt" + "math/rand" "os" "path/filepath" "strings" @@ -112,6 +113,13 @@ type Runtime struct { secretsManager *secrets.SecretsManager } +func init() { + // generateName calls namesgenerator.GetRandomName which the + // global RNG from math/rand. Seed it here to make sure we + // don't get the same name every time. + rand.Seed(time.Now().UnixNano()) +} + // SetXdgDirs ensures the XDG_RUNTIME_DIR env and XDG_CONFIG_HOME variables are set. // containers/image uses XDG_RUNTIME_DIR to locate the auth file, XDG_CONFIG_HOME is // use for the containers.conf configuration file. diff --git a/libpod/runtime_test.go b/libpod/runtime_test.go new file mode 100644 index 0000000000..2e16c7fcd3 --- /dev/null +++ b/libpod/runtime_test.go @@ -0,0 +1,28 @@ +package libpod + +import ( + "math/rand" + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_generateName(t *testing.T) { + state, path, _, err := getEmptyBoltState() + assert.NoError(t, err) + defer os.RemoveAll(path) + defer state.Close() + + r := &Runtime{ + state: state, + } + + // Test that (*Runtime).generateName returns different names + // if called twice, even if the global RNG has the default + // seed. + n1, _ := r.generateName() + rand.Seed(1) + n2, _ := r.generateName() + assert.NotEqual(t, n1, n2) +}