diff options
author | michael <michael@82007160-df01-0410-b94d-b575c5fd34c7> | 2013-05-05 10:11:46 +0000 |
---|---|---|
committer | michael <michael@82007160-df01-0410-b94d-b575c5fd34c7> | 2013-05-05 10:11:46 +0000 |
commit | 709122c3e844e2d19a29414643142cfe9fa078b9 (patch) | |
tree | 577846252d146bb6fbf05e76b0ab0fc692157e0c | |
parent | 3fd8a20e63466acaf3c99b04a0e11a75e4a36fd4 (diff) |
- can_send(): fixed bug where bans were not checked against non-channel members
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/branches/8.1.x@1943 82007160-df01-0410-b94d-b575c5fd34c7
-rw-r--r-- | src/channel.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/src/channel.c b/src/channel.c index 6eeac2d..2943351 100644 --- a/src/channel.c +++ b/src/channel.c @@ -744,19 +744,20 @@ can_send(struct Channel *chptr, struct Client *source_p, if ((conf = match_find_resv(chptr->chname)) && !resv_find_exempt(source_p, conf)) return ERR_CANNOTSENDTOCHAN; - if (ms != NULL || (ms = find_channel_link(source_p, chptr))) - { - if ((chptr->mode.mode & MODE_NOCTRL) && msg_has_ctrls(message)) - return ERR_NOCTRLSONCHAN; + if ((chptr->mode.mode & MODE_NOCTRL) && msg_has_ctrls(message)) + return ERR_NOCTRLSONCHAN; + if (ms || (ms = find_channel_link(source_p, chptr))) if (ms->flags & (CHFL_CHANOP|CHFL_HALFOP|CHFL_VOICE)) return CAN_SEND_OPV; - if (chptr->mode.mode & MODE_MODERATED) - return ERR_CANNOTSENDTOCHAN; - if ((chptr->mode.mode & MODE_REGONLY) && !HasUMode(source_p, UMODE_REGISTERED)) - return ERR_NEEDREGGEDNICK; + if (chptr->mode.mode & MODE_MODERATED) + return ERR_CANNOTSENDTOCHAN; + if ((chptr->mode.mode & MODE_REGONLY) && !HasUMode(source_p, UMODE_REGISTERED)) + return ERR_NEEDREGGEDNICK; - /* cache can send if quiet_on_ban and banned */ - if (ConfigChannel.quiet_on_ban && MyClient(source_p)) + /* cache can send if quiet_on_ban and banned */ + if (MyClient(source_p)) + { + if (ms) { if (ms->flags & CHFL_BAN_SILENCED) return ERR_CANNOTSENDTOCHAN; @@ -772,17 +773,8 @@ can_send(struct Channel *chptr, struct Client *source_p, ms->flags |= CHFL_BAN_CHECKED; } } - } - else - { - if (chptr->mode.mode & MODE_NOPRIVMSGS) - return ERR_CANNOTSENDTOCHAN; - if (chptr->mode.mode & MODE_MODERATED) + else if (is_banned(chptr, source_p)) return ERR_CANNOTSENDTOCHAN; - if ((chptr->mode.mode & MODE_REGONLY) && !HasUMode(source_p, UMODE_REGISTERED)) - return ERR_NEEDREGGEDNICK; - if ((chptr->mode.mode & MODE_NOCTRL) && msg_has_ctrls(message)) - return ERR_NOCTRLSONCHAN; } return CAN_SEND_NONOP; |