aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppOutgoingClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-03-29 13:20:14 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-03-29 13:20:14 +0000
commit75a0cb2036ebd6c1913caec6d4d9c4497481ec2f (patch)
tree2119507630d04f09c90fe05138e866fa3c88ba69 /src/QXmppOutgoingClient.cpp
parent4f738fbb73b3b15b6022635b78dac71f91909cd0 (diff)
downloadqxmpp-75a0cb2036ebd6c1913caec6d4d9c4497481ec2f.tar.gz
refactor SASL authentication to allow server-side password checkers which natively support MD5
Diffstat (limited to 'src/QXmppOutgoingClient.cpp')
-rw-r--r--src/QXmppOutgoingClient.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/QXmppOutgoingClient.cpp b/src/QXmppOutgoingClient.cpp
index 0c2af465..fdb3cc8a 100644
--- a/src/QXmppOutgoingClient.cpp
+++ b/src/QXmppOutgoingClient.cpp
@@ -22,6 +22,7 @@
*
*/
+#include <QCryptographicHash>
#include <QSslSocket>
#include "QXmppConfiguration.h"
@@ -615,15 +616,15 @@ void QXmppOutgoingClient::sendAuthDigestMD5ResponseStep1(const QString& challeng
d->saslDigest.setNc("00000001");
d->saslDigest.setNonce(map.value("nonce"));
d->saslDigest.setQop("auth");
- d->saslDigest.setRealm(map.value("realm"));
- d->saslDigest.setUsername(configuration().user().toUtf8());
- d->saslDigest.setPassword(configuration().password().toUtf8());
+ d->saslDigest.setSecret(QCryptographicHash::hash(
+ configuration().user().toUtf8() + ":" + map.value("realm") + ":" + configuration().password().toUtf8(),
+ QCryptographicHash::Md5));
// Build response
QMap<QByteArray, QByteArray> response;
- response["username"] = d->saslDigest.username();
- if(!d->saslDigest.realm().isEmpty())
- response["realm"] = d->saslDigest.realm();
+ response["username"] = configuration().user().toUtf8();
+ if (map.contains("realm"))
+ response["realm"] = map.value("realm");
response["nonce"] = d->saslDigest.nonce();
response["cnonce"] = d->saslDigest.cnonce();
response["nc"] = d->saslDigest.nc();