From f0d39b304cf634dab87b99cf9775258f5dacce14 Mon Sep 17 00:00:00 2001 From: Roman Dodin Date: Tue, 9 Jul 2024 15:13:28 +0200 Subject: [PATCH] use user's home directory when fetching the docker config (#2135) --- runtime/docker/auth.go | 20 +++++++------------- runtime/docker/auth_test.go | 2 +- utils/file.go | 2 ++ 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/runtime/docker/auth.go b/runtime/docker/auth.go index 622864689..2a83b6d3d 100644 --- a/runtime/docker/auth.go +++ b/runtime/docker/auth.go @@ -11,6 +11,7 @@ import ( "github.com/distribution/reference" "github.com/docker/docker/api/types/registry" log "github.com/sirupsen/logrus" + "github.com/srl-labs/containerlab/utils" ) const ( @@ -44,27 +45,20 @@ func getImageDomainName(imageName string) string { return imageDomainName } -func getDockerConfigPath(configPath string) (string, error) { - var err error +func getDockerConfigPath(configPath string) string { if configPath == "" { - homeDir, err := os.UserHomeDir() - if err != nil { - return "", err - } - - configPath = filepath.Join(homeDir, dockerDefaultConfigDir, dockerDefaultConfigFile) + configPath = utils.ResolvePath(filepath.Join("~", dockerDefaultConfigDir, dockerDefaultConfigFile), "") } - return configPath, err + return configPath } +// GetDockerConfig reads the docker config file by the configPath and returns the DockerConfig struct +// with parts of the docker config. func GetDockerConfig(configPath string) (*DockerConfig, error) { var dockerConfig DockerConfig - dockerConfigPath, err := getDockerConfigPath(configPath) - if err != nil { - return nil, err - } + dockerConfigPath := getDockerConfigPath(configPath) file, err := os.ReadFile(dockerConfigPath) if err != nil { diff --git a/runtime/docker/auth_test.go b/runtime/docker/auth_test.go index 839fb63ca..388186a3b 100644 --- a/runtime/docker/auth_test.go +++ b/runtime/docker/auth_test.go @@ -60,7 +60,7 @@ func TestGetDockerConfigPath(t *testing.T) { } for _, in := range td { - got, _ := getDockerConfigPath(in["path"]) + got := getDockerConfigPath(in["path"]) want, _ := homedir.Expand(in["want"]) if got != want { t.Errorf("Invalid docker config path, got %v, want %v", got, in["want"]) diff --git a/utils/file.go b/utils/file.go index 36ab520b7..8fe3908cf 100644 --- a/utils/file.go +++ b/utils/file.go @@ -274,6 +274,8 @@ func lookupUserHomeDirViaGetent(userId string) string { // ResolvePath resolves a string path by expanding `~` to home dir // or resolving a relative path by joining it with the base path. +// When resolving `~` the function uses the home dir of a sudo user, so that -E sudo +// flag can be omitted. func ResolvePath(p, base string) string { if p == "" { return p