From c975390195eed17c615bbebfab981a2394dec424 Mon Sep 17 00:00:00 2001 From: oy Date: Sat, 31 Dec 2011 12:11:48 +0100 Subject: made vote ban check if the ip matches an authed player --- src/engine/server.h | 6 ++++++ src/engine/server/server.cpp | 23 +++++++++++++++++++++-- src/engine/server/server.h | 1 + src/game/server/gamecontext.cpp | 3 ++- 4 files changed, 30 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/engine/server.h b/src/engine/server.h index f3c9ca7c..2e4a2f25 100644 --- a/src/engine/server.h +++ b/src/engine/server.h @@ -55,6 +55,12 @@ public: virtual void SnapSetStaticsize(int ItemType, int Size) = 0; + enum + { + RCON_CID_SERV=-1, + RCON_CID_VOTE=-2, + }; + virtual void SetRconCID(int ClientID) = 0; virtual bool IsAuthed(int ClientID) = 0; virtual void Kick(int ClientID, const char *pReason) = 0; diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index 04896022..de84ad35 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -202,6 +202,20 @@ int CServerBan::BanExt(T *pBanPool, const typename T::CDataType *pData, int Seco } } } + else if(Server()->m_RconClientID == IServer::RCON_CID_VOTE) + { + for(int i = 0; i < MAX_CLIENTS; ++i) + { + if(Server()->m_aClients[i].m_State == CServer::CClient::STATE_EMPTY) + continue; + + if(Server()->m_aClients[i].m_Authed != CServer::AUTHED_NO && NetMatch(pData, Server()->m_NetServer.ClientAddr(i))) + { + Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "ban error (command denied)"); + return -1; + } + } + } int Result = Ban(pBanPool, pData, Seconds, pReason); if(Result != 0) @@ -290,7 +304,7 @@ CServer::CServer() : m_DemoRecorder(&m_SnapshotDelta) m_MapReload = 0; - m_RconClientID = -1; + m_RconClientID = IServer::RCON_CID_SERV; m_RconAuthLevel = AUTHED_ADMIN; Init(); @@ -431,6 +445,11 @@ int CServer::Init() return 0; } +void CServer::SetRconCID(int ClientID) +{ + m_RconClientID = ClientID; +} + bool CServer::IsAuthed(int ClientID) { return m_aClients[ClientID].m_Authed; @@ -963,7 +982,7 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket) Console()->SetAccessLevel(m_aClients[ClientID].m_Authed == AUTHED_ADMIN ? IConsole::ACCESS_LEVEL_ADMIN : IConsole::ACCESS_LEVEL_MOD); Console()->ExecuteLineFlag(pCmd, CFGFLAG_SERVER); Console()->SetAccessLevel(IConsole::ACCESS_LEVEL_ADMIN); - m_RconClientID = -1; + m_RconClientID = IServer::RCON_CID_SERV; m_RconAuthLevel = AUTHED_ADMIN; } } diff --git a/src/engine/server/server.h b/src/engine/server/server.h index fe79a3da..e32f6733 100644 --- a/src/engine/server/server.h +++ b/src/engine/server/server.h @@ -177,6 +177,7 @@ public: int Init(); + void SetRconCID(int ClientID); bool IsAuthed(int ClientID); int GetClientInfo(int ClientID, CClientInfo *pInfo); void GetClientAddr(int ClientID, char *pAddrStr, int Size); diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp index 0cd8e801..1f163983 100644 --- a/src/game/server/gamecontext.cpp +++ b/src/game/server/gamecontext.cpp @@ -481,7 +481,9 @@ void CGameContext::OnTick() if(m_VoteEnforce == VOTE_ENFORCE_YES) { + Server()->SetRconCID(IServer::RCON_CID_VOTE); Console()->ExecuteLine(m_aVoteCommand); + Server()->SetRconCID(IServer::RCON_CID_SERV); EndVote(); SendChat(-1, CGameContext::CHAT_ALL, "Vote passed"); @@ -737,7 +739,6 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID) char aAddrStr[NETADDR_MAXSTRSIZE] = {0}; Server()->GetClientAddr(KickID, aAddrStr, sizeof(aAddrStr)); str_format(aCmd, sizeof(aCmd), "ban %s %d Banned by vote", aAddrStr, g_Config.m_SvVoteKickBantime); - Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aCmd); } } else if(str_comp_nocase(pMsg->m_Type, "spectate") == 0) -- cgit 1.4.1