aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2015-07-27 12:59:35 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2015-07-27 13:34:13 +0200
commit207f6697d512241af0fc145e590a234464acf723 (patch)
tree56505fcbdbe08bdc85e913e64d3209788e1e1a72
parent908e14a6efe310bf6395ca1023a83a8695203557 (diff)
downloadqxmpp-207f6697d512241af0fc145e590a234464acf723.tar.gz
socks5: make server explicitly return "no acceptable method"
-rw-r--r--src/base/QXmppSocks.cpp9
-rw-r--r--tests/qxmppsocks/tst_qxmppsocks.cpp5
2 files changed, 12 insertions, 2 deletions
diff --git a/src/base/QXmppSocks.cpp b/src/base/QXmppSocks.cpp
index cd1e306b..905b7a1b 100644
--- a/src/base/QXmppSocks.cpp
+++ b/src/base/QXmppSocks.cpp
@@ -32,8 +32,7 @@ const static char SocksVersion = 5;
enum AuthenticationMethod {
NoAuthentication = 0,
- GSSAPI = 1,
- UsernamePassword = 2
+ NoAcceptableMethod = 255
};
enum Command {
@@ -274,6 +273,12 @@ void QXmppSocksServer::slotReadyRead()
if (!foundMethod)
{
qWarning("QXmppSocksServer received bad authentication method");
+
+ buffer.resize(2);
+ buffer[0] = SocksVersion;
+ buffer[1] = NoAcceptableMethod;
+ socket->write(buffer);
+
socket->close();
return;
}
diff --git a/tests/qxmppsocks/tst_qxmppsocks.cpp b/tests/qxmppsocks/tst_qxmppsocks.cpp
index a8cfe56c..767e322f 100644
--- a/tests/qxmppsocks/tst_qxmppsocks.cpp
+++ b/tests/qxmppsocks/tst_qxmppsocks.cpp
@@ -220,6 +220,11 @@ void tst_QXmppSocks::testServer()
client.write(clientHandshake);
loop.exec();
if (!clientHandshakeWorks) {
+ // consume any last data
+ QByteArray data = client.readAll();
+ if (client.state() != QAbstractSocket::UnconnectedState)
+ loop.exec();
+
QCOMPARE(client.state(), QAbstractSocket::UnconnectedState);
QVERIFY(!m_connectionSocket);