From 8b62b051c8c5de5af8af3aa06981ce28f8c62420 Mon Sep 17 00:00:00 2001 From: heinrich5991 Date: Thu, 21 Apr 2011 17:36:22 +0200 Subject: banmaster for 0.6 with ipv6 support --- src/engine/shared/network_server.cpp | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'src/engine/shared/network_server.cpp') diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp index 3078ab9f..21da1e36 100644 --- a/src/engine/shared/network_server.cpp +++ b/src/engine/shared/network_server.cpp @@ -1,6 +1,7 @@ /* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ /* If you are missing that file, acquire a complete release at teeworlds.com. */ #include +#include #include "network.h" #define MACRO_LIST_LINK_FIRST(Object, First, Prev, Next) \ @@ -352,6 +353,22 @@ int CNetServer::Recv(CNetChunk *pChunk) // client that wants to connect if(!Found) { + CNetChunk Packet; + char aBuffer[sizeof(BANMASTER_IPCHECK) + NETADDR_MAXSTRSIZE]; + mem_copy(aBuffer, BANMASTER_IPCHECK, sizeof(BANMASTER_IPCHECK)); + net_addr_str(&Addr, aBuffer + sizeof(BANMASTER_IPCHECK), sizeof(aBuffer) - sizeof(BANMASTER_IPCHECK)); + + Packet.m_ClientID = -1; + Packet.m_Flags = NETSENDFLAG_CONNLESS; + Packet.m_DataSize = str_length(aBuffer) + 1; + Packet.m_pData = aBuffer; + + for(int i = 0; i < m_NumBanmasters; i++) + { + Packet.m_Address = m_aBanmasters[i]; + Send(&Packet); + } + // only allow a specific number of players with the same ip NETADDR ThisAddr = Addr, OtherAddr; int FoundAddr = 1; @@ -383,6 +400,7 @@ int CNetServer::Recv(CNetChunk *pChunk) m_aSlots[i].m_Connection.Feed(&m_RecvUnpacker.m_Data, &Addr); if(m_pfnNewClient) m_pfnNewClient(i, m_UserPtr); + break; } } @@ -461,3 +479,46 @@ void CNetServer::SetMaxClientsPerIP(int Max) m_MaxClientsPerIP = Max; } + +int CNetServer::BanmasterAdd(const char *pAddrStr) +{ + if(m_NumBanmasters >= MAX_BANMASTERS) + return 2; + + if(net_host_lookup(pAddrStr, &m_aBanmasters[m_NumBanmasters], NETTYPE_IPV4)) + return 1; + + if(m_aBanmasters[m_NumBanmasters].port == 0) + m_aBanmasters[m_NumBanmasters].port = BANMASTER_PORT; + + m_NumBanmasters++; + return 0; +} + +int CNetServer::BanmasterNum() const +{ + return m_NumBanmasters; +} + +NETADDR* CNetServer::BanmasterGet(int Index) +{ + if(Index < 0 || Index >= m_NumBanmasters) + return 0; + + return &m_aBanmasters[Index]; +} + +int CNetServer::BanmasterCheck(NETADDR *pAddr) +{ + for(int i = 0; i < m_NumBanmasters; i++) + if(net_addr_comp(&m_aBanmasters[i], pAddr) == 0) + return i; + + return -1; +} + +void CNetServer::BanmastersClear() +{ + m_NumBanmasters = 0; +} + -- cgit 1.4.1 From fd3ec6f721f7c4a8c610cb1c92a778c992e757e8 Mon Sep 17 00:00:00 2001 From: heinrich5991 Date: Thu, 21 Apr 2011 22:42:47 +0200 Subject: test/dbg --- banmasters.cfg | 4 +++- bans.cfg | 2 ++ src/banmaster/banmaster.cpp | 17 +++++++++-------- src/engine/server/server.cpp | 18 ++++++++++++++---- src/engine/shared/config_variables.h | 2 +- src/engine/shared/network_server.cpp | 6 ++++++ 6 files changed, 35 insertions(+), 14 deletions(-) (limited to 'src/engine/shared/network_server.cpp') diff --git a/banmasters.cfg b/banmasters.cfg index 2d943482..891ddbe2 100644 --- a/banmasters.cfg +++ b/banmasters.cfg @@ -1,2 +1,4 @@ clear_banmasters -add_banmaster banmaster.kottnet.net +add_banmaster 127.0.0.1 +add_banmaster 192.168.2.2:8302 +add_banmaster 2342334.1.2.3 diff --git a/bans.cfg b/bans.cfg index a32469c6..17c62828 100644 --- a/bans.cfg +++ b/bans.cfg @@ -1 +1,3 @@ unban_all +ban 127.0.0.2 +bind 127.0.0.1:8302 diff --git a/src/banmaster/banmaster.cpp b/src/banmaster/banmaster.cpp index 8c7014ec..44490c1d 100644 --- a/src/banmaster/banmaster.cpp +++ b/src/banmaster/banmaster.cpp @@ -11,7 +11,7 @@ enum { MAX_BANS=1024, BAN_REREAD_TIME=300, - CFGFLAG_BANMASTER=16 + CFGFLAG_BANMASTER=32 }; static const char BANMASTER_BANFILE[] = "bans.cfg"; @@ -216,16 +216,15 @@ int main(int argc, const char **argv) // ignore_convention m_Net.Update(); // process m_aPackets - CNetChunk p; - while(m_Net.Recv(&p)) + CNetChunk Packet; + while(m_Net.Recv(&Packet)) { char aAddressStr[NETADDR_MAXSTRSIZE]; - net_addr_str(&p.m_Address, aAddressStr, sizeof(aAddressStr)); + net_addr_str(&Packet.m_Address, aAddressStr, sizeof(aAddressStr)); - if(p.m_DataSize >= sizeof(BANMASTER_IPCHECK) && - mem_comp(p.m_pData, BANMASTER_IPCHECK, sizeof(BANMASTER_IPCHECK)) == 0) + if(Packet.m_DataSize >= sizeof(BANMASTER_IPCHECK) && mem_comp(Packet.m_pData, BANMASTER_IPCHECK, sizeof(BANMASTER_IPCHECK)) == 0) { - char *pAddr = (char*)p.m_pData + sizeof(BANMASTER_IPCHECK); + char *pAddr = (char *)Packet.m_pData + sizeof(BANMASTER_IPCHECK); NETADDR CheckAddr; if(net_addr_from_str(&CheckAddr, pAddr)) { @@ -235,13 +234,15 @@ int main(int argc, const char **argv) // ignore_convention { CheckAddr.port = 0; - int Banned = SendResponse(&p.m_Address, &CheckAddr); + int Banned = SendResponse(&Packet.m_Address, &CheckAddr); char aBuf[NETADDR_MAXSTRSIZE]; net_addr_str(&CheckAddr, aBuf, sizeof(aBuf)); dbg_msg("banmaster", "responded to checkmsg, ip=%s checkaddr=%s result=%s", aAddressStr, aBuf, (Banned) ? "ban" : "ok"); } } + else + dbg_msg("banmaster", "dropped weird packet, ip=%s content='%s'", aAddressStr, (char *)Packet.m_pData); } if(time_get() - LastUpdate > time_freq() * BAN_REREAD_TIME) diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index d6bfba8b..b6128822 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -1034,10 +1034,20 @@ void CServer::PumpNetwork() }*/ if(Packet.m_DataSize >= sizeof(BANMASTER_IPBAN) && - mem_comp(Packet.m_pData, BANMASTER_IPBAN, sizeof(BANMASTER_IPBAN)) == 0 && - g_Config.m_SvGlobalBantime && - m_NetServer.BanmasterCheck(&Packet.m_Address) != -1) + mem_comp(Packet.m_pData, BANMASTER_IPBAN, sizeof(BANMASTER_IPBAN)) == 0) { + dbg_msg("dbg", "a"); + + if(!g_Config.m_SvGlobalBantime) + return; + + dbg_msg("dbg", "b"); + + if(m_NetServer.BanmasterCheck(&Packet.m_Address) == -1) + return; + + dbg_msg("dbg", "c"); + CUnpacker Up; char aIp[NETADDR_MAXSTRSIZE]; char aReason[256]; @@ -1157,7 +1167,7 @@ int CServer::Run() } - if(!m_NetServer.Open(BindAddr, g_Config.m_SvMaxClients, g_Config.m_SvMaxClientsPerIP, 0)); + if(!m_NetServer.Open(BindAddr, g_Config.m_SvMaxClients, g_Config.m_SvMaxClientsPerIP, 0)) { dbg_msg("server", "couldn't open socket. port might already be in use"); return -1; diff --git a/src/engine/shared/config_variables.h b/src/engine/shared/config_variables.h index 5d34294d..a540bc8a 100644 --- a/src/engine/shared/config_variables.h +++ b/src/engine/shared/config_variables.h @@ -82,7 +82,7 @@ MACRO_CONFIG_INT(SvRegister, sv_register, 1, 0, 1, CFGFLAG_SERVER, "Register ser MACRO_CONFIG_STR(SvRconPassword, sv_rcon_password, 32, "", CFGFLAG_SERVER, "Remote console password") MACRO_CONFIG_INT(SvRconMaxTries, sv_rcon_max_tries, 3, 0, 100, CFGFLAG_SERVER, "Maximum number of tries for remote console authentication") MACRO_CONFIG_INT(SvRconBantime, sv_rcon_bantime, 5, 0, 1440, CFGFLAG_SERVER, "The time a client gets banned if remote console authentication fails. 0 makes it just use kick") -MACRO_CONFIG_INT(SvGlobalBantime, sv_global_ban_time, 60, 0, 1440, CFGFLAG_SERVER, "The time a client gets banned if the ban server reports it. 0 to disable") +MACRO_CONFIG_INT(SvGlobalBantime, sv_global_bantime, 60, 0, 1440, CFGFLAG_SERVER, "The time a client gets banned if the ban server reports it. 0 to disable") MACRO_CONFIG_INT(Debug, debug, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SERVER, "Debug mode") MACRO_CONFIG_INT(DbgStress, dbg_stress, 0, 0, 0, CFGFLAG_CLIENT|CFGFLAG_SERVER, "Stress systems") diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp index 21da1e36..9efd406e 100644 --- a/src/engine/shared/network_server.cpp +++ b/src/engine/shared/network_server.cpp @@ -349,10 +349,12 @@ int CNetServer::Recv(CNetChunk *pChunk) break; } } + dbg_msg("wtf", "."); // client that wants to connect if(!Found) { + dbg_msg("wtf", ","); CNetChunk Packet; char aBuffer[sizeof(BANMASTER_IPCHECK) + NETADDR_MAXSTRSIZE]; mem_copy(aBuffer, BANMASTER_IPCHECK, sizeof(BANMASTER_IPCHECK)); @@ -362,9 +364,13 @@ int CNetServer::Recv(CNetChunk *pChunk) Packet.m_Flags = NETSENDFLAG_CONNLESS; Packet.m_DataSize = str_length(aBuffer) + 1; Packet.m_pData = aBuffer; + dbg_msg("dbg", ","); for(int i = 0; i < m_NumBanmasters; i++) { + char aBufdbg[NETADDR_MAXSTRSIZE]; + net_addr_str(&m_aBanmasters[i], aBufdbg, sizeof(aBufdbg)); + dbg_msg("dbg", "%s", aBufdbg); Packet.m_Address = m_aBanmasters[i]; Send(&Packet); } -- cgit 1.4.1 From f8166ff052b3ef4a3211c7651df33dbc20175218 Mon Sep 17 00:00:00 2001 From: heinrich5991 Date: Fri, 22 Apr 2011 18:33:32 +0200 Subject: removed dbgs from banmaster --- banmasters.cfg | 5 ++--- bans.cfg | 1 - src/banmaster/banmaster.cpp | 2 +- src/engine/server/server.cpp | 8 +------- src/engine/shared/network_server.cpp | 6 ------ 5 files changed, 4 insertions(+), 18 deletions(-) (limited to 'src/engine/shared/network_server.cpp') diff --git a/banmasters.cfg b/banmasters.cfg index 891ddbe2..30f3075c 100644 --- a/banmasters.cfg +++ b/banmasters.cfg @@ -1,4 +1,3 @@ clear_banmasters -add_banmaster 127.0.0.1 -add_banmaster 192.168.2.2:8302 -add_banmaster 2342334.1.2.3 +add_banmaster banmaster.kottnet.net + diff --git a/bans.cfg b/bans.cfg index 17c62828..bc3e1d65 100644 --- a/bans.cfg +++ b/bans.cfg @@ -1,3 +1,2 @@ unban_all -ban 127.0.0.2 bind 127.0.0.1:8302 diff --git a/src/banmaster/banmaster.cpp b/src/banmaster/banmaster.cpp index 44490c1d..f68afb0c 100644 --- a/src/banmaster/banmaster.cpp +++ b/src/banmaster/banmaster.cpp @@ -242,7 +242,7 @@ int main(int argc, const char **argv) // ignore_convention } } else - dbg_msg("banmaster", "dropped weird packet, ip=%s content='%s'", aAddressStr, (char *)Packet.m_pData); + dbg_msg("banmaster", "dropped weird packet, ip=%s", aAddressStr, (char *)Packet.m_pData); } if(time_get() - LastUpdate > time_freq() * BAN_REREAD_TIME) diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index b6128822..f7898f26 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -1036,17 +1036,11 @@ void CServer::PumpNetwork() if(Packet.m_DataSize >= sizeof(BANMASTER_IPBAN) && mem_comp(Packet.m_pData, BANMASTER_IPBAN, sizeof(BANMASTER_IPBAN)) == 0) { - dbg_msg("dbg", "a"); - if(!g_Config.m_SvGlobalBantime) return; - - dbg_msg("dbg", "b"); - + if(m_NetServer.BanmasterCheck(&Packet.m_Address) == -1) return; - - dbg_msg("dbg", "c"); CUnpacker Up; char aIp[NETADDR_MAXSTRSIZE]; diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp index 9efd406e..21da1e36 100644 --- a/src/engine/shared/network_server.cpp +++ b/src/engine/shared/network_server.cpp @@ -349,12 +349,10 @@ int CNetServer::Recv(CNetChunk *pChunk) break; } } - dbg_msg("wtf", "."); // client that wants to connect if(!Found) { - dbg_msg("wtf", ","); CNetChunk Packet; char aBuffer[sizeof(BANMASTER_IPCHECK) + NETADDR_MAXSTRSIZE]; mem_copy(aBuffer, BANMASTER_IPCHECK, sizeof(BANMASTER_IPCHECK)); @@ -364,13 +362,9 @@ int CNetServer::Recv(CNetChunk *pChunk) Packet.m_Flags = NETSENDFLAG_CONNLESS; Packet.m_DataSize = str_length(aBuffer) + 1; Packet.m_pData = aBuffer; - dbg_msg("dbg", ","); for(int i = 0; i < m_NumBanmasters; i++) { - char aBufdbg[NETADDR_MAXSTRSIZE]; - net_addr_str(&m_aBanmasters[i], aBufdbg, sizeof(aBufdbg)); - dbg_msg("dbg", "%s", aBufdbg); Packet.m_Address = m_aBanmasters[i]; Send(&Packet); } -- cgit 1.4.1