aboutsummaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2012-01-08 12:17:16 -0500
committerRoger Dingledine <arma@torproject.org>2012-01-08 12:17:16 -0500
commitecdea4eeafd921f0dcb053f2585d9cb05d6df658 (patch)
tree928e863bccd8dd871eaf098bb77a2a1541510fad /src/or
parent59d0a5ae693efe9321e03302515d405094998e43 (diff)
parentcc1580dbe02f0f285fca65b7b388d99dbaf78f5c (diff)
downloadtor-ecdea4eeafd921f0dcb053f2585d9cb05d6df658.tar
tor-ecdea4eeafd921f0dcb053f2585d9cb05d6df658.tar.gz
Merge branch 'maint-0.2.2'
Diffstat (limited to 'src/or')
-rw-r--r--src/or/dirvote.c22
-rw-r--r--src/or/dirvote.h2
-rw-r--r--src/or/networkstatus.c25
3 files changed, 38 insertions, 11 deletions
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 01e2358c4..28433366e 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -35,10 +35,13 @@ typedef struct pending_consensus_t {
static int dirvote_add_signatures_to_all_pending_consensuses(
const char *detached_signatures_body,
+ const char *source,
const char **msg_out);
static int dirvote_add_signatures_to_pending_consensus(
pending_consensus_t *pc,
ns_detached_signatures_t *sigs,
+ const char *source,
+ int severity,
const char **msg_out);
static char *list_v3_auth_ids(void);
static void dirvote_fetch_missing_votes(void);
@@ -2177,6 +2180,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
int
networkstatus_add_detached_signatures(networkstatus_t *target,
ns_detached_signatures_t *sigs,
+ const char *source,
+ int severity,
const char **msg_out)
{
int r = 0;
@@ -2279,6 +2284,8 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
if (sig->good_signature || !old_sig || old_sig->bad_signature) {
log_info(LD_DIR, "Adding signature from %s with %s", voter_identity,
algorithm);
+ log(severity, LD_DIR, "Added a signature for %s from %s.",
+ target_voter->nickname, source);
++r;
if (old_sig) {
smartlist_remove(target_voter->sigs, old_sig);
@@ -3207,7 +3214,8 @@ dirvote_compute_consensuses(void)
SMARTLIST_FOREACH(pending_consensus_signature_list, char *, sig,
{
const char *msg = NULL;
- int r = dirvote_add_signatures_to_all_pending_consensuses(sig, &msg);
+ int r = dirvote_add_signatures_to_all_pending_consensuses(sig,
+ "pending", &msg);
if (r >= 0)
n_sigs += r;
else
@@ -3249,6 +3257,8 @@ static int
dirvote_add_signatures_to_pending_consensus(
pending_consensus_t *pc,
ns_detached_signatures_t *sigs,
+ const char *source,
+ int severity,
const char **msg_out)
{
const char *flavor_name;
@@ -3267,7 +3277,8 @@ dirvote_add_signatures_to_pending_consensus(
log_info(LD_DIR, "Have %d signatures for adding to %s consensus.",
sig_list ? smartlist_len(sig_list) : 0, flavor_name);
}
- r = networkstatus_add_detached_signatures(pc->consensus, sigs, msg_out);
+ r = networkstatus_add_detached_signatures(pc->consensus, sigs,
+ source, severity, msg_out);
log_info(LD_DIR,"Added %d signatures to consensus.", r);
if (r >= 1) {
@@ -3316,6 +3327,7 @@ dirvote_add_signatures_to_pending_consensus(
static int
dirvote_add_signatures_to_all_pending_consensuses(
const char *detached_signatures_body,
+ const char *source,
const char **msg_out)
{
int r=0, i, n_added = 0, errors = 0;
@@ -3332,10 +3344,12 @@ dirvote_add_signatures_to_all_pending_consensuses(
for (i = 0; i < N_CONSENSUS_FLAVORS; ++i) {
int res;
+ int severity = i == FLAV_NS ? LOG_NOTICE : LOG_INFO;
pending_consensus_t *pc = &pending_consensuses[i];
if (!pc->consensus)
continue;
- res = dirvote_add_signatures_to_pending_consensus(pc, sigs, msg_out);
+ res = dirvote_add_signatures_to_pending_consensus(pc, sigs, source,
+ severity, msg_out);
if (res < 0)
errors++;
else
@@ -3382,7 +3396,7 @@ dirvote_add_signatures(const char *detached_signatures_body,
log_notice(LD_DIR, "Got a signature from %s. "
"Adding it to the pending consensus.", source);
return dirvote_add_signatures_to_all_pending_consensuses(
- detached_signatures_body, msg);
+ detached_signatures_body, source, msg);
} else {
log_notice(LD_DIR, "Got a signature from %s. "
"Queuing it for the next consensus.", source);
diff --git a/src/or/dirvote.h b/src/or/dirvote.h
index 1f4dc362b..b585ccb9d 100644
--- a/src/or/dirvote.h
+++ b/src/or/dirvote.h
@@ -31,6 +31,8 @@ char *networkstatus_compute_consensus(smartlist_t *votes,
consensus_flavor_t flavor);
int networkstatus_add_detached_signatures(networkstatus_t *target,
ns_detached_signatures_t *sigs,
+ const char *source,
+ int severity,
const char **msg_out);
char *networkstatus_get_detached_signatures(smartlist_t *consensuses);
void ns_detached_signatures_free(ns_detached_signatures_t *s);
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 7cd9d02c3..a835e78b8 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -486,6 +486,8 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
int n_no_signature = 0;
int n_v3_authorities = get_n_authorities(V3_DIRINFO);
int n_required = n_v3_authorities/2 + 1;
+ smartlist_t *list_good = smartlist_create();
+ smartlist_t *list_no_signature = smartlist_create();
smartlist_t *need_certs_from = smartlist_create();
smartlist_t *unrecognized = smartlist_create();
smartlist_t *missing_authorities = smartlist_create();
@@ -536,11 +538,13 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
else if (sig->bad_signature)
++bad_here;
} SMARTLIST_FOREACH_END(sig);
- if (good_here)
+
+ if (good_here) {
++n_good;
- else if (bad_here)
+ smartlist_add(list_good, voter->nickname);
+ } else if (bad_here) {
++n_bad;
- else if (missing_key_here) {
+ } else if (missing_key_here) {
++n_missing_key;
if (dl_failed_key_here)
++n_dl_failed_key;
@@ -548,6 +552,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
++n_unknown;
} else {
++n_no_signature;
+ smartlist_add(list_no_signature, voter->nickname);
}
} SMARTLIST_FOREACH_END(voter);
@@ -595,13 +600,17 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
{
smartlist_t *sl = smartlist_create();
char *cp;
+ char *tmp = smartlist_join_strings(list_good, " ", 0, NULL);
tor_asprintf(&cp, "A consensus needs %d good signatures from recognized "
- "authorities for us to accept it. This one has %d.",
- n_required, n_good);
+ "authorities for us to accept it. This one has %d (%s).",
+ n_required, n_good, tmp);
+ tor_free(tmp);
smartlist_add(sl,cp);
if (n_no_signature) {
- tor_asprintf(&cp, "%d of the authorities we know didn't sign it.",
- n_no_signature);
+ tmp = smartlist_join_strings(list_no_signature, " ", 0, NULL);
+ tor_asprintf(&cp, "%d (%s) of the authorities we know didn't sign it.",
+ n_no_signature, tmp);
+ tor_free(tmp);
smartlist_add(sl,cp);
}
if (n_unknown) {
@@ -627,6 +636,8 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
}
}
+ smartlist_free(list_good);
+ smartlist_free(list_no_signature);
smartlist_free(unrecognized);
smartlist_free(need_certs_from);
smartlist_free(missing_authorities);