aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api/s3api_object_handlers_copy_unified.go
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2025-11-21 14:48:41 -0800
committerchrislu <chris.lu@gmail.com>2025-11-21 14:48:41 -0800
commit99a9a677417f1a41a055d82d3c499afa48b01c62 (patch)
tree771568b8f01a21ec9bc3cea6a273fc4e3a0141f0 /weed/s3api/s3api_object_handlers_copy_unified.go
parentf125a013a8eefd15cc26b01a1a88a45381a772f9 (diff)
downloadseaweedfs-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.go10
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