Merge pull request #2405 from iRioxe/fix-cors-check

Hidden actual error message cause of CORS check Error on PUT/<bucket-name>?object-lock=
This commit is contained in:
Ben McClelland
2026-09-20 11:03:51 -07:00
committed by GitHub
2 changed files with 35 additions and 6 deletions
+6 -6
View File
@@ -123,11 +123,11 @@ func (sa *S3ApiRouter) Init() {
metrics.ActionPutBucketOwnershipControls,
services,
middlewares.BucketObjectNameValidator(),
applyBucketCORS,
middlewares.AuthorizePublicBucketAccess(sa.be, metrics.ActionPutBucketOwnershipControls, auth.PutBucketOwnershipControlsAction, auth.PermissionWrite, sa.region, false),
middlewares.VerifyPresignedV4Signature(sa.root, sa.iam, sa.region, false),
middlewares.VerifyV4Signature(sa.root, sa.iam, sa.region, false, true, false),
middlewares.VerifyChecksums(false, true, false),
applyBucketCORS,
middlewares.ParseAcl(sa.be),
))
bucketRouter.Put("",
@@ -137,11 +137,11 @@ func (sa *S3ApiRouter) Init() {
metrics.ActionPutBucketVersioning,
services,
middlewares.BucketObjectNameValidator(),
applyBucketCORS,
middlewares.AuthorizePublicBucketAccess(sa.be, metrics.ActionPutBucketVersioning, auth.PutBucketVersioningAction, auth.PermissionWrite, sa.region, false),
middlewares.VerifyPresignedV4Signature(sa.root, sa.iam, sa.region, false),
middlewares.VerifyV4Signature(sa.root, sa.iam, sa.region, false, true, false),
middlewares.VerifyChecksums(false, true, false),
applyBucketCORS,
middlewares.ParseAcl(sa.be),
))
bucketRouter.Put("",
@@ -151,11 +151,11 @@ func (sa *S3ApiRouter) Init() {
metrics.ActionPutObjectLockConfiguration,
services,
middlewares.BucketObjectNameValidator(),
applyBucketCORS,
middlewares.AuthorizePublicBucketAccess(sa.be, metrics.ActionPutObjectLockConfiguration, auth.PutBucketObjectLockConfigurationAction, auth.PermissionWrite, sa.region, false),
middlewares.VerifyPresignedV4Signature(sa.root, sa.iam, sa.region, false),
middlewares.VerifyV4Signature(sa.root, sa.iam, sa.region, false, true, false),
middlewares.VerifyChecksums(false, true, true),
applyBucketCORS,
middlewares.ParseAcl(sa.be),
))
bucketRouter.Put("",
@@ -165,11 +165,11 @@ func (sa *S3ApiRouter) Init() {
metrics.ActionPutBucketCors,
services,
middlewares.BucketObjectNameValidator(),
applyBucketCORS,
middlewares.AuthorizePublicBucketAccess(sa.be, metrics.ActionPutBucketCors, auth.PutBucketCorsAction, auth.PermissionWrite, sa.region, false),
middlewares.VerifyPresignedV4Signature(sa.root, sa.iam, sa.region, false),
middlewares.VerifyV4Signature(sa.root, sa.iam, sa.region, false, true, false),
middlewares.VerifyChecksums(false, true, true),
applyBucketCORS,
middlewares.ParseAcl(sa.be),
))
bucketRouter.Put("",
@@ -179,11 +179,11 @@ func (sa *S3ApiRouter) Init() {
metrics.ActionPutBucketPolicy,
services,
middlewares.BucketObjectNameValidator(),
applyBucketCORS,
middlewares.AuthorizePublicBucketAccess(sa.be, metrics.ActionPutBucketPolicy, auth.PutBucketPolicyAction, auth.PermissionWrite, sa.region, false),
middlewares.VerifyPresignedV4Signature(sa.root, sa.iam, sa.region, false),
middlewares.VerifyV4Signature(sa.root, sa.iam, sa.region, false, true, false),
middlewares.VerifyChecksums(false, false, false),
applyBucketCORS,
middlewares.ParseAcl(sa.be),
))
bucketRouter.Put("",
@@ -193,11 +193,11 @@ func (sa *S3ApiRouter) Init() {
metrics.ActionPutBucketAcl,
services,
middlewares.BucketObjectNameValidator(),
applyBucketCORS,
middlewares.AuthorizePublicBucketAccess(sa.be, metrics.ActionPutBucketAcl, auth.PutBucketAclAction, auth.PermissionWriteAcp, sa.region, false),
middlewares.VerifyPresignedV4Signature(sa.root, sa.iam, sa.region, false),
middlewares.VerifyV4Signature(sa.root, sa.iam, sa.region, false, true, false),
middlewares.VerifyChecksums(false, false, false),
applyBucketCORS,
middlewares.ParseAcl(sa.be),
))
bucketRouter.Put("",
+29
View File
@@ -149,6 +149,35 @@ func TestS3ApiRouter_PutBucketTagging_ErrorStillIncludesFallbackCORS(t *testing.
}
}
func TestS3ApiRouter_PutObjectLockConfiguration_ErrorStillIncludesFallbackCORS(t *testing.T) {
origin := "http://127.0.0.1:9090"
app := fiber.New()
(&S3ApiRouter{
app: app,
be: backendWithCorsOnly{},
iam: &auth.IAMServiceInternal{},
region: "us-east-1",
corsAllowOrigin: origin,
}).Init()
req, err := http.NewRequest(http.MethodPut, "/testing?object-lock=", nil)
if err != nil {
t.Fatalf("new request: %v", err)
}
req.Host = "localhost"
req.Header.Set("Origin", origin)
resp, err := app.Test(req)
if err != nil {
t.Fatalf("app.Test: %v", err)
}
if got := resp.Header.Get("Access-Control-Allow-Origin"); got != origin {
t.Fatalf("expected Access-Control-Allow-Origin %q, got %q", origin, got)
}
}
func TestS3ApiRouter_PutObjectTagging_ErrorStillIncludesFallbackCORS(t *testing.T) {
origin := "http://127.0.0.1:9090"