diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2014-08-03 02:14:15 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2014-08-03 02:14:15 +0200 |
commit | 884c434947f4e6a9077b8b65a90b3cef39a04ba4 (patch) | |
tree | aa2c7e06165a973b3296d8c3da87775bef00e317 | |
parent | 96f4b81182f15a8a209ffe3ad023f67583999e3c (diff) | |
download | xK-884c434947f4e6a9077b8b65a90b3cef39a04ba4.tar.gz xK-884c434947f4e6a9077b8b65a90b3cef39a04ba4.tar.xz xK-884c434947f4e6a9077b8b65a90b3cef39a04ba4.zip |
kike: don't disclose secret channels in LUSERS
-rw-r--r-- | src/kike.c | 18 |
1 files changed, 17 insertions, 1 deletions
@@ -725,6 +725,15 @@ irc_send_motd (struct client *c) 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 irc_send_lusers (struct client *c) { @@ -739,7 +748,14 @@ irc_send_lusers (struct client *c) 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, n_users, n_services, 1 /* servers total */); |