Ignore empty options when performing an ACI search so that the find command does not crash.
https://fedorahosted.org/freeipa/ticket/2011 https://fedorahosted.org/freeipa/ticket/2012
>From 5cf61984f4209adc4eff49f4da6ec4a0173e00bd Mon Sep 17 00:00:00 2001 From: Martin Kosek <mko...@redhat.com> Date: Fri, 6 Jan 2012 12:44:59 +0100 Subject: [PATCH 1/2] Fix selfservice-find crashes Ignore empty options when performing an ACI search so that the find command does not crash. https://fedorahosted.org/freeipa/ticket/2011 https://fedorahosted.org/freeipa/ticket/2012 --- ipalib/plugins/aci.py | 22 +++++++++++----------- tests/test_xmlrpc/test_selfservice_plugin.py | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/ipalib/plugins/aci.py b/ipalib/plugins/aci.py index 4b85bc93cbf309dd4ddcb0b0dfd5b1d45c807239..54e3f43a61fb2dea38b518c17a3160813cebabfe 100644 --- a/ipalib/plugins/aci.py +++ b/ipalib/plugins/aci.py @@ -687,21 +687,21 @@ class aci_find(crud.Search): else: results = list(acis) - if 'aciname' in kw: + if kw.get('aciname'): for a in acis: prefix, name = _parse_aci_name(a.name) if name != kw['aciname']: results.remove(a) acis = list(results) - if 'aciprefix' in kw: + if kw.get('aciprefix'): for a in acis: prefix, name = _parse_aci_name(a.name) if prefix != kw['aciprefix']: results.remove(a) acis = list(results) - if 'attrs' in kw: + if kw.get('attrs'): for a in acis: if not 'targetattr' in a.target: results.remove(a) @@ -714,7 +714,7 @@ class aci_find(crud.Search): results.remove(a) acis = list(results) - if 'permission' in kw: + if kw.get('permission'): try: self.api.Command['permission_show']( kw['permission'] @@ -727,7 +727,7 @@ class aci_find(crud.Search): results.remove(a) acis = list(results) - if 'permissions' in kw: + if kw.get('permissions'): for a in acis: alist1 = sorted(a.permissions) alist2 = sorted(kw['permissions']) @@ -735,7 +735,7 @@ class aci_find(crud.Search): results.remove(a) acis = list(results) - if 'memberof' in kw: + if kw.get('memberof'): try: dn = _group_from_memberof(kw['memberof']) except errors.NotFound: @@ -750,7 +750,7 @@ class aci_find(crud.Search): else: results.remove(a) - if 'type' in kw: + if kw.get('type'): for a in acis: if 'target' in a.target: target = a.target['target']['expression'] @@ -768,7 +768,7 @@ class aci_find(crud.Search): except ValueError: pass - if 'selfaci' in kw and kw['selfaci'] == True: + if kw.get('selfaci', False) is True: for a in acis: if a.bindrule['expression'] != u'ldap:///self': try: @@ -776,7 +776,7 @@ class aci_find(crud.Search): except ValueError: pass - if 'group' in kw: + if kw.get('group'): for a in acis: groupdn = a.bindrule['expression'] groupdn = groupdn.replace('ldap:///','') @@ -790,7 +790,7 @@ class aci_find(crud.Search): except ValueError: pass - if 'targetgroup' in kw: + if kw.get('targetgroup'): for a in acis: found = False if 'target' in a.target: @@ -807,7 +807,7 @@ class aci_find(crud.Search): except ValueError: pass - if 'filter' in kw: + if kw.get('filter'): if not kw['filter'].startswith('('): kw['filter'] = unicode('('+kw['filter']+')') for a in acis: diff --git a/tests/test_xmlrpc/test_selfservice_plugin.py b/tests/test_xmlrpc/test_selfservice_plugin.py index 6a304a9858abaae9ceaa90d43fc762a420b2d1b2..bdfa8e4e9129df697c3a7a0874a02dc61a277005 100644 --- a/tests/test_xmlrpc/test_selfservice_plugin.py +++ b/tests/test_xmlrpc/test_selfservice_plugin.py @@ -139,6 +139,25 @@ class test_selfservice(Declarative): dict( + desc='Search for %r with empty attrs and permissions' % selfservice1, + command=('selfservice_find', [selfservice1], {'attrs' : None, 'permissions' : None}), + expected=dict( + count=1, + truncated=False, + summary=u'1 selfservice matched', + result=[ + { + 'attrs': [u'street', u'c', u'l', u'st', u'postalcode'], + 'permissions': [u'write'], + 'selfaci': True, + 'aciname': selfservice1, + }, + ], + ), + ), + + + dict( desc='Update %r' % selfservice1, command=( 'selfservice_mod', [selfservice1], dict(permissions=u'read') -- 1.7.7.5
_______________________________________________ Freeipa-devel mailing list Freeipa-devel@redhat.com https://www.redhat.com/mailman/listinfo/freeipa-devel