[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] forward-port the 0.1.0.9 changelog



Update of /home2/or/cvsroot/tor
In directory moria:/home/arma/work/onion/cvs/tor

Modified Files:
	ChangeLog 
Log Message:
forward-port the 0.1.0.9 changelog


Index: ChangeLog
===================================================================
RCS file: /home2/or/cvsroot/tor/ChangeLog,v
retrieving revision 1.93
retrieving revision 1.94
diff -u -d -r1.93 -r1.94
--- ChangeLog	23 May 2005 06:59:01 -0000	1.93
+++ ChangeLog	9 Jun 2005 04:06:52 -0000	1.94
@@ -1,252 +1,248 @@
-Changes in version 0.1.0.8-rc - 2005-05-23
-  o Bugfixes:
-    - It turns out that kqueue on OS X 10.3.9 was causing kernel
-      panics. Disable kqueue on all OS X Tors.
-    - Fix RPM: remove duplicate line accidentally added to the rpm
-      spec file.
-    - Disable threads on openbsd too, since its gethostaddr is not
-      reentrant either.
-    - Tolerate libevent 0.8 since it still works, even though it's
-      ancient.
-    - Enable building on Red Hat 9.0 again.
-    - Allow the middle hop of the testing circuit to be running any
-      version, now that most of them have the bugfix to let them connect
-      to unknown servers. This will allow reachability testing to work
-      even when 0.0.9.7-0.0.9.9 become obsolete.
-    - Handle relay cells with rh.length too large. This prevents
-      a potential attack that could read arbitrary memory (maybe even
-      keys) from the exit server's process.
-    - We screwed up the dirport reachability testing when we don't yet
-      have a cached version of the directory. Hopefully now fixed.
-    - Clean up router_load_single_router() (used by the controller),
-      so it doesn't seg fault on error.
-    - Fix a minor memory leak when somebody establishes an introduction
-      point at your Tor server.
-    - If a socks connection ends because read fails, don't warn that
-      you're not sending a socks reply back.
-
-  o Features:
-    - Add HttpProxyAuthenticator config option too, that works like
-      the HttpsProxyAuthenticator config option.
-    - Encode hashed controller passwords in hex instead of base64,
-      to make it easier to write controllers.
-
+Changes in version 0.1.0.9 (first stable release of 0.1.0.x)
+  o Fixes on Win32:
+    - Make NT services work and start on startup on Win32 (based on
+      patch by Matt Edman). See the FAQ entry for details.
+    - Make 'platform' string in descriptor more accurate for Win32
+      servers, so it's not just "unknown platform".
+    - REUSEADDR on normal platforms means you can rebind to the port
+      right after somebody else has let it go. But REUSEADDR on Win32
+      means you can bind to the port _even when somebody else already
+      has it bound_! So, don't do that on Win32.
+    - Clean up the log messages when starting on Win32 with no config
+      file.
 
-Changes in version 0.1.0.7-rc - 2005-05-17
-  o Bugfixes:
-    - Fix a bug in the OS X package installer that prevented it from
-      installing on Tiger.
-    - Fix a script bug in the OS X package installer that made it
-      complain during installation.
-    - Find libevent even if it's hiding in /usr/local/ and your
-      CFLAGS and LDFLAGS don't tell you to look there.
-    - Be able to link with libevent as a shared library (the default
-      after 1.0d), even if it's hiding in /usr/local/lib and even
-      if you haven't added /usr/local/lib to your /etc/ld.so.conf,
-      assuming you're running gcc. Otherwise fail and give a useful
-      error message.
-    - Fix a bug in the RPM packager: set home directory for _tor to
-      something more reasonable when first installing.
-    - Free a minor amount of memory that is still reachable on exit.
+  o Assert / crash bugs:
+    - Refuse relay cells that claim to have a length larger than the
+      maximum allowed. This prevents a potential attack that could read
+      arbitrary memory (e.g. keys) from an exit server's process.
+    - If unofficial Tor clients connect and send weird TLS certs, our
+      Tor server triggers an assert. Stop asserting, and start handling
+      TLS errors better in other situations too.
+    - Fix a race condition that can trigger an assert when we have a
+      pending create cell and an OR connection attempt fails.
 
