X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fchannel.c;h=1d1645f2e342e4ee9f01de8ea478ab2fc5eaea93;hp=ff470246fec79e09d67ab764c6bca583138e2a00;hb=1aaf54ac24e8e24d5a3ce5b7b00a775f5237d7a9;hpb=360a254be0e55e975998d0f3a5ff301ac3346f72 diff --git a/src/ngircd/channel.c b/src/ngircd/channel.c index ff470246..1d1645f2 100644 --- a/src/ngircd/channel.c +++ b/src/ngircd/channel.c @@ -845,6 +845,22 @@ Can_Send_To_Channel(CHANNEL *Chan, CLIENT *From) } +static bool +Can_Send_To_Channel_Identified(CHANNEL *Chan, CLIENT *From) +{ + if ((Client_ThisServer() == From) || Client_HasMode(From, 'o')) + return true; + + if (strchr(Channel_Modes(Chan), 'M') && !Client_HasMode(From, 'R')) + return false; + + if (Lists_Check(&Chan->list_excepts, From)) + return true; + + return !Lists_Check(&Chan->list_bans, From); +} + + GLOBAL bool Channel_Write(CHANNEL *Chan, CLIENT *From, CLIENT *Client, const char *Command, bool SendErrors, const char *Text) @@ -856,6 +872,13 @@ Channel_Write(CHANNEL *Chan, CLIENT *From, CLIENT *Client, const char *Command, Client_ID(From), Channel_Name(Chan)); } + if (!Can_Send_To_Channel_Identified(Chan, From)) { + if (! SendErrors) + return CONNECTED; + return IRC_WriteStrClient(From, ERR_CANNOTSENDTOCHAN_MSG, + Client_ID(From), Channel_Name(Chan)); + } + if (Client_Conn(From) > NONE) Conn_UpdateIdle(Client_Conn(From));