backport r15366, bump to 0.2.0.28-rc-dev

svn:r15435
This commit is contained in:
Roger Dingledine 2008-06-23 18:52:12 +00:00
parent be21d71eee
commit 80f03b67ef
9 changed files with 52 additions and 18 deletions

View File

@ -1,4 +1,15 @@
Changes in version 0.2.0.29 - 2008-06-13
Changes in version 0.2.0.29 - 2008-06-xx
o Major bugfixes:
- If you have more than one bridge but don't know their keys,
you would only learn a request for the descriptor of the first one
on your list. (Tor considered launching requests for the others, but
found that it already had a connection on the way for $0000...0000
so it didn't open another.)
- If you have more than one bridge but don't know their keys, and the
connection to one of the bridges failed, you would cancel all
pending bridge connections. (After all, they all have the same
digest.)
o Minor bugfixes:
- Fix a macro/CPP interactions that was confusing some compilers:
some GCCs don't like #if/#endif pairs inside macro arguments.

View File

@ -5,7 +5,7 @@ dnl Copyright (c) 2007-2008, The Tor Project, Inc.
dnl See LICENSE for licensing information
AC_INIT
AM_INIT_AUTOMAKE(tor, 0.2.0.28-rc)
AM_INIT_AUTOMAKE(tor, 0.2.0.28-rc-dev)
AM_CONFIG_HEADER(orconfig.h)
AC_CANONICAL_HOST

View File

@ -9,7 +9,7 @@
!include "FileFunc.nsh"
!insertmacro GetParameters
!define VERSION "0.2.0.28-rc"
!define VERSION "0.2.0.28-rc-dev"
!define INSTALLER "tor-${VERSION}-win32.exe"
!define WEBSITE "https://www.torproject.org/"
!define LICENSE "LICENSE"

View File

@ -5,7 +5,7 @@ description of the patch.)
Items before a stable 0.2.0.x bundle:
- Tor items:
R - releasenotes
- backport r15366
o backport r15366
- Vidalia items:
E d address arma's Linux 100% cpu bug
- Torbutton items:

View File

@ -412,8 +412,9 @@ circuit_n_conn_done(or_connection_t *or_conn, int status)
smartlist_t *pending_circs;
int err_reason = 0;
log_debug(LD_CIRC,"or_conn to %s, status=%d",
or_conn->nickname ? or_conn->nickname : "NULL", status);
log_debug(LD_CIRC,"or_conn to %s/%s, status=%d",
or_conn->nickname ? or_conn->nickname : "NULL",
or_conn->_base.address, status);
pending_circs = smartlist_create();
circuit_get_all_pending_on_or_conn(pending_circs, or_conn);

View File

@ -95,10 +95,19 @@ circuit_is_acceptable(circuit_t *circ, edge_connection_t *conn,
tor_assert(conn->chosen_exit_name);
if (build_state->chosen_exit) {
char digest[DIGEST_LEN];
if (hexdigest_to_digest(conn->chosen_exit_name, digest) < 0 ||
memcmp(digest, build_state->chosen_exit->identity_digest,
DIGEST_LEN))
if (hexdigest_to_digest(conn->chosen_exit_name, digest) < 0)
return 0; /* broken digest, we don't want it */
if (memcmp(digest, build_state->chosen_exit->identity_digest,
DIGEST_LEN))
return 0; /* this is a circuit to somewhere else */
if (tor_digest_is_zero(digest)) {
/* we don't know the digest; have to compare addr:port */
struct in_addr in;
if (!tor_inet_aton(conn->socks_request->address, &in) ||
build_state->chosen_exit->addr != ntohl(in.s_addr) ||
build_state->chosen_exit->port != conn->socks_request->port)
return 0;
}
}
} else {
if (conn->want_onehop) {
@ -748,7 +757,7 @@ circuit_build_failed(origin_circuit_t *circ)
}
/* if there are any one-hop streams waiting on this circuit, fail
* them now so they can retry elsewhere. */
connection_ap_fail_onehop(circ->_base.n_conn_id_digest);
connection_ap_fail_onehop(circ->_base.n_conn_id_digest, circ->build_state);
}
switch (circ->_base.purpose) {

View File

@ -460,7 +460,8 @@ connection_ap_attach_pending(void)
/** Tell any AP streams that are waiting for a onehop tunnel to
* <b>failed_digest</b> that they are going to fail. */
void
connection_ap_fail_onehop(const char *failed_digest)
connection_ap_fail_onehop(const char *failed_digest,
cpath_build_state_t *build_state)
{
edge_connection_t *edge_conn;
char digest[DIGEST_LEN];
@ -474,12 +475,23 @@ connection_ap_fail_onehop(const char *failed_digest)
edge_conn = TO_EDGE_CONN(conn);
if (!edge_conn->want_onehop)
continue;
if (!hexdigest_to_digest(edge_conn->chosen_exit_name, digest) &&
!memcmp(digest, failed_digest, DIGEST_LEN)) {
log_info(LD_APP, "Closing onehop stream to '%s' because the OR conn "
"just failed.", edge_conn->chosen_exit_name);
connection_mark_unattached_ap(edge_conn, END_STREAM_REASON_TIMEOUT);
if (hexdigest_to_digest(edge_conn->chosen_exit_name, digest) < 0 ||
memcmp(digest, failed_digest, DIGEST_LEN))
continue;
if (tor_digest_is_zero(digest)) {
/* we don't know the digest; have to compare addr:port */
struct in_addr in;
if (!build_state || !build_state->chosen_exit ||
!edge_conn->socks_request || !edge_conn->socks_request->address ||
!tor_inet_aton(edge_conn->socks_request->address, &in) ||
build_state->chosen_exit->addr != ntohl(in.s_addr) ||
build_state->chosen_exit->port != edge_conn->socks_request->port)
continue;
}
log_info(LD_APP, "Closing onehop stream to '%s/%s' because the OR conn "
"just failed.", edge_conn->chosen_exit_name,
edge_conn->socks_request->address);
connection_mark_unattached_ap(edge_conn, END_STREAM_REASON_TIMEOUT);
});
}

View File

@ -2812,7 +2812,8 @@ int connection_edge_is_rendezvous_stream(edge_connection_t *conn);
int connection_ap_can_use_exit(edge_connection_t *conn, routerinfo_t *exit);
void connection_ap_expire_beginning(void);
void connection_ap_attach_pending(void);
void connection_ap_fail_onehop(const char *failed_digest);
void connection_ap_fail_onehop(const char *failed_digest,
cpath_build_state_t *build_state);
void circuit_discard_optional_exit_enclaves(extend_info_t *info);
int connection_ap_detach_retriable(edge_connection_t *conn,
origin_circuit_t *circ,

View File

@ -227,6 +227,6 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
#define VERSION "0.2.0.28-rc"
#define VERSION "0.2.0.28-rc-dev"