torv2: remove support for advertizing and connecting.

October was the date Torv2 is no longer supported by the Tor Project;
it will probably not work at all by next release, so we should remove
it now even though it's not quite the 6 months we prefer for
deprecation cycles.

I still see 110 nodes advertizing Torv2 (vs 10,292 Torv3); we still
parse and display it, we just don't advertize or connect to it.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2021-11-10 10:57:41 +10:30
committed by Christian Decker
parent ecdc15591b
commit 2f247c7bfb
9 changed files with 36 additions and 41 deletions

View File

@@ -273,7 +273,7 @@ void json_add_address(struct json_stream *response, const char *fieldname,
json_add_string(response, "type", "ipv6");
json_add_string(response, "address", addrstr);
json_add_num(response, "port", addr->port);
} else if (addr->type == ADDR_TYPE_TOR_V2) {
} else if (addr->type == ADDR_TYPE_TOR_V2_REMOVED) {
json_add_string(response, "type", "torv2");
json_add_string(response, "address", fmt_wireaddr_without_port(tmpctx, addr));
json_add_num(response, "port", addr->port);

View File

@@ -182,19 +182,17 @@ int main(int argc, char *argv[])
assert(parse_wireaddr("4ruvswpqec5i2gogopxl4vm5bruzknbvbylov2awbo4rxiq4cimdldad.onion", &addr, 1, false, NULL));
assert(addr.port == 1);
assert(parse_wireaddr("odpzvneidqdf5hdq.onion:49150", &addr, 1, false, NULL));
assert(addr.port == 49150);
/* We don't accept torv2 any more */
assert(!parse_wireaddr("odpzvneidqdf5hdq.onion:49150", &addr, 1, false, NULL));
assert(!parse_wireaddr("odpzvneidqdf5hdq.onion", &addr, 1, false, NULL));
assert(parse_wireaddr("odpzvneidqdf5hdq.onion", &addr, 1, false, NULL));
assert(addr.port == 1);
// Don't accept legacy hidden services with deprecated APIs on
/* Neither allow_deprecated = true nor false will parse it now */
assert(!parse_wireaddr_internal("odpzvneidqdf5hdq.onion", &addr_int, 1,
false, false, false, /* allow_deprecated = */ false, NULL));
assert(parse_wireaddr_internal("odpzvneidqdf5hdq.onion", &addr_int, 1,
false, false, false, /* allow_deprecated = */ true, NULL));
false, false, false, false, NULL));
assert(!parse_wireaddr_internal("odpzvneidqdf5hdq.onion", &addr_int, 1,
false, false, false, true, NULL));
assert(tal_count(wireaddr_from_hostname(tmpctx, "odpzvneidqdf5hdq.onion", 1, NULL, NULL, NULL)) > 0);
assert(wireaddr_from_hostname(tmpctx, "odpzvneidqdf5hdq.onion", 1, NULL, NULL, NULL) == NULL);
assert(wireaddr_from_hostname(tmpctx, "aaa.onion", 1, NULL, NULL, NULL) == NULL);
common_shutdown();

View File

