aboutsummaryrefslogtreecommitdiff
path: root/src/torcontrol.cpp
diff options
context:
space:
mode:
authorVasil Dimov <vd@FreeBSD.org>2021-08-30 14:33:29 +0200
committerVasil Dimov <vd@FreeBSD.org>2021-11-24 12:44:05 +0100
commite53a8505dbb6f9deaae8ac82793a4fb760a1e0a6 (patch)
tree40507a94035ee59351b4a7008616b825a5b32ef6 /src/torcontrol.cpp
parent9394964f6b9d1cf1220a4eca17ba18dc49ae876d (diff)
downloadbitcoin-e53a8505dbb6f9deaae8ac82793a4fb760a1e0a6.tar.xz
net: respect -onlynet= when making outbound connections
Do not make outbound connections to hosts which belong to a network which is restricted by `-onlynet`. This applies to hosts that are automatically chosen to connect to and to anchors. This does not apply to hosts given to `-connect`, `-addnode`, `addnode` RPC, dns seeds, `-seednodes`. Fixes https://github.com/bitcoin/bitcoin/issues/13378 Fixes https://github.com/bitcoin/bitcoin/issues/22647 Supersedes https://github.com/bitcoin/bitcoin/pull/22651
Diffstat (limited to 'src/torcontrol.cpp')
-rw-r--r--src/torcontrol.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/torcontrol.cpp b/src/torcontrol.cpp
index 55618a5c57..fdf1957bff 100644
--- a/src/torcontrol.cpp
+++ b/src/torcontrol.cpp
@@ -380,7 +380,22 @@ void TorController::auth_cb(TorControlConnection& _conn, const TorControlReply&
CService resolved(LookupNumeric("127.0.0.1", 9050));
proxyType addrOnion = proxyType(resolved, true);
SetProxy(NET_ONION, addrOnion);
- SetReachable(NET_ONION, true);
+
+ const auto onlynets = gArgs.GetArgs("-onlynet");
+
+ const bool onion_allowed_by_onlynet{
+ !gArgs.IsArgSet("-onlynet") ||
+ std::any_of(onlynets.begin(), onlynets.end(), [](const auto& n) {
+ return ParseNetwork(n) == NET_ONION;
+ })};
+
+ if (onion_allowed_by_onlynet) {
+ // If NET_ONION is reachable, then the below is a noop.
+ //
+ // If NET_ONION is not reachable, then none of -proxy or -onion was given.
+ // Since we are here, then -torcontrol and -torpassword were given.
+ SetReachable(NET_ONION, true);
+ }
}
// Finally - now create the service