From e638224092c4ab93920181fb12ab481c01b61b89 Mon Sep 17 00:00:00 2001 From: Saibato Date: Tue, 24 Sep 2019 09:29:02 +0000 Subject: [PATCH] Change default behavior of autotor onions to Version 3 onions. --- connectd/tor_autoservice.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/connectd/tor_autoservice.c b/connectd/tor_autoservice.c index 06dd5a66e..06d58a882 100644 --- a/connectd/tor_autoservice.c +++ b/connectd/tor_autoservice.c @@ -73,17 +73,42 @@ static void discard_remaining_response(struct rbuf *rbuf) static struct wireaddr *make_onion(const tal_t *ctx, struct rbuf *rbuf, - const struct wireaddr *local) + const struct wireaddr *local, + bool use_v3_autotor) { char *line; struct wireaddr *onion; -//V3 tor after 3.3.3.aplha FIXME: TODO SAIBATO -//sprintf((char *)reach->buffer,"ADD_ONION NEW:ED25519-V3 Port=9735,127.0.0.1:9735\r\n"); - tor_send_cmd(rbuf, +/* Now that V3 is out of Beta default to V3 autoservice onions if version is above 0.4 +*/ + tor_send_cmd(rbuf, "PROTOCOLINFO 1"); + + while ((line = tor_response_line(rbuf)) != NULL) { + + if (!strstarts(line, "VERSION Tor=")) + continue; + + if (use_v3_autotor) + if(strstr(line, "\"0.0") || + strstr(line, "\"0.1") || + strstr(line, "\"0.2") || + strstr(line, "\"0.3")) { + use_v3_autotor = false; + status_unusual("Autotor: fallback to try a V2 onion service, your Tor version is smaller than 0.4.x.x"); + } + }; + + if (!use_v3_autotor) { + tor_send_cmd(rbuf, tal_fmt(tmpctx, "ADD_ONION NEW:RSA1024 Port=%d,%s Flags=DiscardPK,Detach", /* FIXME: We *could* allow user to set Tor port */ DEFAULT_PORT, fmt_wireaddr(tmpctx, local))); + } else { + tor_send_cmd(rbuf, + tal_fmt(tmpctx, "ADD_ONION NEW:ED25519-V3 Port=%d,%s Flags=DiscardPK,Detach", + /* FIXME: We *could* allow user to set Tor port */ + DEFAULT_PORT, fmt_wireaddr(tmpctx, local))); + } while ((line = tor_response_line(rbuf)) != NULL) { const char *name; @@ -211,6 +236,7 @@ struct wireaddr *tor_autoservice(const tal_t *ctx, struct addrinfo *ai_tor; struct rbuf rbuf; char *buffer; + bool use_v3_autotor; laddr = find_local_address(bindings); ai_tor = wireaddr_to_addrinfo(tmpctx, tor_serviceaddr); @@ -225,8 +251,10 @@ struct wireaddr *tor_autoservice(const tal_t *ctx, buffer = tal_arr(tmpctx, char, rbuf_good_size(fd)); rbuf_init(&rbuf, fd, buffer, tal_count(buffer), buf_resize); + use_v3_autotor = true; + negotiate_auth(&rbuf, tor_password); - onion = make_onion(ctx, &rbuf, laddr); + onion = make_onion(ctx, &rbuf, laddr, use_v3_autotor); /*on the other hand we can stay connected until ln finish to keep onion alive and then vanish */ //because when we run with Detach flag as we now do every start of LN creates a new addr while the old