summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/inspircd.conf.example16
-rw-r--r--include/configreader.h4
-rw-r--r--src/command_parse.cpp11
-rw-r--r--src/configreader.cpp1
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},