Do not crash on empty reverse member options

Calling a LDAP{Add,Remove}ReverseMember with an empty reverse_member
caused an internal error, because empty values are converted to None,
which is then iterated.

Use an empty list instead of None (or other false falues, of which we
only use the empty list).

https://fedorahosted.org/freeipa/ticket/2681
This commit is contained in:
Petr Viktorin 2012-04-27 07:15:56 -04:00 committed by Martin Kosek
parent c45174d680
commit 0206dbe795
3 changed files with 88 additions and 2 deletions

View File

@ -1966,7 +1966,7 @@ class LDAPAddReverseMember(LDAPModReverseMember):
entry_start = self.api.Command[self.show_command](keys[-1])['result'] entry_start = self.api.Command[self.show_command](keys[-1])['result']
completed = 0 completed = 0
failed = {'member': {self.reverse_attr: []}} failed = {'member': {self.reverse_attr: []}}
for attr in options.get(self.reverse_attr, []): for attr in options.get(self.reverse_attr) or []:
try: try:
options = {'%s' % self.member_attr: keys[-1]} options = {'%s' % self.member_attr: keys[-1]}
try: try:
@ -2073,7 +2073,7 @@ class LDAPRemoveReverseMember(LDAPModReverseMember):
entry_start = self.api.Command[self.show_command](keys[-1])['result'] entry_start = self.api.Command[self.show_command](keys[-1])['result']
completed = 0 completed = 0
failed = {'member': {self.reverse_attr: []}} failed = {'member': {self.reverse_attr: []}}
for attr in options.get(self.reverse_attr, []): for attr in options.get(self.reverse_attr) or []:
try: try:
options = {'%s' % self.member_attr: keys[-1]} options = {'%s' % self.member_attr: keys[-1]}
try: try:

View File

@ -347,6 +347,50 @@ class test_privilege(Declarative):
), ),
dict(
desc='Add zero permissions to %r' % privilege1,
command=('privilege_add_permission', [privilege1],
dict(permission=None),
),
expected=dict(
completed=0,
failed=dict(
member=dict(
permission=[],
),
),
result={
'dn': lambda x: DN(x) == privilege1_dn,
'cn': [privilege1],
'description': [u'New desc 1'],
'memberof_permission': [permission2],
}
),
),
dict(
desc='Remove zero permissions from %r' % privilege1,
command=('privilege_remove_permission', [privilege1],
dict(permission=None),
),
expected=dict(
completed=0,
failed=dict(
member=dict(
permission=[],
),
),
result={
'dn': lambda x: DN(x) == privilege1_dn,
'cn': [privilege1],
'description': [u'New desc 1'],
'memberof_permission': [permission2],
}
),
),
dict( dict(
desc='Delete %r' % privilege1, desc='Delete %r' % privilege1,
command=('privilege_del', [privilege1], {}), command=('privilege_del', [privilege1], {}),

View File

@ -201,6 +201,48 @@ class test_role(Declarative):
), ),
dict(
desc='Add zero privileges to role %r' % role1,
command=('role_add_privilege', [role1], dict(privilege=None)
),
expected=dict(
completed=0,
failed=dict(
member=dict(
privilege=[],
),
),
result={
'dn': lambda x: DN(x) == role1_dn,
'cn': [role1],
'description': [u'role desc 1'],
'memberof_privilege': [privilege1],
}
),
),
dict(
desc='Remove zero privileges from role %r' % role1,
command=('role_remove_privilege', [role1], dict(privilege=None)
),
expected=dict(
completed=0,
failed=dict(
member=dict(
privilege=[],
),
),
result={
'dn': lambda x: DN(x) == role1_dn,
'cn': [role1],
'description': [u'role desc 1'],
'memberof_privilege': [privilege1],
}
),
),
dict( dict(
desc='Add member %r to %r' % (group1, role1), desc='Add member %r to %r' % (group1, role1),
command=('role_add_member', [role1], dict(group=group1)), command=('role_add_member', [role1], dict(group=group1)),