3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-11-15 08:29:31 +01:00

SAMODE +f shouldn't require channel privileges

Reported by @Mikaela; normally this requires +o or higher on the
channel that is the target of the forward, but SAMODE should bypass
this check.
This commit is contained in:
Shivaram Lingamneni 2021-11-09 13:23:25 -05:00
parent dc75b24d23
commit 4bffdba610

View File

@ -267,12 +267,12 @@ func (channel *Channel) ApplyChannelModeChanges(client *Client, isSamode bool, c
} else if ch == channel { } else if ch == channel {
rb.Add(nil, client.server.name, ERR_INVALIDMODEPARAM, details.nick, chname, string(change.Mode), utils.SafeErrorParam(change.Arg), fmt.Sprintf(client.t("You can't forward a channel to itself"))) rb.Add(nil, client.server.name, ERR_INVALIDMODEPARAM, details.nick, chname, string(change.Mode), utils.SafeErrorParam(change.Arg), fmt.Sprintf(client.t("You can't forward a channel to itself")))
} else { } else {
if !ch.ClientIsAtLeast(client, modes.ChannelOperator) { if isSamode || ch.ClientIsAtLeast(client, modes.ChannelOperator) {
rb.Add(nil, client.server.name, ERR_CHANOPRIVSNEEDED, details.nick, ch.Name(), client.t("You must be a channel operator in the channel you are forwarding to"))
} else {
change.Arg = ch.Name() change.Arg = ch.Name()
channel.setForward(change.Arg) channel.setForward(change.Arg)
applied = append(applied, change) applied = append(applied, change)
} else {
rb.Add(nil, client.server.name, ERR_CHANOPRIVSNEEDED, details.nick, ch.Name(), client.t("You must be a channel operator in the channel you are forwarding to"))
} }
} }
case modes.Remove: case modes.Remove: