diff options
Diffstat (limited to 'src/coremods/core_info')
-rw-r--r-- | src/coremods/core_info/cmd_admin.cpp | 68 | ||||
-rw-r--r-- | src/coremods/core_info/cmd_commands.cpp | 67 | ||||
-rw-r--r-- | src/coremods/core_info/cmd_info.cpp | 109 | ||||
-rw-r--r-- | src/coremods/core_info/cmd_modules.cpp | 106 | ||||
-rw-r--r-- | src/coremods/core_info/cmd_motd.cpp | 76 | ||||
-rw-r--r-- | src/coremods/core_info/cmd_time.cpp | 60 | ||||
-rw-r--r-- | src/coremods/core_info/cmd_version.cpp | 51 |
7 files changed, 537 insertions, 0 deletions
diff --git a/src/coremods/core_info/cmd_admin.cpp b/src/coremods/core_info/cmd_admin.cpp new file mode 100644 index 000000000..1f694bf2e --- /dev/null +++ b/src/coremods/core_info/cmd_admin.cpp @@ -0,0 +1,68 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org> + * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" + +/** Handle /ADMIN. + */ +class CommandAdmin : public Command +{ + public: + /** Constructor for admin. + */ + CommandAdmin(Module* parent) : Command(parent,"ADMIN",0,0) + { + Penalty = 2; + syntax = "[<servername>]"; + } + + /** Handle command. + * @param parameters The parameters to the command + * @param user The user issuing the command + * @return A value from CmdResult to indicate command success or failure. + */ + CmdResult Handle(const std::vector<std::string>& parameters, User *user); + RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters) + { + if (parameters.size() > 0) + return ROUTE_UNICAST(parameters[0]); + return ROUTE_LOCALONLY; + } +}; + +/** Handle /ADMIN + */ +CmdResult CommandAdmin::Handle (const std::vector<std::string>& parameters, User *user) +{ + if (parameters.size() > 0 && parameters[0] != ServerInstance->Config->ServerName) + return CMD_SUCCESS; + user->SendText(":%s %03d %s :Administrative info for %s", ServerInstance->Config->ServerName.c_str(), + RPL_ADMINME, user->nick.c_str(),ServerInstance->Config->ServerName.c_str()); + if (!ServerInstance->Config->AdminName.empty()) + user->SendText(":%s %03d %s :Name - %s", ServerInstance->Config->ServerName.c_str(), + RPL_ADMINLOC1, user->nick.c_str(), ServerInstance->Config->AdminName.c_str()); + user->SendText(":%s %03d %s :Nickname - %s", ServerInstance->Config->ServerName.c_str(), + RPL_ADMINLOC2, user->nick.c_str(), ServerInstance->Config->AdminNick.c_str()); + user->SendText(":%s %03d %s :E-Mail - %s", ServerInstance->Config->ServerName.c_str(), + RPL_ADMINEMAIL, user->nick.c_str(), ServerInstance->Config->AdminEmail.c_str()); + return CMD_SUCCESS; +} + +COMMAND_INIT(CommandAdmin) diff --git a/src/coremods/core_info/cmd_commands.cpp b/src/coremods/core_info/cmd_commands.cpp new file mode 100644 index 000000000..3f0ab99c1 --- /dev/null +++ b/src/coremods/core_info/cmd_commands.cpp @@ -0,0 +1,67 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org> + * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" + +/** Handle /COMMANDS. + */ +class CommandCommands : public Command +{ + public: + /** Constructor for commands. + */ + CommandCommands(Module* parent) : Command(parent,"COMMANDS",0,0) + { + Penalty = 3; + } + + /** Handle command. + * @param parameters The parameters to the command + * @param user The user issuing the command + * @return A value from CmdResult to indicate command success or failure. + */ + CmdResult Handle(const std::vector<std::string>& parameters, User *user); +}; + +/** Handle /COMMANDS + */ +CmdResult CommandCommands::Handle (const std::vector<std::string>&, User *user) +{ + std::vector<std::string> list; + list.reserve(ServerInstance->Parser->cmdlist.size()); + for (Commandtable::iterator i = ServerInstance->Parser->cmdlist.begin(); i != ServerInstance->Parser->cmdlist.end(); i++) + { + // Don't show S2S commands to users + if (i->second->flags_needed == FLAG_SERVERONLY) + continue; + + Module* src = i->second->creator; + list.push_back(InspIRCd::Format(":%s %03d %s :%s %s %d %d", ServerInstance->Config->ServerName.c_str(), + RPL_COMMANDS, user->nick.c_str(), i->second->name.c_str(), src->ModuleSourceFile.c_str(), + i->second->min_params, i->second->Penalty)); + } + sort(list.begin(), list.end()); + for(unsigned int i=0; i < list.size(); i++) + user->Write(list[i]); + user->WriteNumeric(RPL_COMMANDSEND, ":End of COMMANDS list"); + return CMD_SUCCESS; +} + +COMMAND_INIT(CommandCommands) diff --git a/src/coremods/core_info/cmd_info.cpp b/src/coremods/core_info/cmd_info.cpp new file mode 100644 index 000000000..7f1e923c9 --- /dev/null +++ b/src/coremods/core_info/cmd_info.cpp @@ -0,0 +1,109 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2011 Jackmcbarn <jackmcbarn@jackmcbarn.no-ip.org> + * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org> + * Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net> + * Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" + +/** Handle /INFO. + */ +class CommandInfo : public Command +{ + public: + /** Constructor for info. + */ + CommandInfo(Module* parent) : Command(parent,"INFO") + { + Penalty = 4; + syntax = "[<servername>]"; + } + + /** Handle command. + * @param parameters The parameters to the command + * @param user The user issuing the command + * @return A value from CmdResult to indicate command success or failure. + */ + CmdResult Handle(const std::vector<std::string>& parameters, User *user); + RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters) + { + if (parameters.size() > 0) + return ROUTE_UNICAST(parameters[0]); + return ROUTE_LOCALONLY; + } +}; + +static const char* const lines[] = { + " -/\\- \2InspIRCd\2 -\\/-", + " November 2002 - Present", + " ", + "\2Core Developers\2:", + " Craig Edwards, Brain, <brain@inspircd.org>", + " Craig McLure, Craig, <craig@inspircd.org>", + " Robin Burchell, w00t, <w00t@inspircd.org>", + " Oliver Lupton, Om, <om@inspircd.org>", + " John Brooks, Special, <special@inspircd.org>", + " Dennis Friis, peavey, <peavey@inspircd.org>", + " Thomas Stagner, aquanight, <aquanight@inspircd.org>", + " Uli Schlachter, psychon, <psychon@inspircd.org>", + " Matt Smith, dz, <dz@inspircd.org>", + " Daniel De Graaf, danieldg, <danieldg@inspircd.org>", + " jackmcbarn, <jackmcbarn@inspircd.org>", + " Attila Molnar, Attila, <attilamolnar@hush.com>", + " ", + "\2Regular Contributors\2:", + " Adam SaberUK", + " ", + "\2Other Contributors\2:", + " ChrisTX Shawn Shutter", + " ", + "\2Former Contributors\2:", + " dmb Zaba skenmy GreenReaper", + " Dan Jason satmd owine", + " Adremelech John2 jilles HiroP", + " eggy Bricker AnMaster djGrrr", + " nenolod Quension praetorian pippijn", + " CC jamie typobox43 Burlex (win32)", + " Stskeeps ThaPrince BuildSmart Thunderhacker", + " Skip LeaChim Majic MacGyver", + " Namegduf Ankit Phoenix Taros", + " ", + "\2Thanks To\2:", + " searchirc.com irc-junkie.org Brik fraggeln", + " ", + " Best experienced with: \2An IRC client\2", + NULL +}; + +/** Handle /INFO + */ +CmdResult CommandInfo::Handle (const std::vector<std::string>& parameters, User *user) +{ + if (parameters.size() > 0 && parameters[0] != ServerInstance->Config->ServerName) + return CMD_SUCCESS; + + int i=0; + while (lines[i]) + user->SendText(":%s %03d %s :%s", ServerInstance->Config->ServerName.c_str(), RPL_INFO, user->nick.c_str(), lines[i++]); + FOREACH_MOD(OnInfo, (user)); + user->SendText(":%s %03d %s :End of /INFO list", ServerInstance->Config->ServerName.c_str(), RPL_ENDOFINFO, user->nick.c_str()); + return CMD_SUCCESS; +} + +COMMAND_INIT(CommandInfo) diff --git a/src/coremods/core_info/cmd_modules.cpp b/src/coremods/core_info/cmd_modules.cpp new file mode 100644 index 000000000..01774390d --- /dev/null +++ b/src/coremods/core_info/cmd_modules.cpp @@ -0,0 +1,106 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org> + * Copyright (C) 2008 Craig Edwards <craigedwards@brainbox.cc> + * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" + +/** Handle /MODULES. + */ +class CommandModules : public Command +{ + public: + /** Constructor for modules. + */ + CommandModules(Module* parent) : Command(parent,"MODULES",0,0) + { + Penalty = 4; + syntax = "[<servername>]"; + } + + /** Handle command. + * @param parameters The parameters to the command + * @param user The user issuing the command + * @return A value from CmdResult to indicate command success or failure. + */ + CmdResult Handle(const std::vector<std::string>& parameters, User *user); + RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters) + { + if (parameters.size() >= 1) + return ROUTE_UNICAST(parameters[0]); + return ROUTE_LOCALONLY; + } +}; + +/** Handle /MODULES + */ +CmdResult CommandModules::Handle (const std::vector<std::string>& parameters, User *user) +{ + // Don't ask remote servers about their modules unless the local user asking is an oper + // 2.0 asks anyway, so let's handle that the same way + bool for_us = (parameters.empty() || parameters[0] == ServerInstance->Config->ServerName); + if ((!for_us) || (!IS_LOCAL(user))) + { + if (!user->IsOper()) + { + user->WriteNotice("*** You cannot check what modules other servers have loaded."); + return CMD_FAILURE; + } + + // From an oper and not for us, forward + if (!for_us) + return CMD_SUCCESS; + } + + const ModuleManager::ModuleMap& mods = ServerInstance->Modules->GetModules(); + + for (ModuleManager::ModuleMap::const_iterator i = mods.begin(); i != mods.end(); ++i) + { + Module* m = i->second; + Version V = m->GetVersion(); + + if (IS_LOCAL(user) && user->HasPrivPermission("servers/auspex")) + { + std::string flags("SvcC"); + int pos = 0; + for (int mult = 1; mult <= VF_OPTCOMMON; mult *= 2, ++pos) + if (!(V.Flags & mult)) + flags[pos] = '-'; + +#ifdef PURE_STATIC + user->SendText(":%s 702 %s :%p %s %s :%s", ServerInstance->Config->ServerName.c_str(), + user->nick.c_str(), (void*)m, m->ModuleSourceFile.c_str(), flags.c_str(), V.description.c_str()); +#else + std::string srcrev = m->ModuleDLLManager->GetVersion(); + user->SendText(":%s 702 %s :%p %s %s :%s - %s", ServerInstance->Config->ServerName.c_str(), + user->nick.c_str(), (void*)m, m->ModuleSourceFile.c_str(), flags.c_str(), V.description.c_str(), srcrev.c_str()); +#endif + } + else + { + user->SendText(":%s 702 %s :%s %s", ServerInstance->Config->ServerName.c_str(), + user->nick.c_str(), m->ModuleSourceFile.c_str(), V.description.c_str()); + } + } + user->SendText(":%s 703 %s :End of MODULES list", ServerInstance->Config->ServerName.c_str(), user->nick.c_str()); + + return CMD_SUCCESS; +} + +COMMAND_INIT(CommandModules) diff --git a/src/coremods/core_info/cmd_motd.cpp b/src/coremods/core_info/cmd_motd.cpp new file mode 100644 index 000000000..71df7017a --- /dev/null +++ b/src/coremods/core_info/cmd_motd.cpp @@ -0,0 +1,76 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org> + * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" + +/** Handle /MOTD. + */ +class CommandMotd : public Command +{ + public: + /** Constructor for motd. + */ + CommandMotd ( Module* parent) : Command(parent,"MOTD",0,1) { syntax = "[<servername>]"; } + /** Handle command. + * @param parameters The parameters to the command + * @param user The user issuing the command + * @return A value from CmdResult to indicate command success or failure. + */ + CmdResult Handle(const std::vector<std::string>& parameters, User *user); + RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters) + { + if (parameters.size() > 0) + return ROUTE_UNICAST(parameters[0]); + return ROUTE_LOCALONLY; + } +}; + +/** Handle /MOTD + */ +CmdResult CommandMotd::Handle (const std::vector<std::string>& parameters, User *user) +{ + if (parameters.size() > 0 && parameters[0] != ServerInstance->Config->ServerName) + return CMD_SUCCESS; + + ConfigTag* tag = NULL; + LocalUser* localuser = IS_LOCAL(user); + 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()) + { + user->SendText(":%s %03d %s :Message of the day file is missing.", + ServerInstance->Config->ServerName.c_str(), ERR_NOMOTD, user->nick.c_str()); + return CMD_SUCCESS; + } + + user->SendText(":%s %03d %s :%s message of the day", ServerInstance->Config->ServerName.c_str(), + RPL_MOTDSTART, user->nick.c_str(), ServerInstance->Config->ServerName.c_str()); + + for (file_cache::iterator i = motd->second.begin(); i != motd->second.end(); i++) + user->SendText(":%s %03d %s :- %s", ServerInstance->Config->ServerName.c_str(), RPL_MOTD, user->nick.c_str(), i->c_str()); + + user->SendText(":%s %03d %s :End of message of the day.", ServerInstance->Config->ServerName.c_str(), RPL_ENDOFMOTD, user->nick.c_str()); + + return CMD_SUCCESS; +} + +COMMAND_INIT(CommandMotd) diff --git a/src/coremods/core_info/cmd_time.cpp b/src/coremods/core_info/cmd_time.cpp new file mode 100644 index 000000000..9c4688029 --- /dev/null +++ b/src/coremods/core_info/cmd_time.cpp @@ -0,0 +1,60 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org> + * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" + +/** Handle /TIME. + */ +class CommandTime : public Command +{ + public: + /** Constructor for time. + */ + CommandTime ( Module* parent) : Command(parent,"TIME",0,0) { syntax = "[<servername>]"; } + /** Handle command. + * @param parameters The parameters to the command + * @param user The user issuing the command + * @return A value from CmdResult to indicate command success or failure. + */ + CmdResult Handle(const std::vector<std::string>& parameters, User *user); + RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters) + { + if (parameters.size() > 0) + return ROUTE_UNICAST(parameters[0]); + return ROUTE_LOCALONLY; + } +}; + +CmdResult CommandTime::Handle (const std::vector<std::string>& parameters, User *user) +{ + if (parameters.size() > 0 && parameters[0] != ServerInstance->Config->ServerName) + return CMD_SUCCESS; + + time_t local = ServerInstance->Time(); + struct tm* timeinfo = localtime(&local); + const std::string& humanTime = asctime(timeinfo); + + user->SendText(":%s %03d %s %s :%s", ServerInstance->Config->ServerName.c_str(), RPL_TIME, user->nick.c_str(), + ServerInstance->Config->ServerName.c_str(), humanTime.c_str()); + + return CMD_SUCCESS; +} + +COMMAND_INIT(CommandTime) diff --git a/src/coremods/core_info/cmd_version.cpp b/src/coremods/core_info/cmd_version.cpp new file mode 100644 index 000000000..032d9ea0c --- /dev/null +++ b/src/coremods/core_info/cmd_version.cpp @@ -0,0 +1,51 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org> + * Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net> + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "inspircd.h" + +/** Handle /VERSION. + */ +class CommandVersion : public Command +{ + public: + /** Constructor for version. + */ + CommandVersion ( Module* parent) : Command(parent,"VERSION",0,0) { syntax = "[<servername>]"; } + /** Handle command. + * @param parameters The parameters to the command + * @param user The user issuing the command + * @return A value from CmdResult to indicate command success or failure. + */ + CmdResult Handle(const std::vector<std::string>& parameters, User *user); +}; + +CmdResult CommandVersion::Handle (const std::vector<std::string>&, User *user) +{ + std::string version = ServerInstance->GetVersionString((user->IsOper())); + user->WriteNumeric(RPL_VERSION, ":%s", version.c_str()); + LocalUser *lu = IS_LOCAL(user); + if (lu != NULL) + { + ServerInstance->ISupport.SendTo(lu); + } + return CMD_SUCCESS; +} + +COMMAND_INIT(CommandVersion) |