Merge branch 'maint-0.2.4' into release-0.2.4
This commit is contained in:
commit
4e0bd24287
|
@ -0,0 +1,3 @@
|
|||
o Minor bugfixes:
|
||||
- Stop leaking memory when we successfully resolve a PTR record.
|
||||
Fixes bug 11437; bugfix on 0.2.4.7-alpha.
|
|
@ -0,0 +1,5 @@
|
|||
o Major features (security):
|
||||
- Block authority signing keys that were used on an authorities
|
||||
vulnerable to the "heartbleed" bug in openssl (CVE-2014-0160).
|
||||
(We don't have any evidence that these keys _were_ compromised;
|
||||
we're doing this to be prudent.) Resolves ticket 11464.
|
|
@ -0,0 +1,3 @@
|
|||
o Minor bugfixes:
|
||||
- Avoid sending an garbage value to the controller when a circuit is
|
||||
cannibalized. Fixes bug 11519; bugfix on 0.2.3.11-alpha.
|
|
@ -0,0 +1,5 @@
|
|||
o Documentation:
|
||||
- Correctly document that we search for a system torrc file before
|
||||
looking in ~/.torrc. Fixes documentation side of 9213; bugfix
|
||||
on 0.2.3.18-rc.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
o Minor bugfixes:
|
||||
- Avoid 60-second delays in the bootstrapping process when Tor
|
||||
is launching for a second time while using bridges. Fixes bug 9229;
|
||||
bugfix on 0.2.0.3-alpha.
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
o Minor bugfixes:
|
||||
- Give the correct URL in the warning message that we present
|
||||
when the user is trying to run a Tor relay on an ancient version
|
||||
of Windows. Fixes bug 9393.
|
|
@ -0,0 +1,3 @@
|
|||
o Minor bugfixes (compilation):
|
||||
- Fix a compilation error when compiling with --disable-cuve25519.
|
||||
Fixes bug 9700; bugfix on 0.2.4.17-rc.
|
|
@ -37,7 +37,7 @@ COMMAND-LINE OPTIONS
|
|||
|
||||
[[opt-f]] **-f** __FILE__::
|
||||
Specify a new configuration file to contain further Tor configuration
|
||||
options. (Default: $HOME/.torrc, or @CONFDIR@/torrc if that file is not
|
||||
options. (Default: @CONFDIR@/torrc, or $HOME/.torrc if that file is not
|
||||
found)
|
||||
|
||||
[[opt-defaults-torrc]] **--defaults-torrc** __FILE__::
|
||||
|
@ -2103,6 +2103,9 @@ FILES
|
|||
**@CONFDIR@/torrc**::
|
||||
The configuration file, which contains "option value" pairs.
|
||||
|
||||
**$HOME/.torrc**::
|
||||
Fallback location for torrc, if @CONFDIR@/torrc is not found.
|
||||
|
||||
**@LOCALSTATEDIR@/lib/tor/**::
|
||||
The tor process stores keys and other data here.
|
||||
|
||||
|
|
|
@ -1518,7 +1518,7 @@ circuit_launch_by_extend_info(uint8_t purpose,
|
|||
circ = circuit_find_to_cannibalize(purpose, extend_info, flags);
|
||||
if (circ) {
|
||||
uint8_t old_purpose = circ->base_.purpose;
|
||||
struct timeval old_timestamp_began;
|
||||
struct timeval old_timestamp_began = circ->base_.timestamp_began;
|
||||
|
||||
log_info(LD_CIRC,"Cannibalizing circ '%s' for purpose %d (%s)",
|
||||
build_state_get_exit_nickname(circ->build_state), purpose,
|
||||
|
|
|
@ -2319,7 +2319,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
|
|||
!strcmpstart(uname, "Windows Me"))) {
|
||||
log_warn(LD_CONFIG, "Tor is running as a server, but you are "
|
||||
"running %s; this probably won't work. See "
|
||||
"https://wiki.torproject.org/TheOnionRouter/TorFAQ#ServerOS "
|
||||
"https://www.torproject.org/docs/faq.html#BestOSForRelay "
|
||||
"for details.", uname);
|
||||
}
|
||||
|
||||
|
|
|
@ -2088,7 +2088,6 @@ connection_ap_handshake_socks_resolved_addr(entry_connection_t *conn,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/** Send an answer to an AP connection that has requested a DNS lookup via
|
||||
* SOCKS. The type should be one of RESOLVED_TYPE_(IPV4|IPV6|HOSTNAME) or -1
|
||||
* for unreachable; the answer should be in the format specified in the socks
|
||||
|
|
|
@ -1352,6 +1352,7 @@ inform_pending_connections(cached_resolve_t *resolve)
|
|||
}
|
||||
resolve->pending_connections = pend->next;
|
||||
tor_free(pend);
|
||||
tor_free(hostname);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2115,8 +2115,12 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache)
|
|||
* our entry node list */
|
||||
entry_guard_register_connect_status(ri->cache_info.identity_digest,
|
||||
1, 0, now);
|
||||
if (first)
|
||||
if (first) {
|
||||
/* XXXX apparently, this is never called. See bug #9229. */
|
||||
routerlist_retry_directory_downloads(now);
|
||||
}
|
||||
|
||||
update_networkstatus_downloads(now);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -436,6 +436,17 @@ networkstatus_check_document_signature(const networkstatus_t *consensus,
|
|||
DIGEST_LEN))
|
||||
return -1;
|
||||
|
||||
if (authority_cert_is_blacklisted(cert)) {
|
||||
/* We implement blacklisting for authority signing keys by treating
|
||||
* all their signatures as always bad. That way we don't get into
|
||||
* crazy loops of dropping and re-fetching signatures. */
|
||||
log_warn(LD_DIR, "Ignoring a consensus signature made with deprecated"
|
||||
" signing key %s",
|
||||
hex_str(cert->signing_key_digest, DIGEST_LEN));
|
||||
sig->bad_signature = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
signed_digest_len = crypto_pk_keysize(cert->signing_key);
|
||||
signed_digest = tor_malloc(signed_digest_len);
|
||||
if (crypto_pk_public_checksig(cert->signing_key,
|
||||
|
|
|
@ -633,6 +633,37 @@ authority_cert_dl_failed(const char *id_digest,
|
|||
}
|
||||
}
|
||||
|
||||
static const char *BAD_SIGNING_KEYS[] = {
|
||||
"09CD84F751FD6E955E0F8ADB497D5401470D697E", // Expires 2015-01-11 16:26:31
|
||||
"0E7E9C07F0969D0468AD741E172A6109DC289F3C", // Expires 2014-08-12 10:18:26
|
||||
"57B85409891D3FB32137F642FDEDF8B7F8CDFDCD", // Expires 2015-02-11 17:19:09
|
||||
"87326329007AF781F587AF5B594E540B2B6C7630", // Expires 2014-07-17 11:10:09
|
||||
"98CC82342DE8D298CF99D3F1A396475901E0D38E", // Expires 2014-11-10 13:18:56
|
||||
"9904B52336713A5ADCB13E4FB14DC919E0D45571", // Expires 2014-04-20 20:01:01
|
||||
"9DCD8E3F1DD1597E2AD476BBA28A1A89F3095227", // Expires 2015-01-16 03:52:30
|
||||
"A61682F34B9BB9694AC98491FE1ABBFE61923941", // Expires 2014-06-11 09:25:09
|
||||
"B59F6E99C575113650C99F1C425BA7B20A8C071D", // Expires 2014-07-31 13:22:10
|
||||
"D27178388FA75B96D37FA36E0B015227DDDBDA51", // Expires 2014-08-04 04:01:57
|
||||
NULL,
|
||||
};
|
||||
|
||||
/** DOCDOC */
|
||||
int
|
||||
authority_cert_is_blacklisted(const authority_cert_t *cert)
|
||||
{
|
||||
char hex_digest[HEX_DIGEST_LEN+1];
|
||||
int i;
|
||||
base16_encode(hex_digest, sizeof(hex_digest),
|
||||
cert->signing_key_digest, sizeof(cert->signing_key_digest));
|
||||
|
||||
for (i = 0; BAD_SIGNING_KEYS[i]; ++i) {
|
||||
if (!strcasecmp(hex_digest, BAD_SIGNING_KEYS[i])) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Return true iff when we've been getting enough failures when trying to
|
||||
* download the certificate with ID digest <b>id_digest</b> that we're willing
|
||||
* to start bugging the user about it. */
|
||||
|
@ -2591,19 +2622,6 @@ router_is_named(const routerinfo_t *router)
|
|||
tor_memeq(digest, router->cache_info.identity_digest, DIGEST_LEN));
|
||||
}
|
||||
|
||||
/** Return true iff the digest of <b>router</b>'s identity key,
|
||||
* encoded in hexadecimal, matches <b>hexdigest</b> (which is
|
||||
* optionally prefixed with a single dollar sign). Return false if
|
||||
* <b>hexdigest</b> is malformed, or it doesn't match. */
|
||||
static INLINE int
|
||||
router_hex_digest_matches(const routerinfo_t *router, const char *hexdigest)
|
||||
{
|
||||
return hex_digest_nickname_matches(hexdigest,
|
||||
router->cache_info.identity_digest,
|
||||
router->nickname,
|
||||
router_is_named(router));
|
||||
}
|
||||
|
||||
/** Return true iff <b>digest</b> is the digest of the identity key of a
|
||||
* trusted directory matching at least one bit of <b>type</b>. If <b>type</b>
|
||||
* is zero, any authority is okay. */
|
||||
|
|
|
@ -41,6 +41,7 @@ int router_reload_router_list(void);
|
|||
int authority_cert_dl_looks_uncertain(const char *id_digest);
|
||||
const smartlist_t *router_get_trusted_dir_servers(void);
|
||||
const smartlist_t *router_get_fallback_dir_servers(void);
|
||||
int authority_cert_is_blacklisted(const authority_cert_t *cert);
|
||||
|
||||
const routerstatus_t *router_pick_directory_server(dirinfo_type_t type,
|
||||
int flags);
|
||||
|
|
|
@ -2932,6 +2932,14 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
|
|||
log_warn(LD_DIR,"Mismatch between identities in certificate and vote");
|
||||
goto err;
|
||||
}
|
||||
if (ns->type != NS_TYPE_CONSENSUS) {
|
||||
if (authority_cert_is_blacklisted(ns->cert)) {
|
||||
log_warn(LD_DIR, "Rejecting vote signature made with blacklisted "
|
||||
"signing key %s",
|
||||
hex_str(ns->cert->signing_key_digest, DIGEST_LEN));
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
voter->address = tor_strdup(tok->args[2]);
|
||||
if (!tor_inet_aton(tok->args[3], &in)) {
|
||||
log_warn(LD_DIR, "Error decoding IP address %s in network-status.",
|
||||
|
|
|
@ -56,12 +56,12 @@ double fabs(double x);
|
|||
#include "memarea.h"
|
||||
#include "onion.h"
|
||||
#include "onion_tap.h"
|
||||
#include "onion_ntor.h"
|
||||
#include "policies.h"
|
||||
#include "rephist.h"
|
||||
#include "routerparse.h"
|
||||
#ifdef CURVE25519_ENABLED
|
||||
#include "crypto_curve25519.h"
|
||||
#include "onion_ntor.h"
|
||||
#endif
|
||||
|
||||
#ifdef USE_DMALLOC
|
||||
|
|
Loading…
Reference in New Issue