Merge pull request #513 from slingamn/issue511.1

fix #511
This commit is contained in:
Daniel Oaks 2019-05-24 10:59:53 +10:00 committed by GitHub
commit 30914c564a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 1 deletions

View File

@ -171,6 +171,12 @@ CAPDEFS = [
url="https://wiki.znc.in/Playback", url="https://wiki.znc.in/Playback",
standard="ZNC vendor", standard="ZNC vendor",
), ),
CapDef(
identifier="Nope",
name="oragono.io/nope",
url="https://oragono.io/nope",
standard="Oragono vendor",
),
] ]
def validate_defs(): def validate_defs():

View File

@ -7,7 +7,7 @@ package caps
const ( const (
// number of recognized capabilities: // number of recognized capabilities:
numCapabs = 26 numCapabs = 27
// length of the uint64 array that represents the bitset: // length of the uint64 array that represents the bitset:
bitsetLen = 1 bitsetLen = 1
) )
@ -116,6 +116,10 @@ const (
// ZNCPlayback is the ZNC vendor capability named "znc.in/playback": // ZNCPlayback is the ZNC vendor capability named "znc.in/playback":
// https://wiki.znc.in/Playback // https://wiki.znc.in/Playback
ZNCPlayback Capability = iota ZNCPlayback Capability = iota
// Nope is the Oragono vendor capability named "oragono.io/nope":
// https://oragono.io/nope
Nope Capability = iota
) )
// `capabilityNames[capab]` is the string name of the capability `capab` // `capabilityNames[capab]` is the string name of the capability `capab`
@ -147,5 +151,6 @@ var (
"znc.in/self-message", "znc.in/self-message",
"draft/event-playback", "draft/event-playback",
"znc.in/playback", "znc.in/playback",
"oragono.io/nope",
} }
) )

View File

@ -574,6 +574,13 @@ func capHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *Respo
} }
} }
// #511: oragono.io/nope is a fake cap to trap bad clients who blindly request
// every offered capability:
if toAdd.Has(caps.Nope) {
client.Quit(client.t("Requesting the oragono.io/nope CAP is forbidden"), rb.session)
return true
}
// update maxlenrest, just in case they altered the maxline cap // update maxlenrest, just in case they altered the maxline cap
rb.session.SetMaxlenRest() rb.session.SetMaxlenRest()