Search allowed attributes in superior objectclasses

get_allowed_attributes function was improved to look for allowed
attributes also in the superior objectclasses of specified objectclass.

This fixes the regression caused by patch for ticket #2293. Test-case
for unit-test was also created.

https://fedorahosted.org/freeipa/ticket/2293
This commit is contained in:
Ondrej Hamada
2012-03-21 13:30:42 +01:00
committed by Martin Kosek
parent d14438405a
commit a58cbb985e
2 changed files with 38 additions and 0 deletions

View File

@@ -401,6 +401,9 @@ class ldap2(CrudBackend, Encoder):
obj = self.schema.get_obj(_ldap.schema.ObjectClass, oc)
if obj is not None:
allowed_attributes += obj.must + obj.may
# look for allowed attributes in the superior objectclasses
if obj.sup:
allowed_attributes += self.get_allowed_attributes(obj.sup,raise_on_unknown)
elif raise_on_unknown:
raise errors.NotFound(reason=_('objectclass %s not found') % oc)
return [unicode(a).lower() for a in list(set(allowed_attributes))]

View File

@@ -656,6 +656,41 @@ class test_permission(Declarative):
),
dict(
desc='Create permission %r with attributes from superior objectclass' % permission1,
command=(
'permission_add', [permission1], dict(
type=u'hostgroup',
permissions=u'add,delete,write',
attrs=u'businessCategory,owner,description',
)
),
expected=dict(
value=permission1,
summary=u'Added permission "%s"' % permission1,
result=dict(
dn=lambda x: DN(x) == permission1_dn,
cn=[permission1],
objectclass=objectclasses.permission,
type=u'hostgroup',
permissions=[u'add',u'delete',u'write'],
attrs=[u'businesscategory',u'owner',u'description'],
),
),
),
dict(
desc='Delete %r' % permission1,
command=('permission_del', [permission1], {}),
expected=dict(
result=dict(failed=u''),
value=permission1,
summary=u'Deleted permission "%s"' % permission1,
),
),
dict(
desc='Create targetgroup permission %r' % permission1,
command=(