aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2006-12-12 20:23:17 +0000
committerRoger Dingledine <arma@torproject.org>2006-12-12 20:23:17 +0000
commit1efd3774286e57f2faeaf37d66291a94c6aaab67 (patch)
tree92cfbe8ee4a115cd2db5bd04ecc7224b629b8308
parent7217f3ca47d1b78d0840d632e17ee1821a527022 (diff)
downloadtor-1efd3774286e57f2faeaf37d66291a94c6aaab67.tar
tor-1efd3774286e57f2faeaf37d66291a94c6aaab67.tar.gz
Fix a bug in 0.1.2.2-alpha that prevented clients from asking
to resolve an address at a given exit node even when they ask for it by name. svn:r9095
-rw-r--r--ChangeLog3
-rw-r--r--src/or/circuituse.c2
-rw-r--r--src/or/or.h4
3 files changed, 8 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index cdc07f757..e7529b41c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -25,6 +25,9 @@ Changes in version 0.1.2.5-xxxx - 200?-??-??
- Fix a bug on the Windows implementation of tor_mmap_file that
would prevent the cached-routers file from ever loading. (reported by
John Kimble.)
+ - Fix a bug in 0.1.2.2-alpha that prevented clients from asking
+ to resolve an address at a given exit node even when they ask for
+ it by name.
o Security bugfixes:
- Do not log introduction points for hidden services if SafeLogging
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 73e72f3e1..42d220f1d 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -1182,7 +1182,7 @@ connection_ap_handshake_attach_circuit(edge_connection_t *conn)
}
return -1;
}
- if (conn->_base.purpose != EXIT_PURPOSE_RESOLVE &&
+ if (!SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command) &&
!connection_ap_can_use_exit(conn, router)) {
log_fn(opt ? LOG_INFO : LOG_WARN, LD_APP,
"Requested exit point '%s' would refuse request. %s.",
diff --git a/src/or/or.h b/src/or/or.h
index 080c7f4ff..22f9e15e3 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -1712,6 +1712,10 @@ static INLINE void or_state_mark_dirty(or_state_t *state, time_t when)
#define SOCKS_COMMAND_CONNECT 0x01
#define SOCKS_COMMAND_RESOLVE 0xF0
#define SOCKS_COMMAND_RESOLVE_PTR 0xF1
+
+#define SOCKS_COMMAND_IS_RESOLVE(c) ((c)==SOCKS_COMMAND_RESOLVE || \
+ (c)==SOCKS_COMMAND_RESOLVE_PTR)
+
/** State of a SOCKS request from a user to an OP */
struct socks_request_t {
char socks_version; /**< Which version of SOCKS did the client use? */