summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bancache.cpp9
-rw-r--r--src/xline.cpp4
2 files changed, 9 insertions, 4 deletions
diff --git a/src/bancache.cpp b/src/bancache.cpp
index e8accb404..472685f08 100644
--- a/src/bancache.cpp
+++ b/src/bancache.cpp
@@ -77,6 +77,11 @@ unsigned int BanCacheManager::RemoveEntries(const std::string &type, bool positi
BanCacheHash::iterator safei;
+ if (positive)
+ ServerInstance->Log(DEBUG, "BanCacheManager::RemoveEntries(): Removing positive hits for " + type);
+ else
+ ServerInstance->Log(DEBUG, "BanCacheManager::RemoveEntries(): Removing negative hits for " + type);
+
for (BanCacheHash::iterator n = BanHash->begin(); n != BanHash->end(); )
{
safei = n;
@@ -85,9 +90,9 @@ unsigned int BanCacheManager::RemoveEntries(const std::string &type, bool positi
BanCacheHit *b = n->second;
/* Safe to delete items here through iterator 'n' */
- if (b->Type == type)
+ if (b->Type == type || !positive) // if removing negative hits, ignore type..
{
- if ((positive && !b->Reason.empty()) || !positive && b->Reason.empty())
+ if ((positive && !b->Reason.empty()) || b->Reason.empty())
{
/* we need to remove this one. */
ServerInstance->Log(DEBUG, "BanCacheManager::RemoveEntries(): Removing a hit on " + b->IP);
diff --git a/src/xline.cpp b/src/xline.cpp
index dc054dc70..49ae04cb7 100644
--- a/src/xline.cpp
+++ b/src/xline.cpp
@@ -151,7 +151,7 @@ bool XLineManager::AddLine(XLine* line, User* user)
{
/*IdentHostPair ih = IdentSplit(hostmask);*/
- ServerInstance->BanCache->RemoveEntries(line->type, true);
+ ServerInstance->BanCache->RemoveEntries(line->type, false); // XXX perhaps remove ELines here?
if (DelLine(line->Displayable(), line->type, user, true))
return false;
@@ -183,7 +183,7 @@ bool XLineManager::DelLine(const char* hostmask, const std::string &type, User*
if (simulate)
return true;
- ServerInstance->BanCache->RemoveEntries(y->second->type, false);
+ ServerInstance->BanCache->RemoveEntries(y->second->type, true);
FOREACH_MOD(I_OnDelLine,OnDelLine(user, y->second));