mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-12 05:33:35 +01:00
dirparse: add helper for recommended/required protocols
This commit is contained in:
parent
8d89aa5eea
commit
c2b95da4d4
@ -1053,6 +1053,19 @@ extract_shared_random_srvs(networkstatus_t *ns, smartlist_t *tokens)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Allocate a copy of a protover line, if present. If present but malformed,
|
||||||
|
* set *error to true. */
|
||||||
|
static char *
|
||||||
|
dup_protocols_string(smartlist_t *tokens, bool *error, directory_keyword kw)
|
||||||
|
{
|
||||||
|
directory_token_t *tok = find_opt_by_keyword(tokens, kw);
|
||||||
|
if (!tok)
|
||||||
|
return NULL;
|
||||||
|
if (protover_contains_long_protocol_names(tok->args[0]))
|
||||||
|
*error = true;
|
||||||
|
return tor_strdup(tok->args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
/** Parse a v3 networkstatus vote, opinion, or consensus (depending on
|
/** Parse a v3 networkstatus vote, opinion, or consensus (depending on
|
||||||
* ns_type), from <b>s</b>, and return the result. Return NULL on failure. */
|
* ns_type), from <b>s</b>, and return the result. Return NULL on failure. */
|
||||||
networkstatus_t *
|
networkstatus_t *
|
||||||
@ -1169,26 +1182,17 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Reject the vote if any of the protocols lines are malformed.
|
// Reject the vote if any of the protocols lines are malformed.
|
||||||
if ((tok = find_opt_by_keyword(tokens, K_RECOMMENDED_CLIENT_PROTOCOLS))) {
|
bool unparseable = false;
|
||||||
if (protover_contains_long_protocol_names(tok->args[0]))
|
ns->recommended_client_protocols = dup_protocols_string(tokens, &unparseable,
|
||||||
|
K_RECOMMENDED_CLIENT_PROTOCOLS);
|
||||||
|
ns->recommended_relay_protocols = dup_protocols_string(tokens, &unparseable,
|
||||||
|
K_RECOMMENDED_RELAY_PROTOCOLS);
|
||||||
|
ns->required_client_protocols = dup_protocols_string(tokens, &unparseable,
|
||||||
|
K_REQUIRED_CLIENT_PROTOCOLS);
|
||||||
|
ns->required_relay_protocols = dup_protocols_string(tokens, &unparseable,
|
||||||
|
K_REQUIRED_RELAY_PROTOCOLS);
|
||||||
|
if (unparseable)
|
||||||
goto err;
|
goto err;
|
||||||
ns->recommended_client_protocols = tor_strdup(tok->args[0]);
|
|
||||||
}
|
|
||||||
if ((tok = find_opt_by_keyword(tokens, K_RECOMMENDED_RELAY_PROTOCOLS))) {
|
|
||||||
if (protover_contains_long_protocol_names(tok->args[0]))
|
|
||||||
goto err;
|
|
||||||
ns->recommended_relay_protocols = tor_strdup(tok->args[0]);
|
|
||||||
}
|
|
||||||
if ((tok = find_opt_by_keyword(tokens, K_REQUIRED_CLIENT_PROTOCOLS))) {
|
|
||||||
if (protover_contains_long_protocol_names(tok->args[0]))
|
|
||||||
goto err;
|
|
||||||
ns->required_client_protocols = tor_strdup(tok->args[0]);
|
|
||||||
}
|
|
||||||
if ((tok = find_opt_by_keyword(tokens, K_REQUIRED_RELAY_PROTOCOLS))) {
|
|
||||||
if (protover_contains_long_protocol_names(tok->args[0]))
|
|
||||||
goto err;
|
|
||||||
ns->required_relay_protocols = tor_strdup(tok->args[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
tok = find_by_keyword(tokens, K_VALID_AFTER);
|
tok = find_by_keyword(tokens, K_VALID_AFTER);
|
||||||
if (parse_iso_time(tok->args[0], &ns->valid_after))
|
if (parse_iso_time(tok->args[0], &ns->valid_after))
|
||||||
|
Loading…
Reference in New Issue
Block a user