From: Michael Poole Date: Tue, 15 Nov 2005 03:22:16 +0000 (+0000) Subject: Always allow remote users to send to a channel. X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=commitdiff_plain;h=55f198fcf1c529a4cf673405522ab4c766f81cb2 Always allow remote users to send to a channel. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1554 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- diff --git a/ChangeLog b/ChangeLog index 5ea102d..783886b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-11-14 Michael Poole + + * ircd/channel.c (member_can_send_to_channel): After prodding from + reed, always allow remote users to send to a channel. + 2005-11-14 Carlo Wood * ircd/channel.c (modebuf_flush_int): Fix test for limitdel. diff --git a/ircd/channel.c b/ircd/channel.c index ae27dae..6502c49 100644 --- a/ircd/channel.c +++ b/ircd/channel.c @@ -666,7 +666,7 @@ int has_voice(struct Client* cptr, struct Channel* chptr) * * @param member The membership of the user * @param reveal If true, the user will be "revealed" on a delayed - * joined channel. + * joined channel. * * @returns True if the client can speak on the channel. */ @@ -674,10 +674,18 @@ int member_can_send_to_channel(struct Membership* member, int reveal) { assert(0 != member); - /* Discourage using the Apass to get op. They should use the upass. */ + /* Do not check for users on other servers: This should be a + * temporary desynch, or maybe they are on an older server, but + * we do not want to send ERR_CANNOTSENDTOCHAN more than once. + */ + if (!MyUser(member->user)) + return 1; + + /* Discourage using the Apass to get op. They should use the Upass. */ if (IsChannelManager(member) && member->channel->mode.apass[0]) return 0; + /* If you have voice or ops, you can speak. */ if (IsVoicedOrOpped(member)) return 1; @@ -687,15 +695,13 @@ int member_can_send_to_channel(struct Membership* member, int reveal) */ if (member->channel->mode.mode & MODE_MODERATED) return 0; + /* If only logged in users may join and you're not one, you can't speak. */ if (member->channel->mode.mode & MODE_REGONLY && !IsAccount(member->user)) return 0; - /* - * If you're banned then you can't speak either. - * but because of the amount of CPU time that is_banned chews - * we only check it for our clients. - */ - if (MyUser(member->user) && is_banned(member)) + + /* If you're banned then you can't speak either. */ + if (is_banned(member)) return 0; if (IsDelayedJoin(member) && reveal)