+  o Resource leaks:
+    - Use pthreads for worker processes rather than forking. This was
+      forced because when we forked, we ended up wasting a lot of
+      duplicate ram over time.
+      - Also switch to foo_r versions of some library calls to allow
+        reentry and threadsafeness.
+      - Implement --disable-threads configure option. Disable threads on
+        netbsd and openbsd by default, because they have no reentrant
+        resolver functions (!).
+    - Fix possible bug on threading platforms (e.g. win32) which was
+      leaking a file descriptor whenever a cpuworker or dnsworker died.
+    - Fix a minor memory leak when somebody establishes an introduction
+      point at your Tor server.
+    - Add ./configure --with-dmalloc option, to track memory leaks.
+    - And try to free all memory on closing, so we can detect what
+      we're leaking.
 
-Changes in version 0.1.0.6-rc - 2005-05-14
-  o Bugfixes:
-    - Implement --disable-threads configure option. Disable threads on
-      netbsd by default, because it appears to have no reentrant resolver
-      functions.
-    - Apple's OS X 10.4.0 ships with a broken kqueue. The new libevent
-      release (1.1) detects and disables kqueue if it's broken.
-    - Append default exit policy before checking for implicit internal
-      addresses. Now we don't log a bunch of complaints on startup
-      when using the default exit policy.
-    - Some people were putting "Address  " in their torrc, and they had
-      a buggy resolver that resolved " " to 0.0.0.0. Oops.
-    - If DataDir is ~/.tor, and that expands to /.tor, then default to
-      LOCALSTATEDIR/tor instead.
-    - Fix fragmented-message bug in TorControl.py.
-    - Resolve a minor bug which would prevent unreachable dirports
-      from getting suppressed in the published descriptor.
-    - When the controller gave us a new descriptor, we weren't resolving
-      it immediately, so Tor would think its address was 0.0.0.0 until
-      we fetched a new directory.
-    - Fix an uppercase/lowercase case error in suppressing a bogus
-      libevent warning on some Linuxes.
+  o Protocol correctness:
+    - When we've connected to an OR and handshaked but didn't like
+      the result, we were closing the conn without sending destroy
+      cells back for pending circuits. Now send those destroys.
+    - Start sending 'truncated' cells back rather than destroy cells
+      if the circuit closes in front of you. This means we won't have
+      to abandon partially built circuits.
+    - Handle changed router status correctly when dirserver reloads
+      fingerprint file. We used to be dropping all unverified descriptors
+      right then. The bug was hidden because we would immediately
+      fetch a directory from another dirserver, which would include the
+      descriptors we just dropped.
+    - Revise tor-spec to add more/better stream end reasons.
+    - Revise all calls to connection_edge_end to avoid sending 'misc',
+      and to take errno into account where possible.
+    - Client now retries when streams end early for 'hibernating' or
+      'resource limit' reasons, rather than failing them.
+    - Try to be more zealous about calling connection_edge_end when
+      things go bad with edge conns in connection.c.
 
