diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-07-20 15:14:47 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-07-20 15:14:47 +0200 |
| commit | ccb335ee65553022f70996eaffe6bd43d3de2dc0 (patch) | |
| tree | 448026d0ea0cb9aa89f123fc25732bc110c11b4d /src/base | |
| parent | a8603c8043e6123cf9380b35a9b18561166f32d2 (diff) | |
| download | qxmpp-ccb335ee65553022f70996eaffe6bd43d3de2dc0.tar.gz | |
move server-side SASL code
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppSaslAuth.cpp | 27 | ||||
| -rw-r--r-- | src/base/QXmppSaslAuth.h | 3 |
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); |
