On 2010-05-10 15:44, Pavel Zuna wrote:
EmptyModlist exception was generated by pwpolicy2-mod when modifying
policy priority only. It was because the priority attribute is stored
outside of the policy entry (in a CoS entry) and there was nothing left
to be changed in the policy entry.

This patch uses the new exception callbacks in baseldap.py classes
(introduced in my recent patch no. 0004) to catch the EmptyModlist
exception and checks if there was really nothing to be modified before
reraising the exception.

Pavel

Improved version attached:
- there a bug that Rob pointed out in another thread - exceptions other than EmptyModlist were suppressed unintentionally - the GLOBAL password policy was always displayed in searches using pwpolicy2-find, now it's only displayed if searching without criteria

Pavel
From 57b217e508846a633a66dcfab60c7d322c2722fc Mon Sep 17 00:00:00 2001
From: Pavel Zuna <pz...@redhat.com>
Date: Mon, 10 May 2010 14:48:48 +0200
Subject: [PATCH 2/2] Correctly handle EmptyModlist exception in pwpolicy2-mod.

EmptyModlist exception was generated by pwpolicy2-mod when modifying
policy priority only. It was because the priority attribute is stored
outside of the policy entry (in a CoS entry) and there was nothing
left to be changed in the policy entry.

This patch uses the new exception callbacks in baseldap.py classes
to catch the EmptyModlist exception and checks if there was really
nothing to be modified before reraising the exception.
---
 ipalib/plugins/pwpolicy2.py |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/ipalib/plugins/pwpolicy2.py b/ipalib/plugins/pwpolicy2.py
index 797c081..d672292 100644
--- a/ipalib/plugins/pwpolicy2.py
+++ b/ipalib/plugins/pwpolicy2.py
@@ -276,12 +276,19 @@ class pwpolicy2_mod(LDAPUpdate):
     def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
         if not options.get('raw', False):
             if options.get('cospriority') is not None:
-                entry_attrs['cospriority'] = [unicode(options['copriority'])]
+                entry_attrs['cospriority'] = [unicode(options['cospriority'])]
             if keys[-1] is None:
                 entry_attrs['cn'] = GLOBAL_POLICY_NAME
         self.obj.convert_time_for_output(entry_attrs, **options)
         return dn
 
+    def exc_callback(self, keys, options, exc, call_func, *call_args, 
**call_kwargs):
+        if isinstance(exc, errors.EmptyModlist):
+            entry_attrs = call_args[1]
+            if not entry_attrs and 'cospriority' in options:
+                return
+        raise exc
+
 api.register(pwpolicy2_mod)
 
 
@@ -340,12 +347,13 @@ class pwpolicy2_find(LDAPSearch):
                 except errors.NotFound:
                     pass
                 self.obj.convert_time_for_output(e[1], **options)
-        global_entry = self.api.Command.pwpolicy2_show(
-            all=options.get('all', False), raw=options.get('raw', False)
-        )['result']
-        dn = global_entry['dn']
-        del global_entry['dn']
-        entries.insert(0, (dn, global_entry))
+        if not args[-1]:
+            global_entry = self.api.Command.pwpolicy2_show(
+                all=options.get('all', False), raw=options.get('raw', False)
+            )['result']
+            dn = global_entry['dn']
+            del global_entry['dn']
+            entries.insert(0, (dn, global_entry))
 
 api.register(pwpolicy2_find)
 
-- 
1.6.6.1

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

Reply via email to