1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-12-12 09:50:29 +00:00

LUSERS reply: only count "visible" channels

Rename Channel_Count() to Channel_CountVisible() and only count channels
that are visible to the requesting client, so the existence of secret
channels is no longer revealed by using LUSERS.

Reported by Cahata -- thanks!
This commit is contained in:
Alexander Barton 2011-12-28 15:07:24 +01:00
parent 43509fd22c
commit 69fa6f268a
3 changed files with 19 additions and 7 deletions

View File

@ -352,20 +352,31 @@ Channel_Quit( CLIENT *Client, const char *Reason )
} /* Channel_Quit */
/**
* Get number of channels this server knows and that are "visible" to
* the given client. If no client is given, all channels will be counted.
*
* @param Client The client to check or NULL.
* @return Number of channels visible to the client.
*/
GLOBAL unsigned long
Channel_Count( void )
Channel_CountVisible (CLIENT *Client)
{
CHANNEL *c;
unsigned long count = 0;
c = My_Channels;
while( c )
{
count++;
while(c) {
if (Client) {
if (!strchr(Channel_Modes(c), 's')
|| Channel_IsMemberOf(c, Client))
count++;
} else
count++;
c = c->next;
}
return count;
} /* Channel_Count */
}
GLOBAL unsigned long

View File

@ -72,7 +72,7 @@ GLOBAL void Channel_Quit PARAMS(( CLIENT *Client, const char *Reason ));
GLOBAL void Channel_Kick PARAMS((CLIENT *Peer, CLIENT *Target, CLIENT *Origin,
const char *Name, const char *Reason));
GLOBAL unsigned long Channel_Count PARAMS(( void ));
GLOBAL unsigned long Channel_CountVisible PARAMS((CLIENT *Client));
GLOBAL unsigned long Channel_MemberCount PARAMS(( CHANNEL *Chan ));
GLOBAL int Channel_CountForUser PARAMS(( CLIENT *Client ));

View File

@ -1317,7 +1317,8 @@ IRC_Send_LUSERS(CLIENT *Client)
/* Number of created channels */
if (!IRC_WriteStrClient(Client, RPL_LUSERCHANNELS_MSG,
Client_ID(Client), Channel_Count()))
Client_ID(Client),
Channel_CountVisible(Client)))
return DISCONNECTED;
/* Number of local users, services and servers */