|  | @@ -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.
 | 
	
		
			
				|  |  | +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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  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.
 | 
	
		
			
				|  |  | -    - 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.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.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    - 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.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -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 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.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  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.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  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.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -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 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.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    - 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.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -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.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  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 @@ Changes in version 0.1.0.2-rc - 2005-04-01
 | 
	
		
			
				|  |  |        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.
 | 
	
		
			
				|  |  |  
 |