summaryrefslogtreecommitdiff
path: root/src/actions.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-12-13 16:36:36 -0500
committerAdam <Adam@anope.org>2010-12-13 16:36:36 -0500
commit49d3c97b677f319460146803004066dfd3d19089 (patch)
treee8408660141f958bdc9cfac8fbad4a67553e0a40 /src/actions.cpp
parent97467cb2c85832c10da11364e0517ed3c4453ddb (diff)
Bug #1079 - Don't use users real host and IPs when matching against
bans and excepts, except when a user is unbanning themselves, in an attempt to prevent people from gaining other users IPs. This removes support for Unreal and Bahamuts SVSMode -b because it will unban users by real host and IP.
Diffstat (limited to 'src/actions.cpp')
-rw-r--r--src/actions.cpp20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/actions.cpp b/src/actions.cpp
index b583cafae..6df607460 100644
--- a/src/actions.cpp
+++ b/src/actions.cpp
@@ -67,25 +67,21 @@ void kill_user(const Anope::string &source, User *user, const Anope::string &rea
* Unban the user from a channel
* @param ci channel info for the channel
* @param u The user to unban
+ * @param full True to match against the users real host and IP
* @return void
*/
-void common_unban(ChannelInfo *ci, User *u)
+void common_unban(ChannelInfo *ci, User *u, bool full)
{
if (!u || !ci || !ci->c || !ci->c->HasMode(CMODE_BAN))
return;
- if (ircd->svsmode_unban)
- ircdproto->SendBanDel(ci->c, u->nick);
- else
+ std::pair<Channel::ModeList::iterator, Channel::ModeList::iterator> bans = ci->c->GetModeList(CMODE_BAN);
+ for (; bans.first != bans.second;)
{
- std::pair<Channel::ModeList::iterator, Channel::ModeList::iterator> bans = ci->c->GetModeList(CMODE_BAN);
- for (; bans.first != bans.second;)
- {
- Entry ban(bans.first->second);
- ++bans.first;
- if (ban.Matches(u))
- ci->c->RemoveMode(NULL, CMODE_BAN, ban.GetMask());
- }
+ Entry ban(bans.first->second);
+ ++bans.first;
+ if (ban.Matches(u, full))
+ ci->c->RemoveMode(NULL, CMODE_BAN, ban.GetMask());
}
}