From c1f6d549df251b3284b3f2631e720d5b1bddf339 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Mon, 4 Jan 2016 01:44:18 -0500 Subject: [PATCH] Changed ban flag type from uint8_t to uint16_t Added flag: USE_RDNS Added "AddBan" IRC Command. --- Release/Plugins/RenX.Core.lib | Bin 152658 -> 153594 bytes RenX.Commands/RenX_Commands.cpp | 165 +++++++++++++++++++++++++++++++- RenX.Commands/RenX_Commands.h | 1 + RenX.Core/RenX_BanDatabase.cpp | 6 +- RenX.Core/RenX_BanDatabase.h | 32 ++++--- RenX.Core/RenX_PlayerInfo.h | 2 +- RenX.Core/RenX_Server.cpp | 2 +- 7 files changed, 188 insertions(+), 20 deletions(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index fb645884eb11effcd638ceb18d06d383e33f68f3..5bdefac728da4370a4ed27f2f9e3923154a23e7d 100644 GIT binary patch delta 18602 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 wQ1XB)hMBQBvj#NQJ1ST{=q=i8aAYxD{7Dy-p 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 diff --git a/RenX.Commands/RenX_Commands.cpp b/RenX.Commands/RenX_Commands.cpp index dc7bebb..563c5ea 100644 --- a/RenX.Commands/RenX_Commands.cpp +++ b/RenX.Commands/RenX_Commands.cpp @@ -1167,11 +1167,13 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString const Jupiter::ReadableString &banner = entry->varData.get(pluginInstance.getName()); strftime(timeStr, sizeof(timeStr), "%b %d %Y; Time: %H:%M:%S", localtime(&(entry->timestamp))); - if ((entry->flags & 0x7F) == 0) + if ((entry->flags & 0x7FFF) == 0) types = " NULL;"_jrs; else { types.erase(); + if (entry->is_rdns_ban()) + types += " rdns"_jrs; if (entry->is_type_game()) types += " game"_jrs; if (entry->is_type_chat()) @@ -1979,6 +1981,167 @@ const Jupiter::ReadableString &KickBanIRCCommand::getHelp(const Jupiter::Readabl IRC_COMMAND_INIT(KickBanIRCCommand) +// AddBan IRC Command + +#define ADDBAN_WHITESPACE " \t=" + +void AddBanIRCCommand::create() +{ + this->addTrigger("addban"_jrs); + this->addTrigger("banadd"_jrs); + this->setAccessLevel(4); +} + +void AddBanIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &channel, const Jupiter::ReadableString &nick, const Jupiter::ReadableString ¶meters) +{ + if (parameters.isNotEmpty()) + { + Jupiter::IRC::Client::Channel *chan = source->getChannel(channel); + if (chan != nullptr) + { + size_t words = parameters.wordCount(ADDBAN_WHITESPACE); + if (words == 0) + source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: KickBan [Reason]")); + else if (words == 1) + KickBanIRCCommand_instance.trigger(source, channel, nick, parameters); + else + { + size_t index = 0; + Jupiter::ReferenceString name; + Jupiter::CStringS ip_str; + uint32_t ip = 0U; + uint8_t prefix_length = 32U; + uint64_t steamid = 0U; + Jupiter::StringS rdns; + Jupiter::String banner = nick + "@IRC"_jrs; + Jupiter::ReferenceString reason = "No reason"_jrs; + time_t duration = 0; + uint16_t flags = 0; + + Jupiter::ReferenceString word; + while (index != words) + { + word = Jupiter::ReferenceString::getWord(parameters, index++, ADDBAN_WHITESPACE); + + if (word.equalsi("Name"_jrs) || word.equalsi("Nick"_jrs) || word.equalsi("Nickname"_jrs) || word.equalsi("Username"_jrs)) + { + if (index == words) + { + source->sendNotice(nick, "ERROR: No value specified for token: "_jrs + word); + return; + } + + name = Jupiter::ReferenceString::getWord(parameters, index++, ADDBAN_WHITESPACE); + } + else if (word.equalsi("IP"_jrs) || word.equalsi("IPAddress"_jrs) || word.equalsi("Address"_jrs)) + { + if (index == words) + { + source->sendNotice(nick, "ERROR: No value specified for token: "_jrs + word); + return; + } + + ip_str = Jupiter::ReferenceString::getWord(parameters, index++, ADDBAN_WHITESPACE); + } + else if (word.equalsi("Steam"_jrs) || word.equalsi("SteamID"_jrs)) + { + if (index == words) + { + source->sendNotice(nick, "ERROR: No value specified for token: "_jrs + word); + return; + } + + steamid = Jupiter::ReferenceString::getWord(parameters, index++, ADDBAN_WHITESPACE).asUnsignedLongLong(); + } + else if (word.equalsi("RDNS"_jrs) || word.equalsi("DNS"_jrs)) + { + if (index == words) + { + source->sendNotice(nick, "ERROR: No value specified for token: "_jrs + word); + return; + } + + rdns = Jupiter::ReferenceString::getWord(parameters, index++, ADDBAN_WHITESPACE); + } + else if (word.equalsi("Reason"_jrs)) + { + if (index == words) + { + source->sendNotice(nick, "ERROR: No value specified for token: "_jrs + word); + return; + } + + reason = Jupiter::ReferenceString::gotoWord(parameters, index++, ADDBAN_WHITESPACE); + break; + } + else if (word.equalsi("Duration"_jrs) || word.equalsi("Length"_jrs) || word.equalsi("Time"_jrs)) + { + if (index == words) + { + source->sendNotice(nick, "ERROR: No value specified for token: "_jrs + word); + return; + } + + duration = Jupiter::ReferenceString::getWord(parameters, index++, ADDBAN_WHITESPACE).asUnsignedLongLong(); + } + else if (word.equalsi("Game"_jrs)) + flags |= RenX::BanDatabase::Entry::FLAG_TYPE_GAME; + else if (word.equalsi("Chat"_jrs)) + flags |= RenX::BanDatabase::Entry::FLAG_TYPE_CHAT; + else if (word.equalsi("Bot"_jrs) || word.equalsi("Command"_jrs)) + flags |= RenX::BanDatabase::Entry::FLAG_TYPE_BOT; + else if (word.equalsi("Vote"_jrs) || word.equalsi("Poll"_jrs)) + flags |= RenX::BanDatabase::Entry::FLAG_TYPE_VOTE; + else if (word.equalsi("Mine"_jrs)) + flags |= RenX::BanDatabase::Entry::FLAG_TYPE_MINE; + else if (word.equalsi("Ladder"_jrs)) + flags |= RenX::BanDatabase::Entry::FLAG_TYPE_LADDER; + else if (word.equalsi("Alert"_jrs)) + flags |= RenX::BanDatabase::Entry::FLAG_TYPE_ALERT; + else + { + source->sendNotice(nick, "ERROR: Unknown token: "_jrs + word); + return; + } + } + + // Default to Game type + if (flags == 0) + flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME; + + index = ip_str.find('/'); + if (index != JUPITER_INVALID_INDEX) + { + prefix_length = Jupiter::ReferenceString::substring(ip_str, index + 1).asUnsignedInt(); + if (prefix_length == 0) + prefix_length = 32U; + ip_str.set(ip_str.ptr(), index); + } + ip = Jupiter::Socket::pton4(ip_str.c_str()); + + if (rdns.isEmpty()) + Jupiter::Socket::resolveHostname(ip_str.c_str(), 0); + else + flags |= RenX::BanDatabase::Entry::FLAG_USE_RDNS; + + RenX::banDatabase->add(name, ip, prefix_length, steamid, rdns, banner, reason, duration); + } + } + } + else source->sendNotice(nick, STRING_LITERAL_AS_REFERENCE("Error: Too Few Parameters. Syntax: AddBan [...]")); +} + +const Jupiter::ReadableString &AddBanIRCCommand::getHelp(const Jupiter::ReadableString ¶meters) +{ + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Adds a ban entry to the ban list. Use \"help addban keys\" for a list of input keys. Syntax: AddBan [ ...]"); + static STRING_LITERAL_AS_NAMED_REFERENCE(keyHelp, "Valueless keys (flags): Game, Chat, Bot, Vote, Mine, Ladder, Alert; Value-paired keys: Name, IP, Steam, RDNS, Duration, Reason (MUST BE LAST)"); + if (parameters.isNotEmpty() && parameters.equalsi("keys"_jrs)) + return keyHelp; + return defaultHelp; +} + +IRC_COMMAND_INIT(AddBanIRCCommand) + // UnBan IRC Command void UnBanIRCCommand::create() diff --git a/RenX.Commands/RenX_Commands.h b/RenX.Commands/RenX_Commands.h index a790a1c..b8fb10d 100644 --- a/RenX.Commands/RenX_Commands.h +++ b/RenX.Commands/RenX_Commands.h @@ -85,6 +85,7 @@ GENERIC_IRC_COMMAND(MineBanIRCCommand) GENERIC_IRC_COMMAND(KickIRCCommand) GENERIC_IRC_COMMAND(TempBanIRCCommand) GENERIC_IRC_COMMAND(KickBanIRCCommand) +GENERIC_IRC_COMMAND(AddBanIRCCommand) GENERIC_IRC_COMMAND(UnBanIRCCommand) GENERIC_IRC_COMMAND(AddBotsIRCCommand) GENERIC_IRC_COMMAND(KillBotsIRCCommand) diff --git a/RenX.Core/RenX_BanDatabase.cpp b/RenX.Core/RenX_BanDatabase.cpp index 851a209..3c71f20 100644 --- a/RenX.Core/RenX_BanDatabase.cpp +++ b/RenX.Core/RenX_BanDatabase.cpp @@ -39,7 +39,7 @@ void RenX::BanDatabase::process_data(Jupiter::DataBuffer &buffer, FILE *file, fp entry->pos = pos; // Read data from buffer to entry - entry->flags = buffer.pop(); + entry->flags = buffer.pop(); entry->timestamp = buffer.pop(); entry->length = buffer.pop(); entry->steamid = buffer.pop(); @@ -138,7 +138,7 @@ void RenX::BanDatabase::write(RenX::BanDatabase::Entry *entry, FILE *file) buffer.push_to(file); } -void RenX::BanDatabase::add(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason, time_t length, uint8_t flags) +void RenX::BanDatabase::add(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason, time_t length, uint16_t flags) { Entry *entry = new Entry(); entry->set_active(); @@ -164,7 +164,7 @@ void RenX::BanDatabase::add(RenX::Server *server, const RenX::PlayerInfo *player RenX::BanDatabase::write(entry); } -void RenX::BanDatabase::add(const Jupiter::ReadableString &name, uint32_t ip, uint8_t prefix_length, uint64_t steamid, const Jupiter::ReadableString &rdns, Jupiter::ReadableString &banner, Jupiter::ReadableString &reason, time_t length, uint8_t flags) +void RenX::BanDatabase::add(const Jupiter::ReadableString &name, uint32_t ip, uint8_t prefix_length, uint64_t steamid, const Jupiter::ReadableString &rdns, Jupiter::ReadableString &banner, Jupiter::ReadableString &reason, time_t length, uint16_t flags) { Entry *entry = new Entry(); entry->set_active(); diff --git a/RenX.Core/RenX_BanDatabase.h b/RenX.Core/RenX_BanDatabase.h index a82b079..744262e 100644 --- a/RenX.Core/RenX_BanDatabase.h +++ b/RenX.Core/RenX_BanDatabase.h @@ -80,7 +80,7 @@ namespace RenX struct RENX_API Entry { fpos_t pos; /** Position of the entry in the database */ - uint8_t flags /** Flags affecting this ban entry (0 = Active, 1 = Game, 2 = Chat, 3 = Command, 4 = Vote, 5 = Mine, 6 = Ladder, 7 = Alert Mods) */ = 0x00; + uint16_t flags /** Flags affecting this ban entry (See below for flags) */ = 0x00; time_t timestamp /** Time the ban was created */; time_t length /** Duration of the ban; 0 if permanent */; uint64_t steamid /** SteamID of the banned player */; @@ -92,16 +92,19 @@ namespace RenX Jupiter::StringS reason /** Reason the player was banned */; Jupiter::INIFile::Section varData; /** Variable entry data */ - static const uint8_t FLAG_ACTIVE = 0x80; - static const uint8_t FLAG_TYPE_GAME = 0x40; - static const uint8_t FLAG_TYPE_CHAT = 0x20; - static const uint8_t FLAG_TYPE_BOT = 0x10; - static const uint8_t FLAG_TYPE_VOTE = 0x08; - static const uint8_t FLAG_TYPE_MINE = 0x04; - static const uint8_t FLAG_TYPE_LADDER = 0x02; - static const uint8_t FLAG_TYPE_ALERT = 0x01; + static const uint16_t FLAG_ACTIVE = 0x8000U; + static const uint16_t FLAG_USE_RDNS = 0x4000U; + static const uint16_t FLAG_TYPE_GAME = 0x0080U; + static const uint16_t FLAG_TYPE_CHAT = 0x0040U; + static const uint16_t FLAG_TYPE_BOT = 0x0020U; + static const uint16_t FLAG_TYPE_VOTE = 0x0010U; + static const uint16_t FLAG_TYPE_MINE = 0x0008U; + static const uint16_t FLAG_TYPE_LADDER = 0x0004U; + static const uint16_t FLAG_TYPE_ALERT = 0x0002U; + inline bool is_active() { return (flags & FLAG_ACTIVE) != 0; }; + inline bool is_rdns_ban() { return (flags & FLAG_USE_RDNS) != 0; }; inline bool is_type_game() { return (flags & FLAG_TYPE_GAME) != 0; }; inline bool is_type_chat() { return (flags & FLAG_TYPE_CHAT) != 0; }; inline bool is_type_bot() { return (flags & FLAG_TYPE_BOT) != 0; }; @@ -109,9 +112,9 @@ namespace RenX inline bool is_type_mine() { return (flags & FLAG_TYPE_MINE) != 0; }; inline bool is_type_ladder() { return (flags & FLAG_TYPE_LADDER) != 0; }; inline bool is_type_alert() { return (flags & FLAG_TYPE_ALERT) != 0; }; - inline bool is_type_global() { return ~(flags | 0x01) == 0; }; inline void set_active() { flags |= FLAG_ACTIVE; }; + inline void set_rdns_ban() { flags |= FLAG_USE_RDNS; } inline void set_type_game() { flags |= FLAG_TYPE_GAME; }; inline void set_type_chat() { flags |= FLAG_TYPE_CHAT; }; inline void set_type_bot() { flags |= FLAG_TYPE_BOT; }; @@ -119,9 +122,10 @@ namespace RenX inline void set_type_mine() { flags |= FLAG_TYPE_MINE; }; inline void set_type_ladder() { flags |= FLAG_TYPE_LADDER; }; inline void set_type_alert() { flags |= FLAG_TYPE_ALERT; }; - inline void set_type_global() { flags = 0xFF; }; + inline void set_type_global() { flags = 0xFFFFU; }; inline void unset_active() { flags &= ~FLAG_ACTIVE; }; + inline void unset_rdns_ban() { flags &= ~FLAG_USE_RDNS; } inline void unset_type_game() { flags &= ~FLAG_TYPE_GAME; }; inline void unset_type_chat() { flags &= ~FLAG_TYPE_CHAT; }; inline void unset_type_bot() { flags &= ~FLAG_TYPE_BOT; }; @@ -129,7 +133,7 @@ namespace RenX inline void unset_type_mine() { flags &= ~FLAG_TYPE_MINE; }; inline void unset_type_ladder() { flags &= ~FLAG_TYPE_LADDER; }; inline void unset_type_alert() { flags &= ~FLAG_TYPE_ALERT; }; - inline void unset_type_global() { flags = 0x00; }; + inline void unset_type_global() { flags = 0x0000U; }; }; /** @@ -139,7 +143,7 @@ namespace RenX * @param player Data of the player to be banned * @param length Duration of the ban */ - void add(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason, time_t length, uint8_t flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME); + void add(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason, time_t length, uint16_t flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME); /** * @brief Adds a ban entry for a set of player information and immediately writes it to the database. @@ -152,7 +156,7 @@ namespace RenX * @param reason Reason the player is getting banned * @param length Duration of the ban */ - void add(const Jupiter::ReadableString &name, uint32_t ip, uint8_t prefix_length, uint64_t steamid, const Jupiter::ReadableString &rdns, Jupiter::ReadableString &banner, Jupiter::ReadableString &reason, time_t length, uint8_t flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME); + void add(const Jupiter::ReadableString &name, uint32_t ip, uint8_t prefix_length, uint64_t steamid, const Jupiter::ReadableString &rdns, Jupiter::ReadableString &banner, Jupiter::ReadableString &reason, time_t length, uint16_t flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME); /** * @brief Upgrades the ban database to the current write_version. diff --git a/RenX.Core/RenX_PlayerInfo.h b/RenX.Core/RenX_PlayerInfo.h index d01f511..f70f57f 100644 --- a/RenX.Core/RenX_PlayerInfo.h +++ b/RenX.Core/RenX_PlayerInfo.h @@ -53,7 +53,7 @@ namespace RenX Jupiter::StringS vehicle; uint64_t steamid = 0; uint32_t ip32 = 0; - uint8_t ban_flags = 0; + uint16_t ban_flags = 0; TeamType team = TeamType::Other; int id = 0; bool isBot = false; diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index c11833d..945dde0 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -1073,7 +1073,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) if ((this->localSteamBan && entry->steamid != 0 && entry->steamid == player->steamid) || (this->localIPBan && entry->ip != 0 && (entry->ip & netmask) == (player->ip32 & netmask)) - || (this->localRDNSBan && entry->rdns.isNotEmpty() && entry->rdns.equals(player->rdns)) + || (this->localRDNSBan && entry->rdns.isNotEmpty() && entry->is_rdns_ban() && player->rdns.match(entry->rdns)) || (this->localNameBan && entry->name.isNotEmpty() && entry->name.equalsi(player->name))) { player->ban_flags |= entry->flags;