Fix 500 error when no DisplayName in request body.
The original data of body from client to set acl like below: <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>test:tester</ID> <DisplayName>test:tester</DisplayName> </Owner> <AccessControlList> ... </AccessControlList> </AccessControlPolicy> If the attribute "<DisplayName>" isn't exist, proxy will return 500 Internal Server Error. Change-Id: Ia02af110109d5ecbcda05f707707b30e604af8f0 Closes-Bug: #1400367
This commit is contained in:
@@ -412,7 +412,11 @@ class ACL(object):
|
|||||||
Convert an ElementTree to an ACL instance
|
Convert an ElementTree to an ACL instance
|
||||||
"""
|
"""
|
||||||
id = elem.find('./Owner/ID').text
|
id = elem.find('./Owner/ID').text
|
||||||
|
try:
|
||||||
name = elem.find('./Owner/DisplayName').text
|
name = elem.find('./Owner/DisplayName').text
|
||||||
|
except AttributeError:
|
||||||
|
name = id
|
||||||
|
|
||||||
grants = [Grant.from_elem(e)
|
grants = [Grant.from_elem(e)
|
||||||
for e in elem.findall('./AccessControlList/Grant')]
|
for e in elem.findall('./AccessControlList/Grant')]
|
||||||
return cls(Owner(id, name), grants)
|
return cls(Owner(id, name), grants)
|
||||||
|
|||||||
@@ -182,6 +182,22 @@ class TestSwift3Subresource(unittest.TestCase):
|
|||||||
self.assertFalse(self.check_permission(acl, 'test:tester2',
|
self.assertFalse(self.check_permission(acl, 'test:tester2',
|
||||||
'WRITE_ACP'))
|
'WRITE_ACP'))
|
||||||
|
|
||||||
|
def test_acl_from_elem_by_id_only(self):
|
||||||
|
elem = ACLPrivate(Owner(id='test:tester',
|
||||||
|
name='test:tester')).elem()
|
||||||
|
elem.find('./Owner').remove(elem.find('./Owner/DisplayName'))
|
||||||
|
acl = ACL.from_elem(elem)
|
||||||
|
self.assertTrue(self.check_permission(acl, 'test:tester', 'READ'))
|
||||||
|
self.assertTrue(self.check_permission(acl, 'test:tester', 'WRITE'))
|
||||||
|
self.assertTrue(self.check_permission(acl, 'test:tester', 'READ_ACP'))
|
||||||
|
self.assertTrue(self.check_permission(acl, 'test:tester', 'WRITE_ACP'))
|
||||||
|
self.assertFalse(self.check_permission(acl, 'test:tester2', 'READ'))
|
||||||
|
self.assertFalse(self.check_permission(acl, 'test:tester2', 'WRITE'))
|
||||||
|
self.assertFalse(self.check_permission(acl, 'test:tester2',
|
||||||
|
'READ_ACP'))
|
||||||
|
self.assertFalse(self.check_permission(acl, 'test:tester2',
|
||||||
|
'WRITE_ACP'))
|
||||||
|
|
||||||
def test_decode_acl_container(self):
|
def test_decode_acl_container(self):
|
||||||
access_control_policy = \
|
access_control_policy = \
|
||||||
{'Owner': 'test:tester',
|
{'Owner': 'test:tester',
|
||||||
|
|||||||
Reference in New Issue
Block a user