kike: don't disclose secret channels in LUSERS

This commit is contained in:
Přemysl Eric Janouch 2014-08-03 02:14:15 +02:00
parent 96f4b81182
commit 884c434947

View File

@ -725,6 +725,15 @@ irc_send_motd (struct client *c)
irc_send_reply (c, IRC_RPL_ENDOFMOTD); irc_send_reply (c, IRC_RPL_ENDOFMOTD);
} }
static bool
client_on_channel (struct client *c, const struct channel *chan)
{
for (struct channel_user *iter = chan->users; iter; iter = iter->next)
if (!irc_strcmp (iter->nickname, c->nickname))
return true;
return false;
}
static void static void
irc_send_lusers (struct client *c) irc_send_lusers (struct client *c)
{ {
@ -739,7 +748,14 @@ irc_send_lusers (struct client *c)
n_opers++; n_opers++;
} }
int n_channels = c->ctx->channels.len; int n_channels = 0;
struct str_map_iter iter;
str_map_iter_init (&iter, &c->ctx->channels);
struct channel *chan;
while ((chan = str_map_iter_next (&iter)))
if (!(chan->modes & IRC_CHAN_MODE_SECRET)
|| client_on_channel (c, chan))
n_channels++;
irc_send_reply (c, IRC_RPL_LUSERCLIENT, irc_send_reply (c, IRC_RPL_LUSERCLIENT,
n_users, n_services, 1 /* servers total */); n_users, n_services, 1 /* servers total */);