-  o Features:
-    - Begin scrubbing sensitive strings from logs by default. Turn off
-      the config option SafeLogging if you need to do debugging.
-    - Switch to a new buffer management algorithm, which tries to avoid
-      reallocing and copying quite as much. In first tests it looks like
-      it uses *more* memory on average, but less cpu.
+  o Robustness improvements:
+    - Better handling for heterogeneous / unreliable nodes:
+      - Annotate circuits with whether they aim to contain high uptime
+        nodes and/or high capacity nodes. When building circuits, choose
+        appropriate nodes.
+      - This means that every single node in an intro rend circuit,
+        not just the last one, will have a minimum uptime.
+      - New config option LongLivedPorts to indicate application streams
+        that will want high uptime circuits.
+      - Servers reset uptime when a dir fetch entirely fails. This
+        hopefully reflects stability of the server's network connectivity.
+      - If somebody starts his tor server in Jan 2004 and then fixes his
+        clock, don't make his published uptime be a year.
+      - Reset published uptime when we wake up from hibernation.
+    - Introduce a notion of 'internal' circs, which are chosen without
+      regard to the exit policy of the last hop. Intro and rendezvous
+      circs must be internal circs, to avoid leaking information. Resolve
+      and connect streams can use internal circs if they want.
+    - New circuit pooling algorithm: keep track of what destination ports
+      we've used recently (start out assuming we'll want to use 80), and
+      make sure to have enough circs around to satisfy these ports. Also
+      make sure to have 2 internal circs around if we've required internal
+      circs lately (and with high uptime if we've seen that lately too).
+    - Turn addr_policy_compare from a tristate to a quadstate; this should
+      help address our "Ah, you allow 1.2.3.4:80. You are a good choice
+      for google.com" problem.
+    - When a client asks us for a dir mirror and we don't have one,
+      launch an attempt to get a fresh one.
     - First cut at support for "create-fast" cells. Clients can use
       these when extending to their first hop, since the TLS already
       provides forward secrecy and authentication. Not enabled on
       clients yet.
-    - When dirservers refuse a router descriptor, we now log its
-      contactinfo, platform, and the poster's IP address.
-    - Call tor_free_all instead of connections_free_all after forking, to
-      save memory on systems that need to fork.
-    - Whine at you if you're a server and you don't set your contactinfo.
-    - Implement --verify-config command-line option to check if your torrc
-      is valid without actually launching Tor.
-    - Rewrite address "serifos.exit" to "externalIP.serifos.exit"
-      rather than just rejecting it.
 
+  o Reachability testing.
+    - Your Tor server will automatically try to see if its ORPort and
+      DirPort are reachable from the outside, and it won't upload its
+      descriptor until it decides at least ORPort is reachable (when
+      DirPort is not yet found reachable, publish it as zero).
+    - When building testing circs for ORPort testing, use only
+      high-bandwidth nodes, so fewer circuits fail.
+    - Notice when our IP changes, and reset stats/uptime/reachability.
+    - Authdirservers don't do ORPort reachability detection, since
+      they're in clique mode, so it will be rare to find a server not
+      already connected to them.
+    - Authdirservers now automatically approve nodes running 0.1.0.2-rc
+      or later.
 
-Changes in version 0.1.0.5-rc - 2005-04-27
-  o Bugfixes:
-    - Stop trying to print a null pointer if an OR conn fails because
-      we didn't like its cert.
-  o Features:
+  o Dirserver fixes:
+    - Now we allow two unverified servers with the same nickname
+      but different keys. But if a nickname is verified, only that
+      nickname+key are allowed.
+    - If you're an authdirserver connecting to an address:port,
+      and it's not the OR you were expecting, forget about that
+      descriptor. If he *was* the one you were expecting, then forget
+      about all other descriptors for that address:port.
+    - Allow servers to publish descriptors from 12 hours in the future.
+      Corollary: only whine about clock skew from the dirserver if
+      he's a trusted dirserver (since now even verified servers could
+      have quite wrong clocks).
+
+  o Code efficiency improvements:
+    - Use libevent. Now we can use faster async cores (like epoll, kpoll,
+      and /dev/poll), and hopefully work better on Windows too.
+      - Apple's OS X 10.4.0 ships with a broken kqueue API, and using
+        kqueue on 10.3.9 causes kernel panics. Don't use kqueue on OS X.
+      - Find libevent even if it's hiding in /usr/local/ and your
+        CFLAGS and LDFLAGS don't tell you to look there.
+      - Be able to link with libevent as a shared library (the default
+        after 1.0d), even if it's hiding in /usr/local/lib and even
+        if you haven't added /usr/local/lib to your /etc/ld.so.conf,
+        assuming you're running gcc. Otherwise fail and give a useful
+        error message.
+    - Switch to a new buffer management algorithm, which tries to avoid
+      reallocing and copying quite as much. In first tests it looks like
+      it uses *more* memory on average, but less cpu.
     - Switch our internal buffers implementation to use a ring buffer,
       to hopefully improve performance for fast servers a lot.
-    - Add HttpsProxyAuthenticator support (basic auth only), based
-      on patch from Adam Langley.
-    - Bump the default BandwidthRate from 1 MB to 2 MB, to accommodate
-      the fast servers that have been joining lately.
-    - Give hidden service accesses extra time on the first attempt,
-      since 60 seconds is often only barely enough. This might improve
-      robustness more.
     - Improve performance for dirservers: stop re-parsing the whole
       directory every time you regenerate it.
-    - Add more debugging info to help us find the weird dns netbsd
-      pthreads bug; cleaner debug messages to help track future issues.
+    - Keep a big splay tree of (circid,orconn)->circuit mappings to make
+      it much faster to look up a circuit for each relay cell.
+    - Remove most calls to assert_all_pending_dns_resolves_ok(),
+      since they're eating our cpu on exit nodes.
+    - Stop wasting time doing a case insensitive comparison for every
+      dns name every time we do any lookup. Canonicalize the names to
+      lowercase when you first see them.
 
