summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2024-10-16 13:06:47 +0100
committerSadie Powell <sadie@witchery.services>2024-10-16 13:06:47 +0100
commitb437468b8493a6305c4998021c7874cc0fc185a8 (patch)
tree0b5e0aee6e5c29a75cd441beb182120d7180d665
parent0a99571c0f7ee61635104db6048f6ebc1d4380da (diff)
Add support for name-only extbans on InspIRCd.
-rw-r--r--modules/protocol/inspircd.cpp20
1 files changed, 13 insertions, 7 deletions
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 &param) override
{
- auto xbprefix = named_extbans ? xbname : Anope::string(xbchar);
+ auto xbprefix = named_extbans || !xbchar ? xbname : Anope::string(xbchar);
param = xbprefix + ":" + param;
return ChannelModeVirtual<ChannelModeList>::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;