about summary refs log tree commit diff
path: root/src/engine/server
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2011-12-31 12:11:48 +0100
committeroy <Tom_Adams@web.de>2011-12-31 12:11:48 +0100
commitc975390195eed17c615bbebfab981a2394dec424 (patch)
treeae0618de6bb9ccec45bc42d444c6204eb3f771c9 /src/engine/server
parentccaec795675b92c36da77e8d1e42e176f60b4e21 (diff)
downloadzcatch-c975390195eed17c615bbebfab981a2394dec424.tar.gz
zcatch-c975390195eed17c615bbebfab981a2394dec424.zip
made vote ban check if the ip matches an authed player
Diffstat (limited to 'src/engine/server')
-rw-r--r--src/engine/server/server.cpp23
-rw-r--r--src/engine/server/server.h1
2 files changed, 22 insertions, 2 deletions
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);