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
This commit is contained in:
Martin Kosek 2012-09-13 15:51:51 +02:00 committed by Rob Crittenden
parent d491ba0289
commit cd7a85c12c
2 changed files with 21 additions and 1 deletions

View File

@ -882,7 +882,17 @@ last, after all sets and adds."""),
entry_attrs[attr] = val entry_attrs[attr] = val
for attr in direct_add: 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]
elif isinstance(val, tuple):
val = list(val)
val.extend(adddict[attr])
entry_attrs[attr] = val
for attr in direct_del: for attr in direct_del:
for delval in deldict[attr]: for delval in deldict[attr]:

View File

@ -36,6 +36,16 @@ class test_attr(Declarative):
tests = [ 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( dict(
desc='Create %r' % user1, desc='Create %r' % user1,
command=( command=(