summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp')
-rw-r--r--Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp b/Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp
index 41e8f72..15c8ab6 100644
--- a/Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp
+++ b/Swiften/SASL/SCRAMSHA1ClientAuthenticator.cpp
@@ -87,8 +87,20 @@ std::map<char, String> SCRAMSHA1ClientAuthenticator::parseMap(const String& s) {
}
ByteArray SCRAMSHA1ClientAuthenticator::getInitialBareClientMessage() const {
- // TODO: Replace , and =
- return ByteArray(String("n=" + getAuthenticationID() + ",r=" + clientnonce));
+ String authenticationID = getAuthenticationID();
+ String escapedAuthenticationID;
+ for (size_t i = 0; i < authenticationID.getUTF8Size(); ++i) {
+ if (authenticationID[i] == ',') {
+ escapedAuthenticationID += "=2C";
+ }
+ else if (authenticationID[i] == '=') {
+ escapedAuthenticationID += "=3D";
+ }
+ else {
+ escapedAuthenticationID += authenticationID[i];
+ }
+ }
+ return ByteArray(String("n=" + escapedAuthenticationID + ",r=" + clientnonce));
}
}