From 4524a2a3714f263d56bb7db349c169b456994fd9 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 26 Oct 2015 16:32:03 +0100 Subject: dirmngr: Support Tor hidden services. * dirmngr/dns-stuff.c (is_onion_address): New. * dirmngr/ks-engine-hkp.c (hostinfo_s): Add field "onion". (map_host): Special case onion addresses. (ks_hkp_print_hosttable): Print an 'O' for an onion address. * dirmngr/http.c (connect_server): Special case onion addresses. -- Note that this requires the latest libassuan from git. Onion addresses are always support regardless of the --use-tor flag. Signed-off-by: Werner Koch --- dirmngr/http.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'dirmngr/http.c') diff --git a/dirmngr/http.c b/dirmngr/http.c index 1a7c1ff17..9e2ba90f8 100644 --- a/dirmngr/http.c +++ b/dirmngr/http.c @@ -2212,6 +2212,32 @@ connect_server (const char *server, unsigned short port, init_sockets (); #endif /*Windows*/ + /* Onion addresses require special treatment. */ + if (is_onion_address (server)) + { +#ifdef ASSUAN_SOCK_TOR + + my_unprotect (); + sock = assuan_sock_connect_byname (server, port, 0, NULL, + ASSUAN_SOCK_TOR); + my_protect (); + + if (sock == ASSUAN_INVALID_FD) + { + if (errno == EHOSTUNREACH) + *r_host_not_found = 1; + log_error ("can't connect to '%s': %s\n", server, strerror (errno)); + } + return sock; + +#else /*!ASSUAN_SOCK_TOR*/ + + gpg_err_set_errno (ENETUNREACH); + return -1; /* Out of core. */ + +#endif /*!HASSUAN_SOCK_TOR*/ + } + #ifdef USE_DNS_SRV /* Do the SRV thing */ if (srvtag) -- cgit v1.2.3