blob: ff4519bb0cd2796bc5efabe0cb5ecb34dcf84a3a [file] [log] [blame]
From 6e9e1902f33bff8ea179dc32ce4d2aa71b3335de Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pviktori@redhat.com>
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