Don't crash on RoleCheck when roles not present

Gracefully handle the case where RoleCheck gets invoked with
credentials that do not have a roles list defined (ie, when using an
unscoped keystone token).

Change-Id: Ib6c2fb749a0eddfe3e5150e470f05ae9d77d55cc
Closes-Bug: #1529721
This commit is contained in:
Timothy Symanczyk 2015-12-25 10:54:11 -08:00
parent 3024406ac2
commit 50da9acaea
2 changed files with 8 additions and 1 deletions

View File

@ -218,7 +218,9 @@ class RoleCheck(Check):
# While doing RoleCheck if key not
# present in Target return false
return False
return match.lower() in [x.lower() for x in creds['roles']]
if 'roles' in creds:
return match.lower() in [x.lower() for x in creds['roles']]
return False
@register('http')

View File

@ -92,6 +92,11 @@ class RoleCheckTestCase(base.PolicyBaseTestCase):
target_dict = dict(target=dict(role=dict()))
self.assertFalse(check(target_dict, cred_dict, self.enforcer))
def test_no_roles_case(self):
check = _checks.RoleCheck('role', 'spam')
self.assertFalse(check({}, {}, self.enforcer))
class HttpCheckTestCase(base.PolicyBaseTestCase):