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
 | 
			
		||||
        """
 | 
			
		||||
        id = elem.find('./Owner/ID').text
 | 
			
		||||
        name = elem.find('./Owner/DisplayName').text
 | 
			
		||||
        try:
 | 
			
		||||
            name = elem.find('./Owner/DisplayName').text
 | 
			
		||||
        except AttributeError:
 | 
			
		||||
            name = id
 | 
			
		||||
 | 
			
		||||
        grants = [Grant.from_elem(e)
 | 
			
		||||
                  for e in elem.findall('./AccessControlList/Grant')]
 | 
			
		||||
        return cls(Owner(id, name), grants)
 | 
			
		||||
 
 | 
			
		||||
@@ -182,6 +182,22 @@ class TestSwift3Subresource(unittest.TestCase):
 | 
			
		||||
        self.assertFalse(self.check_permission(acl, 'test:tester2',
 | 
			
		||||
                                               '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):
 | 
			
		||||
        access_control_policy = \
 | 
			
		||||
            {'Owner': 'test:tester',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user