summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/bug64045
-rw-r--r--src/or/dirvote.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/changes/bug6404 b/changes/bug6404
index d01964d1e5..64d459418f 100644
--- a/changes/bug6404
+++ b/changes/bug6404
@@ -5,3 +5,8 @@
with complex policies or family declarations. Partial fix for
bug 6404; fix on 0.2.2.6-alpha.
+ - Authorities no longer include any router in their
+ microdescriptor consensuses for which they couldn't generate or
+ agree on a microdescriptor. Partial fix for bug 6404; fix on
+ 0.2.2.6-alpha.
+
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 85ea85ce73..87af5becf7 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -54,7 +54,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 12
+#define MAX_SUPPORTED_CONSENSUS_METHOD 13
/** Lowest consensus method that contains a 'directory-footer' marker */
#define MIN_METHOD_FOR_FOOTER 9
@@ -72,6 +72,10 @@ static char *make_consensus_method_list(int low, int high, const char *sep);
* for a param. */
#define MIN_METHOD_FOR_MAJORITY_PARAMS 12
+/** Lowest consensus method where microdesc consensuses omit any entry
+ * with no microdesc. */
+#define MIN_METHOD_FOR_MANDATORY_MICRODESC 13
+
/* =====
* Voting
* =====*/
@@ -1935,6 +1939,13 @@ networkstatus_compute_consensus(smartlist_t *votes,
}
}
+ if (flavor == FLAV_MICRODESC &&
+ consensus_method >= MIN_METHOD_FOR_MANDATORY_MICRODESC &&
+ tor_digest256_is_zero(microdesc_digest)) {
+ /* With no microdescriptor digest, we omit the entry entirely. */
+ continue;
+ }
+
{
char buf[4096];
/* Okay!! Now we can write the descriptor... */