summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFraser Tweedale <ftweedal@redhat.com>2016-07-28 10:55:45 +1000
committerMartin Basti <mbasti@redhat.com>2016-08-05 11:51:43 +0200
commit9dac0a13f101277948b4ce73b21b1d7ec75848b6 (patch)
treecbf5a0b87129e9bbd1be899515c6559cdaa9ef29
parent503d096ebc6a4813c15701454fa3cf7abc7970d7 (diff)
downloadfreeipa-9dac0a13f101277948b4ce73b21b1d7ec75848b6.tar.gz
freeipa-9dac0a13f101277948b4ce73b21b1d7ec75848b6.tar.xz
freeipa-9dac0a13f101277948b4ce73b21b1d7ec75848b6.zip
caacl: fix regression in rule instantiation
The Principal refactor causes service collections ('memberservice_service' attribute) to return Principal objects where previously it returned strings, but the HBAC machinery used for CA ACL enforcement only handles strings. Update the code to stringify service Principal objects when adding them to HBAC rules. Fixes: https://fedorahosted.org/freeipa/ticket/6146 Reviewed-By: Martin Basti <mbasti@redhat.com>
-rw-r--r--ipaserver/plugins/caacl.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/ipaserver/plugins/caacl.py b/ipaserver/plugins/caacl.py
index d316cc7c4..a7817c4cf 100644
--- a/ipaserver/plugins/caacl.py
+++ b/ipaserver/plugins/caacl.py
@@ -132,16 +132,21 @@ def _acl_make_rule(principal_type, obj):
rule.services.names = obj.get(attr, [])
# add principals and principal's groups
- m = {'user': 'group', 'host': 'hostgroup', 'service': None}
category_attr = '{}category'.format(principal_type)
if category_attr in obj and obj[category_attr][0].lower() == 'all':
rule.users.category = {pyhbac.HBAC_CATEGORY_ALL}
else:
- principal_attr = 'member{}_{}'.format(principal_type, principal_type)
- rule.users.names = obj.get(principal_attr, [])
- if m[principal_type] is not None:
- group_attr = 'member{}_{}'.format(principal_type, m[principal_type])
- rule.users.groups = obj.get(group_attr, [])
+ if principal_type == 'user':
+ rule.users.names = obj.get('memberuser_user', [])
+ rule.users.groups = obj.get('memberuser_group', [])
+ elif principal_type == 'host':
+ rule.users.names = obj.get('memberhost_host', [])
+ rule.users.groups = obj.get('memberhost_hostgroup', [])
+ elif principal_type == 'service':
+ rule.users.names = [
+ unicode(principal)
+ for principal in obj.get('memberservice_service', [])
+ ]
return rule