From 846ad253236edd7e64e3744540dba1b9d88f4f44 Mon Sep 17 00:00:00 2001 From: Andrew Fyfe Date: Mon, 26 Mar 2018 18:31:42 +0100 Subject: [PATCH] when using LDAP use str (bytes) on PY2 and str on PY3 --- modoboa/lib/ldap_utils.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/modoboa/lib/ldap_utils.py b/modoboa/lib/ldap_utils.py index 600b31517..c7ec9235d 100644 --- a/modoboa/lib/ldap_utils.py +++ b/modoboa/lib/ldap_utils.py @@ -39,7 +39,7 @@ import ldap from django.conf import settings from django.utils import six -from django.utils.encoding import force_bytes +from django.utils.encoding import force_bytes, force_str from django.utils.translation import ugettext as _ from modoboa.core.password_hashers import get_password_hasher @@ -70,13 +70,12 @@ class LDAPAuthBackend(object): def _get_conn(self, dn, password): """Get a connection from the server.""" - kwargs = {} - if six.PY3: - kwargs["bytes_mode"] = False - conn = ldap.initialize(self.server_uri, **kwargs) + conn = ldap.initialize(self.server_uri, bytes_mode=six.PY2) conn.set_option(ldap.OPT_X_TLS_DEMAND, True) conn.set_option(ldap.OPT_DEBUG_LEVEL, 255) - conn.simple_bind_s(dn, password) + conn.simple_bind_s( + force_str(dn), force_str(password) + ) return conn def connect_to_server(self, user, password): @@ -98,7 +97,9 @@ class LDAPAuthBackend(object): sbase = self.global_params["ldap_search_base"] sfilter = self.global_params["ldap_search_filter"] sfilter = sfilter % {"user": user} - res = self.conn.search_s(sbase, ldap.SCOPE_SUBTREE, sfilter) + res = self.conn.search_s( + force_str(sbase), ldap.SCOPE_SUBTREE, force_str(sfilter) + ) try: dn = res[0][0] except IndexError: @@ -124,10 +125,10 @@ class LDAPAuthBackend(object): ('"%s"' % newpassword).encode("utf-16").lstrip("\377\376") ) ldif = [(ldap.MOD_REPLACE, - self.pwd_attr, + force_str(self.pwd_attr), force_bytes(self._crypt_password(newpassword)))] try: - self.conn.modify_s(user_dn, ldif) + self.conn.modify_s(force_str(user_dn), ldif) except ldap.LDAPError as e: raise InternalError( _("Failed to update password: {}").format(e))