See the ticket & commit message.

https://fedorahosted.org/freeipa/ticket/4309

--
PetrĀ³
From 3e9f26a423af1db2fe15b326059f901f7bcca70e Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Tue, 27 May 2014 12:21:33 +0200
Subject: [PATCH] pwpolicy-mod: Fix crash when priority is changed

The exc_callback was expecting the old update_entry signature,
(dn, attrs). This was changed to just (entry) for ticket #2660,
see http://www.freeipa.org/page/HowTo/Migrate_your_code_to_the_new_LDAP_API.

Update the exc_callback to expect the entry as first argument,
and add some tests.

https://fedorahosted.org/freeipa/ticket/4309
---
 ipalib/plugins/pwpolicy.py                   |  2 +-
 ipatests/test_xmlrpc/objectclasses.py        |  6 +++
 ipatests/test_xmlrpc/test_pwpolicy_plugin.py | 72 +++++++++++++++++++++++++++-
 3 files changed, 77 insertions(+), 3 deletions(-)

diff --git a/ipalib/plugins/pwpolicy.py b/ipalib/plugins/pwpolicy.py
index 9c8b711b89db578d1dd771b5fe3ae89d1d88ccf3..ee7f388ba98964a79b0036d9e2b4b642def5edee 100644
--- a/ipalib/plugins/pwpolicy.py
+++ b/ipalib/plugins/pwpolicy.py
@@ -456,7 +456,7 @@ def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
     def exc_callback(self, keys, options, exc, call_func, *call_args, **call_kwargs):
         if call_func.func_name == 'update_entry':
             if isinstance(exc, errors.EmptyModlist):
-                entry_attrs = call_args[1]
+                entry_attrs = call_args[0]
                 cosupdate = getattr(context, 'cosupdate')
                 if not entry_attrs or cosupdate:
                     return
diff --git a/ipatests/test_xmlrpc/objectclasses.py b/ipatests/test_xmlrpc/objectclasses.py
index 363e1c7c35e95f4cbe421aaec06c522700019567..ff497c81edec7c6ba9825e5c65b6f179c97147d1 100644
--- a/ipatests/test_xmlrpc/objectclasses.py
+++ b/ipatests/test_xmlrpc/objectclasses.py
@@ -170,3 +170,9 @@
     u'ipatokenradiusconfiguration',
     u'top',
 ]
+
+pwpolicy = [
+    u'krbpwdpolicy',
+    u'nscontainer',
+    u'top',
+]
diff --git a/ipatests/test_xmlrpc/test_pwpolicy_plugin.py b/ipatests/test_xmlrpc/test_pwpolicy_plugin.py
index 3b482ce2dd7413b9968ac6046295315110768d03..5a8ac103079ed70705fa0d5cbacfa82a298cbdc1 100644
--- a/ipatests/test_xmlrpc/test_pwpolicy_plugin.py
+++ b/ipatests/test_xmlrpc/test_pwpolicy_plugin.py
@@ -21,12 +21,14 @@
 Test the `ipalib/plugins/pwpolicy.py` module.
 """
 
-import sys
 from nose.tools import assert_raises  # pylint: disable=E0611
 
-from xmlrpc_test import XMLRPC_test, assert_attr_equal
 from ipalib import api
 from ipalib import errors
+from ipapython.dn import DN
+from ipatests.test_xmlrpc import objectclasses
+from ipatests.test_xmlrpc.xmlrpc_test import (XMLRPC_test, assert_attr_equal,
+                                              Declarative)
 
 
 class test_pwpolicy(XMLRPC_test):
@@ -242,3 +244,69 @@ def test_e_pwpolicy_del(self):
 
         # Remove the user we created
         api.Command['user_del'](self.user)
+
+
+class test_pwpolicy_mod_cospriority(Declarative):
+    """Tests for cospriority modifications"""
+    cleanup_commands = [
+        ('pwpolicy_del', [u'ipausers'], {}),
+    ]
+
+    tests = [
+        dict(
+            desc='Create a password policy',
+            command=('pwpolicy_add', [u'ipausers'], dict(
+                krbmaxpwdlife=90,
+                krbminpwdlife=1,
+                krbpwdhistorylength=10,
+                krbpwdmindiffchars=3,
+                krbpwdminlength=8,
+                cospriority=10,
+            )),
+            expected=dict(
+                result=dict(
+                    cn=[u'ipausers'],
+                    cospriority=[u'10'],
+                    dn=DN('cn=ipausers', ('cn', api.env.realm),
+                          'cn=kerberos', api.env.basedn),
+                    krbmaxpwdlife=[u'90'],
+                    krbminpwdlife=[u'1'],
+                    krbpwdhistorylength=[u'10'],
+                    krbpwdmindiffchars=[u'3'],
+                    krbpwdminlength=[u'8'],
+                    objectclass=objectclasses.pwpolicy,
+                ),
+                summary=None,
+                value=u'ipausers',
+            ),
+        ),
+
+        dict(
+            # https://fedorahosted.org/freeipa/ticket/4309
+            desc="Try no-op modification of password policy's cospriority",
+            command=('pwpolicy_mod', [u'ipausers'], dict(
+                cospriority=10,
+            )),
+            expected=errors.EmptyModlist(),
+        ),
+
+        dict(
+            desc="Modify the password policy's cospriority",
+            command=('pwpolicy_mod', [u'ipausers'], dict(
+                cospriority=20,
+            )),
+            expected=dict(
+                result=dict(
+                    cn=[u'ipausers'],
+                    cospriority=[u'20'],
+                    krbmaxpwdlife=[u'90'],
+                    krbminpwdlife=[u'1'],
+                    krbpwdhistorylength=[u'10'],
+                    krbpwdmindiffchars=[u'3'],
+                    krbpwdminlength=[u'8'],
+                ),
+                summary=None,
+                value=u'ipausers',
+            ),
+        ),
+    ]
-- 
1.9.0

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

Reply via email to