]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Channel modes +k & +l: Always report an error when a parameter is missing
authorAlexander Barton <alex@barton.de>
Mon, 2 Jan 2023 20:42:04 +0000 (21:42 +0100)
committerAlexander Barton <alex@barton.de>
Mon, 2 Jan 2023 20:48:42 +0000 (21:48 +0100)
This relates to #290 and considerations which errors to show when: and I
think it is the better approach to give feedback instead of silently
failing.

Note that this code path is also used when handling modes of channels
defined in "[Channel]" blocks in configuration files: in this case the
client is the local server and we can't send messages to it, because it
has no socket connection! Therefore we need those "is_machine" checks
and log an error im this case.

src/ngircd/irc-mode.c

index baca6c10fbc8878ab2bd0676f1c23d0699618b26..4a26ef02f6cd32c9abd93a10d66864466e66d5c5 100644 (file)
@@ -610,13 +610,14 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                break;
                        }
                        if (arg_arg <= mode_arg) {
-#ifdef STRICT_RFC
-                               /* Only send error message in "strict" mode,
-                                * this is how ircd2.11 and others behave ... */
-                               connected = IRC_WriteErrClient(Origin,
-                                       ERR_NEEDMOREPARAMS_MSG,
-                                       Client_ID(Origin), Req->command);
-#endif
+                               if (is_machine)
+                                       Log(LOG_ERR,
+                                           "Got MODE +k without key for \"%s\" from \"%s\"! Ignored.",
+                                           Channel_Name(Channel), Client_ID(Origin));
+                               else
+                                       connected = IRC_WriteErrClient(Origin,
+                                               ERR_NEEDMOREPARAMS_MSG,
+                                               Client_ID(Origin), Req->command);
                                goto chan_exit;
                        }
                        if (is_oper || is_machine || is_owner ||
@@ -649,13 +650,14 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                break;
                        }
                        if (arg_arg <= mode_arg) {
-#ifdef STRICT_RFC
-                               /* Only send error message in "strict" mode,
-                                * this is how ircd2.11 and others behave ... */
-                               connected = IRC_WriteErrClient(Origin,
-                                       ERR_NEEDMOREPARAMS_MSG,
-                                       Client_ID(Origin), Req->command);
-#endif
+                               if (is_machine)
+                                       Log(LOG_ERR,
+                                           "Got MODE +l without limit for \"%s\" from \"%s\"! Ignored.",
+                                           Channel_Name(Channel), Client_ID(Origin));
+                               else
+                                       connected = IRC_WriteErrClient(Origin,
+                                               ERR_NEEDMOREPARAMS_MSG,
+                                               Client_ID(Origin), Req->command);
                                goto chan_exit;
                        }
                        if (is_oper || is_machine || is_owner ||