mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 18:49:03 -04:00
Add extban 'a' to m_gecosban.
This has the format a:nick!user@host+gecos. e.g. a:*!*@abusive.host+*MegaBot?v2.0* Closes #1023. Closes #1026.
This commit is contained in:
parent
6d09b12be1
commit
4995417f59
@ -1091,6 +1091,9 @@ setting +I <extban>.
|
||||
|
||||
Matching extbans:
|
||||
|
||||
a:<mask> Matches user with both a matching banmask and realname,
|
||||
where <mask> is in the format nick!user@host+realname
|
||||
(requires gecosban module).
|
||||
j:<channel> Matches anyone in the given channel. Does not support
|
||||
wildcards (requires the channelban module).
|
||||
n:<class> Matches users in a matching connect class (requires the
|
||||
|
@ -277,6 +277,9 @@ setting +I <extban>.
|
||||
|
||||
Matching extbans:
|
||||
|
||||
a:<mask> Matches user with both a matching banmask and realname,
|
||||
where <mask> is in the format nick!user@host+realname
|
||||
(requires gecosban module).
|
||||
j:<channel> Matches anyone in the given channel. Does not support
|
||||
wildcards (requires the channelban module).
|
||||
n:<class> Matches users in a matching connect class (requires
|
||||
|
@ -818,8 +818,9 @@
|
||||
#<module name="flashpolicyd"> #
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
# Real name ban: Implements extended ban 'r', which stops anyone
|
||||
# matching a mask like +b r:*realname?here* from joining a channel.
|
||||
# Real name ban: Implements two extended bans: #
|
||||
# 'a', which matches a n!u@h+realname mask like +b a:*!*@host+*real* #
|
||||
# 'r', which matches a realname mask like +b r:*realname?here* #
|
||||
#<module name="gecosban">
|
||||
|
||||
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
|
||||
|
@ -24,21 +24,40 @@ class ModuleGecosBan : public Module
|
||||
public:
|
||||
Version GetVersion() CXX11_OVERRIDE
|
||||
{
|
||||
return Version("Extban 'r' - real name ban", VF_OPTCOMMON|VF_VENDOR);
|
||||
return Version("Provides a way to ban users by their real name with the 'a' and 'r' extbans", VF_OPTCOMMON|VF_VENDOR);
|
||||
}
|
||||
|
||||
ModResult OnCheckBan(User *user, Channel *c, const std::string& mask) CXX11_OVERRIDE
|
||||
{
|
||||
if ((mask.length() > 2) && (mask[0] == 'r') && (mask[1] == ':'))
|
||||
if ((mask.length() > 2) && (mask[1] == ':'))
|
||||
{
|
||||
if (InspIRCd::Match(user->GetRealName(), mask.substr(2)))
|
||||
return MOD_RES_DENY;
|
||||
if (mask[0] == 'r')
|
||||
{
|
||||
if (InspIRCd::Match(user->GetRealName(), mask.substr(2)))
|
||||
return MOD_RES_DENY;
|
||||
}
|
||||
else if (mask[0] == 'a')
|
||||
{
|
||||
// Check that the user actually specified a real name.
|
||||
const size_t divider = mask.find('+', 1);
|
||||
if (divider == std::string::npos)
|
||||
return MOD_RES_PASSTHRU;
|
||||
|
||||
// Check whether the user's mask matches.
|
||||
if (!c->CheckBan(user, mask.substr(2, divider - 2)))
|
||||
return MOD_RES_PASSTHRU;
|
||||
|
||||
// Check whether the user's real name matches.
|
||||
if (InspIRCd::Match(user->GetRealName(), mask.substr(divider + 1)))
|
||||
return MOD_RES_DENY;
|
||||
}
|
||||
}
|
||||
return MOD_RES_PASSTHRU;
|
||||
}
|
||||
|
||||
void On005Numeric(std::map<std::string, std::string>& tokens) CXX11_OVERRIDE
|
||||
{
|
||||
tokens["EXTBAN"].push_back('a');
|
||||
tokens["EXTBAN"].push_back('r');
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user