+  o Hidden services:
+    - Handle unavailable hidden services better. Handle slow or busy
+      hidden services better.
+    - Cannibalize GENERAL circs to be C_REND, C_INTRO, S_INTRO, and S_REND
+      circ as necessary, if there are any completed ones lying around
+      when we try to launch one.
+    - Make hidden services try to establish a rendezvous for 30 seconds
+      after fetching the descriptor, rather than for n (where n=3)
+      attempts to build a circuit.
+    - Adjust maximum skew and age for rendezvous descriptors: let skew
+      be 48 hours rather than 90 minutes.
 
-Changes in version 0.1.0.4-rc - 2005-04-23
-  o Bugfixes:
-    - If unofficial Tor clients connect and send weird TLS certs, our
-      Tor server triggers an assert. Stop asserting, and start handling
-      TLS errors better in other situations too.
-    - When the controller asks us to tell it about all the debug-level
-      logs, it turns out we were generating debug-level logs while
-      telling it about them, which turns into a bad loop. Now keep
-      track of whether you're sending a debug log to the controller,
-      and don't log when you are.
-    - Fix the "postdescriptor" feature of the controller interface: on
-      non-complete success, only say "done" once.
-  o Features:
-    - Clients are now willing to load balance over up to 2mB, not 1mB,
-      of advertised bandwidth capacity.
+  o Controller:
+    - More Tor controller support. See
+      http://tor.eff.org/doc/control-spec.txt for all the new features,
+      including signals to emulate unix signals from any platform;
+      redirectstream; extendcircuit; mapaddress; getinfo; postdescriptor;
+      closestream; closecircuit; etc.
+    - Encode hashed controller passwords in hex instead of base64,
+      to make it easier to write controllers.
+    - Revise control spec and implementation to allow all log messages to
+      be sent to controller with their severities intact (suggested by
+      Matt Edman). Disable debug-level logs while delivering a debug-level
+      log to the controller, to prevent loop. Update TorControl to handle
+      new log event types.
+
+  o New config options/defaults:
+    - Begin scrubbing sensitive strings from logs by default. Turn off
+      the config option SafeLogging if you need to do debugging.
+    - New exit policy: accept most low-numbered ports, rather than
+      rejecting most low-numbered ports.
+    - Put a note in the torrc about abuse potential with the default
+      exit policy.
+    - Add support for CONNECTing through https proxies, with "HttpsProxy"
+      config option.
+    - Add HttpProxyAuthenticator and HttpsProxyAuthenticator support
+      based on patch from Adam Langley (basic auth only).
+    - Bump the default BandwidthRate from 1 MB to 2 MB, to accommodate
+      the fast servers that have been joining lately. (Clients are now
+      willing to load balance over up to 2 MB of advertised bandwidth
+      capacity too.)
+    - New config option MaxAdvertisedBandwidth which lets you advertise
+      a low bandwidthrate (to not attract as many circuits) while still
+      allowing a higher bandwidthrate in reality.
+    - Require BandwidthRate to be at least 20kB/s for servers.
     - Add a NoPublish config option, so you can be a server (e.g. for
       testing running Tor servers in other Tor networks) without
       publishing your descriptor to the primary dirservers.
+    - Add a new AddressMap config directive to rewrite incoming socks
+      addresses. This lets you, for example, declare an implicit
+      required exit node for certain sites.
+    - Add a new TrackHostExits config directive to trigger addressmaps
+      for certain incoming socks addresses -- for sites that break when
+      your exit keeps changing (based on patch from Mike Perry).
+    - Split NewCircuitPeriod option into NewCircuitPeriod (30 secs),
+      which describes how often we retry making new circuits if current
+      ones are dirty, and MaxCircuitDirtiness (10 mins), which describes
+      how long we're willing to make use of an already-dirty circuit.
+    - Change compiled-in SHUTDOWN_WAIT_LENGTH from a fixed 30 secs to
+      a config option "ShutdownWaitLength" (when using kill -INT on
+      servers).
+    - Fix an edge case in parsing config options: if they say "--"
+      on the commandline, it's not a config option (thanks weasel).
+    - New config option DirAllowPrivateAddresses for authdirservers.
+      Now by default they refuse router descriptors that have non-IP or
+      private-IP addresses.
+    - Change DirFetchPeriod/StatusFetchPeriod to have a special "Be
+      smart" default value: low for servers and high for clients.
+    - Some people were putting "Address  " in their torrc, and they had
+      a buggy resolver that resolved " " to 0.0.0.0. Oops.
+    - If DataDir is ~/.tor, and that expands to /.tor, then default to
+      LOCALSTATEDIR/tor instead.
+    - Implement --verify-config command-line option to check if your torrc
+      is valid without actually launching Tor.
 
