Quellcode durchsuchen

Detect non-plugin content during install and error out.

Signed-off-by: Anusha Ragunathan <anusha@docker.com>
Anusha Ragunathan vor 9 Jahren
Ursprung
Commit
d32df6d934

+ 7 - 0
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")
+}

+ 4 - 1
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,

+ 1 - 1
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

+ 5 - 2
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 (