Commit 440eaa9b authored by George Kadianakis's avatar George Kadianakis Committed by Nick Mathewson
Browse files

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."
parent a561a10d
......@@ -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);
......
......@@ -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]);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment