aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-07-20 15:14:47 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-07-20 15:14:47 +0200
commitccb335ee65553022f70996eaffe6bd43d3de2dc0 (patch)
tree448026d0ea0cb9aa89f123fc25732bc110c11b4d /src/base
parenta8603c8043e6123cf9380b35a9b18561166f32d2 (diff)
downloadqxmpp-ccb335ee65553022f70996eaffe6bd43d3de2dc0.tar.gz
move server-side SASL code
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppSaslAuth.cpp27
-rw-r--r--src/base/QXmppSaslAuth.h3
2 files changed, 26 insertions, 4 deletions
diff --git a/src/base/QXmppSaslAuth.cpp b/src/base/QXmppSaslAuth.cpp
index ddec1e0d..200dc08a 100644
--- a/src/base/QXmppSaslAuth.cpp
+++ b/src/base/QXmppSaslAuth.cpp
@@ -427,6 +427,7 @@ class QXmppSaslServerPrivate
public:
QString username;
QString password;
+ QByteArray passwordDigest;
QString realm;
};
@@ -484,6 +485,20 @@ void QXmppSaslServer::setPassword(const QString &password)
d->password = password;
}
+/// Returns the password digest.
+
+QByteArray QXmppSaslServer::passwordDigest() const
+{
+ return d->passwordDigest;
+}
+
+/// Sets the password digest.
+
+void QXmppSaslServer::setPasswordDigest(const QByteArray &digest)
+{
+ d->passwordDigest = digest;
+}
+
/// Returns the realm.
QString QXmppSaslServer::realm() const
@@ -556,16 +571,20 @@ QXmppSaslServer::Response QXmppSaslServerDigestMd5::respond(const QByteArray &re
const QByteArray realm = input.value("realm");
setUsername(QString::fromUtf8(input.value("username")));
- if (password().isEmpty())
+ if (password().isEmpty() && passwordDigest().isEmpty())
return InputNeeded;
m_saslDigest.setQop("auth");
m_saslDigest.setDigestUri(input.value("digest-uri"));
m_saslDigest.setNc(input.value("nc"));
m_saslDigest.setCnonce(input.value("cnonce"));
- m_saslDigest.setSecret(QCryptographicHash::hash(
- username().toUtf8() + ":" + realm + ":" + password().toUtf8(),
- QCryptographicHash::Md5));
+ if (!password().isEmpty()) {
+ m_saslDigest.setSecret(QCryptographicHash::hash(
+ username().toUtf8() + ":" + realm + ":" + password().toUtf8(),
+ QCryptographicHash::Md5));
+ } else {
+ m_saslDigest.setSecret(passwordDigest());
+ }
const QByteArray expectedResponse = m_saslDigest.calculateDigest(
QByteArray("AUTHENTICATE:") + m_saslDigest.digestUri());
diff --git a/src/base/QXmppSaslAuth.h b/src/base/QXmppSaslAuth.h
index b332e73b..411d8a6f 100644
--- a/src/base/QXmppSaslAuth.h
+++ b/src/base/QXmppSaslAuth.h
@@ -125,6 +125,9 @@ public:
QString password() const;
void setPassword(const QString &password);
+ QByteArray passwordDigest() const;
+ void setPasswordDigest(const QByteArray &digest);
+
QString realm() const;
void setRealm(const QString &realm);