diff options
| author | chrislu <chris.lu@gmail.com> | 2025-11-21 14:48:41 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2025-11-21 14:48:41 -0800 |
| commit | 99a9a677417f1a41a055d82d3c499afa48b01c62 (patch) | |
| tree | 771568b8f01a21ec9bc3cea6a273fc4e3a0141f0 /weed/s3api/s3api_object_handlers_copy_unified.go | |
| parent | f125a013a8eefd15cc26b01a1a88a45381a772f9 (diff) | |
| download | seaweedfs-99a9a677417f1a41a055d82d3c499afa48b01c62.tar.xz seaweedfs-99a9a677417f1a41a055d82d3c499afa48b01c62.zip | |
check errors
Diffstat (limited to 'weed/s3api/s3api_object_handlers_copy_unified.go')
| -rw-r--r-- | weed/s3api/s3api_object_handlers_copy_unified.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/weed/s3api/s3api_object_handlers_copy_unified.go b/weed/s3api/s3api_object_handlers_copy_unified.go index d11594420..255c3eb2d 100644 --- a/weed/s3api/s3api_object_handlers_copy_unified.go +++ b/weed/s3api/s3api_object_handlers_copy_unified.go @@ -2,12 +2,14 @@ package s3api import ( "context" + "errors" "fmt" "net/http" "github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/s3api/s3err" + weed_server "github.com/seaweedfs/seaweedfs/weed/server" ) // executeUnifiedCopyStrategy executes the appropriate copy strategy based on encryption state @@ -76,6 +78,14 @@ func (s3a *S3ApiServer) mapCopyErrorToS3Error(err error) s3err.ErrorCode { return s3err.ErrNone } + // Check for read-only errors (quota enforcement) + // Uses errors.Is() to properly detect wrapped errors + if errors.Is(err, weed_server.ErrReadOnly) { + // Bucket is read-only due to quota enforcement or other configuration + // Return 403 Forbidden per S3 semantics (similar to MinIO's quota enforcement) + return s3err.ErrAccessDenied + } + // Check for KMS errors first if kmsErr := MapKMSErrorToS3Error(err); kmsErr != s3err.ErrInvalidRequest { return kmsErr |
