diff --git a/swift/common/middleware/s3api/subresource.py b/swift/common/middleware/s3api/subresource.py index c941040d8b..1aa47b4b2d 100644 --- a/swift/common/middleware/s3api/subresource.py +++ b/swift/common/middleware/s3api/subresource.py @@ -182,18 +182,19 @@ class Grantee(object): """ Convert a grantee string in the HTTP header to an Grantee instance. """ - type, value = grantee.split('=', 1) + grantee_type, value = grantee.split('=', 1) + grantee_type = grantee_type.lower() value = value.strip('"\'') - if type == 'id': + if grantee_type == 'id': return User(value) - elif type == 'emailAddress': + elif grantee_type == 'emailaddress': raise S3NotImplemented() - elif type == 'uri': + elif grantee_type == 'uri': # return a subclass instance of Group class subclass = get_group_subclass_from_uri(value) return subclass() else: - raise InvalidArgument(type, value, + raise InvalidArgument(grantee_type, value, 'Argument format not recognized') diff --git a/test/unit/common/middleware/s3api/test_s3_acl.py b/test/unit/common/middleware/s3api/test_s3_acl.py index 554f09ec5a..3c4eeae2fd 100644 --- a/test/unit/common/middleware/s3api/test_s3_acl.py +++ b/test/unit/common/middleware/s3api/test_s3_acl.py @@ -379,6 +379,17 @@ class TestS3ApiS3Acl(S3ApiTestCase): status, headers, body = self.call_s3api(req) self.assertEqual(status.split()[0], '200') + def test_grant_all_users_with_uppercase_type(self): + req = Request.blank('/bucket/object?acl', + environ={'REQUEST_METHOD': 'PUT'}, + headers={'Authorization': 'AWS test:tester:hmac', + 'Date': self.get_date_header(), + 'x-amz-grant-read': + 'URI="http://acs.amazonaws.com/groups/' + 'global/AllUsers"'}) + status, headers, body = self.call_s3api(req) + self.assertEqual(status.split()[0], '200') + def test_grant_invalid_uri(self): req = Request.blank('/bucket/object?acl', environ={'REQUEST_METHOD': 'PUT'},