mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Merge remote-tracking branch 'tor-github/pr/1727/head'
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user