aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2022-09-21 16:31:09 +0100
committerfanquake <fanquake@gmail.com>2022-09-21 16:33:49 +0100
commit05f7937810269d3582e675255780756138954801 (patch)
tree297e247f7baa01c96184db2408080f20754f5841
parentce3cb2bbe79cf33e495ea97a1d4fa4b61ad74ab9 (diff)
parent68209a7b5c0326e14508d9cf749771605bd6ffe7 (diff)
downloadbitcoin-05f7937810269d3582e675255780756138954801.tar.xz
Merge bitcoin/bitcoin#26145: [24.x] init: abort if i2p/cjdns are chosen via -onlynet but are unreachable
68209a7b5c0326e14508d9cf749771605bd6ffe7 rpc: make addpeeraddress work with cjdns addresses (Martin Zumsande) a8a9ed67cc447d204304ccfd844c45fd76486c6a init: Abort if i2p/cjdns are chosen via -onlynet but unreachable (Martin Zumsande) Pull request description: Identical commit from https://github.com/bitcoin/bitcoin/pull/25989 ACKs for top commit: fanquake: ACK 68209a7b5c0326e14508d9cf749771605bd6ffe7 Tree-SHA512: eec335df06b4c209cfe3473cb623828effd00c45a5dd605bb920edd265de1c789627482b005a51e89b8fc79cc4c5d26ff1fc306f2e4573897c5c7f083aa22861
-rw-r--r--src/init.cpp10
-rw-r--r--src/net.h1
-rw-r--r--src/rpc/net.cpp3
-rwxr-xr-xtest/functional/feature_proxy.py10
4 files changed, 23 insertions, 1 deletions
diff --git a/src/init.cpp b/src/init.cpp
index ad894f7f11..25b40c6c6e 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1285,6 +1285,11 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
}
if (!args.IsArgSet("-cjdnsreachable")) {
+ if (args.IsArgSet("-onlynet") && IsReachable(NET_CJDNS)) {
+ return InitError(
+ _("Outbound connections restricted to CJDNS (-onlynet=cjdns) but "
+ "-cjdnsreachable is not provided"));
+ }
SetReachable(NET_CJDNS, false);
}
// Now IsReachable(NET_CJDNS) is true if:
@@ -1757,6 +1762,11 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
}
SetProxy(NET_I2P, Proxy{addr});
} else {
+ if (args.IsArgSet("-onlynet") && IsReachable(NET_I2P)) {
+ return InitError(
+ _("Outbound connections restricted to i2p (-onlynet=i2p) but "
+ "-i2psam is not provided"));
+ }
SetReachable(NET_I2P, false);
}
diff --git a/src/net.h b/src/net.h
index 66a228b3ec..044701a339 100644
--- a/src/net.h
+++ b/src/net.h
@@ -164,6 +164,7 @@ bool SeenLocal(const CService& addr);
bool IsLocal(const CService& addr);
bool GetLocal(CService &addr, const CNetAddr *paddrPeer = nullptr);
CService GetLocalAddress(const CNetAddr& addrPeer);
+CService MaybeFlipIPv6toCJDNS(const CService& service);
extern bool fDiscover;
diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp
index e221b3462d..d701a180ab 100644
--- a/src/rpc/net.cpp
+++ b/src/rpc/net.cpp
@@ -947,7 +947,8 @@ static RPCHelpMan addpeeraddress()
bool success{false};
if (LookupHost(addr_string, net_addr, false)) {
- CAddress address{{net_addr, port}, ServiceFlags{NODE_NETWORK | NODE_WITNESS}};
+ CService service{net_addr, port};
+ CAddress address{MaybeFlipIPv6toCJDNS(service), ServiceFlags{NODE_NETWORK | NODE_WITNESS}};
address.nTime = Now<NodeSeconds>();
// The source address is set equal to the address. This is equivalent to the peer
// announcing itself.
diff --git a/test/functional/feature_proxy.py b/test/functional/feature_proxy.py
index d02d56d068..c90852562e 100755
--- a/test/functional/feature_proxy.py
+++ b/test/functional/feature_proxy.py
@@ -332,6 +332,16 @@ class ProxyTest(BitcoinTestFramework):
msg = "Error: Invalid -i2psam address or hostname: 'def:xyz'"
self.nodes[1].assert_start_raises_init_error(expected_msg=msg)
+ self.log.info("Test passing invalid -onlynet=i2p without -i2psam raises expected init error")
+ self.nodes[1].extra_args = ["-onlynet=i2p"]
+ msg = "Error: Outbound connections restricted to i2p (-onlynet=i2p) but -i2psam is not provided"
+ self.nodes[1].assert_start_raises_init_error(expected_msg=msg)
+
+ self.log.info("Test passing invalid -onlynet=cjdns without -cjdnsreachable raises expected init error")
+ self.nodes[1].extra_args = ["-onlynet=cjdns"]
+ msg = "Error: Outbound connections restricted to CJDNS (-onlynet=cjdns) but -cjdnsreachable is not provided"
+ self.nodes[1].assert_start_raises_init_error(expected_msg=msg)
+
self.log.info("Test passing -onlynet=onion with -onion=0/-noonion raises expected init error")
msg = (
"Error: Outbound connections restricted to Tor (-onlynet=onion) but "