summaryrefslogtreecommitdiffstats
path: root/ipa-server
diff options
context:
space:
mode:
authorKevin McCarthy <kmccarth@redhat.com>2007-08-20 10:50:11 -0700
committerKevin McCarthy <kmccarth@redhat.com>2007-08-20 10:50:11 -0700
commit66d3f1e730ed5e1bc80264b2a5d7f4fb16c1d22c (patch)
tree2d929adc00cad0701e87d96afc282733e7e6f0ef /ipa-server
parent5f0f192ae3c8aa44868b7b3b86e71523fc55515b (diff)
downloadfreeipa.git-66d3f1e730ed5e1bc80264b2a5d7f4fb16c1d22c.tar.gz
freeipa.git-66d3f1e730ed5e1bc80264b2a5d7f4fb16c1d22c.tar.xz
freeipa.git-66d3f1e730ed5e1bc80264b2a5d7f4fb16c1d22c.zip
Embed origiginal values inside user, and have update_user pass in a user
object. Based on rcrit's original patch. Push scalar to list value conversion inside funcs.py.
Diffstat (limited to 'ipa-server')
-rw-r--r--ipa-server/ipa-gui/ipagui/controllers.py59
-rw-r--r--ipa-server/xmlrpc-server/funcs.py14
2 files changed, 35 insertions, 38 deletions
diff --git a/ipa-server/ipa-gui/ipagui/controllers.py b/ipa-server/ipa-gui/ipagui/controllers.py
index 36c1bf84..b285685f 100644
--- a/ipa-server/ipa-gui/ipagui/controllers.py
+++ b/ipa-server/ipa-gui/ipagui/controllers.py
@@ -32,25 +32,10 @@ def restrict_post():
turbogears.flash("This method only accepts posts")
raise turbogears.redirect("/")
-def to_ldap_hash(orig):
- """LDAP hashes expect all values to be a list. This method converts single
- entries to a list."""
- new={}
- for (k,v) in orig.iteritems():
- if v == None:
- continue
- if not isinstance(v, list) and k != 'dn':
- v = [v]
- new[k] = v
-
- return new
-
-def set_ldap_value(hash, key, value):
- """Converts unicode strings to normal strings
- (because LDAP is choking on unicode strings"""
+def utf8_encode(value):
if value != None:
value = value.encode('utf-8')
- hash[key] = value
+ return value
class Root(controllers.RootController):
@@ -86,11 +71,11 @@ class Root(controllers.RootController):
try:
new_user = {}
- set_ldap_value(new_user, 'uid', kw.get('uid'))
- set_ldap_value(new_user, 'givenname', kw.get('givenname'))
- set_ldap_value(new_user, 'sn', kw.get('sn'))
- set_ldap_value(new_user, 'mail', kw.get('mail'))
- set_ldap_value(new_user, 'telephonenumber', kw.get('telephonenumber'))
+ new_user['uid'] = utf8_encode(kw.get('uid'))
+ new_user['givenname'] = utf8_encode(kw.get('givenname'))
+ new_user['sn'] = utf8_encode(kw.get('sn'))
+ new_user['mail'] = utf8_encode(kw.get('mail'))
+ new_user['telephonenumber'] = utf8_encode(kw.get('telephonenumber'))
rv = client.add_user(new_user)
turbogears.flash("%s added!" % kw['uid'])
@@ -107,11 +92,11 @@ class Root(controllers.RootController):
turbogears.flash("There was a problem with the form!")
user = client.get_user(uid)
- user_hash = user.toDict()
+ user_dict = user.toDict()
# store a copy of the original user for the update later
- user_data = b64encode(dumps(user_hash))
- user_hash['user_orig'] = user_data
- return dict(form=user_edit_form, user=user_hash)
+ user_data = b64encode(dumps(user_dict))
+ user_dict['user_orig'] = user_data
+ return dict(form=user_edit_form, user=user_dict)
@expose()
def userupdate(self, **kw):
@@ -127,23 +112,21 @@ class Root(controllers.RootController):
tg_template='ipagui.templates.useredit')
try:
- orig_user = loads(b64decode(kw.get('user_orig')))
+ orig_user_dict = loads(b64decode(kw.get('user_orig')))
- new_user = dict(orig_user)
- set_ldap_value(new_user, 'givenname', kw.get('givenname'))
- set_ldap_value(new_user, 'sn', kw.get('sn'))
- set_ldap_value(new_user, 'mail', kw.get('mail'))
- set_ldap_value(new_user, 'telephonenumber', kw.get('telephonenumber'))
+ new_user = ipa.user.User(orig_user_dict)
+ new_user.setValue('givenname', utf8_encode(kw.get('givenname')))
+ new_user.setValue('sn', utf8_encode(kw.get('sn')))
+ new_user.setValue('mail', utf8_encode(kw.get('mail')))
+ new_user.setValue('telephonenumber', utf8_encode(kw.get('telephonenumber')))
#
# this is a hack until we decide on the policy for names/cn/sn/givenName
#
- set_ldap_value(new_user, 'cn',
- "%s %s" % (kw.get('givenname'), kw.get('sn')))
+ new_user.setValue('cn',
+ "%s %s" % (new_user.getValue('givenname'),
+ new_user.getValue('sn')))
- orig_user = to_ldap_hash(orig_user)
- new_user = to_ldap_hash(new_user)
-
- rv = client.update_user(orig_user, new_user)
+ rv = client.update_user(new_user)
turbogears.flash("%s updated!" % kw['uid'])
raise turbogears.redirect('/usershow', uid=kw['uid'])
except xmlrpclib.Fault, f:
diff --git a/ipa-server/xmlrpc-server/funcs.py b/ipa-server/xmlrpc-server/funcs.py
index a182d4b2..6f7e4e66 100644
--- a/ipa-server/xmlrpc-server/funcs.py
+++ b/ipa-server/xmlrpc-server/funcs.py
@@ -363,6 +363,17 @@ class IPAServer:
return users
+ def convert_scalar_values(self, orig_dict):
+ """LDAP update dicts expect all values to be a list (except for dn).
+ This method converts single entries to a list."""
+ new_dict={}
+ for (k,v) in orig_dict.iteritems():
+ if not isinstance(v, list) and k != 'dn':
+ v = [v]
+ new_dict[k] = v
+
+ return new_dict
+
def update_user (self, args, newuser=None, opts=None):
"""Update a user in LDAP"""
global _LDAPPool
@@ -384,6 +395,9 @@ class IPAServer:
if (isinstance(newuser, tuple)):
newuser = newuser[0]
+ olduser = self.convert_scalar_values(olduser)
+ newuser = self.convert_scalar_values(newuser)
+
# Should be able to get this from either the old or new user
# but just in case someone has decided to try changing it, use the
# original