summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2020-12-20 04:04:19 +0000
committerSadie Powell <sadie@witchery.services>2020-12-20 04:04:36 +0000
commitaa0221d87ca355d5021f81f8f65cf6a47bc93c38 (patch)
treebd98216e05d3323af470322a4e48234766b629c0
parent6cfabb0064cab52bbbab59974e53dc0fa1954da7 (diff)
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.
-rw-r--r--make/template/config.h3
-rw-r--r--src/coremods/core_stub.cpp62
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)