From aa0221d87ca355d5021f81f8f65cf6a47bc93c38 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Sun, 20 Dec 2020 04:04:19 +0000 Subject: Replace the SERVER stub command with something actually useful. This will typically never be reached because the remote will wait until it receives a CAPAB response before sending SERVER. Instead replace it with a CAPAB stub command that quits servers with a helpful message. --- make/template/config.h | 3 +++ src/coremods/core_stub.cpp | 62 ++++++++++++++++++++-------------------------- 2 files changed, 30 insertions(+), 35 deletions(-) diff --git a/make/template/config.h b/make/template/config.h index a4a21250a..034191893 100644 --- a/make/template/config.h +++ b/make/template/config.h @@ -43,6 +43,9 @@ /** The default location that module files are stored in. */ #define INSPIRCD_MODULE_PATH "@MODULE_DIR@" +/** The URL of the InspIRCd docs site. */ +#define INSPIRCD_DOCS "https://docs.inspircd.org/@VERSION_MAJOR@/" + #ifndef _WIN32 %target include/config.h diff --git a/src/coremods/core_stub.cpp b/src/coremods/core_stub.cpp index 0b7cfaa32..0448067c0 100644 --- a/src/coremods/core_stub.cpp +++ b/src/coremods/core_stub.cpp @@ -28,6 +28,29 @@ enum ERR_USERSDISABLED = 446 }; +class CommandCapab : public Command +{ + public: + CommandCapab(Module* parent) + : Command(parent, "CAPAB") + { + works_before_reg = true; + } + + CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE + { + if (user->registered == REG_NONE) + { + // The CAPAB command is used in the server protocol for negotiating + // the protocol version when initiating a server connection. There + // is no legitimate reason for a user to send this so we disconnect + // users who sent it in order to help out server admins who have + // misconfigured their server. + ServerInstance->Users->QuitUser(user, "You can not connect a server to a client port. Read " INSPIRCD_DOCS "modules/spanningtree for docs on how to link a server."); + } + return CMD_FAILURE; + } +}; /** Handle /CONNECT. */ @@ -83,38 +106,6 @@ class CommandLinks : public Command } }; -/** Handle /SERVER. - */ -class CommandServer : public Command -{ - public: - /** Constructor for server. - */ - CommandServer(Module* parent) - : Command(parent, "SERVER") - { - works_before_reg = true; - } - - /** 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(User* user, const Params& parameters) CXX11_OVERRIDE - { - if (user->registered == REG_ALL) - { - user->WriteNumeric(ERR_ALREADYREGISTERED, "You are already registered. (Perhaps your IRC client does not have a /SERVER command)."); - } - else - { - user->WriteNumeric(ERR_NOTREGISTERED, "SERVER", "You may not register as a server (servers have separate ports from clients, change your config)"); - } - return CMD_FAILURE; - } -}; - /** Handle /SQUIT. */ class CommandSquit : public Command @@ -175,18 +166,19 @@ class CommandUsers class CoreModStub : public Module { + private: + CommandCapab cmdcapab; CommandConnect cmdconnect; CommandLinks cmdlinks; - CommandServer cmdserver; CommandSquit cmdsquit; CommandSummon cmdsummon; CommandUsers cmdusers; public: CoreModStub() - : cmdconnect(this) + : cmdcapab(this) + , cmdconnect(this) , cmdlinks(this) - , cmdserver(this) , cmdsquit(this) , cmdsummon(this) , cmdusers(this) -- cgit v1.2.3