Don't report ERR_NEEDMOREPARAMS(461) when a MDOE command with more modes
than nicknames is handled, as well as for channel limit and key changes
without specifying the limit or key parameters.
This is how a lot (all?) other IRC servers behave, including ircd2.11,
InspIRCd, and ircd-seven. And because of clients (tested with Textual and
mIRC) sending bogus MODE commands like "MODE -ooo nick", end-users got the
expected result as well as correct but misleading error messages ...
If ngIRCd is compiled using "strict mode", these errors are still reported.
Reported-by: Tim <tim@stackwatch.net>
Req->argv[arg_arg][0] = '\0';
arg_arg++;
} else {
Req->argv[arg_arg][0] = '\0';
arg_arg++;
} else {
+#ifdef STRICT_RFC
+ /* Only send error message in "strict" mode,
+ * this is how ircd2.11 and others behave ... */
connected = IRC_WriteStrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
connected = IRC_WriteStrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
Req->argv[arg_arg][0] = '\0';
arg_arg++;
} else {
Req->argv[arg_arg][0] = '\0';
arg_arg++;
} else {
+#ifdef STRICT_RFC
+ /* Only send error message in "strict" mode,
+ * this is how ircd2.11 and others behave ... */
connected = IRC_WriteStrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
connected = IRC_WriteStrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
Req->argv[arg_arg][0] = '\0';
arg_arg++;
} else {
Req->argv[arg_arg][0] = '\0';
arg_arg++;
} else {
+#ifdef STRICT_RFC
+ /* Report an error to the client, when a user
+ * mode should be changed but no nickname is
+ * given. But don't do it when not in "strict"
+ * mode, because most other servers don't do
+ * it as well and some clients send "wired"
+ * MODE commands like "MODE #chan -ooo nick". */
connected = IRC_WriteStrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
connected = IRC_WriteStrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);