repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 03acae970df0ebe713a4be791e6c75915d34a365:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 03acae970df0ebe713a4be791e6c75915d34a365
Author: Alexander Barton 
Date:   Sat Mar 28 00:05:39 2015 +0100

    User mode "C": Allow messages from servers, services, and IRC Ops

    Update user mode "C" handling ("Only users that share a channel are
    allowed to send messages") to behave like user mode "b" ("block private
    messages and notices") and therefore allow messages from servers, services,
    and IRC Operators, too.

    Change proposed by "wowaname" in #ngircd, thanks!

diff --git a/src/ngircd/irc.c b/src/ngircd/irc.c
index dc3b2f2ecf120a4147074cae869f5406d6c9fb98..
index ..12fd8214f4235165941b3606f99b112d08284f42 100644
--- a/src/ngircd/irc.c
+++ b/src/ngircd/irc.c
@@ -694,7 +694,10 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
 				goto send_next_target;
 			}

-			if (Client_HasMode(cl, 'C')) {
+			if (Client_HasMode(cl, 'C') &&
+			    !Client_HasMode(from, 'o') &&
+			    !(Client_Type(from) == CLIENT_SERVER) &&
+			    !(Client_Type(from) == CLIENT_SERVICE)) {
 				cl2chan = Channel_FirstChannelOf(cl);
 				while (cl2chan) {
 					chan = Channel_GetChannel(cl2chan);

-----END OF PAGE-----