summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2012-04-23 10:05:24 (GMT)
committerRemko Tronçon <git@el-tramo.be>2012-04-23 10:05:24 (GMT)
commitc5dc30ae9ad8b9f3b0209c8ba177f1ce170a6364 (patch)
treecc28fb37c1ea9e136a5d96764dfe7bc700b47621 /Swiften/Queries/Request.cpp
parentd072dcd1ee143357c41e53ee94a4b6d13e48e2fc (diff)
downloadswift-contrib-c5dc30ae9ad8b9f3b0209c8ba177f1ce170a6364.zip
swift-contrib-c5dc30ae9ad8b9f3b0209c8ba177f1ce170a6364.tar.bz2
Work around incorrect roster responses from ejabberd.
Resolves: #1072
Diffstat (limited to 'Swiften/Queries/Request.cpp')
-rw-r--r--Swiften/Queries/Request.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/Swiften/Queries/Request.cpp b/Swiften/Queries/Request.cpp
index f3f56c9..422f36c 100644
--- a/Swiften/Queries/Request.cpp
+++ b/Swiften/Queries/Request.cpp
@@ -1,18 +1,19 @@
/*
* Copyright (c) 2010 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#include <Swiften/Queries/Request.h>
#include <Swiften/Queries/IQRouter.h>
#include <Swiften/Elements/RawXMLPayload.h>
+#include <Swiften/Base/Log.h>
namespace Swift {
Request::Request(IQ::Type type, const JID& receiver, boost::shared_ptr<Payload> payload, IQRouter* router) : router_(router), type_(type), receiver_(receiver), payload_(payload), sent_(false) {
}
Request::Request(IQ::Type type, const JID& receiver, IQRouter* router) : router_(router), type_(type), receiver_(receiver), sent_(false) {
}
@@ -69,18 +70,23 @@ bool Request::handleIQ(boost::shared_ptr<IQ> iq) {
handled = true;
}
}
}
return handled;
}
bool Request::isCorrectSender(const JID& jid) {
if (router_->isAccountJID(receiver_)) {
+ if (jid.isValid() && jid.equals(router_->getJID(), JID::WithResource)) {
+ // This unspecified behavior seems to happen in ejabberd versions (e.g. 2.0.5)
+ SWIFT_LOG(warning) << "Server responded to an account request with a full JID, which is not allowed. Handling it anyway.";
+ return true;
+ }
return router_->isAccountJID(jid);
}
else {
return jid.equals(receiver_, JID::WithResource);
}
}
}