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 <josh.hawn@docker.com> (github: jlhawn)
This commit is contained in:
Josh Hawn 2015-01-30 16:11:47 -08:00
parent 0818476cb1
commit 63af81b883
2 changed files with 6 additions and 2 deletions

View file

@ -128,6 +128,8 @@ func (r *Session) HeadV2ImageBlob(ep *Endpoint, imageName, sumType, sum string,
case res.StatusCode >= 200 && res.StatusCode < 400: case res.StatusCode >= 200 && res.StatusCode < 400:
// return something indicating no push needed // return something indicating no push needed
return true, nil return true, nil
case res.StatusCode == 401:
return false, errLoginRequired
case res.StatusCode == 404: case res.StatusCode == 404:
// return something indicating blob push needed // return something indicating blob push needed
return false, nil return false, nil

View file

@ -51,10 +51,12 @@ func getToken(username, password string, params map[string]string, registryEndpo
reqParams.Add("scope", scopeField) reqParams.Add("scope", scopeField)
} }
reqParams.Add("account", username) if username != "" {
reqParams.Add("account", username)
req.SetBasicAuth(username, password)
}
req.URL.RawQuery = reqParams.Encode() req.URL.RawQuery = reqParams.Encode()
req.SetBasicAuth(username, password)
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {