Merge pull request #197 from LucentW/master

Implement user mode "I": Hide channels on WHOIS

User mode +I prevents ngIRCd from showing channels on WHOIS.
IRC Operators can always see those.

Closes #197.
This commit is contained in:
Alexander Barton 2015-04-30 09:28:15 +02:00
commit d9a97f2857
4 changed files with 38 additions and 34 deletions

View File

@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2014 Alexander Barton and Contributors.
(c)2001-2015 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
@ -28,6 +28,7 @@ channels he is using at the moment.
C 19 Only users that share a channel are allowed to send messages.
F 22 Relaxed flood protection (only settable by IRC Operators).
i 0.0.1 User is "invisible".
I 23 No channels are shown on WHOIS (IRC Operators can always see those).
o 0.0.1 User is IRC operator.
q 20 User is protected, can not be kicked from a channel.
r 0.0.1 User is restricted.

View File

@ -177,7 +177,7 @@
#endif
/** Supported user modes. */
#define USERMODES "abBcCFioqrRswx"
#define USERMODES "abBcCFiIoqrRswx"
/** Supported channel modes. */
#define CHANMODES "abehiIklmMnoOPqQrRstvVz"

View File

@ -313,7 +313,8 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
Client_Info(Client_Introducer(c))))
return DISCONNECTED;
/* Channels */
/* Channels, show only if client has no +I or if from is oper */
if(!(Client_HasMode(c, 'I')) || Client_HasMode(from, 'o')) {
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
Client_ID(from), Client_ID(c));
cl2chan = Channel_FirstChannelOf(c);
@ -355,6 +356,7 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
if (!IRC_WriteStrClient(Client, "%s", str))
return DISCONNECTED;
}
}
/* IRC-Services? */
if (Client_Type(c) == CLIENT_SERVICE &&

View File

@ -206,6 +206,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
case 'b': /* Block private msgs */
case 'C': /* Only messages from clients sharing a channel */
case 'i': /* Invisible */
case 'I': /* Hide channel list from WHOIS */
case 's': /* Server messages */
case 'w': /* Wallops messages */
x[0] = *mode_ptr;