@@ -111,6 +111,7 @@ type dockerResolver struct {
111111 auth Authorizer
112112 host func (string ) (string , error )
113113 headers http.Header
114+ uagent string
114115 plainHTTP bool
115116 client * http.Client
116117 tracker StatusTracker
@@ -135,16 +136,22 @@ func NewResolver(options ResolverOptions) remotes.Resolver {
135136 ocispec .MediaTypeImageManifest ,
136137 ocispec .MediaTypeImageIndex , "*" }, ", " ))
137138 }
138- if _ , ok := options .Headers ["User-Agent" ]; ! ok {
139- options .Headers .Set ("User-Agent" , "containerd/" + version .Version )
139+ ua := options .Headers .Get ("User-Agent" )
140+ if ua != "" {
141+ options .Headers .Del ("User-Agent" )
142+ } else {
143+ ua = "containerd/" + version .Version
140144 }
145+
141146 if options .Authorizer == nil {
142147 options .Authorizer = NewAuthorizer (options .Client , options .Credentials )
148+ options .Authorizer .(* dockerAuthorizer ).ua = ua
143149 }
144150 return & dockerResolver {
145151 auth : options .Authorizer ,
146152 host : options .Host ,
147153 headers : options .Headers ,
154+ uagent : ua ,
148155 plainHTTP : options .PlainHTTP ,
149156 client : options .Client ,
150157 tracker : options .Tracker ,
@@ -351,6 +358,7 @@ func (r *dockerResolver) Pusher(ctx context.Context, ref string) (remotes.Pusher
351358type dockerBase struct {
352359 refspec reference.Spec
353360 base url.URL
361+ uagent string
354362
355363 client * http.Client
356364 auth Authorizer
@@ -382,6 +390,7 @@ func (r *dockerResolver) base(refspec reference.Spec) (*dockerBase, error) {
382390 return & dockerBase {
383391 refspec : refspec ,
384392 base : base ,
393+ uagent : r .uagent ,
385394 client : r .client ,
386395 auth : r .auth ,
387396 }, nil
@@ -407,6 +416,7 @@ func (r *dockerBase) authorize(ctx context.Context, req *http.Request) error {
407416func (r * dockerBase ) doRequest (ctx context.Context , req * http.Request ) (* http.Response , error ) {
408417 ctx = log .WithLogger (ctx , log .G (ctx ).WithField ("url" , req .URL .String ()))
409418 log .G (ctx ).WithField ("request.headers" , req .Header ).WithField ("request.method" , req .Method ).Debug ("do request" )
419+ req .Header .Set ("User-Agent" , r .uagent )
410420 if err := r .authorize (ctx , req ); err != nil {
411421 return nil , errors .Wrap (err , "failed to authorize" )
412422 }
0 commit comments