aboutsummaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-06-18 11:10:27 -0400
committerNick Mathewson <nickm@torproject.org>2009-06-18 11:10:27 -0400
commitaa88c8d91ad832f76d570e826f509862af52fa3e (patch)
tree9ef10e1e93ec5b8f7f5f8c45c1e71d7d2aacb539 /src/tools
parent94e8c34cb770e2206bd0dbf96c3a36137355171d (diff)
parent298dc95dfd84877f1e231426322c02240303815e (diff)
downloadtor-aa88c8d91ad832f76d570e826f509862af52fa3e.tar.gz
tor-aa88c8d91ad832f76d570e826f509862af52fa3e.zip
Merge commit 'origin/maint-0.2.1'
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/tor-resolve.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index ca75a5a56c..fe4e882416 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -107,7 +107,8 @@ build_socks_resolve_request(char **out,
* Return 0 on success, -1 on error.
*/
static int
-parse_socks4a_resolve_response(const char *response, size_t len,
+parse_socks4a_resolve_response(const char *hostname,
+ const char *response, size_t len,
uint32_t *addr_out)
{
uint8_t status;
@@ -129,6 +130,13 @@ parse_socks4a_resolve_response(const char *response, size_t len,
}
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);
+ return -1;
+ }
return -1;
}
@@ -241,7 +249,8 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
log_err(LD_NET, "Error reading SOCKS4 response.");
return -1;
}
- if (parse_socks4a_resolve_response(reply_buf, RESPONSE_LEN_4,
+ if (parse_socks4a_resolve_response(hostname,
+ reply_buf, RESPONSE_LEN_4,
result_addr)<0){
return -1;
}
@@ -260,6 +269,13 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
log_warn(LD_NET,"Got SOCKS5 status response '%u': %s",
(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);
+ }
return -1;
}
if (reply_buf[3] == 1) {
@@ -396,14 +412,6 @@ main(int argc, char **argv)
usage();
}
- if (!strcasecmpend(arg[0], ".onion") && !force) {
- fprintf(stderr,
- "%s is a hidden service; those don't have IP addresses.\n\n"
- "To connect to a hidden service, you need to send the hostname\n"
- "to Tor; we suggest an application that uses SOCKS 4a.\n", arg[0]);
- return 1;
- }
-
if (network_init()<0) {
log_err(LD_BUG,"Error initializing network; exiting.");
return 1;