@@ -31,7 +31,7 @@ bool fromwire_wireaddr(const u8 **cursor, size_t *max, struct wireaddr *addr)
case ADDR_TYPE_IPV6:
addr->addrlen = 16;
break;
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
addr->addrlen = TOR_V2_ADDRLEN;
break;
case ADDR_TYPE_TOR_V3:
@@ -209,7 +209,7 @@ bool wireaddr_is_wildcard(const struct wireaddr *addr)
case ADDR_TYPE_IPV6:
case ADDR_TYPE_IPV4:
return memeqzero(addr->addr, addr->addrlen);
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
case ADDR_TYPE_TOR_V3:
case ADDR_TYPE_WEBSOCKET:
return false;
@@ -255,7 +255,7 @@ char *fmt_wireaddr_without_port(const tal_t * ctx, const struct wireaddr *a)
if (!inet_ntop(AF_INET6, a->addr, addrstr, INET6_ADDRSTRLEN))
return "Unprintable-ipv6-address";
return tal_fmt(ctx, "[%s]", addrstr);
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
case ADDR_TYPE_TOR_V3:
return tal_fmt(ctx, "%s.onion",
b32_encode(tmpctx, a->addr, a->addrlen));
@@ -345,9 +345,7 @@ wireaddr_from_hostname(const tal_t *ctx,
u8 *dec = b32_decode(tmpctx, hostname,
strlen(hostname) - strlen(".onion"));
tal_resize(&addrs, 1);
if (tal_count(dec) == TOR_V2_ADDRLEN) {
addrs[0].type = ADDR_TYPE_TOR_V2;
} else if (tal_count(dec) == TOR_V3_ADDRLEN) {
if (tal_count(dec) == TOR_V3_ADDRLEN) {
addrs[0].type = ADDR_TYPE_TOR_V3;
} else {
if (err_msg)
@@ -591,9 +589,9 @@ bool parse_wireaddr_internal(const char *arg, struct wireaddr_internal *addr,
addr->itype = ADDR_INTERNAL_WIREADDR;
if (parse_wireaddr(arg, &addr->u.wireaddr, port,
dns_ok ? NULL : &needed_dns, err_msg)) {
if (!allow_deprecated && addr->u.wireaddr.type == ADDR_TYPE_TOR_V2) {
if (addr->u.wireaddr.type == ADDR_TYPE_TOR_V2_REMOVED) {
if (err_msg)
*err_msg = "v2 Tor onion services are deprecated";
*err_msg = "v2 Tor onion services not supported";
return false;
}
@@ -695,7 +693,7 @@ struct addrinfo *wireaddr_to_addrinfo(const tal_t *ctx,
ai->ai_addrlen = sizeof(*sin6);
ai->ai_addr = (struct sockaddr *)sin6;
return ai;
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
case ADDR_TYPE_TOR_V3:
case ADDR_TYPE_WEBSOCKET:
break;
@@ -750,7 +748,7 @@ bool all_tor_addresses(const struct wireaddr_internal *wireaddr)
case ADDR_TYPE_IPV4:
case ADDR_TYPE_IPV6:
return false;
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
case ADDR_TYPE_TOR_V3:
case ADDR_TYPE_WEBSOCKET:
continue;

View File

@@ -50,7 +50,7 @@ struct sockaddr_un;
enum wire_addr_type {
ADDR_TYPE_IPV4 = 1,
ADDR_TYPE_IPV6 = 2,
ADDR_TYPE_TOR_V2 = 3,
ADDR_TYPE_TOR_V2_REMOVED = 3,
ADDR_TYPE_TOR_V3 = 4,
ADDR_TYPE_WEBSOCKET = 6,
};

View File

@@ -962,7 +962,9 @@ static void try_connect_one_addr(struct connecting *connect)
break;
case ADDR_INTERNAL_WIREADDR:
switch (addr->u.wireaddr.type) {
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
af = -1;
break;
case ADDR_TYPE_TOR_V3:
use_proxy = true;
break;
@@ -1154,7 +1156,7 @@ static bool handle_wireaddr_listen(struct daemon *daemon,
return false;
/* Handle specially by callers. */
case ADDR_TYPE_WEBSOCKET:
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
case ADDR_TYPE_TOR_V3:
break;
}
@@ -1659,9 +1661,12 @@ static void add_gossip_addrs(struct wireaddr_internal **addrs,
/* Wrap each one in a wireaddr_internal and add to addrs. */
for (size_t i = 0; i < tal_count(normal_addrs); i++) {
/* This is not supported, ignore. */
if (normal_addrs[i].type == ADDR_TYPE_TOR_V2_REMOVED)
continue;
/* add TOR addresses in a second loop */
if (normal_addrs[i].type == ADDR_TYPE_TOR_V2 ||
normal_addrs[i].type == ADDR_TYPE_TOR_V3)
if (normal_addrs[i].type == ADDR_TYPE_TOR_V3)
continue;
if (wireaddr_int_equals_wireaddr(addrhint, &normal_addrs[i]))
continue;
@@ -1672,8 +1677,7 @@ static void add_gossip_addrs(struct wireaddr_internal **addrs,
}
/* so connectd prefers direct connections if possible. */
for (size_t i = 0; i < tal_count(normal_addrs); i++) {
if (normal_addrs[i].type != ADDR_TYPE_TOR_V2 &&
normal_addrs[i].type != ADDR_TYPE_TOR_V3)
if (normal_addrs[i].type != ADDR_TYPE_TOR_V3)
continue;
if (wireaddr_int_equals_wireaddr(addrhint, &normal_addrs[i]))
continue;

View File

@@ -135,7 +135,7 @@ static bool IsRFC4843(const struct wireaddr *addr)
static bool IsTor(const struct wireaddr *addr)
{
return addr->type == ADDR_TYPE_TOR_V2 || addr->type == ADDR_TYPE_TOR_V3;
return addr->type == ADDR_TYPE_TOR_V3;
}
static bool IsLocal(const struct wireaddr *addr)
@@ -256,7 +256,7 @@ bool guess_address(struct wireaddr *addr)
memcpy(addr->addr, &sin6.sin6_addr, addr->addrlen);
return ret;
}
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
case ADDR_TYPE_TOR_V3:
case ADDR_TYPE_WEBSOCKET:
status_broken("Cannot guess address type %u", addr->type);

View File

@@ -317,7 +317,7 @@ int main(int argc, char *argv[])
case ADDR_INTERNAL_WIREADDR:
switch (addr.u.wireaddr.type) {
case ADDR_TYPE_TOR_V2:
case ADDR_TYPE_TOR_V2_REMOVED:
case ADDR_TYPE_TOR_V3:
opt_usage_exit_fail("Don't support proxy use");
break;

View File

@@ -254,9 +254,8 @@ static char *opt_add_addr(const char *arg, struct lightningd *ld)
/* handle in case you used the addr option with an .onion */
if (parse_wireaddr_internal(arg, &addr, 0, true, false, true,
deprecated_apis, NULL)) {
if (addr.itype == ADDR_INTERNAL_WIREADDR && (
addr.u.wireaddr.type == ADDR_TYPE_TOR_V2 ||
addr.u.wireaddr.type == ADDR_TYPE_TOR_V3)) {
if (addr.itype == ADDR_INTERNAL_WIREADDR &&
addr.u.wireaddr.type == ADDR_TYPE_TOR_V3) {
log_unusual(ld->log, "You used `--addr=%s` option with an .onion address, please use"
" `--announce-addr` ! You are lucky in this node live some wizards and"
" fairies, we have done this for you and announce, Be as hidden as wished",
@@ -302,9 +301,8 @@ static char *opt_add_bind_addr(const char *arg, struct lightningd *ld)
/* handle in case you used the bind option with an .onion */
if (parse_wireaddr_internal(arg, &addr, 0, true, false, true,
deprecated_apis, NULL)) {
if (addr.itype == ADDR_INTERNAL_WIREADDR && (
addr.u.wireaddr.type == ADDR_TYPE_TOR_V2 ||
addr.u.wireaddr.type == ADDR_TYPE_TOR_V3)) {
if (addr.itype == ADDR_INTERNAL_WIREADDR &&
addr.u.wireaddr.type == ADDR_TYPE_TOR_V3) {
log_unusual(ld->log, "You used `--bind-addr=%s` option with an .onion address,"
" You are lucky in this node live some wizards and"
" fairies, we have done this for you and don't announce, Be as hidden as wished",

View File

@@ -918,9 +918,7 @@ def test_gossip_addresses(node_factory, bitcoind):
'[::]:3',
'127.0.0.1:2',
'vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion',
'3fyb44wdhnd2ghhl.onion:1234'
],
'allow-deprecated-apis': True,
})
l2 = node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
@@ -934,8 +932,7 @@ def test_gossip_addresses(node_factory, bitcoind):
assert len(nodes) == 1 and nodes[0]['addresses'] == [
{'type': 'ipv4', 'address': '127.0.0.1', 'port': 2},
{'type': 'ipv6', 'address': '::', 'port': 3},
{'type': 'torv2', 'address': '3fyb44wdhnd2ghhl.onion', 'port': 1234},
{'type': 'torv3', 'address': 'vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion', 'port': 9735}
{'type': 'torv3', 'address': 'vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion', 'port': 9735},
]