tell me who votes are actually for, not just where they're from

This commit is contained in:
Roger Dingledine 2012-01-08 10:03:46 -05:00
parent 1416dd47a9
commit 78e95b7b71
3 changed files with 28 additions and 8 deletions

View File

@ -35,10 +35,13 @@ typedef struct pending_consensus_t {
static int dirvote_add_signatures_to_all_pending_consensuses( static int dirvote_add_signatures_to_all_pending_consensuses(
const char *detached_signatures_body, const char *detached_signatures_body,
const char *source,
const char **msg_out); const char **msg_out);
static int dirvote_add_signatures_to_pending_consensus( static int dirvote_add_signatures_to_pending_consensus(
pending_consensus_t *pc, pending_consensus_t *pc,
ns_detached_signatures_t *sigs, ns_detached_signatures_t *sigs,
const char *source,
int severity,
const char **msg_out); const char **msg_out);
static char *list_v3_auth_ids(void); static char *list_v3_auth_ids(void);
static void dirvote_fetch_missing_votes(void); static void dirvote_fetch_missing_votes(void);
@ -2168,6 +2171,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
int int
networkstatus_add_detached_signatures(networkstatus_t *target, networkstatus_add_detached_signatures(networkstatus_t *target,
ns_detached_signatures_t *sigs, ns_detached_signatures_t *sigs,
const char *source,
int severity,
const char **msg_out) const char **msg_out)
{ {
int r = 0; int r = 0;
@ -2270,6 +2275,8 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
if (sig->good_signature || !old_sig || old_sig->bad_signature) { if (sig->good_signature || !old_sig || old_sig->bad_signature) {
log_info(LD_DIR, "Adding signature from %s with %s", voter_identity, log_info(LD_DIR, "Adding signature from %s with %s", voter_identity,
algorithm); algorithm);
log(severity, LD_DIR, "Added a signature for %s from %s.",
voter_identity, source);
++r; ++r;
if (old_sig) { if (old_sig) {
smartlist_remove(target_voter->sigs, old_sig); smartlist_remove(target_voter->sigs, old_sig);
@ -3198,7 +3205,8 @@ dirvote_compute_consensuses(void)
SMARTLIST_FOREACH(pending_consensus_signature_list, char *, sig, SMARTLIST_FOREACH(pending_consensus_signature_list, char *, sig,
{ {
const char *msg = NULL; 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) if (r >= 0)
n_sigs += r; n_sigs += r;
else else
@ -3240,6 +3248,8 @@ static int
dirvote_add_signatures_to_pending_consensus( dirvote_add_signatures_to_pending_consensus(
pending_consensus_t *pc, pending_consensus_t *pc,
ns_detached_signatures_t *sigs, ns_detached_signatures_t *sigs,
const char *source,
int severity,
const char **msg_out) const char **msg_out)
{ {
const char *flavor_name; const char *flavor_name;
@ -3258,7 +3268,8 @@ dirvote_add_signatures_to_pending_consensus(
log_info(LD_DIR, "Have %d signatures for adding to %s consensus.", log_info(LD_DIR, "Have %d signatures for adding to %s consensus.",
sig_list ? smartlist_len(sig_list) : 0, flavor_name); 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); log_info(LD_DIR,"Added %d signatures to consensus.", r);
if (r >= 1) { if (r >= 1) {
@ -3307,6 +3318,7 @@ dirvote_add_signatures_to_pending_consensus(
static int static int
dirvote_add_signatures_to_all_pending_consensuses( dirvote_add_signatures_to_all_pending_consensuses(
const char *detached_signatures_body, const char *detached_signatures_body,
const char *source,
const char **msg_out) const char **msg_out)
{ {
int r=0, i, n_added = 0, errors = 0; int r=0, i, n_added = 0, errors = 0;
@ -3323,10 +3335,12 @@ dirvote_add_signatures_to_all_pending_consensuses(
for (i = 0; i < N_CONSENSUS_FLAVORS; ++i) { for (i = 0; i < N_CONSENSUS_FLAVORS; ++i) {
int res; int res;
int severity = i == FLAV_NS ? LOG_NOTICE : LOG_INFO;
pending_consensus_t *pc = &pending_consensuses[i]; pending_consensus_t *pc = &pending_consensuses[i];
if (!pc->consensus) if (!pc->consensus)
continue; 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) if (res < 0)
errors++; errors++;
else else
@ -3373,7 +3387,7 @@ dirvote_add_signatures(const char *detached_signatures_body,
log_notice(LD_DIR, "Got a signature from %s. " log_notice(LD_DIR, "Got a signature from %s. "
"Adding it to the pending consensus.", source); "Adding it to the pending consensus.", source);
return dirvote_add_signatures_to_all_pending_consensuses( return dirvote_add_signatures_to_all_pending_consensuses(
detached_signatures_body, msg); detached_signatures_body, source, msg);
} else { } else {
log_notice(LD_DIR, "Got a signature from %s. " log_notice(LD_DIR, "Got a signature from %s. "
"Queuing it for the next consensus.", source); "Queuing it for the next consensus.", source);

View File

@ -31,6 +31,8 @@ char *networkstatus_compute_consensus(smartlist_t *votes,
consensus_flavor_t flavor); consensus_flavor_t flavor);
int networkstatus_add_detached_signatures(networkstatus_t *target, int networkstatus_add_detached_signatures(networkstatus_t *target,
ns_detached_signatures_t *sigs, ns_detached_signatures_t *sigs,
const char *source,
int severity,
const char **msg_out); const char **msg_out);
char *networkstatus_get_detached_signatures(smartlist_t *consensuses); char *networkstatus_get_detached_signatures(smartlist_t *consensuses);
void ns_detached_signatures_free(ns_detached_signatures_t *s); void ns_detached_signatures_free(ns_detached_signatures_t *s);

View File

@ -1207,9 +1207,11 @@ test_dir_v3_networkstatus(void)
/* Try adding it to con2. */ /* Try adding it to con2. */
detached_text2 = get_detached_sigs(con2,con_md2); detached_text2 = get_detached_sigs(con2,con_md2);
test_eq(1, networkstatus_add_detached_signatures(con2, dsig1, &msg)); test_eq(1, networkstatus_add_detached_signatures(con2, dsig1, "test",
LOG_INFO, &msg));
tor_free(detached_text2); tor_free(detached_text2);
test_eq(1, networkstatus_add_detached_signatures(con_md2, dsig1, &msg)); test_eq(1, networkstatus_add_detached_signatures(con_md2, dsig1, "test",
LOG_INFO, &msg));
tor_free(detached_text2); tor_free(detached_text2);
detached_text2 = get_detached_sigs(con2,con_md2); detached_text2 = get_detached_sigs(con2,con_md2);
//printf("\n<%s>\n", detached_text2); //printf("\n<%s>\n", detached_text2);
@ -1230,10 +1232,12 @@ test_dir_v3_networkstatus(void)
"microdesc"))); "microdesc")));
/* Try adding to con2 twice; verify that nothing changes. */ /* Try adding to con2 twice; verify that nothing changes. */
test_eq(0, networkstatus_add_detached_signatures(con2, dsig1, &msg)); test_eq(0, networkstatus_add_detached_signatures(con2, dsig1, "test",
LOG_INFO, &msg));
/* Add to con. */ /* Add to con. */
test_eq(2, networkstatus_add_detached_signatures(con, dsig2, &msg)); test_eq(2, networkstatus_add_detached_signatures(con, dsig2, "test",
LOG_INFO, &msg));
/* Check signatures */ /* Check signatures */
voter = smartlist_get(con->voters, 1); voter = smartlist_get(con->voters, 1);
sig = smartlist_get(voter->sigs, 0); sig = smartlist_get(voter->sigs, 0);