From c5219e90485c14e6cc14cb3bd9f9d081537e0820 Mon Sep 17 00:00:00 2001 From: Derek McGowan Date: Wed, 21 Jan 2015 08:14:30 -0800 Subject: [PATCH] Fix daemon key file location Fixes #10233 Signed-off-by: Derek McGowan (github: dmcgowan) Upstream-commit: 06af013f8bdf5c9af85c4b3f158292d79ab644a5 Component: engine --- components/engine/docker/docker.go | 2 ++ components/engine/docker/flags.go | 23 ++++++++++++++++--- .../integration-cli/docker_cli_daemon_test.go | 23 +++++++++++++++++++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/components/engine/docker/docker.go b/components/engine/docker/docker.go index 92f5f14603..6410171fab 100644 --- a/components/engine/docker/docker.go +++ b/components/engine/docker/docker.go @@ -67,6 +67,8 @@ func main() { flHosts = append(flHosts, defaultHost) } + setDefaultConfFlag(flTrustKey, defaultTrustKeyFile) + if *flDaemon { mainDaemon() return diff --git a/components/engine/docker/flags.go b/components/engine/docker/flags.go index 4170fb2e5d..29013146f0 100644 --- a/components/engine/docker/flags.go +++ b/components/engine/docker/flags.go @@ -28,6 +28,13 @@ func getHomeDir() string { return os.Getenv("HOME") } +func getDaemonConfDir() string { + if runtime.GOOS == "windows" { + return filepath.Join(os.Getenv("USERPROFILE"), ".docker") + } + return "/etc/docker" +} + var ( flVersion = flag.Bool([]string{"v", "-version"}, false, "Print version information and quit") flDaemon = flag.Bool([]string{"d", "-daemon"}, false, "Enable daemon mode") @@ -47,10 +54,20 @@ var ( flHosts []string ) +func setDefaultConfFlag(flag *string, def string) { + if *flag == "" { + if *flDaemon { + *flag = filepath.Join(getDaemonConfDir(), def) + } else { + *flag = filepath.Join(getHomeDir(), ".docker", def) + } + } +} + func init() { - // placeholder for trust key flag - trustKeyDefault := filepath.Join(dockerCertPath, defaultTrustKeyFile) - flTrustKey = &trustKeyDefault + var placeholderTrustKey string + // TODO use flag flag.String([]string{"i", "-identity"}, "", "Path to libtrust key file") + flTrustKey = &placeholderTrustKey flCa = flag.String([]string{"-tlscacert"}, filepath.Join(dockerCertPath, defaultCaFile), "Trust only remotes providing a certificate signed by the CA given here") flCert = flag.String([]string{"-tlscert"}, filepath.Join(dockerCertPath, defaultCertFile), "Path to TLS certificate file") diff --git a/components/engine/integration-cli/docker_cli_daemon_test.go b/components/engine/integration-cli/docker_cli_daemon_test.go index b7db552b62..bb44942c24 100644 --- a/components/engine/integration-cli/docker_cli_daemon_test.go +++ b/components/engine/integration-cli/docker_cli_daemon_test.go @@ -10,6 +10,8 @@ import ( "os/exec" "strings" "testing" + + "github.com/docker/libtrust" ) func TestDaemonRestartWithRunningContainersPorts(t *testing.T) { @@ -350,3 +352,24 @@ func TestDaemonVolumesBindsRefs(t *testing.T) { logDone("daemon - bind refs in data-containers survive daemon restart") } + +func TestDaemonKeyGeneration(t *testing.T) { + os.Remove("/etc/docker/key.json") + d := NewDaemon(t) + if err := d.Start(); err != nil { + t.Fatalf("Could not start daemon: %v", err) + } + d.Stop() + + k, err := libtrust.LoadKeyFile("/etc/docker/key.json") + if err != nil { + t.Fatalf("Error opening key file") + } + kid := k.KeyID() + // Test Key ID is a valid fingerprint (e.g. QQXN:JY5W:TBXI:MK3X:GX6P:PD5D:F56N:NHCS:LVRZ:JA46:R24J:XEFF) + if len(kid) != 59 { + t.Fatalf("Bad key ID: %s", kid) + } + + logDone("daemon - key generation") +}