summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog46
-rw-r--r--changes/HTTP4
-rw-r--r--changes/annotations_fix10
-rw-r--r--changes/bug11258
-rw-r--r--changes/bug20003
-rw-r--r--changes/bug20505
-rw-r--r--changes/minuptimehs3
-rw-r--r--changes/nonopublish3
-rw-r--r--changes/remove_osx_expert5
-rw-r--r--changes/torrc.complete4
-rw-r--r--src/or/config.c7
-rw-r--r--src/or/routerlist.c79
12 files changed, 107 insertions, 70 deletions
diff --git a/ChangeLog b/ChangeLog
index 843c732da6..dc961015a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,30 @@
-Changes in version 0.2.2.18-rc - 2010-11-1?
+Changes in version 0.2.2.18-alpha - 2010-11-16
o Major bugfixes:
+ - Do even more to reject (and not just ignore) annotations on
+ router descriptors received anywhere but from the cache. Previously
+ we would ignore such annotations at first, but cache them to disk
+ anyway. Bugfix on 0.2.0.8-alpha. Found by piebeer.
+ - Do not log messages to the controller while shrinking buffer
+ freelists. Doing so would sometimes make the controller connection
+ try to allocate a buffer chunk, which would mess up the internals
+ of the freelist and cause an assertion failure. Fixes bug 1125;
+ fixed by Robert Ransom. Bugfix on 0.2.0.16-alpha.
+ - Learn our external IP address when we're a relay or bridge, even if
+ we set PublishServerDescriptor to 0. Bugfix on 0.2.0.3-alpha,
+ where we introduced bridge relays that don't need to publish to
+ be useful. Fixes bug 2050.
+ - Maintain separate TLS contexts and certificates for incoming and
+ outgoing connections in bridge relays. Previously we would use the
+ same TLS contexts and certs for incoming and outgoing connections.
+ Bugfix on 0.2.0.3-alpha; addresses bug 988.
+ - Maintain separate identity keys for incoming and outgoing TLS
+ contexts in bridge relays. Previously we would use the same
+ identity keys for incoming and outgoing TLS contexts. Bugfix on
+ 0.2.0.3-alpha; addresses a bug described in ticket 988.
+ - Avoid an assertion failure when we as an authority receive a
+ duplicate upload of a router descriptor that we already have,
+ but which we previously considered an obsolete descriptor.
+ Fixes another case of bug 1776. Bugfix on 0.2.2.16-alpha.
- Avoid a crash bug triggered by looking at a dangling pointer while
setting the network status consensus. Found by Robert Ransom.
Bugfix on 0.2.2.17-alpha. Fixes bug 2097.
@@ -22,6 +47,8 @@ Changes in version 0.2.2.18-rc - 2010-11-1?
when logging them. Previously we would attribute them to a failure
while generating a TLS context. Patch by Robert Ransom. Bugfix on
0.1.0.4-rc; fixes bug 1994.
+ - Enforce multiplicity rules when parsing annotations. Bugfix on
+ 0.2.0.8-alpha. Found by piebeer.
- Fix warnings that newer versions of autoconf produced during
./autogen.sh. These warnings appear to be harmless in our case,
but they were extremely verbose. Fixes bug 2020.
@@ -36,6 +63,13 @@ Changes in version 0.2.2.18-rc - 2010-11-1?
on 0.2.2.17-alpha.
o Minor features:
+ - Make hidden services work better in private Tor networks by not
+ requiring any uptime to join the hidden service descriptor
+ DHT. Implements ticket 2088.
+ - Rate-limit the "your application is giving Tor only an IP address"
+ warning. Addresses bug 2000; bugfix on 0.0.8pre2.
+ - When you set AllowSingleHopExits, print a warning to explain why
+ most clients are avoiding your relay.
- Update to the November 1 2010 Maxmind GeoLite Country database.
o Code simplifications and refactoring:
@@ -44,6 +78,16 @@ Changes in version 0.2.2.18-rc - 2010-11-1?
necessary as long as relays using Tor 0.2.1.3-alpha through
0.2.1.18-alpha were active. Since this isn't the case anymore,
we unify our behaviour here. Resolves bug 2081.
+ - Some options used different conventions for uppercasing of acronyms
+ when comparing manpage and source. Fix those in favor of the
+ manpage, as it makes sense to capitalize acronyms.
+ - Remove the torrc.complete file. It hasn't been kept up to date
+ and users will have better luck checking out the manpage.
+ - Removed the obsolete "NoPublish" option; it has been flagged
+ as obsolete and has produced a warning since 0.1.1.18-rc.
+ - Remove everything related to building the expert bundle for OS X.
+ It has confused many users, doesn't work right on OS X 10.6,
+ and is hard to get rid of once installed. Resolves bug 1274.
Changes in version 0.2.2.17-alpha - 2010-09-30
diff --git a/changes/HTTP b/changes/HTTP
deleted file mode 100644
index 078d9b3bca..0000000000
--- a/changes/HTTP
+++ /dev/null
@@ -1,4 +0,0 @@
- o Code simplifications and refactoring:
- - Some options used different conventions for uppercasing of acronyms
- when comparing manpage and source. Fix those in favor of the
- manpage, as it makes sense to capitalize acronyms.
diff --git a/changes/annotations_fix b/changes/annotations_fix
deleted file mode 100644
index b259a306d2..0000000000
--- a/changes/annotations_fix
+++ /dev/null
@@ -1,10 +0,0 @@
- o Major bugfixes
- - Do even more to reject (and not just ignore) annotations on
- router descriptors received anywhere but from the cache.
- Previously we would ignore such annotations at first, but cache
- them to disk anyway. Bugfix on 0.2.0.8-alpha. Found by piebeer.
-
- o Minor bugfixes
- - Enforce multiplicity rules when parsing annotations. Bugfix on
- 0.2.0.8-alpha. Found by piebeer.
-
diff --git a/changes/bug1125 b/changes/bug1125
deleted file mode 100644
index 1331246a14..0000000000
--- a/changes/bug1125
+++ /dev/null
@@ -1,8 +0,0 @@
- o Major bugfixes
- - Do not log messages to the controller while shrinking buffer
- freelists. Doing so would sometimes make the controller
- connection try to allocate a buffer chunk, which would mess
- up the internals of the freelist and cause an assertion
- failure. Fixes bug 1125; fixed by Robert Ransom. Bugfix on
- Tor 0.2.0.16-alpha.
-
diff --git a/changes/bug2000 b/changes/bug2000
deleted file mode 100644
index 45ff2bdbd0..0000000000
--- a/changes/bug2000
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes:
- - Rate-limit the "your application is giving Tor only an IP address"
- warning. Fixes bug 2000; bugfix on 0.0.8pre2.
diff --git a/changes/bug2050 b/changes/bug2050
deleted file mode 100644
index 3e45d3463f..0000000000
--- a/changes/bug2050
+++ /dev/null
@@ -1,5 +0,0 @@
- o Major bugfixes:
- - Learn our external IP address when we're a relay or bridge, even if
- we set PublishServerDescriptor to 0. Bugfix on 0.2.0.3-alpha,
- where we introduced bridge relays that don't need to publish to
- be useful. Fixes bug 2050.
diff --git a/changes/minuptimehs b/changes/minuptimehs
deleted file mode 100644
index d7474d21f5..0000000000
--- a/changes/minuptimehs
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor features:
- - Make hidden services work better in private networks by not requiring
- any uptime to join the dht. Implements ticket 2088.
diff --git a/changes/nonopublish b/changes/nonopublish
deleted file mode 100644
index 6285611e59..0000000000
--- a/changes/nonopublish
+++ /dev/null
@@ -1,3 +0,0 @@
- o Removed features
- - Removed the obsolete "NoPublished" option; it has been flagged
- as obsolete and has produced a warning since 0.1.1.18-rc.
diff --git a/changes/remove_osx_expert b/changes/remove_osx_expert
deleted file mode 100644
index c9a0698c45..0000000000
--- a/changes/remove_osx_expert
+++ /dev/null
@@ -1,5 +0,0 @@
- o Removed features:
- - Remove everything related to building the expert bundle for OS X. It
- has confused many users, doesn't work right on OS X 10.6, and is hard
- to get rid of once installed. Resolves bug 1274.
-
diff --git a/changes/torrc.complete b/changes/torrc.complete
deleted file mode 100644
index 03d51c1213..0000000000
--- a/changes/torrc.complete
+++ /dev/null
@@ -1,4 +0,0 @@
- o Code simplifications and refactorings:
- - Remove the torrc.complete file. It hasn't been kept up to date
- and users will have better luck checking out the manpage.
-
diff --git a/src/or/config.c b/src/or/config.c
index 114d59f5ec..d371276b18 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -3673,6 +3673,13 @@ options_validate(or_options_t *old_options, or_options_t *options,
"a non-default set of DirServers.");
}
+ if (options->AllowSingleHopExits && !options->DirServers) {
+ COMPLAIN("You have set AllowSingleHopExits; now your relay will allow "
+ "others to make one-hop exits. However, since by default most "
+ "clients avoid relays that set this option, most clients will "
+ "ignore you.");
+ }
+
/*XXXX022 checking for defaults manually like this is a bit fragile.*/
/* Keep changes to hard-coded values synchronous to man page and default
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 143591199b..e58ec6a6f5 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -2684,12 +2684,15 @@ signed_descriptor_free(signed_descriptor_t *sd)
tor_free(sd);
}
-/** Extract a signed_descriptor_t from a routerinfo, and free the routerinfo.
+/** Extract a signed_descriptor_t from a general routerinfo, and free the
+ * routerinfo.
*/
static signed_descriptor_t *
signed_descriptor_from_routerinfo(routerinfo_t *ri)
{
- signed_descriptor_t *sd = tor_malloc_zero(sizeof(signed_descriptor_t));
+ signed_descriptor_t *sd;
+ tor_assert(ri->purpose == ROUTER_PURPOSE_GENERAL);
+ sd = tor_malloc_zero(sizeof(signed_descriptor_t));
memcpy(sd, &(ri->cache_info), sizeof(signed_descriptor_t));
sd->routerlist_index = -1;
ri->cache_info.signed_descriptor_body = NULL;
@@ -2780,6 +2783,7 @@ static void
routerlist_insert(routerlist_t *rl, routerinfo_t *ri)
{
routerinfo_t *ri_old;
+ signed_descriptor_t *sd_old;
{
const routerinfo_t *ri_generated = router_get_my_routerinfo();
tor_assert(ri_generated != ri);
@@ -2788,8 +2792,16 @@ routerlist_insert(routerlist_t *rl, routerinfo_t *ri)
ri_old = rimap_set(rl->identity_map, ri->cache_info.identity_digest, ri);
tor_assert(!ri_old);
- sdmap_set(rl->desc_digest_map, ri->cache_info.signed_descriptor_digest,
- &(ri->cache_info));
+
+ sd_old = sdmap_set(rl->desc_digest_map,
+ ri->cache_info.signed_descriptor_digest,
+ &(ri->cache_info));
+ if (sd_old) {
+ rl->desc_store.bytes_dropped += sd_old->signed_descriptor_len;
+ sdmap_remove(rl->desc_by_eid_map, sd_old->extra_info_digest);
+ signed_descriptor_free(sd_old);
+ }
+
if (!tor_digest_is_zero(ri->cache_info.extra_info_digest))
sdmap_set(rl->desc_by_eid_map, ri->cache_info.extra_info_digest,
&ri->cache_info);
@@ -3009,6 +3021,7 @@ routerlist_replace(routerlist_t *rl, routerinfo_t *ri_old,
routerinfo_t *ri_new)
{
int idx;
+ int same_descriptors;
routerinfo_t *ri_tmp;
extrainfo_t *ei_tmp;
@@ -3055,8 +3068,15 @@ routerlist_replace(routerlist_t *rl, routerinfo_t *ri_old,
&ri_new->cache_info);
}
+ same_descriptors = ! memcmp(ri_old->cache_info.signed_descriptor_digest,
+ ri_new->cache_info.signed_descriptor_digest,
+ DIGEST_LEN);
+
if (should_cache_old_descriptors() &&
- ri_old->purpose == ROUTER_PURPOSE_GENERAL) {
+ ri_old->purpose == ROUTER_PURPOSE_GENERAL &&
+ !same_descriptors) {
+ /* ri_old is going to become a signed_descriptor_t and go into
+ * old_routers */
signed_descriptor_t *sd = signed_descriptor_from_routerinfo(ri_old);
smartlist_add(rl->old_routers, sd);
sd->routerlist_index = smartlist_len(rl->old_routers)-1;
@@ -3064,24 +3084,27 @@ routerlist_replace(routerlist_t *rl, routerinfo_t *ri_old,
if (!tor_digest_is_zero(sd->extra_info_digest))
sdmap_set(rl->desc_by_eid_map, sd->extra_info_digest, sd);
} else {
- if (memcmp(ri_old->cache_info.signed_descriptor_digest,
- ri_new->cache_info.signed_descriptor_digest,
- DIGEST_LEN)) {
- /* digests don't match; digestmap_set didn't replace */
+ /* We're dropping ri_old. */
+ if (!same_descriptors) {
+ /* digests don't match; The sdmap_set above didn't replace */
sdmap_remove(rl->desc_digest_map,
ri_old->cache_info.signed_descriptor_digest);
- }
- ei_tmp = eimap_remove(rl->extra_info_map,
- ri_old->cache_info.extra_info_digest);
- if (ei_tmp) {
- rl->extrainfo_store.bytes_dropped +=
- ei_tmp->cache_info.signed_descriptor_len;
- extrainfo_free(ei_tmp);
- }
- if (!tor_digest_is_zero(ri_old->cache_info.extra_info_digest)) {
- sdmap_remove(rl->desc_by_eid_map,
- ri_old->cache_info.extra_info_digest);
+ if (memcmp(ri_old->cache_info.extra_info_digest,
+ ri_new->cache_info.extra_info_digest, DIGEST_LEN)) {
+ ei_tmp = eimap_remove(rl->extra_info_map,
+ ri_old->cache_info.extra_info_digest);
+ if (ei_tmp) {
+ rl->extrainfo_store.bytes_dropped +=
+ ei_tmp->cache_info.signed_descriptor_len;
+ extrainfo_free(ei_tmp);
+ }
+ }
+
+ if (!tor_digest_is_zero(ri_old->cache_info.extra_info_digest)) {
+ sdmap_remove(rl->desc_by_eid_map,
+ ri_old->cache_info.extra_info_digest);
+ }
}
rl->desc_store.bytes_dropped += ri_old->cache_info.signed_descriptor_len;
routerinfo_free(ri_old);
@@ -3233,10 +3256,18 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
/* If we have this descriptor already and the new descriptor is a bridge
* descriptor, replace it. If we had a bridge descriptor before and the
* new one is not a bridge descriptor, don't replace it. */
- tor_assert(old_router);
- if (! (routerinfo_is_a_configured_bridge(router) &&
- (router->purpose == ROUTER_PURPOSE_BRIDGE ||
- old_router->purpose != ROUTER_PURPOSE_BRIDGE))) {
+
+ /* Only members of routerlist->identity_map can be bridges; we don't
+ * put bridges in old_routers. */
+ const int was_bridge = old_router &&
+ old_router->purpose == ROUTER_PURPOSE_BRIDGE;
+
+ if (routerinfo_is_a_configured_bridge(router) &&
+ router->purpose == ROUTER_PURPOSE_BRIDGE &&
+ !was_bridge) {
+ log_info(LD_DIR, "Replacing non-bridge descriptor with bridge "
+ "descriptor for router '%s'", router->nickname);
+ } else {
log_info(LD_DIR,
"Dropping descriptor that we already have for router '%s'",
router->nickname);