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

Reply via email to