-
-Changes in version 0.1.0.3-rc - 2005-04-08
-  o Improvements on 0.1.0.2-rc:
-    - Client now retries when streams end early for 'hibernating' or
-      'resource limit' reasons, rather than failing them.
-    - More automated handling for dirserver operators:
-      - Automatically approve nodes running 0.1.0.2-rc or later,
-        now that the the reachability detection stuff is working.
-      - Now we allow two unverified servers with the same nickname
-        but different keys. But if a nickname is verified, only that
-        nickname+key are allowed.
-      - If you're an authdirserver connecting to an address:port,
-        and it's not the OR you were expecting, forget about that
-        descriptor. If he *was* the one you were expecting, then forget
-        about all other descriptors for that address:port.
-      - Allow servers to publish descriptors from 12 hours in the future.
-        Corollary: only whine about clock skew from the dirserver if
-        he's a trusted dirserver (since now even verified servers could
-        have quite wrong clocks).
-    - Adjust maximum skew and age for rendezvous descriptors: let skew
-      be 48 hours rather than 90 minutes.
-    - Efficiency improvements:
-      - Keep a big splay tree of (circid,orconn)->circuit mappings to make
-        it much faster to look up a circuit for each relay cell.
-      - Remove most calls to assert_all_pending_dns_resolves_ok(),
-        since they're eating our cpu on exit nodes.
-      - Stop wasting time doing a case insensitive comparison for every
-        dns name every time we do any lookup. Canonicalize the names to
-        lowercase and be done with it.
-    - Start sending 'truncated' cells back rather than destroy cells,
-      if the circuit closes in front of you. This means we won't have
-      to abandon partially built circuits.
-    - Only warn once per nickname from add_nickname_list_to_smartlist
+  o Logging improvements:
+    - When dirservers refuse a server descriptor, we now log its
+      contactinfo, platform, and the poster's IP address.
+    - Only warn once per nickname from add_nickname_list_to_smartlist()
       per failure, so an entrynode or exitnode choice that's down won't
       yell so much.
-    - Put a note in the torrc about abuse potential with the default
-      exit policy.
-    - Revise control spec and implementation to allow all log messages to
-      be sent to controller with their severities intact (suggested by
-      Matt Edman). Update TorControl to handle new log event types.
-    - Provide better explanation messages when controller's POSTDESCRIPTOR
-      fails.
-    - Stop putting nodename in the Platform string in server descriptors.
-      It doesn't actually help, and it is confusing/upsetting some people.
-
-  o Bugfixes on 0.1.0.2-rc:
-    - We were printing the host mask wrong in exit policies in server
-      descriptors. This isn't a critical bug though, since we were still
-      obeying the exit policy internally.
-    - Fix Tor when compiled with libevent but without pthreads: move
-      connection_unregister() from _connection_free() to
-      connection_free().
-    - Fix an assert trigger (already fixed in 0.0.9.x): when we have
-      the rare mysterious case of accepting a conn on 0.0.0.0:0, then
-      when we look through the connection array, we'll find any of the
-      cpu/dnsworkers. This is no good.
-
-  o Bugfixes on 0.0.9.x:
-    - Fix possible bug on threading platforms (e.g. win32) which was
-      leaking a file descriptor whenever a cpuworker or dnsworker died.
-    - When using preferred entry or exit nodes, ignore whether the
-      circuit wants uptime or capacity. They asked for the nodes, they
-      get the nodes.
-    - chdir() to your datadirectory at the *end* of the daemonize process,
-      not the beginning. This was a problem because the first time you
-      run tor, if your datadir isn't there, and you have runasdaemon set
-      to 1, it will try to chdir to it before it tries to create it. Oops.
-    - Handle changed router status correctly when dirserver reloads
-      fingerprint file. We used to be dropping all unverified descriptors
-      right then. The bug was hidden because we would immediately
-      fetch a directory from another dirserver, which would include the
-      descriptors we just dropped.
     - When we're connecting to an OR and he's got a different nickname/key
       than we were expecting, only complain loudly if we're an OP or a
       dirserver. Complaining loudly to the OR admins just confuses them.
