Browse code

Check the content type is json when calling exec start.

Signed-off-by: David Calavera <david.calavera@gmail.com>

David Calavera authored on 2015/10/17 06:45:07
Showing 3 changed files
... ...
@@ -92,7 +92,7 @@ func (cli *DockerCli) CmdExec(args ...string) error {
92 92
 		}
93 93
 	}
94 94
 	errCh = promise.Go(func() error {
95
-		return cli.hijack("POST", "/exec/"+execID+"/start", execConfig.Tty, in, out, stderr, hijacked, execConfig)
95
+		return cli.hijackWithContentType("POST", "/exec/"+execID+"/start", "application/json", execConfig.Tty, in, out, stderr, hijacked, execConfig)
96 96
 	})
97 97
 
98 98
 	// Acknowledge the hijack before starting
... ...
@@ -127,6 +127,10 @@ func (cli *DockerCli) dial() (net.Conn, error) {
127 127
 }
128 128
 
129 129
 func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan io.Closer, data interface{}) error {
130
+	return cli.hijackWithContentType(method, path, "text/plain", setRawTerminal, in, stdout, stderr, started, data)
131
+}
132
+
133
+func (cli *DockerCli) hijackWithContentType(method, path, contentType string, setRawTerminal bool, in io.ReadCloser, stdout, stderr io.Writer, started chan io.Closer, data interface{}) error {
130 134
 	defer func() {
131 135
 		if started != nil {
132 136
 			close(started)
... ...
@@ -149,7 +153,7 @@ func (cli *DockerCli) hijack(method, path string, setRawTerminal bool, in io.Rea
149 149
 	}
150 150
 
151 151
 	req.Header.Set("User-Agent", "Docker-Client/"+dockerversion.VERSION+" ("+runtime.GOOS+")")
152
-	req.Header.Set("Content-Type", "text/plain")
152
+	req.Header.Set("Content-Type", contentType)
153 153
 	req.Header.Set("Connection", "Upgrade")
154 154
 	req.Header.Set("Upgrade", "tcp")
155 155
 	req.Host = cli.addr
... ...
@@ -60,6 +60,9 @@ func (s *router) postContainerExecStart(ctx context.Context, w http.ResponseWrit
60 60
 	if err := httputils.ParseForm(r); err != nil {
61 61
 		return err
62 62
 	}
63
+	if err := httputils.CheckForJSON(r); err != nil {
64
+		return err
65
+	}
63 66
 	var (
64 67
 		execName                  = vars["name"]
65 68
 		stdin, inStream           io.ReadCloser