From 372c5c94964263ba6c1f2f44079aac3aff448225 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Mon, 10 Dec 2018 17:27:19 +0000 Subject: Fix overly escaping MOTDs if they are in more than one connect class. --- src/coremods/core_info/cmd_motd.cpp | 4 ++-- src/coremods/core_info/core_info.cpp | 20 ++++++++++++++++++++ src/coremods/core_info/core_info.h | 2 ++ 3 files changed, 24 insertions(+), 2 deletions(-) (limited to 'src/coremods') diff --git a/src/coremods/core_info/cmd_motd.cpp b/src/coremods/core_info/cmd_motd.cpp index cc770b157..e4c575539 100644 --- a/src/coremods/core_info/cmd_motd.cpp +++ b/src/coremods/core_info/cmd_motd.cpp @@ -45,8 +45,8 @@ CmdResult CommandMotd::Handle(User* user, const Params& parameters) if (localuser) tag = localuser->GetClass()->config; std::string motd_name = tag->getString("motd", "motd"); - ConfigFileCache::iterator motd = ServerInstance->Config->Files.find(motd_name); - if (motd == ServerInstance->Config->Files.end()) + ConfigFileCache::iterator motd = motds.find(motd_name); + if (motd == motds.end()) { user->WriteRemoteNumeric(ERR_NOMOTD, "Message of the day file is missing."); return CMD_SUCCESS; diff --git a/src/coremods/core_info/core_info.cpp b/src/coremods/core_info/core_info.cpp index 2d7a89475..2d6f0d249 100644 --- a/src/coremods/core_info/core_info.cpp +++ b/src/coremods/core_info/core_info.cpp @@ -103,6 +103,26 @@ class CoreModInfo : public Module cmdadmin.AdminName = tag->getString("name"); cmdadmin.AdminEmail = tag->getString("email", "null@example.com"); cmdadmin.AdminNick = tag->getString("nick", "admin"); + + // Process the escape codes in the MOTDs. + cmdmotd.motds.clear(); + for (ServerConfig::ClassVector::const_iterator iter = ServerInstance->Config->Classes.begin(); iter != ServerInstance->Config->Classes.end(); ++iter) + { + // Don't process the file if it has already been processed. + const std::string motd = (*iter)->config->getString("motd", "motd"); + if (cmdmotd.motds.find(motd) != cmdmotd.motds.end()) + continue; + + // We can't process the file if it doesn't exist. + ConfigFileCache::iterator file = ServerInstance->Config->Files.find(motd); + if (file == ServerInstance->Config->Files.end()) + continue; + + // Process escape codes. + cmdmotd.motds[file->first] = file->second; + InspIRCd::ProcessColors(cmdmotd.motds[file->first]); + } + } void OnUserConnect(LocalUser* user) CXX11_OVERRIDE diff --git a/src/coremods/core_info/core_info.h b/src/coremods/core_info/core_info.h index 127041b46..5cc619a4a 100644 --- a/src/coremods/core_info/core_info.h +++ b/src/coremods/core_info/core_info.h @@ -122,6 +122,8 @@ class CommandModules : public ServerTargetCommand class CommandMotd : public ServerTargetCommand { public: + ConfigFileCache motds; + /** Constructor for motd. */ CommandMotd(Module* parent); -- cgit v1.2.3