From da79533525d12ade692f7c16791dbacd978b4d36 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sun, 19 Dec 2021 18:30:18 -0500 Subject: [PATCH] fix #1876 INVITE did not exempt from +b unless the channel was coincidentally also +i. This was a regression introduced in v2.4.0. --- irc/channel.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/irc/channel.go b/irc/channel.go index 3833d254..643500b1 100644 --- a/irc/channel.go +++ b/irc/channel.go @@ -1582,7 +1582,8 @@ func (channel *Channel) Invite(invitee *Client, inviter *Client, rb *ResponseBuf } inviteOnly := channel.flags.HasMode(modes.InviteOnly) - if inviteOnly && !channel.ClientIsAtLeast(inviter, modes.ChannelOperator) { + hasPrivs := channel.ClientIsAtLeast(inviter, modes.ChannelOperator) + if inviteOnly && !hasPrivs { rb.Add(nil, inviter.server.name, ERR_CHANOPRIVSNEEDED, inviter.Nick(), chname, inviter.t("You're not a channel operator")) return } @@ -1592,7 +1593,10 @@ func (channel *Channel) Invite(invitee *Client, inviter *Client, rb *ResponseBuf return } - if inviteOnly { + // #1876: INVITE should override all join restrictions, including +b and +l, + // not just +i. so we need to record it on a per-client basis iff the inviter + // is privileged: + if hasPrivs { invitee.Invite(chcfname, createdAt) }