diff --git a/changes/ticket14325 b/changes/ticket14325 new file mode 100644 index 000000000..38daa05aa --- /dev/null +++ b/changes/ticket14325 @@ -0,0 +1,5 @@ + o Documentation fixes: + - Make the tor-resolve documentation match its help string and its + options. Resolves part of ticket 14325. + - Log a more useful error message from tor-resolve when failing to + look up a hidden service address. Resolves part of ticket 14325. diff --git a/doc/tor-resolve.1.txt b/doc/tor-resolve.1.txt index 341d30224..30e16d5da 100644 --- a/doc/tor-resolve.1.txt +++ b/doc/tor-resolve.1.txt @@ -14,7 +14,7 @@ tor-resolve - resolve a hostname to an IP address via tor SYNOPSIS -------- -**tor-resolve** [-4|-5] [-v] [-x] __hostname__ [__sockshost__[:__socksport__]] +**tor-resolve** [-4|-5] [-v] [-x] [-p __socksport__] __hostname__ [__sockshost__[:__socksport__]] DESCRIPTION ----------- @@ -40,6 +40,9 @@ OPTIONS Use the SOCKS4a protocol rather than the default SOCKS5 protocol. Doesn't support reverse DNS. +**-p** __socksport__:: + Override the default SOCKS port without setting the hostname. + SEE ALSO -------- **tor**(1), **torify**(1). + diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c index e6eadf1dd..04815a63f 100644 --- a/src/tools/tor-resolve.c +++ b/src/tools/tor-resolve.c @@ -108,6 +108,18 @@ build_socks_resolve_request(char **out, return len; } +static void +onion_warning(const char *hostname) +{ + log_warn(LD_NET, + "%s is a hidden service; those don't have IP addresses. " + "You can use the AutomapHostsOnResolve option to have Tor return a " + "fake address for hidden services. Or you can have your " + "application send the address to Tor directly; we recommend an " + "application that uses SOCKS 5 with hostnames.", + hostname); +} + /** Given a len-byte SOCKS4a response in response, set * *addr_out to the address it contains (in host order). * Return 0 on success, -1 on error. @@ -137,10 +149,7 @@ parse_socks4a_resolve_response(const char *hostname, if (status != 90) { log_warn(LD_NET,"Got status response '%d': socks request failed.", status); if (!strcasecmpend(hostname, ".onion")) { - log_warn(LD_NET, - "%s is a hidden service; those don't have IP addresses. " - "To connect to a hidden service, you need to send the hostname " - "to Tor; we suggest an application that uses SOCKS 4a.",hostname); + onion_warning(hostname); return -1; } return -1; @@ -276,11 +285,7 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport, (unsigned)reply_buf[1], socks5_reason_to_string(reply_buf[1])); if (reply_buf[1] == 4 && !strcasecmpend(hostname, ".onion")) { - log_warn(LD_NET, - "%s is a hidden service; those don't have IP addresses. " - "To connect to a hidden service, you need to send the hostname " - "to Tor; we suggest an application that uses SOCKS 4a.", - hostname); + onion_warning(hostname); } goto err; } @@ -326,8 +331,8 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport, static void usage(void) { - puts("Syntax: tor-resolve [-4] [-v] [-x] [-F] [-p port] " - "hostname [sockshost:socksport]"); + puts("Syntax: tor-resolve [-4] [-5] [-v] [-x] [-F] [-p port] " + "hostname [sockshost[:socksport]]"); exit(1); }