]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_stub.cpp
Fix a bunch of weird indentation and spacing issues.
[user/henk/code/inspircd.git] / src / coremods / core_stub.cpp
index 7ed3865e3851c9725256e6c2b06be077f5ffa111..0695e4d995a7ced2fb6f201d4faba06b7f9b5772 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
- *   Copyright (C) 2014 Attila Molnar <attilamolnar@hush.com>
- *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
- *   Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2019 Robby <robby@chatbelgie.be>
+ *   Copyright (C) 2017-2020 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2014-2016 Attila Molnar <attilamolnar@hush.com>
  *
  * 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
 
 #include "inspircd.h"
 
+enum
+{
+       // From RFC 1459.
+       ERR_SUMMONDISABLED = 445,
+       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.
  */
@@ -33,7 +63,7 @@ class CommandConnect : public Command
                : Command(parent, "CONNECT", 1)
        {
                flags_needed = 'o';
-               syntax = "<servername>";
+               syntax = "<servermask>";
        }
 
        /** Handle command.
@@ -70,23 +100,24 @@ class CommandLinks : public Command
         */
        CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
        {
-               user->WriteNumeric(RPL_LINKS, ServerInstance->Config->ServerName, ServerInstance->Config->ServerName, InspIRCd::Format("0 %s", ServerInstance->Config->ServerDesc.c_str()));
+               user->WriteNumeric(RPL_LINKS, ServerInstance->Config->GetServerName(), ServerInstance->Config->GetServerName(), InspIRCd::Format("0 %s", ServerInstance->Config->GetServerDesc().c_str()));
                user->WriteNumeric(RPL_ENDOFLINKS, '*', "End of /LINKS list.");
                return CMD_SUCCESS;
        }
 };
 
-/** Handle /SERVER.
+/** Handle /SQUIT.
  */
-class CommandServer : public Command
+class CommandSquit : public Command
 {
  public:
-       /** Constructor for server.
+       /** Constructor for squit.
         */
-       CommandServer(Module* parent)
-               : Command(parent, "SERVER")
+       CommandSquit(Module* parent)
+               : Command(parent, "SQUIT", 1, 2)
        {
-               works_before_reg = true;
+               flags_needed = 'o';
+               syntax = "<servermask>";
        }
 
        /** Handle command.
@@ -96,60 +127,67 @@ class CommandServer : public Command
         */
        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)");
-               }
+               user->WriteNotice("Look into loading a linking module (like m_spanningtree) if you want this to do anything useful.");
                return CMD_FAILURE;
        }
 };
 
-/** Handle /SQUIT.
- */
-class CommandSquit : public Command
+class CommandSummon
+       : public SplitCommand
 {
  public:
-       /** Constructor for squit.
-        */
-       CommandSquit(Module* parent)
-               : Command(parent, "SQUIT", 1, 2)
+       CommandSummon(Module* Creator)
+               : SplitCommand(Creator, "SUMMON", 1)
        {
-               flags_needed = 'o';
-               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(User* user, const Params& parameters) CXX11_OVERRIDE
+       CmdResult HandleLocal(LocalUser* user, const Params& parameters) CXX11_OVERRIDE
        {
-               user->WriteNotice("Look into loading a linking module (like m_spanningtree) if you want this to do anything useful.");
-               return CMD_FAILURE;
+               user->WriteNumeric(ERR_SUMMONDISABLED, "SUMMON has been disabled");
+               return CMD_SUCCESS;
+       }
+};
+
+class CommandUsers
+       : public SplitCommand
+{
+ public:
+       CommandUsers(Module* Creator)
+               : SplitCommand(Creator, "USERS")
+       {
+       }
+
+       CmdResult HandleLocal(LocalUser* user, const Params& parameters) CXX11_OVERRIDE
+       {
+               user->WriteNumeric(ERR_USERSDISABLED, "USERS has been disabled");
+               return CMD_SUCCESS;
        }
 };
 
 class CoreModStub : public Module
 {
+ private:
+       CommandCapab cmdcapab;
        CommandConnect cmdconnect;
        CommandLinks cmdlinks;
-       CommandServer cmdserver;
        CommandSquit cmdsquit;
+       CommandSummon cmdsummon;
+       CommandUsers cmdusers;
 
  public:
        CoreModStub()
-               : cmdconnect(this), cmdlinks(this), cmdserver(this), cmdsquit(this)
+               : cmdcapab(this)
+               , cmdconnect(this)
+               , cmdlinks(this)
+               , cmdsquit(this)
+               , cmdsummon(this)
+               , cmdusers(this)
        {
        }
 
        Version GetVersion() CXX11_OVERRIDE
        {
-               return Version("Provides the stub commands CONNECT, LINKS, SERVER and SQUIT", VF_VENDOR|VF_CORE);
+               return Version("Provides stubs for unimplemented commands", VF_VENDOR|VF_CORE);
        }
 };