summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2007-12-05 17:26:39 -0500
committerRob Crittenden <rcritten@redhat.com>2007-12-05 17:26:39 -0500
commiteb141b02ff3e21196fece1a6edf19f469efdc220 (patch)
treeccaffa2b176c99aa23e6836e49ebdf8eddddd467
parent62b8091a83c31459ca3e5c5aada01f668a09a381 (diff)
downloadfreeipa-eb141b02ff3e21196fece1a6edf19f469efdc220.tar.gz
freeipa-eb141b02ff3e21196fece1a6edf19f469efdc220.tar.xz
freeipa-eb141b02ff3e21196fece1a6edf19f469efdc220.zip
Move dn removal to the XML-RPC side and remove empty attributes
-rw-r--r--ipa-python/ipaclient.py3
-rw-r--r--ipa-server/xmlrpc-server/funcs.py25
2 files changed, 23 insertions, 5 deletions
diff --git a/ipa-python/ipaclient.py b/ipa-python/ipaclient.py
index 0a4d64f11..426f66817 100644
--- a/ipa-python/ipaclient.py
+++ b/ipa-python/ipaclient.py
@@ -116,9 +116,6 @@ class IPAClient:
user_dict = user.toDict()
- # dn is set on the server-side
- del user_dict['dn']
-
# convert to a regular dict before sending
result = self.transport.add_user(user_dict, user_container)
return result
diff --git a/ipa-server/xmlrpc-server/funcs.py b/ipa-server/xmlrpc-server/funcs.py
index d046b5181..7be75ddc3 100644
--- a/ipa-server/xmlrpc-server/funcs.py
+++ b/ipa-server/xmlrpc-server/funcs.py
@@ -449,6 +449,19 @@ class IPAServer:
if self.__is_user_unique(user['uid'], opts) == 0:
raise ipaerror.gen_exception(ipaerror.LDAP_DUPLICATE)
+ # dn is set here, not by the user
+ try:
+ del user['dn']
+ except KeyError:
+ pass
+
+ # No need to set empty fields, and they can cause issues when they
+ # get to LDAP, like:
+ # TypeError: ('expected a string in the list', None)
+ for k in user.keys():
+ if not user[k] or len(user[k]) == 0 or (len(user[k]) == 1 and '' in user[k]):
+ del user[k]
+
dn="uid=%s,%s,%s" % (ldap.dn.escape_dn_chars(user['uid']),
user_container,self.basedn)
entry = ipaserver.ipaldap.Entry(dn)
@@ -502,8 +515,16 @@ class IPAServer:
conn = self.getConnection(opts)
try:
- res = conn.addEntry(entry)
- self.add_user_to_group(user.get('uid'), group_dn, opts)
+ try:
+ res = conn.addEntry(entry)
+ except TypeError, e:
+ raise ipaerror.gen_exception(ipaerror.LDAP_DATABASE_ERROR, "There is a problem with one of the data types.")
+ except Exception, e:
+ raise ipaerror.gen_exception(ipaerror.LDAP_DATABASE_ERROR, e)
+ try:
+ self.add_user_to_group(user.get('uid'), group_dn, opts)
+ except Exception, e:
+ raise ipaerror.gen_exception(ipaerror.LDAP_DATABASE_ERROR, "The user was created but adding to group %s failed" % group_dn)
finally:
self.releaseConnection(conn)
return res