forked from mirror/OpenTTD
(svn r1322) -Add: banning system (mostly tnx to guru3)
A server can ban people via ClientList Both server and dedicated can do it via console: 'ban', 'unban', 'banlist'.
This commit is contained in:
@@ -144,6 +144,87 @@ DEF_CONSOLE_CMD(ConScrollToTile)
|
||||
// ********************************* //
|
||||
#ifdef ENABLE_NETWORK
|
||||
|
||||
DEF_CONSOLE_CMD(ConBan)
|
||||
{
|
||||
NetworkClientInfo *ci;
|
||||
|
||||
if (argc == 2) {
|
||||
uint32 index = atoi(argv[1]);
|
||||
if (index == NETWORK_SERVER_INDEX && !_network_dedicated) {
|
||||
IConsolePrint(_iconsole_color_default, "Silly boy, you can not ban yourself!");
|
||||
return NULL;
|
||||
}
|
||||
if (index == 0) {
|
||||
IConsoleError("Invalid Client-ID");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ci = NetworkFindClientInfoFromIndex(index);
|
||||
|
||||
if (ci != NULL) {
|
||||
uint i;
|
||||
/* Add user to ban-list */
|
||||
for (i = 0; i < lengthof(_network_ban_list); i++) {
|
||||
if (_network_ban_list[i] == NULL || _network_ban_list[i][0] == '\0') {
|
||||
_network_ban_list[i] = strdup(inet_ntoa(*(struct in_addr *)&ci->client_ip));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SEND_COMMAND(PACKET_SERVER_ERROR)(NetworkFindClientStateFromIndex(index), NETWORK_ERROR_KICKED);
|
||||
return NULL;
|
||||
} else {
|
||||
IConsoleError("Client-ID not found");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
IConsolePrint(_iconsole_color_default, "Unknown usage. Usage: ban <client-id>. For client-ids, see 'clients'.");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConUnBan)
|
||||
{
|
||||
if (argc == 2) {
|
||||
uint i;
|
||||
for (i = 0; i < lengthof(_network_ban_list); i++) {
|
||||
if (_network_ban_list[i] == NULL || _network_ban_list[i][0] == '\0')
|
||||
continue;
|
||||
|
||||
if (strncmp(_network_ban_list[i], argv[1], strlen(_network_ban_list[i])) == 0) {
|
||||
_network_ban_list[i][0] = '\0';
|
||||
IConsolePrint(_iconsole_color_default, "IP unbanned.");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
IConsolePrint(_iconsole_color_default, "IP not in ban-list.");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
IConsolePrint(_iconsole_color_default, "Unknown usage. Usage: unban <ip>.");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConBanList)
|
||||
{
|
||||
uint i;
|
||||
|
||||
IConsolePrint(_iconsole_color_default, "Banlist: ");
|
||||
|
||||
for (i = 0; i < lengthof(_network_ban_list); i++) {
|
||||
if (_network_ban_list[i] == NULL || _network_ban_list[i][0] == '\0')
|
||||
continue;
|
||||
|
||||
IConsolePrintF(_iconsole_color_default, " %d) %s", i + 1, _network_ban_list[i]);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConStatus)
|
||||
{
|
||||
const char *status;
|
||||
@@ -978,6 +1059,13 @@ void IConsoleStdLibRegister(void)
|
||||
IConsoleCmdHook("status", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
|
||||
IConsoleCmdHook("resetengines", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetwork);
|
||||
|
||||
IConsoleCmdRegister("ban", ConBan);
|
||||
IConsoleCmdHook("ban", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
|
||||
IConsoleCmdRegister("unban", ConUnBan);
|
||||
IConsoleCmdHook("unban", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
|
||||
IConsoleCmdRegister("banlist", ConBanList);
|
||||
IConsoleCmdHook("banlist", ICONSOLE_HOOK_ACCESS, ConCmdHookNoNetClient);
|
||||
|
||||
IConsoleAliasRegister("clean_company", "reset_company %A");
|
||||
|
||||
IConsoleVarRegister("net_frame_freq", &_network_frame_freq, ICONSOLE_VAR_UINT8);
|
||||
|
Reference in New Issue
Block a user