Don't stop mode handling on unknown modes; skip it
authorAlexander Barton <alex@barton.de>
Wed, 28 Dec 2011 13:39:47 +0000 (14:39 +0100)
committerAlexander Barton <alex@barton.de>
Wed, 28 Dec 2011 13:46:17 +0000 (14:46 +0100)
Unknown user and channel modes no longer stop the mode parser, but are
simply ignored. Therefore modes after the unknown one are now handled.

This is how ircd2.10/ircd2.11/ircd-seven behave, at least.

Reported by Cahata -- thanks!

src/ngircd/irc-mode.c

index ba44a3ba286f1e592058b2fced15e262183c747d..d8329b1655e2a5f66b88277dd5a0274d86b09ab7 100644 (file)
@@ -253,7 +253,6 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
                                                        set ? '+' : '-',
                                                        *mode_ptr);
                                x[0] = '\0';
-                               goto client_exit;
                        } else {
                                Log(LOG_DEBUG,
                                    "Handling unknown mode \"%c%c\" from \"%s\" for \"%s\" ...",
@@ -278,7 +277,6 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
                                strlcat(the_modes, x, sizeof(the_modes));
                }
        }
-client_exit:
 
        /* Are there changed modes? */
        if (the_modes[1]) {
@@ -671,7 +669,6 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
                                        Client_ID(Origin),
                                        set ? '+' : '-', *mode_ptr);
                                x[0] = '\0';
-                               goto chan_exit;
                        } else {
                                Log(LOG_DEBUG,
                                    "Handling unknown mode \"%c%c\" from \"%s\" on %s ...",