From d32df6d934875052232bbbc49fa473bd283af6e4 Mon Sep 17 00:00:00 2001 From: Anusha Ragunathan Date: Wed, 6 Jul 2016 12:16:14 -0700 Subject: [PATCH] Detect non-plugin content during install and error out. Signed-off-by: Anusha Ragunathan --- integration-cli/docker_cli_plugins_test.go | 7 +++++++ plugin/distribution/pull.go | 5 ++++- plugin/distribution/push.go | 2 +- plugin/distribution/types.go | 7 +++++-- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/integration-cli/docker_cli_plugins_test.go b/integration-cli/docker_cli_plugins_test.go index 4846744d62..252df5acef 100644 --- a/integration-cli/docker_cli_plugins_test.go +++ b/integration-cli/docker_cli_plugins_test.go @@ -52,3 +52,10 @@ func (s *DockerSuite) TestPluginInstallDisable(c *check.C) { c.Assert(err, checker.IsNil) c.Assert(out, checker.Contains, nameWithTag) } + +func (s *DockerSuite) TestPluginInstallImage(c *check.C) { + testRequires(c, DaemonIsLinux, ExperimentalDaemon) + out, _, err := dockerCmdWithError("plugin", "install", "redis") + c.Assert(err, checker.NotNil) + c.Assert(out, checker.Contains, "content is not a plugin") +} diff --git a/plugin/distribution/pull.go b/plugin/distribution/pull.go index 61971b3ee6..1bae8d4bb7 100644 --- a/plugin/distribution/pull.go +++ b/plugin/distribution/pull.go @@ -104,7 +104,7 @@ func Pull(name string, rs registry.Service, metaheader http.Header, authConfig * } if !confirmedV2 { logrus.Debugf("pull.go: !confirmedV2") - return nil, ErrUnSupportedRegistry + return nil, ErrUnsupportedRegistry } logrus.Debugf("Trying to pull %s from %s %s", repoInfo.Name(), endpoint.URL, endpoint.Version) break @@ -143,6 +143,9 @@ func Pull(name string, rs registry.Service, metaheader http.Header, authConfig * logrus.Debugf("pull.go: error in json.Unmarshal(): %v", err) return nil, err } + if m.Config.MediaType != MediaTypeConfig { + return nil, ErrUnsupportedMediaType + } pd := &pullData{ repository: repository, diff --git a/plugin/distribution/push.go b/plugin/distribution/push.go index 45deea83bb..27e717af4c 100644 --- a/plugin/distribution/push.go +++ b/plugin/distribution/push.go @@ -51,7 +51,7 @@ func Push(name string, rs registry.Service, metaHeader http.Header, authConfig * return "", err } if !confirmedV2 { - return "", ErrUnSupportedRegistry + return "", ErrUnsupportedRegistry } logrus.Debugf("Trying to push %s to %s %s", repoInfo.Name(), endpoint.URL, endpoint.Version) // This means that we found an endpoint. and we are ready to push diff --git a/plugin/distribution/types.go b/plugin/distribution/types.go index e1c05b76ff..0b1fd7aea1 100644 --- a/plugin/distribution/types.go +++ b/plugin/distribution/types.go @@ -4,8 +4,11 @@ package distribution import "errors" -// ErrUnSupportedRegistry indicates that the registry does not support v2 protocol -var ErrUnSupportedRegistry = errors.New("Only V2 repositories are supported for plugin distribution") +// ErrUnsupportedRegistry indicates that the registry does not support v2 protocol +var ErrUnsupportedRegistry = errors.New("only V2 repositories are supported for plugin distribution") + +// ErrUnsupportedMediaType indicates we are pulling content that's not a plugin +var ErrUnsupportedMediaType = errors.New("content is not a plugin") // Plugin related media types const (