From c661fad3ebe3591cb2271ab17ebc5dd8db1161e5 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Wed, 18 May 2016 15:56:54 +0200 Subject: [PATCH] provide a way to pass multi values-signle key headers Signed-off-by: Antonio Murdaca --- docker/docker_client.go | 6 ++++-- docker/docker_image_dest.go | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docker/docker_client.go b/docker/docker_client.go index 50bd2f5c..180feb4b 100644 --- a/docker/docker_client.go +++ b/docker/docker_client.go @@ -78,7 +78,7 @@ func newDockerClient(refHostname, certPath string, tlsVerify bool) (*dockerClien }, nil } -func (c *dockerClient) makeRequest(method, url string, headers map[string]string, stream io.Reader) (*http.Response, error) { +func (c *dockerClient) makeRequest(method, url string, headers map[string][]string, stream io.Reader) (*http.Response, error) { if c.scheme == "" { pr, err := c.ping() if err != nil { @@ -95,7 +95,9 @@ func (c *dockerClient) makeRequest(method, url string, headers map[string]string } req.Header.Set("Docker-Distribution-API-Version", "registry/2.0") for n, h := range headers { - req.Header.Add(n, h) + for _, hh := range h { + req.Header.Add(n, hh) + } } if c.wwwAuthenticate != "" { if err := c.setupRequestAuth(req); err != nil { diff --git a/docker/docker_image_dest.go b/docker/docker_image_dest.go index 37ec4da0..cb53d071 100644 --- a/docker/docker_image_dest.go +++ b/docker/docker_image_dest.go @@ -49,10 +49,10 @@ func (d *dockerImageDestination) PutManifest(manifest []byte) error { } url := fmt.Sprintf(manifestURL, d.ref.RemoteName(), digest) - headers := map[string]string{} + headers := map[string][]string{} mimeType := utils.GuessManifestMIMEType(manifest) if mimeType != "" { - headers["Content-Type"] = mimeType + headers["Content-Type"] = []string{mimeType} } res, err := d.c.makeRequest("PUT", url, headers, bytes.NewReader(manifest)) if err != nil { @@ -89,7 +89,7 @@ func (d *dockerImageDestination) PutLayer(digest string, stream io.Reader) error uploadURL := fmt.Sprintf(blobUploadURL, d.ref.RemoteName(), digest) logrus.Debugf("Uploading %s", uploadURL) // FIXME: Set Content-Length? - res, err = d.c.makeRequest("POST", uploadURL, map[string]string{"Content-Type": "application/octet-stream"}, stream) + res, err = d.c.makeRequest("POST", uploadURL, map[string][]string{"Content-Type": {"application/octet-stream"}}, stream) if err != nil { return err }