summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2013-05-05 09:52:31 +0000
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2013-05-05 09:52:31 +0000
commit3fd8a20e63466acaf3c99b04a0e11a75e4a36fd4 (patch)
treefc1e8c0d8028cc2cc2f9acd264467a5e7ca1acf6
parentdc1494245fb0bc0409a2f4dbdca05ae7b8cdd915 (diff)
- can_send(): ensure msg_has_controls() isn't called twice for non-chanops
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/branches/8.1.x@1942 82007160-df01-0410-b94d-b575c5fd34c7
-rw-r--r--src/channel.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/channel.c b/src/channel.c
index c3967d5..6eeac2d 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -746,8 +746,14 @@ can_send(struct Channel *chptr, struct Client *source_p,
if (ms != NULL || (ms = find_channel_link(source_p, chptr)))
{
+ if ((chptr->mode.mode & MODE_NOCTRL) && msg_has_ctrls(message))
+ return ERR_NOCTRLSONCHAN;
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;
/* cache can send if quiet_on_ban and banned */
if (ConfigChannel.quiet_on_ban && MyClient(source_p))
@@ -767,17 +773,17 @@ can_send(struct Channel *chptr, struct Client *source_p,
}
}
}
- else if (chptr->mode.mode & MODE_NOPRIVMSGS)
- return ERR_CANNOTSENDTOCHAN;
-
- 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_NOCTRL) && msg_has_ctrls(message))
- return ERR_NOCTRLSONCHAN;
+ else
+ {
+ if (chptr->mode.mode & MODE_NOPRIVMSGS)
+ return ERR_CANNOTSENDTOCHAN;
+ 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_NOCTRL) && msg_has_ctrls(message))
+ return ERR_NOCTRLSONCHAN;
+ }
return CAN_SEND_NONOP;
}