diff options
author | Florent Le Coz <louiz@louiz.org> | 2014-08-25 01:08:13 +0200 |
---|---|---|
committer | Florent Le Coz <louiz@louiz.org> | 2014-08-25 01:08:13 +0200 |
commit | f5ae98aaf18e441ce2d7b924a992d6b827823b23 (patch) | |
tree | 3cc7626f8ba3ea80dff5f3419ece379753ac1529 | |
parent | aabec8b993748866b9cf3f09ebb7ae7ce2ddc426 (diff) | |
download | slixmpp-f5ae98aaf18e441ce2d7b924a992d6b827823b23.tar.gz slixmpp-f5ae98aaf18e441ce2d7b924a992d6b827823b23.tar.bz2 slixmpp-f5ae98aaf18e441ce2d7b924a992d6b827823b23.tar.xz slixmpp-f5ae98aaf18e441ce2d7b924a992d6b827823b23.zip |
Fix saslprep on the username
Two issues fixed here:
- ints are not comparable with bytes, so char was never == to b',', which
renders the whole function pointless
- The bytes were converted back to “characters” by using chr(), which
doesn’t make sense if the username contains characters that fit on more
than one bytes. This would trigger an “invalid username” error from the
server when using a non-ascii JID.
-rw-r--r-- | sleekxmpp/util/sasl/mechanisms.py | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/sleekxmpp/util/sasl/mechanisms.py b/sleekxmpp/util/sasl/mechanisms.py index d341ed3e..7a7ebf7b 100644 --- a/sleekxmpp/util/sasl/mechanisms.py +++ b/sleekxmpp/util/sasl/mechanisms.py @@ -223,17 +223,16 @@ class SCRAM(Mech): return self.hash(text).digest() def saslname(self, value): - escaped = b'' - for char in bytes(value): - if char == b',': - escaped += b'=2C' - elif char == b'=': - escaped += b'=3D' + value = value.decode("utf-8") + escaped = [] + for char in value: + if char == ',': + escaped += '=2C' + elif char == '=': + escaped += '=3D' else: - if isinstance(char, int): - char = chr(char) - escaped += bytes(char) - return escaped + escaped += char + return "".join(escaped).encode("utf-8") def parse(self, challenge): items = {} |