]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add optional oper override umode +O.
authorB00mX0r <b00mx0r@aureus.pw>
Mon, 27 Nov 2017 05:46:10 +0000 (21:46 -0800)
committerPeter Powell <petpow@saberuk.com>
Mon, 11 Dec 2017 11:12:01 +0000 (11:12 +0000)
docs/conf/modules.conf.example
src/modules/m_override.cpp

index e5fbab7e04cec77b79336dab60fe2d4fc901b8ca..7c5b0b6e8112df6bc1c0bdb4909ac7af268996d7 100644 (file)
 #
 #-#-#-#-#-#-#-#-#-#-#   OVERRIDE CONFIGURATION   -#-#-#-#-#-#-#-#-#-#-#
 #                                                                     #
-# override is too complex it describe here, see the wiki:             #
-# http://wiki.inspircd.org/Modules/override                           #
+# Much of override's configuration relates to your oper blocks.       #
+# For more information on how to allow opers to override, see:        #
+# https://wiki.inspircd.org/Modules/3.0/override                      #
+#                                                                     #
+# noisy         - If enabled, all oper overrides will be announced    #
+#                 via channel notice.                                 #
+#                                                                     #
+# requirekey    - If enabled, overriding on join requires a channel   #
+#                 key of "override" to be specified                   #
+#                                                                     #
+# enableumode   - If enabled, usermode +O is required for override.   #
+#                                                                     #
+#<override noisy="yes" requirekey="no" enableumode="true">
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 # Oper levels module: Gives each oper a level and prevents actions
index cb36b3f5111e24a96b17b163d89fa3e5523c10da..7155e7e76f797dfbe220a7473276e96fbd78051f 100644 (file)
 #include "inspircd.h"
 #include "modules/invite.h"
 
+class Override : public SimpleUserModeHandler
+{
+ public:
+       Override(Module* Creator) : SimpleUserModeHandler(Creator, "override", 'O')
+       {
+               oper = true;
+               if (!ServerInstance->Config->ConfValue("override")->getBool("enableumode"))
+                       DisableAutoRegister();
+       }
+};
+
 class ModuleOverride : public Module
 {
        bool RequireKey;
        bool NoisyOverride;
+       bool UmodeEnabled;
+       Override ou;
        ChanModeReference topiclock;
        ChanModeReference inviteonly;
        ChanModeReference key;
@@ -65,7 +78,9 @@ class ModuleOverride : public Module
 
  public:
        ModuleOverride()
-               : topiclock(this, "topiclock")
+               : UmodeEnabled(false)
+               , ou(this)
+               , topiclock(this, "topiclock")
                , inviteonly(this, "inviteonly")
                , key(this, "key")
                , limit(this, "limit")
@@ -76,6 +91,7 @@ class ModuleOverride : public Module
        void init() CXX11_OVERRIDE
        {
                ServerInstance->SNO->EnableSnomask('v', "OVERRIDE");
+               UmodeEnabled = ServerInstance->Config->ConfValue("override")->getBool("enableumode");
        }
 
        void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
@@ -93,8 +109,11 @@ class ModuleOverride : public Module
 
        bool CanOverride(User* source, const char* token)
        {
-               std::string tokenlist = source->oper->getConfig("override");
+               // If we require oper override umode (+O) but it is not set
+               if (UmodeEnabled && !source->IsModeSet(ou))
+                       return false;
 
+               std::string tokenlist = source->oper->getConfig("override");
                // its defined or * is set, return its value as a boolean for if the token is set
                return ((tokenlist.find(token, 0) != std::string::npos) || (tokenlist.find("*", 0) != std::string::npos));
        }