Browse Source

create bucket with ownership

Signed-off-by: changlin.shi <changlin.shi@ly.com>
pull/4090/head
changlin.shi 2 years ago
parent
commit
c2c4158238
  1. 7
      weed/s3api/s3api_acp.go
  2. 7
      weed/s3api/s3api_bucket_handlers.go

7
weed/s3api/s3api_acp.go

@ -30,11 +30,10 @@ func (s3a *S3ApiServer) checkAccessByOwnership(r *http.Request, bucket string) s
return s3err.ErrAccessDenied
}
func (s3a *S3ApiServer) ExtractBucketAcp(r *http.Request) (owner string, grants []*s3.Grant, errCode s3err.ErrorCode) {
func (s3a *S3ApiServer) ExtractBucketAcp(r *http.Request, objectOwnership string) (owner string, grants []*s3.Grant, errCode s3err.ErrorCode) {
accountId := s3acl.GetAccountId(r)
ownership := s3_constants.DefaultOwnershipForCreate
if ownership == s3_constants.OwnershipBucketOwnerEnforced {
if objectOwnership == s3_constants.OwnershipBucketOwnerEnforced {
return accountId, []*s3.Grant{
{
Permission: &s3_constants.PermissionFullControl,
@ -45,6 +44,6 @@ func (s3a *S3ApiServer) ExtractBucketAcp(r *http.Request) (owner string, grants
},
}, s3err.ErrNone
} else {
return s3acl.ParseAndValidateAclHeadersOrElseDefault(r, s3a.accountManager, ownership, accountId, accountId, false)
return s3acl.ParseAndValidateAclHeadersOrElseDefault(r, s3a.accountManager, objectOwnership, accountId, accountId, false)
}
}

7
weed/s3api/s3api_bucket_handlers.go

@ -122,7 +122,11 @@ func (s3a *S3ApiServer) PutBucketHandler(w http.ResponseWriter, r *http.Request)
}
}
acpOwner, acpGrants, errCode := s3a.ExtractBucketAcp(r)
objectOwnership := r.Header.Get("ObjectOwnership")
if objectOwnership == "" {
objectOwnership = s3_constants.DefaultOwnershipForCreate
}
acpOwner, acpGrants, errCode := s3a.ExtractBucketAcp(r, objectOwnership)
if errCode != s3err.ErrNone {
s3err.WriteErrorResponse(w, r, errCode)
return
@ -134,6 +138,7 @@ func (s3a *S3ApiServer) PutBucketHandler(w http.ResponseWriter, r *http.Request)
entry.Extended = make(map[string][]byte)
}
entry.Extended[s3_constants.AmzIdentityId] = []byte(identityId)
entry.Extended[s3_constants.ExtOwnershipKey] = []byte(objectOwnership)
}
s3acl.AssembleEntryWithAcp(entry, acpOwner, acpGrants)
}

Loading…
Cancel
Save