Fix bug where setban banned a node for 0 seconds
This commit is contained in:
24
src/net.cpp
24
src/net.cpp
@@ -604,6 +604,7 @@ void DumpBanlist()
|
||||
if (bandb.Write(banmap)) {
|
||||
SetBannedSetDirty(false);
|
||||
}
|
||||
fprintf(stderr,"%s: Dumping banlist with %lu items\n", __func__, banmap.size());
|
||||
|
||||
LogPrint("net", "Flushed %d banned node ips/subnets to banlist.dat %dms\n",
|
||||
banmap.size(), GetTimeMillis() - nStart);
|
||||
@@ -617,7 +618,6 @@ void CNode::ClearBanned()
|
||||
setBannedIsDirty = true;
|
||||
}
|
||||
DumpBanlist(); //store banlist to disk
|
||||
// uiInterface.BannedListChanged();
|
||||
}
|
||||
|
||||
|
||||
@@ -631,8 +631,10 @@ bool CNode::IsBanned(CNetAddr ip)
|
||||
CSubNet subNet = (*it).first;
|
||||
CBanEntry banEntry = (*it).second;
|
||||
|
||||
if(subNet.Match(ip) && GetTime() < banEntry.nBanUntil)
|
||||
if(subNet.Match(ip) && GetTime() < banEntry.nBanUntil) {
|
||||
fprintf(stderr,"%s: found banned subnet %s\n", __func__, subNet.ToString().c_str());
|
||||
fResult = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return fResult;
|
||||
@@ -664,25 +666,29 @@ void CNode::Ban(const CSubNet& subNet, const BanReason &banReason, int64_t banti
|
||||
if (bantimeoffset > 0)
|
||||
banEntry.nBanUntil = (sinceUnixEpoch ? 0 : GetTime() )+bantimeoffset;
|
||||
|
||||
fprintf(stderr, "%s: banning %s until %ld with bantimeoffset=%ld sinceUnixEpoch=%d\n", __func__, subNet.ToString().c_str(), banEntry.nBanUntil, bantimeoffset, sinceUnixEpoch);
|
||||
{
|
||||
LOCK(cs_setBanned);
|
||||
if (setBanned[subNet].nBanUntil < banEntry.nBanUntil) {
|
||||
setBanned[subNet] = banEntry;
|
||||
setBannedIsDirty = true;
|
||||
}
|
||||
else
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
// uiInterface.BannedListChanged();
|
||||
{
|
||||
LOCK(cs_vNodes);
|
||||
for (CNode* pnode : vNodes) {
|
||||
if (subNet.Match(static_cast<CNetAddr>(pnode->addr)))
|
||||
fprintf(stderr, "%s: disconnecting from banned node %s\n", __func__, pnode->addr.ToString().c_str() );
|
||||
pnode->fDisconnect = true;
|
||||
}
|
||||
}
|
||||
if(banReason == BanReasonManuallyAdded)
|
||||
|
||||
if(banReason == BanReasonManuallyAdded) {
|
||||
fprintf(stderr,"%s: dumping banlist after manual ban\n", __func__);
|
||||
DumpBanlist(); //store banlist to disk immediately if user requested ban
|
||||
}
|
||||
}
|
||||
|
||||
bool CNode::Unban(const CNetAddr &addr) {
|
||||
@@ -697,7 +703,6 @@ bool CNode::Unban(const CSubNet &subNet) {
|
||||
return false;
|
||||
setBannedIsDirty = true;
|
||||
}
|
||||
// uiInterface.BannedListChanged();
|
||||
DumpBanlist(); //store banlist to disk immediately
|
||||
return true;
|
||||
}
|
||||
@@ -720,6 +725,7 @@ void SetBanned(const banmap_t &banMap)
|
||||
void SweepBanned()
|
||||
{
|
||||
int64_t now = GetTime();
|
||||
//fprintf(stderr,"%s: Sweeping banlist\n", __func__);
|
||||
|
||||
LOCK(cs_setBanned);
|
||||
banmap_t::iterator it = setBanned.begin();
|
||||
@@ -732,9 +738,9 @@ void SweepBanned()
|
||||
setBanned.erase(it++);
|
||||
setBannedIsDirty = true;
|
||||
LogPrint("net", "%s: Removed banned node ip/subnet from banlist.dat: %s\n", __func__, subNet.ToString());
|
||||
}
|
||||
else
|
||||
} else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user