diff --git a/irc/handlers.go b/irc/handlers.go index ee8f6817..7e32b53e 100644 --- a/irc/handlers.go +++ b/irc/handlers.go @@ -3374,12 +3374,18 @@ func whoHandler(server *Server, client *Client, msg ircmsg.Message, rb *Response fields = fields.Add(field) } - //TODO(dan): is this used and would I put this param in the Modern doc? - // if not, can we remove it? - //var operatorOnly bool - //if len(msg.Params) > 1 && msg.Params[1] == "o" { - // operatorOnly = true - //} + // successfully parsed query, ensure we send the success response: + defer func() { + rb.Add(nil, server.name, RPL_ENDOFWHO, client.Nick(), origMask, client.t("End of WHO list")) + }() + + // XXX #1730: https://datatracker.ietf.org/doc/html/rfc1459#section-4.5.1 + // 'If the "o" parameter is passed only operators are returned according to + // the name mask supplied.' + // see discussion on #1730, we just return no results in this case. + if len(msg.Params) > 1 && msg.Params[1] == "o" { + return false + } oper := client.Oper() hasPrivs := oper.HasRoleCapab("sajoin") @@ -3433,7 +3439,6 @@ func whoHandler(server *Server, client *Client, msg ircmsg.Message, rb *Response } } - rb.Add(nil, server.name, RPL_ENDOFWHO, client.nick, origMask, client.t("End of WHO list")) return false }