When ADD command is being executed and a single-value object attribute is being set with both option and addattr IPA ends up in an internal error.
Make better value sanitizing job in this case and let IPA throw a user-friendly error. Unit test exercising this situation is added. https://fedorahosted.org/freeipa/ticket/2429
From 4c040e30b4ad366648b87e6989b42731845d1b9e Mon Sep 17 00:00:00 2001 From: Martin Kosek <mko...@redhat.com> Date: Thu, 13 Sep 2012 15:51:51 +0200 Subject: [PATCH] Fix addattr internal error When ADD command is being executed and a single-value object attribute is being set with both option and addattr IPA ends up in an internal error. Make better value sanitizing job in this case and let IPA throw a user-friendly error. Unit test exercising this situation is added. https://fedorahosted.org/freeipa/ticket/2429 --- ipalib/plugins/baseldap.py | 10 +++++++++- tests/test_xmlrpc/test_attr.py | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py index 6a054ffd801b159769bc2ce2871cb03afeba5c3d..b050b626a93f4dee2e5e2d9b0f819eff9c6caaf9 100644 --- a/ipalib/plugins/baseldap.py +++ b/ipalib/plugins/baseldap.py @@ -882,7 +882,15 @@ last, after all sets and adds."""), entry_attrs[attr] = val for attr in direct_add: - entry_attrs.setdefault(attr, []).extend(adddict[attr]) + try: + val = entry_attrs[attr] + except KeyError: + val = [] + else: + if not isinstance(val, (list, tuple)): + val = [val] + val.extend(adddict[attr]) + entry_attrs[attr] = val for attr in direct_del: for delval in deldict[attr]: diff --git a/tests/test_xmlrpc/test_attr.py b/tests/test_xmlrpc/test_attr.py index f5353e1b217fec96e18353923a11b509224a9083..39320875bd5edd4fd6022ed66ce1a8b87ccc8e92 100644 --- a/tests/test_xmlrpc/test_attr.py +++ b/tests/test_xmlrpc/test_attr.py @@ -37,6 +37,16 @@ class test_attr(Declarative): tests = [ dict( + desc='Try to add user %r with single-value attribute set via ' + 'option and --addattr' % user1, + command=( + 'user_add', [user1], dict(givenname=u'Test', sn=u'User1', + addattr=u'sn=User2') + ), + expected=errors.OnlyOneValueAllowed(attr='sn'), + ), + + dict( desc='Create %r' % user1, command=( 'user_add', [user1], dict(givenname=u'Test', sn=u'User1', -- 1.7.11.4
_______________________________________________ Freeipa-devel mailing list Freeipa-devel@redhat.com https://www.redhat.com/mailman/listinfo/freeipa-devel