diff --git a/cmd/bucket-notification-handlers.go b/cmd/bucket-notification-handlers.go index fb8548327..22cb6f8c7 100644 --- a/cmd/bucket-notification-handlers.go +++ b/cmd/bucket-notification-handlers.go @@ -150,6 +150,12 @@ func (api objectAPIHandlers) PutBucketNotificationHandler(w http.ResponseWriter, return } + // Convert the incoming ARNs properly to the GetRegion(). + for i, queueConfig := range notificationCfg.QueueConfigs { + queueConfig.QueueARN = unmarshalSqsARN(queueConfig.QueueARN).String() + notificationCfg.QueueConfigs[i] = queueConfig + } + // Put bucket notification config. err = PutBucketNotificationConfig(bucket, ¬ificationCfg, objectAPI) if err != nil { diff --git a/cmd/bucket-notification-utils.go b/cmd/bucket-notification-utils.go index 762792031..020807e3a 100644 --- a/cmd/bucket-notification-utils.go +++ b/cmd/bucket-notification-utils.go @@ -116,9 +116,13 @@ func checkARN(arn, arnType string) APIErrorCode { if len(strs) != 6 { return ErrARNNotification } - if serverConfig.GetRegion() != "" { + + // Server region is allowed to be empty by default, + // in such a scenario ARN region is not validating + // allowing all regions. + if sregion := serverConfig.GetRegion(); sregion != "" { region := strs[3] - if region != serverConfig.GetRegion() { + if region != sregion { return ErrRegionNotification } } @@ -273,9 +277,13 @@ func unmarshalSqsARN(queueARN string) (mSqs arnSQS) { if len(strs) != 6 { return } - if serverConfig.GetRegion() != "" { + + // Server region is allowed to be empty by default, + // in such a scenario ARN region is not validating + // allowing all regions. + if sregion := serverConfig.GetRegion(); sregion != "" { region := strs[3] - if region != serverConfig.GetRegion() { + if region != sregion { return } }