From b437468b8493a6305c4998021c7874cc0fc185a8 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 16 Oct 2024 13:06:47 +0100 Subject: Add support for name-only extbans on InspIRCd. --- modules/protocol/inspircd.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'modules/protocol') diff --git a/modules/protocol/inspircd.cpp b/modules/protocol/inspircd.cpp index cb0724046..431a95ea6 100644 --- a/modules/protocol/inspircd.cpp +++ b/modules/protocol/inspircd.cpp @@ -726,7 +726,7 @@ namespace InspIRCdExtBan ChannelMode *Wrap(Anope::string ¶m) override { - auto xbprefix = named_extbans ? xbname : Anope::string(xbchar); + auto xbprefix = named_extbans || !xbchar ? xbname : Anope::string(xbchar); param = xbprefix + ":" + param; return ChannelModeVirtual::Wrap(param); } @@ -1076,19 +1076,25 @@ struct IRCDMessageCapab final static bool ParseExtBan(const Anope::string &token, ExtBanInfo &extban) { - // acting:foo=f matching:foo=f - // A B A B + // acting:foo=f matching:bar=b matching:baz + // A B A B A auto a = token.find(':'); if (a == Anope::string::npos) return false; auto b = token.find('=', a + 1); if (b == Anope::string::npos) - return false; - + { + // ExtBan only has a name. + extban.name = token.substr(a + 1); + } + else + { + // ExtBan has a name and letter. + extban.name = token.substr(a + 1, b - a - 1); + extban.letter = token[b + 1]; + } extban.type = token.substr(0, a); - extban.name = token.substr(a + 1, b - a - 1); - extban.letter = token[b + 1]; if (Anope::ProtocolDebug) Log(LOG_DEBUG) << "Parsed extban: type=" << extban.type << " name=" << extban.name << " letter=" << extban.letter; -- cgit