aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2008-02-06 12:45:04 +0000
committerRoger Dingledine <arma@torproject.org>2008-02-06 12:45:04 +0000
commitbbcf406d9fe0c5a51f76e0adb37bf854091246c5 (patch)
tree33124660b7c7596c84aef1d297fb123fba15d2a4
parente49d712b8a2a5e7fe75f6f229bc2ab6b175b82e4 (diff)
downloadtor-bbcf406d9fe0c5a51f76e0adb37bf854091246c5.tar
tor-bbcf406d9fe0c5a51f76e0adb37bf854091246c5.tar.gz
If the networkstatus consensus lists no recommended versions, don't
complain to the user and demand that they upgrade to one of "". svn:r13401
-rw-r--r--src/or/control.c1
-rw-r--r--src/or/networkstatus.c3
-rw-r--r--src/or/or.h1
-rw-r--r--src/or/routerparse.c10
4 files changed, 13 insertions, 2 deletions
diff --git a/src/or/control.c b/src/or/control.c
index a8f10aa48..ff3a4b10a 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1706,6 +1706,7 @@ getinfo_helper_events(control_connection_t *control_conn,
case VS_NEW: *answer = tor_strdup("new"); break;
case VS_NEW_IN_SERIES: *answer = tor_strdup("new in series"); break;
case VS_UNRECOMMENDED: *answer = tor_strdup("unrecommended"); break;
+ case VS_EMPTY: *answer = tor_strdup("none recommended"); break;
case VS_UNKNOWN: *answer = tor_strdup("unknown"); break;
default: tor_fragile_assert();
}
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 4eda1b4e0..d1069940c 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -1577,6 +1577,9 @@ routers_update_all_from_networkstatus(time_t now, int dir_version)
if (status == VS_RECOMMENDED) {
log_info(LD_GENERAL, "The directory authorities say my version is ok.");
+ } else if (status == VS_EMPTY) {
+ log_info(LD_GENERAL,
+ "The directory authorities don't recommend any versions.");
} else if (status == VS_NEW || status == VS_NEW_IN_SERIES) {
if (!have_warned_about_new_version) {
log_notice(LD_GENERAL, "This version of Tor (%s) is newer than any "
diff --git a/src/or/or.h b/src/or/or.h
index 2c2cce34f..9ec57784f 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -3317,6 +3317,7 @@ typedef enum version_status_t {
* in its series, but later recommended versions exist.
*/
VS_UNRECOMMENDED=4, /**< This version is not recommended (general case). */
+ VS_EMPTY=5, /**< The version list was empty; no agreed-on versions. */
VS_UNKNOWN, /**< We have no idea. */
} version_status_t;
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 1c21715d6..c4ebe857f 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -280,7 +280,7 @@ static token_rule_t dir_footer_token_table[] = {
END_OF_TABLE
};
-/** List of tokens allowable in v1 diectory headers/footers. */
+/** List of tokens allowable in v1 directory headers/footers. */
static token_rule_t dir_token_table[] = {
/* don't enforce counts; this is obsolete. */
T( "network-status", K_NETWORK_STATUS, NO_ARGS, NO_OBJ ),
@@ -538,7 +538,8 @@ router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
}
/** Return VS_RECOMMENDED if <b>myversion</b> is contained in
- * <b>versionlist</b>. Else, return VS_OLD if every member of
+ * <b>versionlist</b>. Else, return VS_EMPTY if versionlist has no
+ * entries. Else, return VS_OLD if every member of
* <b>versionlist</b> is newer than <b>myversion</b>. Else, return
* VS_NEW_IN_SERIES if there is at least one member of <b>versionlist</b> in
* the same series (major.minor.micro) as <b>myversion</b>, but no such member
@@ -569,6 +570,11 @@ tor_version_is_obsolete(const char *myversion, const char *versionlist)
version_sl = smartlist_create();
smartlist_split_string(version_sl, versionlist, ",", SPLIT_SKIP_SPACE, 0);
+ if (!strlen(versionlist)) { /* no authorities cared or agreed */
+ ret = VS_EMPTY;
+ goto done;
+ }
+
SMARTLIST_FOREACH(version_sl, const char *, cp, {
if (!strcmpstart(cp, "Tor "))
cp += 4;