mirror of
https://github.com/osmarks/ngircd.git
synced 2025-08-08 06:43:44 +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:
parent
43509fd22c
commit
69fa6f268a
@ -352,20 +352,31 @@ Channel_Quit( CLIENT *Client, const char *Reason )
|
|||||||
} /* Channel_Quit */
|
} /* 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
|
GLOBAL unsigned long
|
||||||
Channel_Count( void )
|
Channel_CountVisible (CLIENT *Client)
|
||||||
{
|
{
|
||||||
CHANNEL *c;
|
CHANNEL *c;
|
||||||
unsigned long count = 0;
|
unsigned long count = 0;
|
||||||
|
|
||||||
c = My_Channels;
|
c = My_Channels;
|
||||||
while( c )
|
while(c) {
|
||||||
{
|
if (Client) {
|
||||||
count++;
|
if (!strchr(Channel_Modes(c), 's')
|
||||||
|
|| Channel_IsMemberOf(c, Client))
|
||||||
|
count++;
|
||||||
|
} else
|
||||||
|
count++;
|
||||||
c = c->next;
|
c = c->next;
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
} /* Channel_Count */
|
}
|
||||||
|
|
||||||
|
|
||||||
GLOBAL unsigned long
|
GLOBAL unsigned long
|
||||||
|
@ -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,
|
GLOBAL void Channel_Kick PARAMS((CLIENT *Peer, CLIENT *Target, CLIENT *Origin,
|
||||||
const char *Name, const char *Reason));
|
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 unsigned long Channel_MemberCount PARAMS(( CHANNEL *Chan ));
|
||||||
GLOBAL int Channel_CountForUser PARAMS(( CLIENT *Client ));
|
GLOBAL int Channel_CountForUser PARAMS(( CLIENT *Client ));
|
||||||
|
|
||||||
|
@ -1317,7 +1317,8 @@ IRC_Send_LUSERS(CLIENT *Client)
|
|||||||
|
|
||||||
/* Number of created channels */
|
/* Number of created channels */
|
||||||
if (!IRC_WriteStrClient(Client, RPL_LUSERCHANNELS_MSG,
|
if (!IRC_WriteStrClient(Client, RPL_LUSERCHANNELS_MSG,
|
||||||
Client_ID(Client), Channel_Count()))
|
Client_ID(Client),
|
||||||
|
Channel_CountVisible(Client)))
|
||||||
return DISCONNECTED;
|
return DISCONNECTED;
|
||||||
|
|
||||||
/* Number of local users, services and servers */
|
/* Number of local users, services and servers */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user