summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-03-08 20:48:15 +0000
committerGerrit Code Review <review@openstack.org>2021-03-08 20:48:15 +0000
commit881d163ca6c5ea8d0952cf3d3bed03c6f183bd8a (patch)
treeb0f004abd09888b1f21254b5501fcbecd394d258
parentb8aefd750e18414eba8a4e956f56823d34851f73 (diff)
parent94b90aa49c3810a4f23ef5df6be94d06be340d41 (diff)
downloadswift-881d163ca6c5ea8d0952cf3d3bed03c6f183bd8a.tar.gz
Merge "s3api: Allow lower-cased regions when making buckets"
-rw-r--r--swift/common/middleware/s3api/controllers/bucket.py3
-rw-r--r--test/unit/common/middleware/s3api/test_bucket.py23
2 files changed, 25 insertions, 1 deletions
diff --git a/swift/common/middleware/s3api/controllers/bucket.py b/swift/common/middleware/s3api/controllers/bucket.py
index 55603cb59..c94c521ba 100644
--- a/swift/common/middleware/s3api/controllers/bucket.py
+++ b/swift/common/middleware/s3api/controllers/bucket.py
@@ -344,7 +344,8 @@ class BucketController(Controller):
self.logger.error(e)
raise
- if location != self.conf.location:
+ if location not in (self.conf.location,
+ self.conf.location.lower()):
# s3api cannot support multiple regions currently.
raise InvalidLocationConstraint()
diff --git a/test/unit/common/middleware/s3api/test_bucket.py b/test/unit/common/middleware/s3api/test_bucket.py
index 3d44a7a90..79f5cf79b 100644
--- a/test/unit/common/middleware/s3api/test_bucket.py
+++ b/test/unit/common/middleware/s3api/test_bucket.py
@@ -1220,6 +1220,29 @@ class TestS3ApiBucket(S3ApiTestCase):
# Even crazier: it doesn't seem to matter
self._test_bucket_PUT_with_location('foo')
+ def test_bucket_PUT_with_mixed_case_location(self):
+ self.s3api.conf.location = 'RegionOne'
+ elem = Element('CreateBucketConfiguration')
+ # We've observed some clients (like aws-sdk-net) shift regions
+ # to lower case
+ SubElement(elem, 'LocationConstraint').text = 'regionone'
+ headers = {
+ 'Authorization': 'AWS4-HMAC-SHA256 ' + ', '.join([
+ 'Credential=test:tester/%s/regionone/s3/aws4_request' %
+ self.get_v4_amz_date_header().split('T', 1)[0],
+ 'SignedHeaders=host',
+ 'Signature=X',
+ ]),
+ 'Date': self.get_date_header(),
+ 'x-amz-content-sha256': 'UNSIGNED-PAYLOAD',
+ }
+ req = Request.blank('/bucket',
+ environ={'REQUEST_METHOD': 'PUT'},
+ headers=headers,
+ body=tostring(elem))
+ status, headers, body = self.call_s3api(req)
+ self.assertEqual(status.split()[0], '200', body)
+
def test_bucket_PUT_with_canned_acl(self):
req = Request.blank('/bucket',
environ={'REQUEST_METHOD': 'PUT'},