Browse Source

s3: CopyObject return http Status 400 Bad Request for non-existing source

fix https://github.com/chrislusf/seaweedfs/issues/2306
pull/2321/head
Chris Lu 3 years ago
parent
commit
491f7636f8
  1. 9
      weed/s3api/s3api_object_copy_handlers.go

9
weed/s3api/s3api_object_copy_handlers.go

@ -33,11 +33,13 @@ func (s3a *S3ApiServer) CopyObjectHandler(w http.ResponseWriter, r *http.Request
entry, err := s3a.getEntry(dir, name) entry, err := s3a.getEntry(dir, name)
if err != nil { if err != nil {
s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r) s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r)
return
} }
entry.Extended = weed_server.SaveAmzMetaData(r, entry.Extended, isReplace(r)) entry.Extended = weed_server.SaveAmzMetaData(r, entry.Extended, isReplace(r))
err = s3a.touch(dir, name, entry) err = s3a.touch(dir, name, entry)
if err != nil { if err != nil {
s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r) s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r)
return
} }
writeSuccessResponseXML(w, CopyObjectResult{ writeSuccessResponseXML(w, CopyObjectResult{
ETag: fmt.Sprintf("%x", entry.Attributes.Md5), ETag: fmt.Sprintf("%x", entry.Attributes.Md5),
@ -51,6 +53,13 @@ func (s3a *S3ApiServer) CopyObjectHandler(w http.ResponseWriter, r *http.Request
s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r) s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r)
return return
} }
srcPath := util.FullPath(fmt.Sprintf("%s/%s%s", s3a.option.BucketsPath, srcObject, srcObject))
dir, name := srcPath.DirAndName()
_, err = s3a.getEntry(dir, name)
if err != nil {
s3err.WriteErrorResponse(w, s3err.ErrInvalidCopySource, r)
return
}
if srcBucket == dstBucket && srcObject == dstObject { if srcBucket == dstBucket && srcObject == dstObject {
s3err.WriteErrorResponse(w, s3err.ErrInvalidCopyDest, r) s3err.WriteErrorResponse(w, s3err.ErrInvalidCopyDest, r)

Loading…
Cancel
Save