also corrects that an error is returned in WALLVOICES and WALLCHOPS in case +c or +C blocks the message, which is also done for other modes there
also corrects that CTCP ACTION is only allowed for PRIVMSG, and not for NOTICE WALLCHOPS and WALLVOICES
-diff -r e80591f05c47 include/channel.h
---- a/include/channel.h Sat Mar 20 17:57:13 2010 +0100
-+++ b/include/channel.h Sun Mar 21 15:49:28 2010 +0100
+diff -r 748d1ac19fa9 include/channel.h
+--- a/include/channel.h
++++ b/include/channel.h
@@ -398,6 +398,7 @@
extern struct Membership* find_channel_member(struct Client* cptr, struct Channel* chptr);
extern int member_can_send_to_channel(struct Membership* member, int reveal);
extern void remove_user_from_channel(struct Client *sptr, struct Channel *chptr);
extern void remove_user_from_all_channels(struct Client* cptr);
-diff -r e80591f05c47 ircd/channel.c
---- a/ircd/channel.c Sat Mar 20 17:57:13 2010 +0100
-+++ b/ircd/channel.c Sun Mar 21 15:49:28 2010 +0100
-@@ -778,6 +778,63 @@
+diff -r 748d1ac19fa9 ircd/channel.c
+--- a/ircd/channel.c
++++ b/ircd/channel.c
+@@ -778,6 +778,68 @@
return member_can_send_to_channel(member, reveal);
}
+ assert(0 != chptr);
+
+ /* dont check this for remote users or servers - fail safe */
-+ if (!MyUser(cptr) || IsServer(cptr))
++ if (!MyConnect(cptr) || IsServer(cptr))
+ return 1;
+
+ /* mode +c set */
+ if (chptr->mode.mode & MODE_NOCOLOUR)
+ control = 1;
+
-+ /* mode +C set - do allow CTCP ACTION though but only when action is 1 */
-+ if ((chptr->mode.mode & MODE_NOCTCP) && (!action || ircd_strncmp(text,"\001ACTION ",8)))
++ /* mode +C set */
++ if (chptr->mode.mode & MODE_NOCTCP) {
+ ctcp = 1;
+
++ /* when action is 1, do allow CTCP ACTION though */
++ if (action && !ircd_strncmp(text,"\001ACTION ",8))
++ ctcp = 0;
++ }
++
+ /* nothing to check */
+ if (!control && !ctcp)
+ return 1;
/** Returns the name of a channel that prevents the user from changing nick.
* if a member and not (opped or voiced) and (banned or moderated), return
* the name of the first channel banned on.
-diff -r e80591f05c47 ircd/ircd_relay.c
---- a/ircd/ircd_relay.c Sat Mar 20 17:57:13 2010 +0100
-+++ b/ircd/ircd_relay.c Sun Mar 21 15:49:28 2010 +0100
+diff -r 748d1ac19fa9 ircd/ircd_relay.c
+--- a/ircd/ircd_relay.c
++++ b/ircd/ircd_relay.c
@@ -87,7 +87,6 @@
void relay_channel_message(struct Client* sptr, const char* name, const char* text, const int targetc)
{
if ((chptr->mode.mode & MODE_NOPRIVMSGS) &&
check_target_limit(sptr, chptr, chptr->chname, 0))
-diff -r e80591f05c47 ircd/m_wallchops.c
---- a/ircd/m_wallchops.c Sat Mar 20 17:57:13 2010 +0100
-+++ b/ircd/m_wallchops.c Sun Mar 21 15:49:28 2010 +0100
+diff -r 748d1ac19fa9 ircd/m_wallchops.c
+--- a/ircd/m_wallchops.c
++++ b/ircd/m_wallchops.c
@@ -103,7 +103,6 @@
{
struct Channel *chptr;
if ((chptr->mode.mode & MODE_NOPRIVMSGS) &&
check_target_limit(sptr, chptr, chptr->chname, 0))
-diff -r e80591f05c47 ircd/m_wallvoices.c
---- a/ircd/m_wallvoices.c Sat Mar 20 17:57:13 2010 +0100
-+++ b/ircd/m_wallvoices.c Sun Mar 21 15:49:28 2010 +0100
+diff -r 748d1ac19fa9 ircd/m_wallvoices.c
+--- a/ircd/m_wallvoices.c
++++ b/ircd/m_wallvoices.c
@@ -102,7 +102,6 @@
{
struct Channel *chptr;