[tor-commits] [tor/master] Correctly assign HSDir flags based on protocol list

nickm at torproject.org nickm at torproject.org
Wed Aug 9 00:36:38 UTC 2017


commit 440eaa9b22573cdb0d38bf5c13200cc1077a453f
Author: George Kadianakis <desnacked at riseup.net>
Date:   Thu Aug 3 16:08:17 2017 +0300

    Correctly assign HSDir flags based on protocol list
    
    In Nick's words:
    
    "We want to always return false if the platform is a Tor version, and it
    is not as new as 0.3.0.8 -- but if the platform is not a Tor version, or
    if the version is as new as 0.3.0.8, then we want to obey the protocol
    list.
    
    That way, other implementations of our protocol won't have to claim any
    particular Tor version, and future versions of Tor will have the freedom
    to drop this protocol in the distant future."
---
 src/or/nodelist.c    | 9 +++++++--
 src/or/routerparse.c | 8 +++++---
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index abbe15ecc..e900b5145 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -800,9 +800,14 @@ node_supports_v3_hsdir(const node_t *node)
     if (node->ri->protocol_list == NULL) {
       return 0;
     }
+    /* Bug #22447 forces us to filter on tor version:
+     * If platform is a Tor version, and older than 0.3.0.8, return False.
+     * Else, obey the protocol list. */
     if (node->ri->platform) {
-      /* Bug #22447 forces us to filter on this version. */
-      return tor_version_as_new_as(node->ri->platform, "0.3.0.8");
+      if (!strcmpstart(node->ri->platform, "Tor ") &&
+          !tor_version_as_new_as(node->ri->platform, "0.3.0.8")) {
+        return 0;
+      }
     }
     return protocol_list_supports_protocol(node->ri->protocol_list,
                                            PRT_HSDIR, PROTOVER_HSDIR_V3);
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index ec63aef4d..db42a44ee 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -2706,7 +2706,8 @@ routerstatus_parse_entry_from_string(memarea_t *area,
     rs->supports_ed25519_hs_intro =
       protocol_list_supports_protocol(tok->args[0], PRT_HSINTRO, 4);
     rs->supports_v3_hsdir =
-      protocol_list_supports_protocol(tok->args[0], PRT_HSDIR, 2);
+      protocol_list_supports_protocol(tok->args[0], PRT_HSDIR,
+                                      PROTOVER_HSDIR_V3);
   }
   if ((tok = find_opt_by_keyword(tokens, K_V))) {
     tor_assert(tok->n_args == 1);
@@ -2720,8 +2721,9 @@ routerstatus_parse_entry_from_string(memarea_t *area,
     }
     if (!strcmpstart(tok->args[0], "Tor ") && found_protocol_list) {
       /* Bug #22447 forces us to filter on this version. */
-      rs->supports_v3_hsdir =
-        tor_version_as_new_as(tok->args[0], "0.3.0.8");
+      if (!tor_version_as_new_as(tok->args[0], "0.3.0.8")) {
+        rs->supports_v3_hsdir = 0;
+      }
     }
     if (vote_rs) {
       vote_rs->version = tor_strdup(tok->args[0]);





More information about the tor-commits mailing list