Don't fail when adding default objectclasses using config-mod

The config plugin was adding together a list and a tuple, then
converting to a set.
Replace the operation with a set union.

Regression test included.

https://fedorahosted.org/freeipa/ticket/2706
This commit is contained in:
Petr Viktorin 2012-05-02 12:36:15 -04:00 committed by Martin Kosek
parent d9d1967989
commit c02fcf5d34
2 changed files with 57 additions and 2 deletions

View File

@ -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

View File

@ -0,0 +1,55 @@
# Authors:
# Petr Viktorin <pviktori@redhat.com>
#
# 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 <http://www.gnu.org/licenses/>.
"""
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,
),
),
]