summaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-02-04 12:26:59 -0500
committerNick Mathewson <nickm@torproject.org>2011-02-04 12:26:59 -0500
commit69f7c0385b16acdfa4a38cb36c86aaceebf61301 (patch)
treee252207389dbc10af5937a7bca14a26943962510 /src/or
parenta6c811313af3cfda1fca1d7595e9259f51d6ffd0 (diff)
parente9803aa71003079cc00a8b3c80324581758a36be (diff)
downloadtor-69f7c0385b16acdfa4a38cb36c86aaceebf61301.tar.gz
tor-69f7c0385b16acdfa4a38cb36c86aaceebf61301.zip
Merge remote branch 'origin/maint-0.2.2' for bug2203_rebased
There was a merge conflict in routerlist.c due to the new node_t logic. Conflicts: src/or/routerlist.c
Diffstat (limited to 'src/or')
-rw-r--r--src/or/dirvote.c11
-rw-r--r--src/or/routerlist.c2
2 files changed, 10 insertions, 3 deletions
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 8ef5b14a4f..1052da93c8 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -50,7 +50,7 @@ static int dirvote_publish_consensus(void);
static char *make_consensus_method_list(int low, int high, const char *sep);
/** The highest consensus method that we currently support. */
-#define MAX_SUPPORTED_CONSENSUS_METHOD 10
+#define MAX_SUPPORTED_CONSENSUS_METHOD 11
/** Lowest consensus method that contains a 'directory-footer' marker */
#define MIN_METHOD_FOR_FOOTER 9
@@ -1686,7 +1686,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
const char *chosen_name = NULL;
int exitsummary_disagreement = 0;
int is_named = 0, is_unnamed = 0, is_running = 0;
- int is_guard = 0, is_exit = 0;
+ int is_guard = 0, is_exit = 0, is_bad_exit = 0;
int naming_conflict = 0;
int n_listing = 0;
int i;
@@ -1812,6 +1812,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
is_guard = 1;
else if (!strcmp(fl, "Running"))
is_running = 1;
+ else if (!strcmp(fl, "BadExit"))
+ is_bad_exit = 1;
}
}
});
@@ -1838,6 +1840,11 @@ networkstatus_compute_consensus(smartlist_t *votes,
rs_out.bandwidth = median_uint32(bandwidths, num_bandwidths);
}
+ /* Fix bug 2203: Do not count BadExit nodes as Exits for bw weights */
+ if (consensus_method >= 11) {
+ is_exit = is_exit && !is_bad_exit;
+ }
+
if (consensus_method >= MIN_METHOD_FOR_BW_WEIGHTS) {
if (rs_out.has_bandwidth) {
T += rs_out.bandwidth;
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 380e34b99c..66066f68d1 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1726,7 +1726,7 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
int is_exit = 0, is_guard = 0, is_dir = 0, this_bw = 0, is_me = 0;
double weight = 1;
- is_exit = node->is_exit;
+ is_exit = node->is_exit && ! node->is_bad_exit;
is_guard = node->is_possible_guard;
is_dir = node_is_dir(node);
if (node->rs) {