From cf5d9ffa49b2984b01ee531874d2c587539c1b32 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Thu, 22 Dec 2016 17:43:37 +0100 Subject: [PATCH] update c/image Signed-off-by: Antonio Murdaca --- .../containers/image/docker/docker_client.go | 17 +++++++++++++++-- .../image/docker/reference/reference.go | 5 ++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/vendor/github.com/containers/image/docker/docker_client.go b/vendor/github.com/containers/image/docker/docker_client.go index ea906155..ae69b906 100644 --- a/vendor/github.com/containers/image/docker/docker_client.go +++ b/vendor/github.com/containers/image/docker/docker_client.go @@ -265,8 +265,21 @@ func (c *dockerClient) setupRequestAuth(req *http.Request) error { } chs := parseAuthHeader(res.Header) if res.StatusCode != http.StatusUnauthorized || chs == nil || len(chs) == 0 { - // no need for bearer? wtf? - return nil + // try again one last time with Basic Auth (gcr.io for instance) + testReq2 := *req + // Do not use the body stream, or we couldn't reuse it for the "real" call later. + testReq2.Body = nil + testReq2.ContentLength = 0 + testReq2.SetBasicAuth(c.username, c.password) + res, err := c.client.Do(&testReq2) + if err != nil { + return err + } + chs = parseAuthHeader(res.Header) + if res.StatusCode != http.StatusUnauthorized || chs == nil || len(chs) == 0 { + // no need for bearer? wtf? + return nil + } } // Arbitrarily use the first challenge, there is no reason to expect more than one. challenge := chs[0] diff --git a/vendor/github.com/containers/image/docker/reference/reference.go b/vendor/github.com/containers/image/docker/reference/reference.go index f4037988..149b3b59 100644 --- a/vendor/github.com/containers/image/docker/reference/reference.go +++ b/vendor/github.com/containers/image/docker/reference/reference.go @@ -6,6 +6,9 @@ import ( "github.com/pkg/errors" + // "docker/distribution/digest" requires us to load the algorithms that we + // want to use into the binary (it calls .Available). + _ "crypto/sha256" "github.com/docker/distribution/digest" distreference "github.com/docker/distribution/reference" ) @@ -55,7 +58,7 @@ type Canonical interface { func ParseNamed(s string) (Named, error) { named, err := distreference.ParseNamed(s) if err != nil { - return nil, errors.Errorf("Error parsing reference: %q is not a valid repository/tag", s) + return nil, errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", s) } r, err := WithName(named.Name()) if err != nil {