Browse code

Allow setting full_control on objects with public read access

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>

Matthew Vernon authored on 2018/05/16 21:55:18
Showing 1 changed files
... ...
@@ -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):