summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/channels.c17
-rw-r--r--src/core/cs_modes.c2
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",