diff --git a/ipalib/plugins/config.py b/ipalib/plugins/config.py index df960f4c0..30f26addf 100644 --- a/ipalib/plugins/config.py +++ b/ipalib/plugins/config.py @@ -229,8 +229,8 @@ class config_mod(LDAPUpdate): if not entry_attrs[attr]: raise errors.ValidationError(name=attr, error=_('May not be empty')) - objectclasses = list(set(entry_attrs[attr] \ - + self.api.Object[obj].possible_objectclasses)) + objectclasses = list(set(entry_attrs[attr]).union( + self.api.Object[obj].possible_objectclasses)) new_allowed_attrs = ldap.get_allowed_attributes(objectclasses, raise_on_unknown=True) checked_attrs = self.api.Object[obj].default_attributes diff --git a/tests/test_xmlrpc/test_config_plugin.py b/tests/test_xmlrpc/test_config_plugin.py new file mode 100644 index 000000000..fbe389106 --- /dev/null +++ b/tests/test_xmlrpc/test_config_plugin.py @@ -0,0 +1,55 @@ +# Authors: +# Petr Viktorin +# +# Copyright (C) 2010 Red Hat +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +""" +Test the `ipalib/plugins/config.py` module. +""" + +from xmlrpc_test import Declarative, fuzzy_digits, fuzzy_uuid + +class test_config(Declarative): + + cleanup_commands = [ + ] + + tests = [ + + dict( + desc='Try to add an unrelated objectclass to ipauserobjectclasses', + command=('config_mod', [], + dict(addattr=u'ipauserobjectclasses=ipahost')), + expected=dict( + result=lambda d: 'ipahost' in d['ipauserobjectclasses'], + value=u'', + summary=None, + ), + ), + + dict( + desc='Remove the unrelated objectclass from ipauserobjectclasses', + command=('config_mod', [], + dict(delattr=u'ipauserobjectclasses=ipahost')), + expected=dict( + result=lambda d: 'ipahost' not in d['ipauserobjectclasses'], + value=u'', + summary=None, + ), + ), + + ]