From 6e9e1902f33bff8ea179dc32ce4d2aa71b3335de Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 2 Oct 2015 14:06:12 +0200 Subject: [PATCH] Fix sasl string/bytes mismatch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The SASL mechanism and response are always bytes; encode them if necessary. Based on patch by Michael Šimáček: https://github.com/pyldap/pyldap/pull/20 --- Lib/ldap/sasl.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Lib/ldap/sasl.py b/Lib/ldap/sasl.py index 1158671..de38393 100644 --- a/Lib/ldap/sasl.py +++ b/Lib/ldap/sasl.py @@ -46,6 +46,8 @@ def __init__(self,cb_value_dict,mech): SASL callback id's. The mech argument is a string that specifies the SASL mechaninsm to be uesd.""" self.cb_value_dict = cb_value_dict or {} + if not isinstance(mech, bytes): + mech = mech.encode('utf-8') self.mech = mech def callback(self,cb_id,challenge,prompt,defresult): @@ -62,7 +64,10 @@ def callback(self,cb_id,challenge,prompt,defresult): cb_value_dictionary. Note that the current callback interface is not very useful for writing generic sasl GUIs, which would need to know all the questions to ask, before the answers are returned to the sasl - lib (in contrast to one question at a time).""" + lib (in contrast to one question at a time). + + Unicode strings are always converted to bytes. + """ # The following print command might be useful for debugging # new sasl mechanisms. So it is left here @@ -72,6 +77,8 @@ def callback(self,cb_id,challenge,prompt,defresult): _trace_file.write("*** id=%d, challenge=%s, prompt=%s, defresult=%s\n-> %s\n" % ( cb_id, challenge, prompt, repr(defresult), repr(self.cb_value_dict.get(cb_result)) )) + if not isinstance(cb_result, bytes): + cb_result = cb_result.encode('utf-8') return cb_result