From 92a799512944b0b36271e6ed7bfdc3a85e5c8b16 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Tue, 19 Jan 2010 02:11:04 -0600 Subject: [PATCH] Merge +C (no CTCP to channels) from ircd-seven. --- help/opers/cmode | 2 ++ include/channel.h | 1 + modules/core/m_message.c | 15 +++++++++++---- src/chmode.c | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/help/opers/cmode b/help/opers/cmode index ce08470..2fb5096 100644 --- a/help/opers/cmode +++ b/help/opers/cmode @@ -26,6 +26,8 @@ NO PARAMETERS: ops are necessary). +Q - Disable forward. Users cannot be forwarded to the channel (however, new forwards can still be set subject to +F). + +C - Disable CTCP. All CTCP messages to the channel, except ACTION, + are disallowed. WITH PARAMETERS: +f - Forward. Forwards users who cannot join because of +i, diff --git a/include/channel.h b/include/channel.h index b4da1b6..1e3b5bb 100644 --- a/include/channel.h +++ b/include/channel.h @@ -171,6 +171,7 @@ typedef int (*ExtbanFunc)(const char *data, struct Client *client_p, #define MODE_FREEINVITE 0x0800 /* allow free use of /invite */ #define MODE_FREETARGET 0x1000 /* can be forwarded to without authorization */ #define MODE_DISFORWARD 0x2000 /* disable channel forwarding */ +#define MODE_NOCTCP 0x8000 /* Block CTCPs directed to this channel */ #define CHFL_BAN 0x10000000 /* ban channel flag */ #define CHFL_EXCEPTION 0x20000000 /* exception to ban channel flag */ diff --git a/modules/core/m_message.c b/modules/core/m_message.c index 08ccc1d..4f72647 100644 --- a/modules/core/m_message.c +++ b/modules/core/m_message.c @@ -513,12 +513,19 @@ msg_channel(int p_or_n, const char *command, if(result == CAN_SEND_OPV || !flood_attack_channel(p_or_n, source_p, chptr, chptr->chname)) { + if (p_or_n != NOTICE && *text == '\001') + { + if (strncasecmp(text + 1, "ACTION", 6) && chptr->mode.mode & MODE_NOCTCP) + { + sendto_one_numeric(source_p, ERR_CANNOTSENDTOCHAN, + form_str(ERR_CANNOTSENDTOCHAN), chptr->chname); + return; + } + else if (rb_dlink_list_length(&chptr->locmembers) > (unsigned)(GlobalSetOptions.floodcount / 2)) + source_p->large_ctcp_sent = rb_current_time(); + } sendto_channel_flags(client_p, ALL_MEMBERS, source_p, chptr, "%s %s :%s", command, chptr->chname, text); - if (p_or_n != NOTICE && *text == '\001' && - strncasecmp(text + 1, "ACTION", 6) && - rb_dlink_list_length(&chptr->locmembers) > (unsigned)(GlobalSetOptions.floodcount / 2)) - source_p->large_ctcp_sent = rb_current_time(); } } else if(chptr->mode.mode & MODE_OPMODERATE && diff --git a/src/chmode.c b/src/chmode.c index 5cbcde3..9d67ed2 100644 --- a/src/chmode.c +++ b/src/chmode.c @@ -1399,7 +1399,7 @@ struct ChannelMode chmode_table[256] = {chm_nosuch, 0 }, /* @ */ {chm_nosuch, 0 }, /* A */ {chm_nosuch, 0 }, /* B */ - {chm_nosuch, 0 }, /* C */ + {chm_simple, MODE_NOCTCP }, /* C */ {chm_nosuch, 0 }, /* D */ {chm_nosuch, 0 }, /* E */ {chm_simple, MODE_FREETARGET }, /* F */