Skip to content

Commit f61de08

Browse files
沈陵sctb512
authored andcommitted
fix bug that using invalid token to retry fetching layer
Signed-off-by: frankyang <[email protected]>
1 parent 088acb0 commit f61de08

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

remotes/docker/authorizer.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,11 @@ func (a *dockerAuthorizer) AddResponses(ctx context.Context, responses []*http.R
148148
defer a.mu.Unlock()
149149
for _, c := range auth.ParseAuthHeader(last.Header) {
150150
if c.Scheme == auth.BearerAuth {
151-
if err := invalidAuthorization(c, responses); err != nil {
151+
if retry, err := invalidAuthorization(ctx, c, responses); err != nil {
152152
delete(a.handlers, host)
153153
return err
154+
} else if retry {
155+
delete(a.handlers, host)
154156
}
155157

156158
// reuse existing handler
@@ -328,18 +330,24 @@ func (ah *authHandler) doBearerAuth(ctx context.Context) (token, refreshToken st
328330
return resp.Token, resp.RefreshToken, nil
329331
}
330332

331-
func invalidAuthorization(c auth.Challenge, responses []*http.Response) error {
333+
func invalidAuthorization(ctx context.Context, c auth.Challenge, responses []*http.Response) (retry bool, _ error) {
332334
errStr := c.Parameters["error"]
333335
if errStr == "" {
334-
return nil
336+
return retry, nil
335337
}
336338

337339
n := len(responses)
338340
if n == 1 || (n > 1 && !sameRequest(responses[n-2].Request, responses[n-1].Request)) {
339-
return nil
341+
limitedErr := errStr
342+
errLenghLimit := 64
343+
if len(limitedErr) > errLenghLimit {
344+
limitedErr = limitedErr[:errLenghLimit] + "..."
345+
}
346+
log.G(ctx).WithField("error", limitedErr).Debug("authorization error using bearer token, retrying")
347+
return true, nil
340348
}
341349

342-
return fmt.Errorf("server message: %s: %w", errStr, ErrInvalidAuthorization)
350+
return retry, fmt.Errorf("server message: %s: %w", errStr, ErrInvalidAuthorization)
343351
}
344352

345353
func sameRequest(r1, r2 *http.Request) bool {

0 commit comments

Comments
 (0)