mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Check the correct consensus before giving it to the client
Previously, a directory would check the latest NS consensus for having the signatures the client wanted, and use that consensus's valid_until time to set the HTTP lifetime. With this patch, the directory looks at NS consensus or the microdesc consensus, depending on what the client asked for.
This commit is contained in:
parent
32bf258881
commit
cc21e56ed4
4
changes/check_correct_flav_sigs
Normal file
4
changes/check_correct_flav_sigs
Normal file
@ -0,0 +1,4 @@
|
||||
o Minor bugfixes:
|
||||
- When checking for requested signatures on the latest consensus before
|
||||
serving it to a client, make sure to check the right consensus flavor.
|
||||
Bugfix on 0.2.2.6-alpha.
|
@ -2775,10 +2775,11 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
|
||||
else
|
||||
request_type = "/tor/status/?";
|
||||
} else {
|
||||
networkstatus_t *v = networkstatus_get_latest_consensus();
|
||||
networkstatus_t *v;
|
||||
time_t now = time(NULL);
|
||||
const char *want_fps = NULL;
|
||||
char *flavor = NULL;
|
||||
int flav = FLAV_NS;
|
||||
#define CONSENSUS_URL_PREFIX "/tor/status-vote/current/consensus/"
|
||||
#define CONSENSUS_FLAVORED_PREFIX "/tor/status-vote/current/consensus-"
|
||||
/* figure out the flavor if any, and who we wanted to sign the thing */
|
||||
@ -2792,12 +2793,16 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
|
||||
} else {
|
||||
flavor = tor_strdup(f);
|
||||
}
|
||||
flav = networkstatus_parse_flavor_name(flavor);
|
||||
if (flav < 0)
|
||||
flav = FLAV_NS;
|
||||
} else {
|
||||
if (!strcmpstart(url, CONSENSUS_URL_PREFIX))
|
||||
want_fps = url+strlen(CONSENSUS_URL_PREFIX);
|
||||
}
|
||||
|
||||
/* XXXX023 MICRODESC NM NM should check document of correct flavor */
|
||||
v = networkstatus_get_latest_consensus_by_flavor(flav);
|
||||
|
||||
if (v && want_fps &&
|
||||
!client_likes_consensus(v, want_fps)) {
|
||||
write_http_status_line(conn, 404, "Consensus not signed by sufficient "
|
||||
|
Loading…
Reference in New Issue
Block a user