aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-08-23 15:06:03 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-08-23 15:06:03 +0000
commitbb70b6c629e2d422f4bd648cf4b251456a15a643 (patch)
tree150687615f8b774c9804ef4f8f3263dc51bfc060 /src
parent0c1166055f618f150e9489c1fa21ea564702b72e (diff)
downloadqxmpp-bb70b6c629e2d422f4bd648cf4b251456a15a643.tar.gz
check domain of incoming packets
Diffstat (limited to 'src')
-rw-r--r--src/QXmppIncomingServer.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/QXmppIncomingServer.cpp b/src/QXmppIncomingServer.cpp
index 32f83120..ea8702e3 100644
--- a/src/QXmppIncomingServer.cpp
+++ b/src/QXmppIncomingServer.cpp
@@ -35,7 +35,7 @@
class QXmppIncomingServerPrivate
{
public:
- bool authenticated;
+ QString authenticated;
QString domain;
QString localStreamId;
};
@@ -53,7 +53,6 @@ QXmppIncomingServer::QXmppIncomingServer(QSslSocket *socket, const QString &doma
{
setObjectName("S2S-in");
setSocket(socket);
- d->authenticated = false;
d->domain = domain;
}
@@ -125,7 +124,7 @@ void QXmppIncomingServer::handleStanza(const QDomElement &stanza)
if (request.command() == QXmppDialback::Result)
{
- // etablish dialback connection
+ // establish dialback connection
QXmppOutgoingServer *stream = new QXmppOutgoingServer(d->domain, this);
stream->setLogger(logger());
stream->setObjectName("S2S-dialback-" + domain);
@@ -144,7 +143,7 @@ void QXmppIncomingServer::handleStanza(const QDomElement &stanza)
emit dialbackRequestReceived(request);
}
- } else if (d->authenticated) {
+ } else if (!d->authenticated.isEmpty() && stanza.attribute("from").split("@").last() == d->authenticated) {
// relay packets if the remote party is authenticated
bool handled = false;
emit elementReceived(stanza, handled);
@@ -159,7 +158,7 @@ void QXmppIncomingServer::handleStanza(const QDomElement &stanza)
bool QXmppIncomingServer::isConnected() const
{
- return QXmppStream::isConnected() && d->authenticated;
+ return QXmppStream::isConnected() && !d->authenticated.isEmpty();
}
/// Handles a dialback response received from the authority server.
@@ -172,7 +171,8 @@ void QXmppIncomingServer::slotDialbackResponseReceived(const QXmppDialback &dial
QXmppOutgoingServer *stream = qobject_cast<QXmppOutgoingServer*>(sender());
if (!stream ||
dialback.command() != QXmppDialback::Verify ||
- dialback.id() != d->localStreamId)
+ dialback.id() != d->localStreamId ||
+ dialback.from() != stream->configuration().domain())
return;
// relay verify response