display_name is None for the grantee corresponding to public access;
name is 'http://acs.amazonaws.com/groups/global/AllUsers'.
So if you try and grant full_control to a user on an object which is
public, the check at line 189 fails thus:
self.grantees = [g for g in self.grantees if not (g.name.lower() == name or g.display_name.lower() == name)]
AttributeError: 'NoneType' object has no attribute 'lower'
because g.display_name is None
This patch fixes this by checking for not-None before calling lower()
Signed-off-by: Matthew Vernon <mv3@sanger.ac.uk>
... | ... |
@@ -186,9 +186,9 @@ class ACL(object): |
186 | 186 |
permission = permission.upper() |
187 | 187 |
|
188 | 188 |
if "ALL" == permission: |
189 |
- self.grantees = [g for g in self.grantees if not (g.name.lower() == name or g.display_name.lower() == name)] |
|
189 |
+ self.grantees = [g for g in self.grantees if not (g.name.lower() == name or (g.display_name is not None and g.display_name.lower() == name))] |
|
190 | 190 |
else: |
191 |
- self.grantees = [g for g in self.grantees if not ((g.display_name.lower() == name or g.name.lower() == name) |
|
191 |
+ self.grantees = [g for g in self.grantees if not (((g.display_name is not None and g.display_name.lower() == name) or g.name.lower() == name) |
|
192 | 192 |
and g.permission.upper() == permission)] |
193 | 193 |
|
194 | 194 |
def get_printable_tree(self): |