diff options
-rw-r--r-- | conf/inspircd.conf.example | 16 | ||||
-rw-r--r-- | include/configreader.h | 4 | ||||
-rw-r--r-- | src/command_parse.cpp | 11 | ||||
-rw-r--r-- | src/configreader.cpp | 1 |
4 files changed, 25 insertions, 7 deletions
diff --git a/conf/inspircd.conf.example b/conf/inspircd.conf.example index dc92b66a2..74406de0f 100644 --- a/conf/inspircd.conf.example +++ b/conf/inspircd.conf.example @@ -757,17 +757,21 @@ <banlist chan="#morons" limit="128"> <banlist chan="*" limit="69"> -#-#-#-#-#-#-#-#-#-#-#- DISABLED COMMANDS -#-#-#-#-#-#-#-#-#-#-#-#-#-# +#-#-#-#-#-#-#-#-#-#-#- DISABLED FEATURES -#-#-#-#-#-#-#-#-#-#-#-#-#-# # # -# This tag is optional, and specifies one or more commands which are # -# not available to non-operators. For example you may wish to disable # -# NICK and prevent non-opers from changing their nicknames. # +# This tag is optional, and specifies one or more features which are # +# not available to non-operators. # +# # +# For example you may wish to disable NICK and prevent non-opers from # +# changing their nicknames. # # Note that any disabled commands take effect only after the user has # # 'registered' (e.g. after the initial USER/NICK/PASS on connection) # # so for example disabling NICK will not cripple your network. # # # - -#<disabled commands="TOPIC MODE"> +# `fakenonexistant' will make the ircd pretend that nonexistant # +# commands simply don't exist to non-opers ("no such command"). # +# # +#<disabled commands="TOPIC MODE" usermodes="" chanmodes="" fakenonexistant="yes"> #-#-#-#-#-#-#-#-#-#-#-#-#-#-#- RTFM LINE -#-#-#-#-#-#-#-#-#-#-#-#-#-# diff --git a/include/configreader.h b/include/configreader.h index 9ec68b9e8..5e437d153 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -439,6 +439,10 @@ class CoreExport ServerConfig : public Extensible */ char DNSServer[MAXBUF]; + /** Pretend disabled commands don't exist. + */ + bool DisabledDontExist; + /** This variable contains a space-seperated list * of commands which are disabled by the * administrator of the server for non-opers. diff --git a/src/command_parse.cpp b/src/command_parse.cpp index 612337ccf..0f93e6f53 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.cpp @@ -326,7 +326,16 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) if ((user->registered == REG_ALL) && (!IS_OPER(user)) && (cm->second->IsDisabled())) { /* command is disabled! */ - user->WriteNumeric(ERR_UNKNOWNCOMMAND, "%s %s :This command has been disabled.",user->nick.c_str(),command.c_str()); + if (ServerInstance->Config->DisabledDontExist) + { + user->WriteNumeric(ERR_UNKNOWNCOMMAND, "%s %s :Unknown command",user->nick.c_str(),command.c_str()); + } + else + { + user->WriteNumeric(ERR_UNKNOWNCOMMAND, "%s %s :This command has been disabled.", + user->nick.c_str(), command.c_str()); + } + ServerInstance->SNO->WriteToSnoMask('d', "%s denied for %s (%s@%s)", command.c_str(), user->nick.c_str(), user->ident.c_str(), user->host.c_str()); return do_more; diff --git a/src/configreader.cpp b/src/configreader.cpp index 424f3ad68..9ec8aa367 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -843,6 +843,7 @@ void ServerConfig::Read(bool bail, User* user) {"disabled", "commands", "", new ValueContainerChar (this->DisabledCommands), DT_CHARPTR, NoValidation}, {"disabled", "usermodes", "", new ValueContainerChar (disabledumodes), DT_CHARPTR, ValidateDisabledUModes}, {"disabled", "chanmodes", "", new ValueContainerChar (disabledcmodes), DT_CHARPTR, ValidateDisabledCModes}, + {"disabled", "fakenonexistant", "0", new ValueContainerBool (&this->DisabledDontExist), DT_BOOLEAN, NoValidation}, {"security", "userstats", "", new ValueContainerChar (this->UserStats), DT_CHARPTR, NoValidation}, {"security", "customversion","", new ValueContainerChar (this->CustomVersion), DT_CHARPTR, NoValidation}, {"security", "hidesplits", "0", new ValueContainerBool (&this->HideSplits), DT_BOOLEAN, NoValidation}, |