summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipalib/plugins/baseldap.py12
-rw-r--r--tests/test_xmlrpc/test_attr.py10
2 files changed, 21 insertions, 1 deletions
diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py
index 6a054ffd8..14a46f2d0 100644
--- a/ipalib/plugins/baseldap.py
+++ b/ipalib/plugins/baseldap.py
@@ -882,7 +882,17 @@ 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]
+ elif isinstance(val, tuple):
+ val = list(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 f5353e1b2..39320875b 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',