summaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorRobin Burchell <viroteck@viroteck.net>2012-08-13 01:08:35 -0700
committerRobin Burchell <viroteck@viroteck.net>2012-08-13 01:08:35 -0700
commit388e4ff40931dda5870ddef149e54bdcc6c5a711 (patch)
tree681df373af0c37d1c356abeb31ed81fa7d62da21 /src/modules
parent46d3b5e9fc806924c1025b273c9138d452f659f7 (diff)
parent61429d9c680188abd63e629d72fbc09e7e5cfc38 (diff)
Merge pull request #251 from Shawn-Smith/insp20+extbanU
[2.0] Add ExtBan U to match only unregistered users
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_services_account.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp
index a28be61dc..08986d53c 100644
--- a/src/modules/m_services_account.cpp
+++ b/src/modules/m_services_account.cpp
@@ -1,6 +1,7 @@
/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2012 Shawn Smith <shawn@inspircd.org>
* Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
* Copyright (C) 2006-2008 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2008 Pippijn van Steenhoven <pip88nl@gmail.com>
@@ -134,6 +135,7 @@ class ModuleServicesAccount : public Module
void On005Numeric(std::string &t)
{
ServerInstance->AddExtBanChar('R');
+ ServerInstance->AddExtBanChar('U');
}
/* <- :twisted.oscnet.org 330 w00t2 w00t2 w00t :is logged in as */
@@ -207,12 +209,30 @@ class ModuleServicesAccount : public Module
ModResult OnCheckBan(User* user, Channel* chan, const std::string& mask)
{
- if (mask[0] == 'R' && mask[1] == ':')
+ if (mask[1] == ':')
{
- std::string *account = accountname.get(user);
- if (account && InspIRCd::Match(*account, mask.substr(2)))
- return MOD_RES_DENY;
+ if (mask[0] == 'R')
+ {
+ std::string *account = accountname.get(user);
+ if (account && InspIRCd::Match(*account, mask.substr(2)))
+ return MOD_RES_DENY;
+ }
+ else if (mask[0] == 'U')
+ {
+ std::string *account = accountname.get(user);
+ /* If the user is registered we don't care. */
+ if (account)
+ return MOD_RES_PASSTHRU;
+
+ /* If we made it this far we know the user isn't registered
+ so just deny if it matches */
+ if (chan->GetExtBanStatus(user, 'U') == MOD_RES_DENY)
+ return MOD_RES_DENY;
+ }
}
+
+ /* If we made it this far then the ban wasn't an ExtBan
+ or the user we were checking for didn't match either ExtBan */
return MOD_RES_PASSTHRU;
}