mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-14 20:18:19 +00:00
Implement bans_find command.
This rcon command simplifies searching for all ban records for a specific IP if the ban list has too many records.
This commit is contained in:
parent
c0ff4c35f4
commit
82b274cc0e
|
@ -286,6 +286,7 @@ void CNetBan::Init(IConsole *pConsole, IStorage *pStorage)
|
||||||
Console()->Register("unban_range", "s[first ip] s[last ip]", CFGFLAG_SERVER | CFGFLAG_MASTER | CFGFLAG_STORE, ConUnbanRange, this, "Unban ip range");
|
Console()->Register("unban_range", "s[first ip] s[last ip]", CFGFLAG_SERVER | CFGFLAG_MASTER | CFGFLAG_STORE, ConUnbanRange, this, "Unban ip range");
|
||||||
Console()->Register("unban_all", "", CFGFLAG_SERVER | CFGFLAG_MASTER | CFGFLAG_STORE, ConUnbanAll, this, "Unban all entries");
|
Console()->Register("unban_all", "", CFGFLAG_SERVER | CFGFLAG_MASTER | CFGFLAG_STORE, ConUnbanAll, this, "Unban all entries");
|
||||||
Console()->Register("bans", "?i[page]", CFGFLAG_SERVER | CFGFLAG_MASTER, ConBans, this, "Show banlist (page 1 by default, 20 entries per page)");
|
Console()->Register("bans", "?i[page]", CFGFLAG_SERVER | CFGFLAG_MASTER, ConBans, this, "Show banlist (page 1 by default, 20 entries per page)");
|
||||||
|
Console()->Register("bans_find", "s[ip]", CFGFLAG_SERVER | CFGFLAG_MASTER, ConBansFind, this, "Find all ban records for the specified IP address");
|
||||||
Console()->Register("bans_save", "s[file]", CFGFLAG_SERVER | CFGFLAG_MASTER | CFGFLAG_STORE, ConBansSave, this, "Save banlist in a file");
|
Console()->Register("bans_save", "s[file]", CFGFLAG_SERVER | CFGFLAG_MASTER | CFGFLAG_STORE, ConBansSave, this, "Save banlist in a file");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -528,6 +529,55 @@ void CNetBan::ConBans(IConsole::IResult *pResult, void *pUser)
|
||||||
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", aMsg);
|
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", aMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CNetBan::ConBansFind(IConsole::IResult *pResult, void *pUser)
|
||||||
|
{
|
||||||
|
CNetBan *pThis = static_cast<CNetBan *>(pUser);
|
||||||
|
|
||||||
|
const char *pStr = pResult->GetString(0);
|
||||||
|
char aBuf[256], aMsg[256];
|
||||||
|
|
||||||
|
NETADDR Addr;
|
||||||
|
if(net_addr_from_str(&Addr, pStr) != 0)
|
||||||
|
{
|
||||||
|
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", "bans_find error (invalid network address)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Count = 0;
|
||||||
|
int Found = 0;
|
||||||
|
// Check first for bans
|
||||||
|
for(CBanAddr *pBan = pThis->m_BanAddrPool.First(); pBan; pBan = pBan->m_pNext, Count++)
|
||||||
|
{
|
||||||
|
if(NetComp(&pBan->m_Data, &Addr) == 0)
|
||||||
|
{
|
||||||
|
pThis->MakeBanInfo(pBan, aBuf, sizeof(aBuf), MSGTYPE_LIST);
|
||||||
|
str_format(aMsg, sizeof(aMsg), "#%i %s", Count, aBuf);
|
||||||
|
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", aMsg);
|
||||||
|
|
||||||
|
Found++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// check ban ranges
|
||||||
|
for(CBanRange *pBan = pThis->m_BanRangePool.First(); pBan; pBan = pBan->m_pNext, Count++)
|
||||||
|
{
|
||||||
|
if(pThis->NetMatch(&pBan->m_Data, &Addr))
|
||||||
|
{
|
||||||
|
pThis->MakeBanInfo(pBan, aBuf, sizeof(aBuf), MSGTYPE_LIST);
|
||||||
|
str_format(aMsg, sizeof(aMsg), "#%i %s", Count, aBuf);
|
||||||
|
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", aMsg);
|
||||||
|
|
||||||
|
Found++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Found)
|
||||||
|
str_format(aMsg, sizeof(aMsg), "%i ban records found.", Found);
|
||||||
|
else
|
||||||
|
str_copy(aMsg, "No ban records found.", sizeof(aMsg));
|
||||||
|
|
||||||
|
pThis->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "net_ban", aMsg);
|
||||||
|
}
|
||||||
|
|
||||||
void CNetBan::ConBansSave(IConsole::IResult *pResult, void *pUser)
|
void CNetBan::ConBansSave(IConsole::IResult *pResult, void *pUser)
|
||||||
{
|
{
|
||||||
CNetBan *pThis = static_cast<CNetBan *>(pUser);
|
CNetBan *pThis = static_cast<CNetBan *>(pUser);
|
||||||
|
|
|
@ -191,6 +191,7 @@ public:
|
||||||
static void ConUnbanRange(class IConsole::IResult *pResult, void *pUser);
|
static void ConUnbanRange(class IConsole::IResult *pResult, void *pUser);
|
||||||
static void ConUnbanAll(class IConsole::IResult *pResult, void *pUser);
|
static void ConUnbanAll(class IConsole::IResult *pResult, void *pUser);
|
||||||
static void ConBans(class IConsole::IResult *pResult, void *pUser);
|
static void ConBans(class IConsole::IResult *pResult, void *pUser);
|
||||||
|
static void ConBansFind(class IConsole::IResult *pResult, void *pUser);
|
||||||
static void ConBansSave(class IConsole::IResult *pResult, void *pUser);
|
static void ConBansSave(class IConsole::IResult *pResult, void *pUser);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue