@@ -230,13 +230,33 @@ function standardMetadataValidateBucketAndObj(params, actionImplicitDenies, log,
230230 return next ( null , bucket , objMD ) ;
231231 } ,
232232 ( bucket , objMD , next ) => {
233+ const objMetadata = objMD ;
233234 const canonicalID = authInfo . getCanonicalID ( ) ;
234- if ( ! isObjAuthorized ( bucket , objMD , requestType , canonicalID , authInfo , log , request ,
235+ if ( ! isObjAuthorized ( bucket , objMetadata , requestType , canonicalID , authInfo , log , request ,
235236 actionImplicitDenies ) ) {
236237 log . debug ( 'access denied for user on object' , { requestType } ) ;
237238 return next ( errors . AccessDenied , bucket ) ;
238239 }
239- return next ( null , bucket , objMD ) ;
240+
241+ if ( ! objMetadata ) {
242+ return next ( null , bucket , objMetadata ) ;
243+ }
244+
245+ let returnTagCount = false ;
246+ if ( params . returnTagCount ) {
247+ // If returnTagCount is true we know that Vault authorized the request so it is not an implicitDeny.
248+ const implicitDeny = false ;
249+ if ( requestType . some ( r => r === 'objectGet' ) ) {
250+ returnTagCount = isObjAuthorized ( bucket , objMetadata , [ 'objectGetTagging' ] , canonicalID , authInfo ,
251+ log , request , implicitDeny ) ;
252+ } else if ( requestType . some ( r => r === 'objectGetVersion' ) ) {
253+ returnTagCount = isObjAuthorized ( bucket , objMetadata , [ 'objectGetTaggingVersion' ] ,
254+ canonicalID , authInfo , log , request , implicitDeny ) ;
255+ }
256+
257+ objMetadata . returnTagCount = returnTagCount ;
258+ }
259+ return next ( null , bucket , objMetadata ) ;
240260 } ,
241261 ] , ( err , bucket , objMD ) => {
242262 if ( err ) {
0 commit comments