From 63af81b88366692716e601f770cf2d404543dc9c Mon Sep 17 00:00:00 2001 From: Josh Hawn Date: Fri, 30 Jan 2015 16:11:47 -0800 Subject: [PATCH] Fix token basic auth header issue When requesting a token, the basic auth header is always being set even if there is no username value. This patch corrects this and does not set the basic auth header if the username is empty. Also fixes an issue where pulling all tags from a v2 registry succeeds when the image does not actually exist on the registry. Docker-DCO-1.1-Signed-off-by: Josh Hawn (github: jlhawn) --- docs/session_v2.go | 2 ++ docs/token.go | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/session_v2.go b/docs/session_v2.go index dbef7df1..da5371d8 100644 --- a/docs/session_v2.go +++ b/docs/session_v2.go @@ -128,6 +128,8 @@ func (r *Session) HeadV2ImageBlob(ep *Endpoint, imageName, sumType, sum string, case res.StatusCode >= 200 && res.StatusCode < 400: // return something indicating no push needed return true, nil + case res.StatusCode == 401: + return false, errLoginRequired case res.StatusCode == 404: // return something indicating blob push needed return false, nil diff --git a/docs/token.go b/docs/token.go index 25048630..c79a8ca6 100644 --- a/docs/token.go +++ b/docs/token.go @@ -51,10 +51,12 @@ func getToken(username, password string, params map[string]string, registryEndpo reqParams.Add("scope", scopeField) } - reqParams.Add("account", username) + if username != "" { + reqParams.Add("account", username) + req.SetBasicAuth(username, password) + } req.URL.RawQuery = reqParams.Encode() - req.SetBasicAuth(username, password) resp, err := client.Do(req) if err != nil {