瀏覽代碼

Merge pull request #17125 from calavera/check_exec_start_json

Check the content type is json when calling exec start.
Antonio Murdaca 9 年之前
父節點
當前提交
bb085b7661
共有 3 個文件被更改,包括 9 次插入2 次删除
  1. 1 1
      api/client/exec.go
  2. 5 1
      api/client/hijack.go
  3. 3 0
      api/server/router/local/exec.go

+ 1 - 1
api/client/exec.go

@@ -92,7 +92,7 @@ func (cli *DockerCli) CmdExec(args ...string) error {
 		}
 	}
 	errCh = promise.Go(func() error {
-		return cli.hijack("POST", "/exec/"+execID+"/start", execConfig.Tty, in, out, stderr, hijacked, execConfig)
+		return cli.hijackWithContentType("POST", "/exec/"+execID+"/start", "application/json", execConfig.Tty, in, out, stderr, hijacked, execConfig)
 	})
 
 	// Acknowledge the hijack before starting

+ 5 - 1
api/client/hijack.go

@@ -127,6 +127,10 @@ func (cli *DockerCli) dial() (net.Conn, error) {
 }
 
 func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan io.Closer, data interface{}) error {
+	return cli.hijackWithContentType(method, path, "text/plain", setRawTerminal, in, stdout, stderr, started, data)
+}
+
+func (cli *DockerCli) hijackWithContentType(method, path, contentType string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan io.Closer, data interface{}) error {
 	defer func() {
 		if started != nil {
 			close(started)
@@ -149,7 +153,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea
 	}
 
 	req.Header.Set("User-Agent", "Docker-Client/"+dockerversion.VERSION+" ("+runtime.GOOS+")")
-	req.Header.Set("Content-Type", "text/plain")
+	req.Header.Set("Content-Type", contentType)
 	req.Header.Set("Connection", "Upgrade")
 	req.Header.Set("Upgrade", "tcp")
 	req.Host = cli.addr

+ 3 - 0
api/server/router/local/exec.go

@@ -60,6 +60,9 @@ func (s *router) postContainerExecStart(ctx context.Context, w http.ResponseWrit
 	if err := httputils.ParseForm(r); err != nil {
 		return err
 	}
+	if err := httputils.CheckForJSON(r); err != nil {
+		return err
+	}
 	var (
 		execName                  = vars["name"]
 		stdin, inStream           io.ReadCloser