Some fixes
This commit is contained in:
parent
2530457eb6
commit
a73380db16
2
deps/mongoose
vendored
2
deps/mongoose
vendored
@ -1 +1 @@
|
||||
Subproject commit d4a8351464e9737b8108435ffb51382f21a55230
|
||||
Subproject commit 2efc8598297de21d54ab52e383ed8adbb3325d3d
|
2
deps/protobuf
vendored
2
deps/protobuf
vendored
@ -1 +1 @@
|
||||
Subproject commit a2484208c3291ea522a891114d2821829bd09083
|
||||
Subproject commit d9ccf4d0b1fdfb55bdc41f49d42f37a6c4b5302a
|
@ -167,6 +167,15 @@ namespace Components
|
||||
unsigned __int64 xuid = strtoull(steamId.data(), nullptr, 16);
|
||||
unsigned int id = static_cast<unsigned int>(~0x110000100000000 & xuid);
|
||||
|
||||
SteamID guid;
|
||||
guid.Bits = xuid;
|
||||
|
||||
if (Bans::IsBanned({ guid, address.GetIP() }))
|
||||
{
|
||||
Network::Send(address, "error\nEXE_ERR_BANNED_PERM");
|
||||
return;
|
||||
}
|
||||
|
||||
if ((xuid & 0xFFFFFFFF00000000) != 0x110000100000000 || id != (Utils::Cryptography::JenkinsOneAtATime::Compute(connectData.publickey()) & ~0x80000000))
|
||||
{
|
||||
Network::Send(address, "error\nXUID doesn't match the certificate!");
|
||||
|
@ -2,6 +2,95 @@
|
||||
|
||||
namespace Components
|
||||
{
|
||||
std::mutex Bans::AccessMutex;
|
||||
|
||||
bool Bans::IsBanned(Bans::Entry entry)
|
||||
{
|
||||
auto list = Bans::LoadBans();
|
||||
|
||||
if (entry.first.Bits)
|
||||
{
|
||||
for (auto& idEntry : list.IDList)
|
||||
{
|
||||
if (idEntry.Bits == entry.first.Bits)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.second.full)
|
||||
{
|
||||
for (auto& ipEntry : list.IPList)
|
||||
{
|
||||
if (ipEntry.full == entry.second.full)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Bans::InsertBan(Bans::Entry entry)
|
||||
{
|
||||
auto list = Bans::LoadBans();
|
||||
|
||||
Bans::AccessMutex.lock();
|
||||
|
||||
if (entry.first.Bits)
|
||||
{
|
||||
bool found = false;
|
||||
for (auto& idEntry : list.IDList)
|
||||
{
|
||||
if (idEntry.Bits == entry.first.Bits)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
list.IDList.push_back(entry.first);
|
||||
}
|
||||
}
|
||||
|
||||
if (entry.second.full)
|
||||
{
|
||||
bool found = false;
|
||||
for (auto& ipEntry : list.IPList)
|
||||
{
|
||||
if (ipEntry.full == entry.second.full)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
list.IPList.push_back(entry.second);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Write bans
|
||||
|
||||
Bans::AccessMutex.unlock();
|
||||
}
|
||||
|
||||
Bans::BanList Bans::LoadBans()
|
||||
{
|
||||
Bans::BanList list;
|
||||
Bans::AccessMutex.lock();
|
||||
|
||||
// TODO: Read bans
|
||||
|
||||
Bans::AccessMutex.unlock();
|
||||
return list;
|
||||
}
|
||||
|
||||
void Bans::BanClientNum(int num, std::string reason)
|
||||
{
|
||||
if (!Dvar::Var("sv_running").Get<bool>())
|
||||
@ -18,9 +107,12 @@ namespace Components
|
||||
|
||||
Game::client_t* client = &Game::svs_clients[num];
|
||||
|
||||
// TODO: Write player info into a ban database
|
||||
SteamID guid;
|
||||
guid.Bits = client->steamid;
|
||||
|
||||
SV_KickClientError(client, reason);
|
||||
Bans::InsertBan({ guid, client->addr.ip });
|
||||
|
||||
Game::SV_KickClientError(client, reason);
|
||||
}
|
||||
|
||||
Bans::Bans()
|
||||
|
@ -3,6 +3,8 @@ namespace Components
|
||||
class Bans : public Component
|
||||
{
|
||||
public:
|
||||
typedef std::pair<SteamID, Game::netIP_t> Entry;
|
||||
|
||||
Bans();
|
||||
~Bans();
|
||||
|
||||
@ -11,5 +13,20 @@ namespace Components
|
||||
#endif
|
||||
|
||||
static void BanClientNum(int num, std::string reason);
|
||||
|
||||
static bool IsBanned(Entry entry);
|
||||
static void InsertBan(Entry entry);
|
||||
|
||||
private:
|
||||
class BanList
|
||||
{
|
||||
public:
|
||||
std::vector<SteamID> IDList;
|
||||
std::vector<Game::netIP_t> IPList;
|
||||
};
|
||||
|
||||
static std::mutex AccessMutex;
|
||||
|
||||
static BanList LoadBans();
|
||||
};
|
||||
}
|
||||
|
@ -420,4 +420,14 @@ namespace Game
|
||||
|
||||
SV_KickClient(client, reason.data());
|
||||
}
|
||||
|
||||
void Scr_iPrintLn(int clientNum, std::string message)
|
||||
{
|
||||
Game::SV_GameSendServerCommand(clientNum, 0, Utils::String::VA("%c \"%s\"", 0x66, message.data()));
|
||||
}
|
||||
|
||||
void Scr_iPrintLnBold(int clientNum, std::string message)
|
||||
{
|
||||
Game::SV_GameSendServerCommand(clientNum, 0, Utils::String::VA("%c \"%s\"", 0x67, message.data()));
|
||||
}
|
||||
}
|
||||
|
@ -509,4 +509,7 @@ namespace Game
|
||||
|
||||
void SV_KickClient(client_t* client, const char* reason);
|
||||
void SV_KickClientError(client_t* client, std::string reason);
|
||||
|
||||
void Scr_iPrintLn(int clientNum, std::string message);
|
||||
void Scr_iPrintLnBold(int clientNum, std::string message);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user