From 45bc7232761fa3caf91a3b6dff7fa863e651f7b3 Mon Sep 17 00:00:00 2001 From: Guillem Barba Date: Wed, 22 Jul 2015 13:41:21 +0700 Subject: [PATCH] convert LDAP unicode params to str python-ldap expects string encoded in UTF-8 issue4754 review15251002 --- res.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/res.py b/res.py index 7081a3f58d..21dff2c9cc 100644 --- a/res.py +++ b/res.py @@ -58,6 +58,13 @@ def ldap_connection(): return conn +# python-ldap works only with str +def unicode2str(param): + if isinstance(param, unicode): + param = param.encode('utf-8') + return param + + class User: __name__ = 'res.user' @@ -85,9 +92,9 @@ class User: }.get(scope) uid = config.get(section, 'uid', default='uid') if filter_: - filter_ = '(&(%s=%s)%s)' % (uid, login, filter_) + filter_ = '(&(%s=%s)%s)' % (uid, unicode2str(login), filter_) else: - filter_ = '(%s=%s)' % (uid, login) + filter_ = '(%s=%s)' % (uid, unicode2str(login)) result = con.search_s(dn, scope, filter_, attrs) if config.get(section, 'active_directory'): @@ -143,8 +150,10 @@ class User: users = cls.ldap_search_user(user.login, con, attrs=[uid]) if users and len(users) == 1: [(dn, attrs)] = users - if con.simple_bind_s(dn, old_password): - con.passwd_s(dn, old_password, values['password']) + if con.simple_bind_s(dn, unicode2str(old_password)): + con.passwd_s( + dn, unicode2str(old_password), + unicode2str(values['password'])) values = values.copy() del values['password'] else: @@ -165,7 +174,8 @@ class User: users = cls.ldap_search_user(login, con, attrs=[uid]) if users and len(users) == 1: [(dn, attrs)] = users - if password and con.simple_bind_s(dn, password): + if (password + and con.simple_bind_s(dn, unicode2str(password))): # Use ldap uid so we always get the right case login = attrs.get(uid, [login])[0] user_id, _ = cls._get_login(login)