From 3403c8acba91ad200287bdfeaec320ced035e05a Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Wed, 9 Oct 2024 16:44:38 +0200 Subject: [PATCH] fix version check on auth --- include/Common.h | 2 +- src/THeartbeatThread.cpp | 2 +- src/TNetwork.cpp | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/include/Common.h b/include/Common.h index f461ba8..cebbfcb 100644 --- a/include/Common.h +++ b/include/Common.h @@ -74,7 +74,7 @@ public: static TConsole& Console() { return mConsole; } static std::string ServerVersionString(); static const Version& ServerVersion() { return mVersion; } - static std::string ClientMinimumVersion() { return "2.2.0"; } + static Version ClientMinimumVersion() { return Version { 2, 2, 0 }; } static std::string PPS() { return mPPS; } static void SetPPS(const std::string& NewPPS) { mPPS = NewPPS; } diff --git a/src/THeartbeatThread.cpp b/src/THeartbeatThread.cpp index 3af72c3..303cc9b 100644 --- a/src/THeartbeatThread.cpp +++ b/src/THeartbeatThread.cpp @@ -147,7 +147,7 @@ std::string THeartbeatThread::GenerateCall() { << "&map=" << Application::Settings.getAsString(Settings::Key::General_Map) << "&private=" << (Application::Settings.getAsBool(Settings::Key::General_Private) ? "true" : "false") << "&version=" << Application::ServerVersionString() - << "&clientversion=" << Application::ClientMinimumVersion() + << "&clientversion=" << Application::ClientMinimumVersion().AsString() << "&name=" << Application::Settings.getAsString(Settings::Key::General_Name) << "&tags=" << Application::Settings.getAsString(Settings::Key::General_Tags) << "&guests=" << (Application::Settings.getAsBool(Settings::Key::General_AllowGuests) ? "true" : "false") diff --git a/src/TNetwork.cpp b/src/TNetwork.cpp index 78784de..bf3812e 100644 --- a/src/TNetwork.cpp +++ b/src/TNetwork.cpp @@ -293,9 +293,10 @@ std::shared_ptr TNetwork::Authentication(TConnection&& RawConnection) { if (Data.size() > 3 && std::equal(Data.begin(), Data.begin() + VC.size(), VC.begin(), VC.end())) { std::string ClientVersionStr(reinterpret_cast(Data.data() + 2), Data.size() - 2); Version ClientVersion = Application::VersionStrToInts(ClientVersionStr + ".0"); - if (ClientVersion.major != Application::ClientMajorVersion()) { - beammp_errorf("Client tried to connect with version '{}', but only versions '{}.x.x' is allowed", - ClientVersion.AsString(), Application::ClientMajorVersion()); + Version MinClientVersion = Application::ClientMinimumVersion(); + if (Application::IsOutdated(ClientVersion, MinClientVersion)) { + beammp_errorf("Client tried to connect with version '{}', but only versions >= {} are allowed", + ClientVersion.AsString(), Application::ClientMinimumVersion().AsString()); ClientKick(*Client, "Outdated Version!"); return nullptr; }