|
@@ -178,7 +178,6 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
|
|
|
purpose == CIRCUIT_PURPOSE_S_HSDIR_POST ||
|
|
|
purpose == CIRCUIT_PURPOSE_C_HSDIR_GET) {
|
|
|
tor_addr_t addr;
|
|
|
- const int family = tor_addr_parse(&addr, conn->socks_request->address);
|
|
|
if (!exitnode && !build_state->onehop_tunnel) {
|
|
|
log_debug(LD_CIRC,"Not considering circuit with unknown router.");
|
|
|
return 0;
|
|
@@ -199,6 +198,8 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
|
|
|
return 0;
|
|
|
if (tor_digest_is_zero(digest)) {
|
|
|
|
|
|
+ const int family = tor_addr_parse(&addr,
|
|
|
+ conn->socks_request->address);
|
|
|
if (family < 0 ||
|
|
|
!tor_addr_eq(&build_state->chosen_exit->addr, &addr) ||
|
|
|
build_state->chosen_exit->port != conn->socks_request->port)
|
|
@@ -211,12 +212,14 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
- if (origin_circ->prepend_policy && family != -1) {
|
|
|
- int r = compare_tor_addr_to_addr_policy(&addr,
|
|
|
- conn->socks_request->port,
|
|
|
- origin_circ->prepend_policy);
|
|
|
- if (r == ADDR_POLICY_REJECTED)
|
|
|
- return 0;
|
|
|
+ if (origin_circ->prepend_policy) {
|
|
|
+ if (tor_addr_parse(&addr, conn->socks_request->address) != -1) {
|
|
|
+ int r = compare_tor_addr_to_addr_policy(&addr,
|
|
|
+ conn->socks_request->port,
|
|
|
+ origin_circ->prepend_policy);
|
|
|
+ if (r == ADDR_POLICY_REJECTED)
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
if (exitnode && !connection_ap_can_use_exit(conn, exitnode)) {
|
|
|
|