diff options
| author | Adam <Adam@anope.org> | 2010-12-13 16:36:36 -0500 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2010-12-13 16:36:36 -0500 |
| commit | 49d3c97b677f319460146803004066dfd3d19089 (patch) | |
| tree | e8408660141f958bdc9cfac8fbad4a67553e0a40 /src/actions.cpp | |
| parent | 97467cb2c85832c10da11364e0517ed3c4453ddb (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.cpp | 20 |
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()); } } |
