Compare commits

...
Author SHA1 Message Date
chrislu b579532c31 ErrBucketAlreadyOwnedByYou ErrNoSuchBucket 2025-09-09 09:03:30 -07:00
chrislu 311dfa9a23 do not retry if error is NotFound 2025-09-09 08:22:12 -07:00
+30 -1
View File
@@ -131,7 +131,26 @@ func (s3a *S3ApiServer) PutBucketHandler(w http.ResponseWriter, r *http.Request)
return
}
if exist, err := s3a.exists(s3a.option.BucketsPath, bucket, true); err == nil && exist {
errCode = s3err.ErrBucketAlreadyExists
// Check if the bucket is owned by the same user
identityId := r.Header.Get(s3_constants.AmzIdentityId)
if existingEntry, err := s3a.getEntry(s3a.option.BucketsPath, bucket); err == nil && existingEntry != nil {
if owner, ok := existingEntry.Extended[s3_constants.AmzIdentityId]; ok {
if string(owner) == identityId {
errCode = s3err.ErrBucketAlreadyOwnedByYou
} else {
errCode = s3err.ErrBucketAlreadyExists
}
} else {
// No owner recorded, treat as owned by current user if no identity
if identityId == "" {
errCode = s3err.ErrBucketAlreadyOwnedByYou
} else {
errCode = s3err.ErrBucketAlreadyExists
}
}
} else {
errCode = s3err.ErrBucketAlreadyExists
}
}
if errCode != s3err.ErrNone {
s3err.WriteErrorResponse(w, r, errCode)
@@ -192,6 +211,16 @@ func (s3a *S3ApiServer) DeleteBucketHandler(w http.ResponseWriter, r *http.Reque
bucket, _ := s3_constants.GetBucketAndObject(r)
glog.V(3).Infof("DeleteBucketHandler %s", bucket)
// Check if bucket exists - return proper AWS error if not found
if entry, err := s3a.getEntry(s3a.option.BucketsPath, bucket); err != nil || entry == nil {
if errors.Is(err, filer_pb.ErrNotFound) || entry == nil {
s3err.WriteErrorResponse(w, r, s3err.ErrNoSuchBucket)
return
}
s3err.WriteErrorResponse(w, r, s3err.ErrInternalError)
return
}
if err := s3a.checkBucket(r, bucket); err != s3err.ErrNone {
s3err.WriteErrorResponse(w, r, err)
return