diff options
-rw-r--r-- | docs/inspircd.conf.example | 6 | ||||
-rw-r--r-- | include/configreader.h | 6 | ||||
-rw-r--r-- | src/configreader.cpp | 3 | ||||
-rw-r--r-- | src/mode.cpp | 6 |
4 files changed, 20 insertions, 1 deletions
diff --git a/docs/inspircd.conf.example b/docs/inspircd.conf.example index a6900e3b8..9d9d0fc8c 100644 --- a/docs/inspircd.conf.example +++ b/docs/inspircd.conf.example @@ -853,6 +853,11 @@ # authentication, this option can be used to turn it # # off. # # # +# hidemodes - If this option is enabled, then listmodes, for # +# example +beI, will be hidden from users below # +# halfop. This is not recommended, as it may break # +# some features in popular clients such as mIRC. # +# # <options prefixquit="Quit: " loglevel="default" @@ -880,6 +885,7 @@ announcets="yes" disablehmac="no" hostintopic="yes" + hidemodes="no" allowhalfop="yes"> #-#-#-#-#-#-#-#-#-#-#-#-#-#- TIME SYNC OPTIONS -#-#-#-#-#-#-#-#-#-#-#-# diff --git a/include/configreader.h b/include/configreader.h index 514e5e9b3..838814cc4 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -349,6 +349,12 @@ class ServerConfig : public Extensible */ bool AllowHalfop; + /** If this is set to true, then mode lists (e.g + * MODE #chan b) are hidden from unprivileged + * users. + */ + bool HideModeLists; + /** The number of seconds the DNS subsystem * will wait before timing out any request. */ diff --git a/src/configreader.cpp b/src/configreader.cpp index dbed24ae5..2ebc21233 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -30,7 +30,7 @@ ServerConfig::ServerConfig(InspIRCd* Instance) : ServerInstance(Instance) *UserStats = *ModPath = *MyExecutable = *DisabledCommands = *PID = *SuffixQuit = '\0'; WhoWasGroupSize = WhoWasMaxGroups = WhoWasMaxKeep = 0; log_file = NULL; - NoUserDns = forcedebug = OperSpyWhois = nofork = HideBans = HideSplits = UndernetMsgPrefix = false; + HideModeLists = NoUserDns = forcedebug = OperSpyWhois = nofork = HideBans = HideSplits = UndernetMsgPrefix = false; CycleHosts = writelog = AllowHalfop = true; dns_timeout = DieDelay = 5; MaxTargets = 20; @@ -602,6 +602,7 @@ void ServerConfig::Read(bool bail, userrec* user) {"options", "ircumsgprefix","0", new ValueContainerBool (&this->UndernetMsgPrefix), DT_BOOLEAN, NoValidation}, {"options", "announceinvites", "1", new ValueContainerBool (&this->AnnounceInvites), DT_BOOLEAN, NoValidation}, {"options", "hostintopic", "1", new ValueContainerBool (&this->FullHostInTopic), DT_BOOLEAN, NoValidation}, + {"options", "hidemodes", "0", new ValueContainerBool (&this->HideModeLists), DT_BOOLEAN, NoValidation}, {"pid", "file", "", new ValueContainerChar (this->PID), DT_CHARPTR, NoValidation}, {"whowas", "groupsize", "10", new ValueContainerInt (&this->WhoWasGroupSize), DT_INTEGER, NoValidation}, {"whowas", "maxgroups", "10240", new ValueContainerInt (&this->WhoWasMaxGroups), DT_INTEGER, NoValidation}, diff --git a/src/mode.cpp b/src/mode.cpp index ef3801ab6..5e384ad9a 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -294,6 +294,12 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool continue; } + if (ServerInstance->Config->HideModeLists && (targetchannel->GetStatus(user) < STATUS_HOP)) + { + user->WriteServ("482 %s %s :Only half-operators and above may view the +%c list",user->nick, targetchannel->name, *mode++); + continue; + } + ModeHandler *mh = this->FindMode(*mode, MODETYPE_CHANNEL); bool display = true; |