-    - Tie MAX_DIR_SIZE to MAX_BUF_SIZE, so now directory sizes won't get
-      artificially capped at 500kB.
-
-
-Changes in version 0.1.0.2-rc - 2005-04-01
-  o Bugfixes on 0.1.0.1-rc:
-    - Fixes on reachability detection:
-      - Don't check for reachability while hibernating.
-      - If ORPort is reachable but DirPort isn't, still publish the
-        descriptor, but zero out DirPort until it's found reachable.
-      - When building testing circs for ORPort testing, use only
-        high-bandwidth nodes, so fewer circuits fail.
-      - Complain about unreachable ORPort separately from unreachable
-        DirPort, so the user knows what's going on.
-      - Make sure we only conclude ORPort reachability if we didn't
-        initiate the conn. Otherwise we could falsely conclude that
-        we're reachable just because we connected to the guy earlier
-        and he used that same pipe to extend to us.
-      - Authdirservers shouldn't do ORPort reachability detection,
-        since they're in clique mode, so it will be rare to find a
-        server not already connected to them.
-      - When building testing circuits, always pick middle hops running
-        Tor 0.0.9.7, so we avoid the "can't extend to unknown routers"
-        bug. (This is a kludge; it will go away when 0.0.9.x becomes
-        obsolete.)
-      - When we decide we're reachable, actually publish our descriptor
-        right then.
-    - Fix bug in redirectstream in the controller.
-    - Fix the state descriptor strings so logs don't claim edge streams
-      are in a different state than they actually are.
-    - Use recent libevent features when possible (this only really affects
-      win32 and osx right now, because the new libevent with these
-      features hasn't been released yet). Add code to suppress spurious
-      libevent log msgs.
-    - Prevent possible segfault in connection_close_unattached_ap().
-    - Fix newlines on torrc in win32.
-    - Improve error msgs when tor-resolve fails.
+    - Whine at you if you're a server and you don't set your contactinfo.
+    - Warn when exit policy implicitly allows local addresses.
+    - Give a better warning when some other server advertises an
+      ORPort that is actually an apache running ssl.
+    - If we get an incredibly skewed timestamp from a dirserver mirror
+      that isn't a verified OR, don't warn -- it's probably him that's
+      wrong.
+    - When a dirserver causes you to give a warn, mention which dirserver
+      it was.
 
-  o Improvements on 0.0.9.x:
+  o New contrib scripts:
+    - New experimental script tor/contrib/exitlist: a simple python
+      script to parse directories and find Tor nodes that exit to listed
+      addresses/ports.
     - New experimental script tor/contrib/ExerciseServer.py (needs more
       work) that uses the controller interface to build circuits and
       fetch pages over them. This will help us bootstrap servers that
@@ -255,166 +251,60 @@
       that uses the controller interface to let you choose whole paths
       via addresses like
       "<hostname>.<path,separated by dots>.<length of path>.path"
-    - When we've connected to an OR and handshaked but didn't like
-      the result, we were closing the conn without sending destroy
-      cells back for pending circuits. Now send those destroys.
-
-
-Changes in version 0.1.0.1-rc - 2005-03-28
-  o New features:
-    - Add reachability testing. Your Tor server will automatically try
-      to see if its ORPort and DirPort are reachable from the outside,
-      and it won't upload its descriptor until it decides they are.
-    - Handle unavailable hidden services better. Handle slow or busy
-      hidden services better.
-    - Add support for CONNECTing through https proxies, with "HttpsProxy"
-      config option.
-    - New exit policy: accept most low-numbered ports, rather than
-      rejecting most low-numbered ports.
-    - More Tor controller support (still experimental). See
-      http://tor.eff.org/doc/control-spec.txt for all the new features,
-      including signals to emulate unix signals from any platform;
-      redirectstream; extendcircuit; mapaddress; getinfo; postdescriptor;
-      closestream; closecircuit; etc.
-    - Make nt services work and start on startup on win32 (based on
-      patch by Matt Edman).
-    - Add a new AddressMap config directive to rewrite incoming socks
-      addresses. This lets you, for example, declare an implicit
-      required exit node for certain sites.
-    - Add a new TrackHostExits config directive to trigger addressmaps
-      for certain incoming socks addresses -- for sites that break when
-      your exit keeps changing (based on patch from Mike Perry).
-    - Redo the client-side dns cache so it's just an addressmap too.
-    - Notice when our IP changes, and reset stats/uptime/reachability.
-    - When an application is using socks5, give him the whole variety of
-      potential socks5 responses (connect refused, host unreachable, etc),
-      rather than just "success" or "failure".
-    - A more sane version numbering system. See
-      http://tor.eff.org/cvs/tor/doc/version-spec.txt for details.
-    - New contributed script "exitlist": a simple python script to
-      parse directories and find Tor nodes that exit to listed
-      addresses/ports.
     - New contributed script "privoxy-tor-toggle" to toggle whether
       Privoxy uses Tor. Seems to be configured for Debian by default.
-    - Report HTTP reasons to client when getting a response from directory
-      servers -- so you can actually know what went wrong.
-    - New config option MaxAdvertisedBandwidth which lets you advertise
-      a low bandwidthrate (to not attract as many circuits) while still
-      allowing a higher bandwidthrate in reality.
 
-  o Robustness/stability fixes:
-    - Make Tor use Niels Provos's libevent instead of its current
-      poll-but-sometimes-select mess.  This will let us use faster async
-      cores (like epoll, kpoll, and /dev/poll), and hopefully work better
-      on Windows too.
-    - pthread support now too. This was forced because when we forked,
-      we ended up wasting a lot of duplicate ram over time. Also switch
-      to foo_r versions of some library calls to allow reentry and
-      threadsafeness.
-    - Better handling for heterogeneous / unreliable nodes:
-      - Annotate circuits w/ whether they aim to contain high uptime nodes
-        and/or high capacity nodes. When building circuits, choose
-        appropriate nodes.
-      - This means that every single node in an intro rend circuit,
-        not just the last one, will have a minimum uptime.
-      - New config option LongLivedPorts to indicate application streams
-        that will want high uptime circuits.
-      - Servers reset uptime when a dir fetch entirely fails. This
-        hopefully reflects stability of the server's network connectivity.
-      - If somebody starts his tor server in Jan 2004 and then fixes his
-        clock, don't make his published uptime be a year.
-      - Reset published uptime when you wake up from hibernation.
-    - Introduce a notion of 'internal' circs, which are chosen without
-      regard to the exit policy of the last hop. Intro and rendezvous
-      circs must be internal circs, to avoid leaking information. Resolve
-      and connect streams can use internal circs if they want.
-    - New circuit pooling algorithm: make sure to have enough circs around
-      to satisfy any predicted ports, and also make sure to have 2 internal
-      circs around if we've required internal circs lately (and with high
-      uptime if we've seen that lately too).
-    - Split NewCircuitPeriod option into NewCircuitPeriod (30 secs),
-      which describes how often we retry making new circuits if current
-      ones are dirty, and MaxCircuitDirtiness (10 mins), which describes
-      how long we're willing to make use of an already-dirty circuit.
-    - Cannibalize GENERAL circs to be C_REND, C_INTRO, S_INTRO, and S_REND
-      circ as necessary, if there are any completed ones lying around
-      when we try to launch one.
-    - Make hidden services try to establish a rendezvous for 30 seconds,
-      rather than for n (where n=3) attempts to build a circuit.
-    - Change SHUTDOWN_WAIT_LENGTH from a fixed 30 secs to a config option
-      "ShutdownWaitLength".
-    - Try to be more zealous about calling connection_edge_end when
-      things go bad with edge conns in connection.c.
-    - Revise tor-spec to add more/better stream end reasons.
-    - Revise all calls to connection_edge_end to avoid sending "misc",
-      and to take errno into account where possible.
-
-  o Bug fixes:
-    - Fix a race condition that can trigger an assert, when we have a
-      pending create cell and an OR connection fails right then.
+  o Misc bugfixes:
+    - chdir() to your datadirectory at the *end* of the daemonize process,
+      not the beginning. This was a problem because the first time you
+      run tor, if your datadir isn't there, and you have runasdaemon set
+      to 1, it will try to chdir to it before it tries to create it. Oops.
     - Fix several double-mark-for-close bugs, e.g. where we were finding
       a conn for a cell even if that conn is already marked for close.
-    - Make sequence of log messages when starting on win32 with no config
-      file more reasonable.
-    - When choosing an exit node for a new non-internal circ, don't take
-      into account whether it'll be useful for any pending x.onion
-      addresses -- it won't.
-    - Turn addr_policy_compare from a tristate to a quadstate; this should
-      help address our "Ah, you allow 1.2.3.4:80. You are a good choice
-      for google.com" problem.
-    - Make "platform" string in descriptor more accurate for Win32 servers,
-      so it's not just "unknown platform".
-    - Fix an edge case in parsing config options (thanks weasel).
-      If they say "--" on the commandline, it's not an option.
-    - Reject odd-looking addresses at the client (e.g. addresses that
-      contain a colon), rather than having the server drop them because
-      they're malformed.
+    - Stop most cases of hanging up on a socks connection without sending
+      the socks reject.
+    - Fix a bug in the RPM package: set home directory for _tor to
+      something more reasonable when first installing.
+    - Stop putting nodename in the Platform string in server descriptors.
+      It doesn't actually help, and it is confusing/upsetting some people.
+    - When using preferred entry or exit nodes, ignore whether the
+      circuit wants uptime or capacity. They asked for the nodes, they
+      get the nodes.
+    - Tie MAX_DIR_SIZE to MAX_BUF_SIZE, so now directory sizes won't get
+      artificially capped at 500kB.
+    - Cache local dns resolves correctly even when they're .exit
+      addresses.
+    - If we're hibernating and we get a SIGINT, exit immediately.
     - tor-resolve requests were ignoring .exit if there was a working circuit
       they could use instead.
-    - REUSEADDR on normal platforms means you can rebind to the port
-      right after somebody else has let it go. But REUSEADDR on win32
-      means to let you bind to the port _even when somebody else
-      already has it bound_! So, don't do that on Win32.
+
+  o Misc features:
+    - Rewrite address "serifos.exit" to "externalIP.serifos.exit"
+      rather than just rejecting it.
+    - If our clock jumps forward by 100 seconds or more, assume something
+      has gone wrong with our network and abandon all not-yet-used circs.
+    - When an application is using socks5, give him the whole variety of
+      potential socks5 responses (connect refused, host unreachable, etc),
+      rather than just "success" or "failure".
+    - A more sane version numbering system. See
+      http://tor.eff.org/cvs/tor/doc/version-spec.txt for details.
     - Change version parsing logic: a version is "obsolete" if it is not
       recommended and (1) there is a newer recommended version in the
       same series, or (2) there are no recommended versions in the same
       series, but there are some recommended versions in a newer series.
       A version is "new" if it is newer than any recommended version in
       the same series.
-    - Stop most cases of hanging up on a socks connection without sending
-      the socks reject.
-
-  o Helpful fixes:
-    - Require BandwidthRate to be at least 20kB/s for servers.
-    - When a dirserver causes you to give a warn, mention which dirserver
-      it was.
-    - New config option DirAllowPrivateAddresses for authdirservers.
-      Now by default they refuse router descriptors that have non-IP or
-      private-IP addresses.
+    - Report HTTP reasons to client when getting a response from directory
+      servers -- so you can actually know what went wrong.
+    - Reject odd-looking addresses at the client (e.g. addresses that
+      contain a colon), rather than having the server drop them because
+      they're malformed.
     - Stop publishing socksport in the directory, since it's not
       actually meant to be public. For compatibility, publish a 0 there
       for now.
-    - Change DirFetchPeriod/StatusFetchPeriod to have a special "Be
-      smart" value, that is low for servers and high for clients.
-    - If our clock jumps forward by 100 seconds or more, assume something
-      has gone wrong with our network and abandon all not-yet-used circs.
-    - Warn when exit policy implicitly allows local addresses.
-    - If we get an incredibly skewed timestamp from a dirserver mirror
-      that isn't a verified OR, don't warn -- it's probably him that's
-      wrong.
     - Since we ship our own Privoxy on OS X, tweak it so it doesn't write
       cookies to disk and doesn't log each web request to disk. (Thanks
       to Brett Carrington for pointing this out.)
-    - When a client asks us for a dir mirror and we don't have one,
-      launch an attempt to get a fresh one.
-    - If we're hibernating and we get a SIGINT, exit immediately.
-    - Add --with-dmalloc ./configure option, to track memory leaks.
-    - And try to free all memory on closing, so we can detect what
-      we're leaking.
-    - Cache local dns resolves correctly even when they're .exit
-      addresses.
-    - Give a better warning when some other server advertises an
-      ORPort that is actually an apache running ssl.
     - Add "opt hibernating 1" to server descriptor to make it clearer
       whether the server is hibernating.