diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2008-11-01 17:01:26 +0000 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2008-11-01 17:01:26 +0000 |
commit | e41f087652cf102c04df1a78ac7a2c72724e740c (patch) | |
tree | 8913943b66f388bdd132e998bb3174175184898f /signet/ConnectionHandler.cpp | |
parent | a286bb188d7654d644e2f26b71e8ddeaf4490a9d (diff) | |
download | sigen-e41f087652cf102c04df1a78ac7a2c72724e740c.tar.gz sigen-e41f087652cf102c04df1a78ac7a2c72724e740c.tar.xz sigen-e41f087652cf102c04df1a78ac7a2c72724e740c.zip |
[FIX] Challenge login can fail due to unknown user
[FIX] PacketMaker makes Packets (Packets only hold information)
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@292 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'signet/ConnectionHandler.cpp')
-rw-r--r-- | signet/ConnectionHandler.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/signet/ConnectionHandler.cpp b/signet/ConnectionHandler.cpp index 98c2420b..7cab06b6 100644 --- a/signet/ConnectionHandler.cpp +++ b/signet/ConnectionHandler.cpp @@ -55,7 +55,7 @@ QByteArray Signet::ConnectionHandler::generateResponse(const QByteArray& key1, c return QByteArray(); } -Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenge(QTcpSocket* socket, const QByteArray& secret) +Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenge(QTcpSocket* socket, const QByteArray& secret, const QByteArray& id) { QByteArray clientKey; QByteArray serverKey; @@ -63,9 +63,11 @@ Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenge(Q QByteArray serverResponse; QByteArray expectedServerResponse; Protocol::ChallengeMediator mediator(socket, Protocol::ChallengeMediator::Client); - mediator.init(); + mediator.init(id); if (!mediator.getServerKey(&serverKey)) return SocketError; + if (mediator.state() == Protocol::ChallengeMediator::Accepted) + return UnknownUser; clientKey = generateChallengeKey(); clientResponse = generateResponse(clientKey, serverKey, secret); expectedServerResponse = generateResponse(serverKey, clientKey, secret); @@ -83,15 +85,20 @@ Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenge(Q return NoError; } -Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenged(QTcpSocket* socket) +Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenged(QTcpSocket* socket, const QByteArray& id) { QByteArray clientKey; QByteArray serverKey; QByteArray clientResponse; QByteArray serverResponse; QByteArray expectedClientResponse; - QByteArray secret = secretForHost(socket->peerAddress()); + QByteArray secret = secretForHost(id); Protocol::ChallengeMediator mediator(socket, Protocol::ChallengeMediator::Server); + if (!secret.size()) + { + mediator.notifyClientFail(); + return ClientFailed; + } serverKey = generateChallengeKey(); mediator.serverKey(serverKey); if (!mediator.getClientResponse(&clientKey, &clientResponse)) @@ -100,7 +107,7 @@ Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenged( if (clientResponse != expectedClientResponse) { mediator.notifyClientFail(); - return ClientFailed; + return UnknownUser; } serverResponse = generateResponse(serverKey, clientKey, secret); mediator.serverResponse(serverResponse); @@ -111,9 +118,9 @@ Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenged( return NoError; } -QByteArray Signet::ConnectionHandler::secretForHost(const QHostAddress& address) const +QByteArray Signet::ConnectionHandler::secretForHost(const QByteArray& id) const { - Q_UNUSED(address) + Q_UNUSED(id) return QByteArray(); } |