mirror of
https://github.com/wownero/wownero.git
synced 2026-10-25 10:28:33 +01:00
daemon: add unban all command
This commit is contained in:
@@ -240,8 +240,8 @@ t_command_server::t_command_server(
|
|||||||
m_command_lookup.set_handler(
|
m_command_lookup.set_handler(
|
||||||
"unban"
|
"unban"
|
||||||
, std::bind(&t_command_parser_executor::unban, &m_parser, p::_1)
|
, std::bind(&t_command_parser_executor::unban, &m_parser, p::_1)
|
||||||
, "unban <address>"
|
, "unban <address>|all"
|
||||||
, "Unban a given <IP>."
|
, "Unban a given <address>, or all banned addresses."
|
||||||
);
|
);
|
||||||
m_command_lookup.set_handler(
|
m_command_lookup.set_handler(
|
||||||
"banned"
|
"banned"
|
||||||
|
|||||||
@@ -281,6 +281,7 @@ namespace nodetool
|
|||||||
virtual bool unblock_host(const epee::net_utils::network_address &address);
|
virtual bool unblock_host(const epee::net_utils::network_address &address);
|
||||||
virtual bool block_subnet(const epee::net_utils::ipv4_network_subnet &subnet, time_t seconds = P2P_IP_BLOCKTIME);
|
virtual bool block_subnet(const epee::net_utils::ipv4_network_subnet &subnet, time_t seconds = P2P_IP_BLOCKTIME);
|
||||||
virtual bool unblock_subnet(const epee::net_utils::ipv4_network_subnet &subnet);
|
virtual bool unblock_subnet(const epee::net_utils::ipv4_network_subnet &subnet);
|
||||||
|
virtual bool clear_bans();
|
||||||
virtual bool is_host_blocked(const epee::net_utils::network_address &address, time_t *seconds) { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); return !is_remote_host_allowed(address, seconds); }
|
virtual bool is_host_blocked(const epee::net_utils::network_address &address, time_t *seconds) { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); return !is_remote_host_allowed(address, seconds); }
|
||||||
virtual std::map<std::string, time_t> get_blocked_hosts() { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); return m_blocked_hosts; }
|
virtual std::map<std::string, time_t> get_blocked_hosts() { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); return m_blocked_hosts; }
|
||||||
virtual std::map<epee::net_utils::ipv4_network_subnet, time_t> get_blocked_subnets() { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); return m_blocked_subnets; }
|
virtual std::map<epee::net_utils::ipv4_network_subnet, time_t> get_blocked_subnets() { CRITICAL_REGION_LOCAL(m_blocked_hosts_lock); return m_blocked_subnets; }
|
||||||
|
|||||||
@@ -520,6 +520,18 @@ namespace nodetool
|
|||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------
|
||||||
template<class t_payload_net_handler>
|
template<class t_payload_net_handler>
|
||||||
|
bool node_server<t_payload_net_handler>::clear_bans()
|
||||||
|
{
|
||||||
|
CRITICAL_REGION_LOCAL(m_blocked_hosts_lock);
|
||||||
|
const bool had_bans = !m_blocked_hosts.empty() || !m_blocked_subnets.empty();
|
||||||
|
m_blocked_hosts.clear();
|
||||||
|
m_blocked_subnets.clear();
|
||||||
|
if (had_bans)
|
||||||
|
MCLOG_CYAN(el::Level::Info, "global", "All bans cleared.");
|
||||||
|
return had_bans;
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------------------------------------
|
||||||
|
template<class t_payload_net_handler>
|
||||||
bool node_server<t_payload_net_handler>::add_host_fail(const epee::net_utils::network_address &address, unsigned int score)
|
bool node_server<t_payload_net_handler>::add_host_fail(const epee::net_utils::network_address &address, unsigned int score)
|
||||||
{
|
{
|
||||||
if(!address.is_blockable())
|
if(!address.is_blockable())
|
||||||
|
|||||||
@@ -2419,6 +2419,12 @@ namespace cryptonote
|
|||||||
{
|
{
|
||||||
epee::net_utils::network_address na;
|
epee::net_utils::network_address na;
|
||||||
|
|
||||||
|
if (!i->ban && i->host == "all")
|
||||||
|
{
|
||||||
|
m_p2p.clear_bans();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// try subnet first
|
// try subnet first
|
||||||
if (!i->host.empty())
|
if (!i->host.empty())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -112,6 +112,16 @@ class BanTest():
|
|||||||
res = daemon.get_bans()
|
res = daemon.get_bans()
|
||||||
assert 'bans' not in res or len(res.bans) == 0
|
assert 'bans' not in res or len(res.bans) == 0
|
||||||
|
|
||||||
|
daemon.set_bans([
|
||||||
|
{'host': '1.2.3.4', 'ban': True, 'seconds': 100},
|
||||||
|
{'host': '5.6.7.0/24', 'ban': True, 'seconds': 100},
|
||||||
|
])
|
||||||
|
res = daemon.get_bans()
|
||||||
|
assert len(res.bans) == 2
|
||||||
|
daemon.set_bans([{'host': 'all', 'ban': False}])
|
||||||
|
res = daemon.get_bans()
|
||||||
|
assert 'bans' not in res or len(res.bans) == 0
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
BanTest().run_test()
|
BanTest().run_test()
|
||||||
|
|||||||
@@ -491,6 +491,22 @@ TEST(ban, limit)
|
|||||||
ASSERT_TRUE(is_blocked(server,MAKE_IPV4_ADDRESS(1,2,3,4)));
|
ASSERT_TRUE(is_blocked(server,MAKE_IPV4_ADDRESS(1,2,3,4)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(ban, clear)
|
||||||
|
{
|
||||||
|
test_core pr_core;
|
||||||
|
cryptonote::t_cryptonote_protocol_handler<test_core> cprotocol(pr_core, NULL);
|
||||||
|
Server server(cprotocol);
|
||||||
|
cprotocol.set_p2p_endpoint(&server);
|
||||||
|
|
||||||
|
ASSERT_FALSE(server.clear_bans());
|
||||||
|
ASSERT_TRUE(server.block_host(MAKE_IPV4_ADDRESS(1,2,3,4)));
|
||||||
|
ASSERT_TRUE(server.block_subnet(MAKE_IPV4_SUBNET(5,6,7,0,24)));
|
||||||
|
ASSERT_TRUE(server.clear_bans());
|
||||||
|
ASSERT_TRUE(server.get_blocked_hosts().empty());
|
||||||
|
ASSERT_TRUE(server.get_blocked_subnets().empty());
|
||||||
|
ASSERT_FALSE(server.clear_bans());
|
||||||
|
}
|
||||||
|
|
||||||
TEST(ban, subnet)
|
TEST(ban, subnet)
|
||||||
{
|
{
|
||||||
time_t seconds;
|
time_t seconds;
|
||||||
|
|||||||
Reference in New Issue
Block a user