diff options
-rw-r--r-- | src/channels.c | 17 | ||||
-rw-r--r-- | src/core/cs_modes.c | 2 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/channels.c b/src/channels.c index 350c60fd3..4d5c08b5a 100644 --- a/src/channels.c +++ b/src/channels.c @@ -303,18 +303,27 @@ void chan_set_modes(const char *source, Channel * chan, int ac, const char **av, } } - if (check > 0) { + if (check > 0) + { check_modes(chan); - if (check < 2) { + if ((check < 2) || (check == 3)) + { /* Walk through all users we've set modes for and see if they are * valid. Invalid modes (like +o with SECUREOPS on) will be removed */ real_ac--; real_av++; - for (i = 0; i < real_ac; i++) { + for (i = 0; i < real_ac; i++) + { if ((user = finduser(*real_av)) && is_on_chan(chan, user)) - chan_set_correct_modes(user, chan, 0); + { + if (check < 2) + chan_set_correct_modes(user, chan, 0); + else if ((chan->ci->flags) && (chan->ci->flags & CI_SECUREOPS)) + chan_set_correct_modes(user, chan, 0); + } + real_av++; } } diff --git a/src/core/cs_modes.c b/src/core/cs_modes.c index d86b3b336..090cc7afe 100644 --- a/src/core/cs_modes.c +++ b/src/core/cs_modes.c @@ -359,7 +359,7 @@ int do_util(User * u, CSModeUtil * util) av[0] = util->mode; av[1] = u2->nick; - chan_set_modes(s_ChanServ, c, 2, av, 2); + chan_set_modes(s_ChanServ, c, 2, av, 3); if (util->notice && ci->flags & util->notice) ircdproto->SendMessage(whosends(ci), c->name, "%s command used for %s by %s", |