]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Replace the SERVER stub command with something actually useful.
authorSadie Powell <sadie@witchery.services>
Sun, 20 Dec 2020 04:04:19 +0000 (04:04 +0000)
committerSadie Powell <sadie@witchery.services>
Sun, 20 Dec 2020 04:04:36 +0000 (04:04 +0000)
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
src/coremods/core_stub.cpp

index a4a21250a4172e77ecad0e4349f38a93fe65f013..034191893ec8a42050aff93f9cfa4da325095fa8 100644 (file)
@@ -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
 
index 0b7cfaa322a5ef014c43799765a5dfec98db9b89..0448067c0eb3859fa4a632b4b7791a57a2081a02 100644 (file)
@@ -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)