On 10/01/2010 02:47 PM, Pavel Zuna wrote:
Ticket #251

Pavel



New version of patch attached. This time it should work. :) I renamed the flag from --privateonly to --private. Normal searches do not return private groups at all, while searches with this flag only return private groups.

Pavel
>From cabfcab3d53b4b7d51d5f3646c9747272e2ca965 Mon Sep 17 00:00:00 2001
From: Pavel Zuna <pz...@redhat.com>
Date: Tue, 21 Sep 2010 13:03:40 -0400
Subject: [PATCH] Add flag to group-find to only search on private groups.

ticket #251
---
 ipalib/plugins/group.py               |   31 +++++++++++++++-
 tests/test_xmlrpc/test_user_plugin.py |   65 +++++++++++++++++++++++++++++++--
 2 files changed, 91 insertions(+), 5 deletions(-)

diff --git a/ipalib/plugins/group.py b/ipalib/plugins/group.py
index 9beef00..ff1fc99 100644
--- a/ipalib/plugins/group.py
+++ b/ipalib/plugins/group.py
@@ -187,7 +187,6 @@ class group_mod(LDAPUpdate):
     """
     Modify a group.
     """
-
     msg_summary = _('Modified group "%(value)s"')
 
     takes_options = LDAPUpdate.takes_options + (
@@ -217,11 +216,39 @@ class group_find(LDAPSearch):
     """
     Search for groups.
     """
-
     msg_summary = ngettext(
         '%(count)d group matched', '%(count)d groups matched', 0
     )
 
+    takes_options = LDAPSearch.takes_options + (
+        Flag('private',
+            cli_name='private',
+            doc=_('search for private groups'),
+        ),
+    )
+
+    def pre_callback(self, ldap, filter, attrs_list, base_dn, *args, **options):
+        # if looking for private groups, we need to create a new search filter,
+        # because private groups have different object classes
+        if options['private']:
+            # filter based on options, oflt
+            search_kw = self.args_options_2_entry(**options)
+            search_kw['objectclass'] = ['posixGroup', 'mepManagedEntry']
+            oflt = ldap.make_filter(search_kw, rules=ldap.MATCH_ALL)
+
+            # filter based on 'criteria' argument
+            search_kw = {}
+            config = ldap.get_ipa_config()[1]
+            attrs = config.get(self.obj.search_attributes_config, [])
+            if len(attrs) == 1 and isinstance(attrs[0], basestring):
+                search_attrs = attrs[0].split(',')
+                for a in search_attrs:
+                    search_kw[a] = args[-1]
+            cflt = ldap.make_filter(search_kw, exact=False)
+
+            filter = ldap.combine_filters((oflt, cflt), rules=ldap.MATCH_ALL)
+        return filter
+
 api.register(group_find)
 
 
diff --git a/tests/test_xmlrpc/test_user_plugin.py b/tests/test_xmlrpc/test_user_plugin.py
index c6770b7..7d77131 100644
--- a/tests/test_xmlrpc/test_user_plugin.py
+++ b/tests/test_xmlrpc/test_user_plugin.py
@@ -30,6 +30,7 @@ from xmlrpc_test import Declarative, fuzzy_digits, fuzzy_uuid
 
 user_memberof = (u'cn=ipausers,cn=groups,cn=accounts,%s' % api.env.basedn,)
 user1=u'tuser1'
+user2=u'tuser2'
 
 invaliduser1=u'+tuser1'
 invaliduser2=u'tuser1234567890123456789012345678901234567890'
@@ -38,7 +39,7 @@ invaliduser2=u'tuser1234567890123456789012345678901234567890'
 class test_user(Declarative):
 
     cleanup_commands = [
-        ('user_del', [user1], {}),
+        ('user_del', [user1, user2], {}),
     ]
 
     tests = [
@@ -67,7 +68,7 @@ class test_user(Declarative):
         dict(
             desc='Create %r' % user1,
             command=(
-                'user_add', [], dict(givenname=u'Test', sn=u'User1')
+                'user_add', [user1], dict(givenname=u'Test', sn=u'User1')
             ),
             expected=dict(
                 value=user1,
@@ -92,7 +93,7 @@ class test_user(Declarative):
         dict(
             desc='Try to create duplicate %r' % user1,
             command=(
-                'user_add', [], dict(givenname=u'Test', sn=u'User1')
+                'user_add', [user1], dict(givenname=u'Test', sn=u'User1')
             ),
             expected=errors.DuplicateEntry(),
         ),
@@ -318,6 +319,64 @@ class test_user(Declarative):
 
 
         dict(
+            desc='Create %r' % user1,
+            command=(
+                'user_add', [user1], dict(givenname=u'Test', sn=u'User1')
+            ),
+            expected=dict(
+                value=user1,
+                summary=u'Added user "tuser1"',
+                result=dict(
+                    gecos=[user1],
+                    givenname=[u'Test'],
+                    homedirectory=[u'/home/tuser1'],
+                    krbprincipalname=[u'tuser1@' + api.env.realm],
+                    loginshell=[u'/bin/sh'],
+                    objectclass=objectclasses.user,
+                    sn=[u'User1'],
+                    uid=[user1],
+                    uidnumber=[fuzzy_digits],
+                    ipauniqueid=[fuzzy_uuid],
+                    dn=u'uid=tuser1,cn=users,cn=accounts,' + api.env.basedn,
+                ),
+            ),
+        ),
+
+        dict(
+            desc='Create %r' % user2,
+            command=(
+                'user_add', [user2], dict(givenname=u'Test', sn=u'User2')
+            ),
+            expected=dict(
+                value=user2,
+                summary=u'Added user "tuser2"',
+                result=dict(
+                    gecos=[user2],
+                    givenname=[u'Test'],
+                    homedirectory=[u'/home/tuser2'],
+                    krbprincipalname=[u'tuser2@' + api.env.realm],
+                    loginshell=[u'/bin/sh'],
+                    objectclass=objectclasses.user,
+                    sn=[u'User2'],
+                    uid=[user1],
+                    uidnumber=[fuzzy_digits],
+                    ipauniqueid=[fuzzy_uuid],
+                    dn=u'uid=tuser2,cn=users,cn=accounts,' + api.env.basedn,
+                ),
+            ),
+        ),
+
+        dict(
+            desc='Delete %r and %r at the same time' % (user1, user2),
+            command=('user_del', [user1, user2], {}),
+            expected=dict(
+                result=True,
+                summary=u'Deleted user "tuser1,tuser2"',
+                value=u','.join((user1, user2)),
+            ),
+        ),
+
+        dict(
             desc='Try to retrieve non-existent %r' % user1,
             command=('user_show', [user1], {}),
             expected=errors.NotFound(reason='no such entry'),
-- 
1.7.1.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to