Commit a6509cb8 authored by Nick Mathewson's avatar Nick Mathewson 🦋
Browse files

Merge remote-tracking branch 'tor-github/pr/1727/head'

parents a010dbf9 ed1ee200
o Minor bugfixes (protocol versions):
- Sort tor's supported protocol version lists, as recommended by the
tor directory specification. Fixes bug 33285; bugfix on 0.4.0.1-alpha.
......@@ -391,6 +391,7 @@ protover_get_supported_protocols(void)
"Cons=1-2 "
"Desc=1-2 "
"DirCache=1-2 "
"FlowCtrl=1 "
"HSDir=1-2 "
"HSIntro=3-5 "
"HSRend=1-2 "
......@@ -401,9 +402,8 @@ protover_get_supported_protocols(void)
"LinkAuth=3 "
#endif
"Microdesc=1-2 "
"Relay=1-2 "
"Padding=2 "
"FlowCtrl=1";
"Relay=1-2";
}
/** The protocols from protover_get_supported_protocols(), as parsed into a
......
......@@ -4619,17 +4619,14 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
/* These are hardwired, to avoid disaster. */
v3_out->recommended_relay_protocols =
tor_strdup("Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 "
"Link=4 Microdesc=1-2 Relay=2");
tor_strdup(DIRVOTE_RECCOMEND_RELAY_PROTO);
v3_out->recommended_client_protocols =
tor_strdup("Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 "
"Link=4 Microdesc=1-2 Relay=2");
v3_out->required_client_protocols =
tor_strdup("Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 "
"Link=4 Microdesc=1-2 Relay=2");
tor_strdup(DIRVOTE_RECCOMEND_CLIENT_PROTO);
v3_out->required_relay_protocols =
tor_strdup("Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 "
"Link=3-4 Microdesc=1 Relay=1-2");
tor_strdup(DIRVOTE_REQUIRE_RELAY_PROTO);
v3_out->required_client_protocols =
tor_strdup(DIRVOTE_REQUIRE_CLIENT_PROTO);
/* We are not allowed to vote to require anything we don't have. */
tor_assert(protover_all_supported(v3_out->required_relay_protocols, NULL));
......
......@@ -230,6 +230,36 @@ char *networkstatus_get_detached_signatures(smartlist_t *consensuses);
STATIC microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri,
int consensus_method);
/** The recommended relay protocols for this authority's votes.
* Recommending a new protocol causes old tor versions to log a warning.
*/
#define DIRVOTE_RECCOMEND_RELAY_PROTO \
"Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 " \
"Link=4 Microdesc=1-2 Relay=2"
/** The recommended client protocols for this authority's votes.
* Recommending a new protocol causes old tor versions to log a warning.
*/
#define DIRVOTE_RECCOMEND_CLIENT_PROTO \
"Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 " \
"Link=4 Microdesc=1-2 Relay=2"
/** The required relay protocols for this authority's votes.
* WARNING: Requiring a new protocol causes old tor versions to shut down.
* Requiring the wrong protocols can break the tor network.
* See Proposal 303: When and how to remove support for protocol versions.
*/
#define DIRVOTE_REQUIRE_RELAY_PROTO \
"Cons=1 Desc=1 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 " \
"Link=3-4 Microdesc=1 Relay=1-2"
/** The required relay protocols for this authority's votes.
* WARNING: Requiring a new protocol causes old tor versions to shut down.
* Requiring the wrong protocols can break the tor network.
* See Proposal 303: When and how to remove support for protocol versions.
*/
#define DIRVOTE_REQUIRE_CLIENT_PROTO \
"Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1 " \
"Link=4 Microdesc=1-2 Relay=2"
#endif /* defined(DIRVOTE_PRIVATE) */
#endif /* !defined(TOR_DIRVOTE_H) */
......@@ -161,30 +161,30 @@ pub(crate) fn get_supported_protocols_cstr() -> &'static CStr {
"Cons=1-2 \
Desc=1-2 \
DirCache=1-2 \
FlowCtrl=1 \
HSDir=1-2 \
HSIntro=3-4 \
HSRend=1-2 \
Link=1-5 \
LinkAuth=3 \
Microdesc=1-2 \
Relay=1-2 \
Padding=2 \
FlowCtrl=1"
Relay=1-2"
)
} else {
cstr!(
"Cons=1-2 \
Desc=1-2 \
DirCache=1-2 \
FlowCtrl=1 \
HSDir=1-2 \
HSIntro=3-4 \
HSRend=1-2 \
Link=1-5 \
LinkAuth=1,3 \
Microdesc=1-2 \
Relay=1-2 \
Padding=2 \
FlowCtrl=1"
Relay=1-2"
)
}
}
......
......@@ -2,6 +2,7 @@
/* See LICENSE for licensing information */
#define PROTOVER_PRIVATE
#define DIRVOTE_PRIVATE
#include "orconfig.h"
#include "test/test.h"
......@@ -12,6 +13,8 @@
#include "core/or/connection_or.h"
#include "lib/tls/tortls.h"
#include "feature/dirauth/dirvote.h"
static void
test_protover_parse(void *arg)
{
......@@ -634,6 +637,43 @@ test_protover_vote_roundtrip(void *args)
tor_free(result);
}
static void
test_protover_vote_roundtrip_ours(void *args)
{
(void) args;
const char *examples[] = {
protover_get_supported_protocols(),
DIRVOTE_RECCOMEND_RELAY_PROTO,
DIRVOTE_RECCOMEND_CLIENT_PROTO,
DIRVOTE_REQUIRE_RELAY_PROTO,
DIRVOTE_REQUIRE_CLIENT_PROTO,
};
unsigned u;
smartlist_t *votes = smartlist_new();
char *result = NULL;
for (u = 0; u < ARRAY_LENGTH(examples); ++u) {
tt_assert(examples[u]);
const char *input = examples[u];
const char *expected_output = examples[u];
smartlist_add(votes, (void*)input);
result = protover_compute_vote(votes, 1);
if (expected_output != NULL) {
tt_str_op(result, OP_EQ, expected_output);
} else {
tt_str_op(result, OP_EQ, "");
}
smartlist_clear(votes);
tor_free(result);
}
done:
smartlist_free(votes);
tor_free(result);
}
#define PV_TEST(name, flags) \
{ #name, test_protover_ ##name, (flags), NULL, NULL }
......@@ -647,5 +687,6 @@ struct testcase_t protover_tests[] = {
PV_TEST(supports_version, 0),
PV_TEST(supported_protocols, 0),
PV_TEST(vote_roundtrip, 0),
PV_TEST(vote_roundtrip_ours, 0),
END_OF_TESTCASES
};
Markdown is supported
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