From 521d5bf50f44707d005ef092229e56a8e52b6319 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Wed, 29 May 2019 14:24:23 -0400 Subject: [PATCH] fix #380 Partially fixed earlier in #467 --- docs/MANUAL.md | 2 +- irc/handlers.go | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 6b944974..178813cf 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -476,7 +476,7 @@ To unset this mode: ### +s - Secret -If this mode is set, it means that your channel should be marked as 'secret'. Your channel won't show up in `/LIST` or `/WHOIS`. +If this mode is set, it means that your channel should be marked as 'secret'. Your channel won't show up in `/LIST` or `/WHOIS`, and non-members won't be able to see its members with `/NAMES` or `/WHO`. To set this mode: diff --git a/irc/handlers.go b/irc/handlers.go index d2d50c34..a929594a 100644 --- a/irc/handlers.go +++ b/irc/handlers.go @@ -1954,17 +1954,20 @@ func namesHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Res // TODO: in a post-federation world, process `target` (server to forward request to) if len(channels) == 0 { - for _, channel := range server.channels.Channels() { - channel.Names(client, rb) - } + rb.Add(nil, server.name, RPL_ENDOFNAMES, client.Nick(), "*", client.t("End of NAMES list")) return false } for _, chname := range channels { + success := false channel := server.channels.Get(chname) if channel != nil { - channel.Names(client, rb) - } else if chname != "" { + if !channel.flags.HasMode(modes.Secret) || channel.hasClient(client) || client.HasMode(modes.Operator) { + channel.Names(client, rb) + success = true + } + } + if !success { // channel.Names() sends this numeric itself on success rb.Add(nil, server.name, RPL_ENDOFNAMES, client.Nick(), chname, client.t("End of NAMES list")) } }