diff --git a/cmd/gateway-gcs-layer.go b/cmd/gateway-gcs-layer.go index d827ed2ed..c425a1914 100644 --- a/cmd/gateway-gcs-layer.go +++ b/cmd/gateway-gcs-layer.go @@ -218,28 +218,8 @@ func (l *gcsGateway) MakeBucket(bucket string) error { func (l *gcsGateway) MakeBucketWithLocation(bucket, location string) error { bkt := l.client.Bucket(bucket) - // this will map s3 regions to google multi regions - if v, ok := map[string]string{ - "ap-northeast-1": "asia", - "ap-northeast-2": "asia", - "ap-south-1": "asia", - "ap-southeast-1": "asia", - "ap-southeast-2": "asia", - "eu-central-1": "eu", - "eu-west-1": "eu", - "eu-west-2": "eu", - "ca-central-1": "us", - "sa-east-1": "us", - "us-east-1": "us", - "us-east-2": "us", - "us-west-1": "us", - "us-west-2": "us", - }[location]; ok { - location = v - } - if err := bkt.Create(l.ctx, l.projectID, &storage.BucketAttrs{ - Location: location, + Location: serverConfig.Region, }); err != nil { return gcsToObjectError(traceError(err), bucket) } @@ -826,14 +806,15 @@ func (l *gcsGateway) SetBucketPolicies(bucket string, policyInfo policy.BucketAc role := storage.RoleReader - if policies[0].Policy == policy.BucketPolicyReadOnly { + switch policies[0].Policy { + case policy.BucketPolicyReadOnly: role = storage.RoleReader - } else if policies[0].Policy == policy.BucketPolicyWriteOnly { + case policy.BucketPolicyWriteOnly: role = storage.RoleWriter - } else if policies[0].Policy == policy.BucketPolicyReadWrite { + case policy.BucketPolicyReadWrite: // not supported, google only has owner role return gcsToObjectError(traceError(NotSupported{}), bucket) - } else { + default: return gcsToObjectError(traceError(fmt.Errorf("Unknown policy: %s", policies[0].Policy)), bucket) } diff --git a/cmd/gateway-handlers.go b/cmd/gateway-handlers.go index 75891d432..c822cea68 100644 --- a/cmd/gateway-handlers.go +++ b/cmd/gateway-handlers.go @@ -652,6 +652,15 @@ func (api gatewayAPIHandlers) PutBucketHandler(w http.ResponseWriter, r *http.Re return } + // validating region here, because isValidLocationConstraint + // reads body which has been read already. So only validating + // region here. + serverRegion := serverConfig.GetRegion() + if serverRegion != location { + writeErrorResponse(w, ErrInvalidRegion, r.URL) + return + } + bucketLock := globalNSMutex.NewNSLock(bucket, "") bucketLock.Lock() defer bucketLock.Unlock()