| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576 | 
							- Changes in version 0.1.2.3-alpha - 2006-10-??
 
-   o Minor features:
 
-     - If most authorities set a (newly defined) BadExit flag for a server,
 
-       do not consider it as a general-purpose exit.  Only consider
 
-       authorities that advertise themselves as listing bad exits.
 
-     - Start making it possible for servers to publish less often: never
 
-       discard a descriptor simply for being too old until either it is
 
-       recommended by no authorities, or until we get a better one for the
 
-       same router.  Make caches consider retaining old recommended
 
-       routers for even longer.
 
-     - Directory servers now provide 'Pragma: no-cache' and 'Expires'
 
-       headers for content, so that we can work better in the presence of
 
-       caching HTTP proxies.
 
-   o Minor features, controller:
 
-     - Add a REASON field to CIRC events; for backward compatibility, this
 
-       field is sent only to controllers that have enabled the extended
 
-       event format.  Also, add additional reason codes to explain why a
 
-       given circuit has been destroyed or truncated. (Patches from Mike
 
-       Perry)
 
-     - Add a REMOTE_REASON field to extended CIRC events to tell the
 
-       controller about why a remote OR told us to close a circuit.
 
-     - There's now a GETINFO ns/... field so that controllers can ask Tor
 
-       about the current state of a router.
 
-     - Stream events also have REASON and REMOTE_REASON fields, working much
 
-       like those for circuit events.
 
-     - NS events to inform a controller when our opinion of a router's status
 
-       has changed.
 
-   o Security bugfixes:
 
-     - When the user sends a NEWNYM signal, clear the client-side DNS
 
-       cache too. Otherwise we continue to act on previous information.
 
-   o Minor bugfixes:
 
-     - Change NT service functions to be loaded on demand.  This lets us
 
-       build with mingw without breaking Tor for Windows 98 users.
 
-     - Do DirPort reachability tests less often, since a single test
 
-       chews through many circuits before giving up.
 
-     - In the hidden service example in torrc.sample, stop recommending
 
-       esoteric and discouraged hidden service options.
 
-     - Avoid sending junk to controllers or segfaulting when a controller
 
-       uses EVENT_NEW_DESC with verbose nicknames.
 
-     - When stopping an NT service, wait up to 10 sec for it to actually
 
-       stop.  (Patch from Matt Edman; resolves bug 295.)
 
-     - Fix handling of verbose nicknames with ORCONN controller events:
 
-       make them show up exactly when requested, rather than exactly when
 
-       not requested.
 
-     - When reporting verbose nicknames in entry_guards_getinfo(), avoid
 
-       printing a duplicate "$" in the keys we send.
 
-     - Stop triggering asserts if the controller tries to extend hidden
 
-       service circuits.
 
-     - Correctly set maximum connection limit on Cygwin.
 
-     - Try to detect windows correctly when cross-compiling.
 
-     - Detect the size of the routers file correctly even if it is corrupted
 
-       (on systems without mmap) or not page-aligned (on systems with mmap).
 
-       This bug was harmless.
 
-     - Implement the protocol correctly by always sending a RELAY_END cell
 
-       when an attempt to open a stream fails.  This should make clients
 
-       able to find a good exit faster in some cases, since unhandleable
 
-       requests will now get an error rather than timing out.
 
-     - Resolve two memory leaks when rebuilding the on-disk router cache
 
-       (reported by fookoowa).
 
- Changes in version 0.1.2.2-alpha - 2006-10-07
 
-   o Major features:
 
-     - Make our async eventdns library on-by-default for Tor servers,
 
-       and plan to deprecate the separate dnsworker threads.
 
-     - Add server-side support for "reverse" DNS lookups (using PTR
 
-       records so clients can determine the canonical hostname for a given
 
-       IPv4 address). Only supported by servers using eventdns; servers
 
-       now announce in their descriptors whether they support eventdns.
 
-     - Specify and implement client-side SOCKS5 interface for reverse DNS
 
-       lookups (see doc/socks-extensions.txt).
 
-     - Add a BEGIN_DIR relay cell type for an easier in-protocol way to
 
-       connect to directory servers through Tor. Previously, clients needed
 
-       to find Tor exits to make private connections to directory servers.
 
-     - Avoid choosing Exit nodes for entry or middle hops when the
 
-       total bandwidth available from non-Exit nodes is much higher than
 
-       the total bandwidth available from Exit nodes.
 
-     - Workaround for name servers (like Earthlink's) that hijack failing
 
-       DNS requests and replace the no-such-server answer with a "helpful"
 
-       redirect to an advertising-driven search portal. Also work around
 
-       DNS hijackers who "helpfully" decline to hijack known-invalid
 
-       RFC2606 addresses. Config option "ServerDNSDetectHijacking 0"
 
-       lets you turn it off.
 
-     - Send out a burst of long-range padding cells once we've established
 
-       that we're reachable. Spread them over 4 circuits, so hopefully
 
-       a few will be fast. This exercises our bandwidth and bootstraps
 
-       us into the directory more quickly.
 
-   o New/improved config options:
 
-     - Add new config option "ResolvConf" to let the server operator
 
-       choose an alternate resolve.conf file when using eventdns.
 
-     - Add an "EnforceDistinctSubnets" option to control our "exclude
 
-       servers on the same /16" behavior. It's still on by default; this
 
-       is mostly for people who want to operate private test networks with
 
-       all the machines on the same subnet.
 
-     - If one of our entry guards is on the ExcludeNodes list, or the
 
-       directory authorities don't think it's a good guard, treat it as
 
-       if it were unlisted: stop using it as a guard, and throw it off
 
-       the guards list if it stays that way for a long time.
 
-     - Allow directory authorities to be marked separately as authorities
 
-       for the v1 directory protocol, the v2 directory protocol, and
 
-       as hidden service directories, to make it easier to retire old
 
-       authorities. V1 authorities should set "HSAuthoritativeDir 1"
 
-       to continue being hidden service authorities too.
 
-     - Remove 8888 as a LongLivedPort, and add 6697 (IRCS).
 
-   o Minor features, controller:
 
-     - Fix CIRC controller events so that controllers can learn the
 
-       identity digests of non-Named servers used in circuit paths.
 
-     - Let controllers ask for more useful identifiers for servers. Instead
 
-       of learning identity digests for un-Named servers and nicknames
 
-       for Named servers, the new identifiers include digest, nickname,
 
-       and indication of Named status. Off by default; see control-spec.txt
 
-       for more information.
 
-     - Add a "getinfo address" controller command so it can display Tor's
 
-       best guess to the user.
 
-     - New controller event to alert the controller when our server
 
-       descriptor has changed.
 
-     - Give more meaningful errors on controller authentication failure.
 
-   o Minor features, other:
 
-     - When asked to resolve a hostname, don't use non-exit servers unless
 
-       requested to do so. This allows servers with broken DNS to be
 
-       useful to the network.
 
-     - Divide eventdns log messages into warn and info messages.
 
-     - Reserve the nickname "Unnamed" for routers that can't pick
 
-       a hostname: any router can call itself Unnamed; directory
 
-       authorities will never allocate Unnamed to any particular router;
 
-       clients won't believe that any router is the canonical Unnamed.
 
-     - Only include function names in log messages for info/debug messages.
 
-       For notice/warn/err, the content of the message should be clear on
 
-       its own, and printing the function name only confuses users.
 
-     - Avoid some false positives during reachability testing: don't try
 
-       to test via a server that's on the same /24 as us.
 
-     - If we fail to build a circuit to an intended enclave, and it's
 
-       not mandatory that we use that enclave, stop wanting it.
 
-     - When eventdns is enabled, allow multithreaded builds on NetBSD and
 
-       OpenBSD. (We had previously disabled threads on these platforms
 
-       because they didn't have working thread-safe resolver functions)
 
-   o Major bugfixes, anonymity/security:
 
-     - If a client asked for a server by name, and there's a named server
 
-       in our network-status but we don't have its descriptor yet, we
 
-       could return an unnamed server instead.
 
-     - Fix NetBSD bug that could allow someone to force uninitialized RAM
 
-       to be sent to a server's DNS resolver. This only affects NetBSD
 
-       and other platforms that do not bounds-check tolower().
 
-     - Reject (most) attempts to use Tor circuits with length one. (If
 
-       many people start using Tor as a one-hop proxy, exit nodes become
 
-       a more attractive target for compromise.)
 
-     - Just because your DirPort is open doesn't mean people should be
 
-       able to remotely teach you about hidden service descriptors. Now
 
-       only accept rendezvous posts if you've got HSAuthoritativeDir set.
 
-   o Major bugfixes, other:
 
-     - Don't crash on race condition in dns.c: tor_assert(!resolve->expire)
 
-     - When a client asks the server to resolve (not connect to)
 
-       an address, and it has a cached answer, give them the cached answer.
 
-       Previously, the server would give them no answer at all.
 
-     - Allow really slow clients to not hang up five minutes into their
 
-       directory downloads (suggested by Adam J. Richter).
 
-     - We were building exactly the wrong circuits when we anticipated
 
-       hidden service requirements, meaning Tor would have to build all
 
-       its circuits on demand.
 
-     - Avoid crashing when we mmap a router cache file of size 0.
 
-     - When testing reachability of our DirPort, don't launch new
 
-       tests when there's already one in progress -- unreachable
 
-       servers were stacking up dozens of testing streams.
 
-   o Minor bugfixes, correctness:
 
-     - If we're a directory mirror and we ask for "all" network status
 
-       documents, we would discard status documents from authorities
 
-       we don't recognize.
 
-     - Avoid a memory corruption bug when creating a hash table for
 
-       the first time.
 
-     - Avoid controller-triggered crash when misusing certain commands
 
-       from a v0 controller on platforms that do not handle
 
-       printf("%s",NULL) gracefully.
 
-     - Don't crash when a controller sends a third argument to an
 
-       "extendcircuit" request.
 
-     - Controller protocol fixes: fix encoding in "getinfo addr-mappings"
 
-       response; fix error code when "getinfo dir/status/" fails.
 
-     - Avoid crash when telling controller stream-status and a stream
 
-       is detached.
 
-     - Patch from Adam Langley to fix assert() in eventdns.c.
 
-     - Fix a debug log message in eventdns to say "X resolved to Y"
 
-       instead of "X resolved to X".
 
-     - Make eventdns give strings for DNS errors, not just error numbers.
 
-     - Track unreachable entry guards correctly: don't conflate
 
-       'unreachable by us right now' with 'listed as down by the directory
 
-       authorities'. With the old code, if a guard was unreachable by
 
-       us but listed as running, it would clog our guard list forever.
 
-     - Behave correctly in case we ever have a network with more than
 
-       2GB/s total advertised capacity.
 
-     - Make TrackExitHosts case-insensitive, and fix the behavior of
 
-       ".suffix" TrackExitHosts items to avoid matching in the middle of
 
-       an address.
 
-     - Finally fix the openssl warnings from newer gccs that believe that
 
-       ignoring a return value is okay, but casting a return value and
 
-       then ignoring it is a sign of madness.
 
-     - Prevent the contrib/exitlist script from printing the same
 
-       result more than once.
 
-     - Patch from Steve Hildrey: Generate network status correctly on
 
-       non-versioning dirservers.
 
-     - Don't listen to the X-Your-Address-Is hint if you did the lookup
 
-       via Tor; otherwise you'll think you're the exit node's IP address.
 
-   o Minor bugfixes, performance:
 
-     - Two small performance improvements on parsing descriptors.
 
-     - Major performance improvement on inserting descriptors: change
 
-       algorithm from O(n^2) to O(n).
 
-     - Make the common memory allocation path faster on machines where
 
-       malloc(0) returns a pointer.
 
-     - Start remembering X-Your-Address-Is directory hints even if you're
 
-       a client, so you can become a server more smoothly.
 
-     - Avoid duplicate entries on MyFamily line in server descriptor.
 
-   o Packaging, features:
 
-     - Remove architecture from OS X builds. The official builds are
 
-       now universal binaries.
 
-     - The Debian package now uses --verify-config when (re)starting,
 
-       to distinguish configuration errors from other errors.
 
-     - Update RPMs to require libevent 1.1b.
 
-   o Packaging, bugfixes:
 
-     - Patches so Tor builds with MinGW on Windows.
 
-     - Patches so Tor might run on Cygwin again.
 
-     - Resume building on non-gcc compilers and ancient gcc. Resume
 
-       building with the -O0 compile flag. Resume building cleanly on
 
-       Debian woody.
 
-     - Run correctly on OS X platforms with case-sensitive filesystems.
 
-     - Correct includes for net/if.h and net/pfvar.h on OpenBSD (from Tup).
 
-     - Add autoconf checks so Tor can build on Solaris x86 again.
 
-   o Documentation
 
-     - Documented (and renamed) ServerDNSSearchDomains and
 
-       ServerDNSResolvConfFile options.
 
-     - Be clearer that the *ListenAddress directives can be repeated
 
-       multiple times.
 
- Changes in version 0.1.2.1-alpha - 2006-08-27
 
-   o Major features:
 
-     - Add "eventdns" async dns library from Adam Langley, tweaked to
 
-       build on OSX and Windows. Only enabled if you pass the
 
-       --enable-eventdns argument to configure.
 
-     - Allow servers with no hostname or IP address to learn their
 
-       IP address by asking the directory authorities. This code only
 
-       kicks in when you would normally have exited with a "no address"
 
-       error. Nothing's authenticated, so use with care.
 
-     - Rather than waiting a fixed amount of time between retrying
 
-       application connections, we wait only 5 seconds for the first,
 
-       10 seconds for the second, and 15 seconds for each retry after
 
-       that. Hopefully this will improve the expected user experience.
 
-     - Patch from Tup to add support for transparent AP connections:
 
-       this basically bundles the functionality of trans-proxy-tor
 
-       into the Tor mainline. Now hosts with compliant pf/netfilter
 
-       implementations can redirect TCP connections straight to Tor
 
-       without diverting through SOCKS. Needs docs.
 
-     - Busy directory servers save lots of memory by spooling server
 
-       descriptors, v1 directories, and v2 networkstatus docs to buffers
 
-       as needed rather than en masse. Also mmap the cached-routers
 
-       files, so we don't need to keep the whole thing in memory too.
 
-     - Automatically avoid picking more than one node from the same
 
-       /16 network when constructing a circuit.
 
-     - Revise and clean up the torrc.sample that we ship with; add
 
-       a section for BandwidthRate and BandwidthBurst.
 
-   o Minor features:
 
-     - Split circuit_t into origin_circuit_t and or_circuit_t, and
 
-       split connection_t into edge, or, dir, control, and base structs.
 
-       These will save quite a bit of memory on busy servers, and they'll
 
-       also help us track down bugs in the code and bugs in the spec.
 
-     - Experimentally re-enable kqueue on OSX when using libevent 1.1b
 
-       or later. Log when we are doing this, so we can diagnose it when
 
-       it fails. (Also, recommend libevent 1.1b for kqueue and
 
-       win32 methods; deprecate libevent 1.0b harder; make libevent
 
-       recommendation system saner.)
 
-     - Start being able to build universal binaries on OS X (thanks
 
-       to Phobos).
 
-     - Export the default exit policy via the control port, so controllers
 
-       don't need to guess what it is / will be later.
 
-     - Add a man page entry for ProtocolWarnings.
 
-     - Add TestVia config option to the man page.
 
-     - Remove even more protocol-related warnings from Tor server logs,
 
-       such as bad TLS handshakes and malformed begin cells.
 
-     - Stop fetching descriptors if you're not a dir mirror and you
 
-       haven't tried to establish any circuits lately. [This currently
 
-       causes some dangerous behavior, because when you start up again
 
-       you'll use your ancient server descriptors.]
 
-     - New DirPort behavior: if you have your dirport set, you download
 
-       descriptors aggressively like a directory mirror, whether or not
 
-       your ORPort is set.
 
-     - Get rid of the router_retry_connections notion. Now routers
 
-       no longer try to rebuild long-term connections to directory
 
-       authorities, and directory authorities no longer try to rebuild
 
-       long-term connections to all servers. We still don't hang up
 
-       connections in these two cases though -- we need to look at it
 
-       more carefully to avoid flapping, and we likely need to wait til
 
-       0.1.1.x is obsolete.
 
-     - Drop compatibility with obsolete Tors that permit create cells
 
-       to have the wrong circ_id_type.
 
-     - Re-enable per-connection rate limiting. Get rid of the "OP
 
-       bandwidth" concept. Lay groundwork for "bandwidth classes" --
 
-       separate global buckets that apply depending on what sort of conn
 
-       it is.
 
-     - Start publishing one minute or so after we find our ORPort
 
-       to be reachable. This will help reduce the number of descriptors
 
-       we have for ourselves floating around, since it's quite likely
 
-       other things (e.g. DirPort) will change during that minute too.
 
-     - Fork the v1 directory protocol into its own spec document,
 
-       and mark dir-spec.txt as the currently correct (v2) spec.
 
-   o Major bugfixes:
 
-     - When we find our DirPort to be reachable, publish a new descriptor
 
-       so we'll tell the world (reported by pnx).
 
-     - Publish a new descriptor after we hup/reload. This is important
 
-       if our config has changed such that we'll want to start advertising
 
-       our DirPort now, etc.
 
-     - Allow Tor to start when RunAsDaemon is set but no logs are set.
 
-     - When we have a state file we cannot parse, tell the user and
 
-       move it aside. Now we avoid situations where the user starts
 
-       Tor in 1904, Tor writes a state file with that timestamp in it,
 
-       the user fixes her clock, and Tor refuses to start.
 
-     - Fix configure.in to not produce broken configure files with
 
-       more recent versions of autoconf. Thanks to Clint for his auto*
 
-       voodoo.
 
-     - "tor --verify-config" now exits with -1(255) or 0 depending on
 
-       whether the config options are bad or good.
 
-     - Resolve bug 321 when using dnsworkers: append a period to every
 
-       address we resolve at the exit node, so that we do not accidentally
 
-       pick up local addresses, and so that failing searches are retried
 
-       in the resolver search domains. (This is already solved for
 
-       eventdns.) (This breaks Blossom servers for now.)
 
-     - If we are using an exit enclave and we can't connect, e.g. because
 
-       its webserver is misconfigured to not listen on localhost, then
 
-       back off and try connecting from somewhere else before we fail.
 
-   o Minor bugfixes:
 
-     - Start compiling on MinGW on Windows (patches from Mike Chiussi).
 
-     - Start compiling on MSVC6 on Windows (patches from Frediano Ziglio).
 
-     - Fix bug 314: Tor clients issued "unsafe socks" warnings even
 
-       when the IP address is mapped through MapAddress to a hostname.
 
-     - Start passing "ipv4" hints to getaddrinfo(), so servers don't do
 
-       useless IPv6 DNS resolves.
 
-     - Patch suggested by Karsten Loesing: respond to SIGNAL command
 
-       before we execute the signal, in case the signal shuts us down.
 
-     - Clean up AllowInvalidNodes man page entry.
 
-     - Claim a commonname of Tor, rather than TOR, in TLS handshakes.
 
-     - Add more asserts to track down an assert error on a windows Tor
 
-       server with connection_add being called with socket == -1.
 
-     - Handle reporting OR_CONN_EVENT_NEW events to the controller.
 
-     - Fix misleading log messages: an entry guard that is "unlisted",
 
-       as well as not known to be "down" (because we've never heard
 
-       of it), is not therefore "up".
 
-     - Remove code to special-case "-cvs" ending, since it has not
 
-       actually mattered since 0.0.9.
 
-     - Make our socks5 handling more robust to broken socks clients:
 
-       throw out everything waiting on the buffer in between socks
 
-       handshake phases, since they can't possibly (so the theory
 
-       goes) have predicted what we plan to respond to them.
 
- Changes in version 0.1.1.24 - 2006-09-29
 
-   o Major bugfixes:
 
-     - Allow really slow clients to not hang up five minutes into their
 
-       directory downloads (suggested by Adam J. Richter).
 
-     - Fix major performance regression from 0.1.0.x: instead of checking
 
-       whether we have enough directory information every time we want to
 
-       do something, only check when the directory information has changed.
 
-       This should improve client CPU usage by 25-50%.
 
-     - Don't crash if, after a server has been running for a while,
 
-       it can't resolve its hostname.
 
-     - When a client asks us to resolve (not connect to) an address,
 
-       and we have a cached answer, give them the cached answer.
 
-       Previously, we would give them no answer at all.
 
-   o Minor bugfixes:
 
-     - Allow Tor to start when RunAsDaemon is set but no logs are set.
 
-     - Don't crash when the controller receives a third argument to an
 
-       "extendcircuit" request.
 
-     - Controller protocol fixes: fix encoding in "getinfo addr-mappings"
 
-       response; fix error code when "getinfo dir/status/" fails.
 
-     - Fix configure.in to not produce broken configure files with
 
-       more recent versions of autoconf. Thanks to Clint for his auto*
 
-       voodoo.
 
-     - Fix security bug on NetBSD that could allow someone to force
 
-       uninitialized RAM to be sent to a server's DNS resolver. This
 
-       only affects NetBSD and other platforms that do not bounds-check
 
-       tolower().
 
-     - Warn user when using libevent 1.1a or earlier with win32 or kqueue
 
-       methods: these are known to be buggy.
 
-     - If we're a directory mirror and we ask for "all" network status
 
-       documents, we would discard status documents from authorities
 
-       we don't recognize.
 
- Changes in version 0.1.1.23 - 2006-07-30
 
-   o Major bugfixes:
 
-     - Fast Tor servers, especially exit nodes, were triggering asserts
 
-       due to a bug in handling the list of pending DNS resolves. Some
 
-       bugs still remain here; we're hunting them.
 
-     - Entry guards could crash clients by sending unexpected input.
 
-     - More fixes on reachability testing: if you find yourself reachable,
 
-       then don't ever make any client requests (so you stop predicting
 
-       circuits), then hup or have your clock jump, then later your IP
 
-       changes, you won't think circuits are working, so you won't try to
 
-       test reachability, so you won't publish.
 
-   o Minor bugfixes:
 
-     - Avoid a crash if the controller does a resetconf firewallports
 
-       and then a setconf fascistfirewall=1.
 
-     - Avoid an integer underflow when the dir authority decides whether
 
-       a router is stable: we might wrongly label it stable, and compute
 
-       a slightly wrong median stability, when a descriptor is published
 
-       later than now.
 
-     - Fix a place where we might trigger an assert if we can't build our
 
-       own server descriptor yet.
 
- Changes in version 0.1.1.22 - 2006-07-05
 
-   o Major bugfixes:
 
-     - Fix a big bug that was causing servers to not find themselves
 
-       reachable if they changed IP addresses. Since only 0.1.1.22+
 
-       servers can do reachability testing correctly, now we automatically
 
-       make sure to test via one of these.
 
-     - Fix to allow clients and mirrors to learn directory info from
 
-       descriptor downloads that get cut off partway through.
 
-     - Directory authorities had a bug in deciding if a newly published
 
-       descriptor was novel enough to make everybody want a copy -- a few
 
-       servers seem to be publishing new descriptors many times a minute.
 
-   o Minor bugfixes:
 
-     - Fix a rare bug that was causing some servers to complain about
 
-       "closing wedged cpuworkers" and skip some circuit create requests.
 
-     - Make the Exit flag in directory status documents actually work.
 
- Changes in version 0.1.1.21 - 2006-06-10
 
-   o Crash and assert fixes from 0.1.1.20:
 
-     - Fix a rare crash on Tor servers that have enabled hibernation.
 
-     - Fix a seg fault on startup for Tor networks that use only one
 
-       directory authority.
 
-     - Fix an assert from a race condition that occurs on Tor servers
 
-       while exiting, where various threads are trying to log that they're
 
-       exiting, and delete the logs, at the same time.
 
-     - Make our unit tests pass again on certain obscure platforms.
 
-   o Other fixes:
 
-     - Add support for building SUSE RPM packages.
 
-     - Speed up initial bootstrapping for clients: if we are making our
 
-       first ever connection to any entry guard, then don't mark it down
 
-       right after that.
 
-     - When only one Tor server in the network is labelled as a guard,
 
-       and we've already picked him, we would cycle endlessly picking him
 
-       again, being unhappy about it, etc. Now we specifically exclude
 
-       current guards when picking a new guard.
 
-     - Servers send create cells more reliably after the TLS connection
 
-       is established: we were sometimes forgetting to send half of them
 
-       when we had more than one pending.
 
-     - If we get a create cell that asks us to extend somewhere, but the
 
-       Tor server there doesn't match the expected digest, we now send
 
-       a destroy cell back, rather than silently doing nothing.
 
-     - Make options->RedirectExit work again.
 
-     - Make cookie authentication for the controller work again.
 
-     - Stop being picky about unusual characters in the arguments to
 
-       mapaddress. It's none of our business.
 
-     - Add a new config option "TestVia" that lets you specify preferred
 
-       middle hops to use for test circuits. Perhaps this will let me
 
-       debug the reachability problems better.
 
-   o Log / documentation fixes:
 
-     - If we're a server and some peer has a broken TLS certificate, don't
 
-       log about it unless ProtocolWarnings is set, i.e., we want to hear
 
-       about protocol violations by others.
 
-     - Fix spelling of VirtualAddrNetwork in man page.
 
-     - Add a better explanation at the top of the autogenerated torrc file
 
-       about what happened to our old torrc.
 
- Changes in version 0.1.1.20 - 2006-05-23
 
-   o Crash and assert fixes from 0.1.0.17:
 
-     - Fix assert bug in close_logs() on exit: when we close and delete
 
-       logs, remove them all from the global "logfiles" list.
 
-     - Fix an assert error when we're out of space in the connection_list
 
-       and we try to post a hidden service descriptor (reported by Peter
 
-       Palfrader).
 
-     - Fix a rare assert error when we've tried all intro points for
 
-       a hidden service and we try fetching the service descriptor again:
 
-       "Assertion conn->state != AP_CONN_STATE_RENDDESC_WAIT failed".
 
-     - Setconf SocksListenAddress kills Tor if it fails to bind. Now back
 
-       out and refuse the setconf if it would fail.
 
-     - If you specify a relative torrc path and you set RunAsDaemon in
 
-       your torrc, then it chdir()'s to the new directory. If you then
 
-       HUP, it tries to load the new torrc location, fails, and exits.
 
-       The fix: no longer allow a relative path to torrc when using -f.
 
-     - Check for integer overflows in more places, when adding elements
 
-       to smartlists. This could possibly prevent a buffer overflow
 
-       on malicious huge inputs.
 
-   o Security fixes, major:
 
-     - When we're printing strings from the network, don't try to print
 
-       non-printable characters. Now we're safer against shell escape
 
-       sequence exploits, and also against attacks to fool users into
 
-       misreading their logs.
 
-     - Implement entry guards: automatically choose a handful of entry
 
-       nodes and stick with them for all circuits. Only pick new guards
 
-       when the ones you have are unsuitable, and if the old guards
 
-       become suitable again, switch back. This will increase security
 
-       dramatically against certain end-point attacks. The EntryNodes
 
-       config option now provides some hints about which entry guards you
 
-       want to use most; and StrictEntryNodes means to only use those.
 
-       Fixes CVE-2006-0414.
 
-     - Implement exit enclaves: if we know an IP address for the
 
-       destination, and there's a running Tor server at that address
 
-       which allows exit to the destination, then extend the circuit to
 
-       that exit first. This provides end-to-end encryption and end-to-end
 
-       authentication. Also, if the user wants a .exit address or enclave,
 
-       use 4 hops rather than 3, and cannibalize a general circ for it
 
-       if you can.
 
-     - Obey our firewall options more faithfully:
 
-       . If we can't get to a dirserver directly, try going via Tor.
 
-       . Don't ever try to connect (as a client) to a place our
 
-         firewall options forbid.
 
-       . If we specify a proxy and also firewall options, obey the
 
-         firewall options even when we're using the proxy: some proxies
 
-         can only proxy to certain destinations.
 
-     - Make clients regenerate their keys when their IP address changes.
 
-     - For the OS X package's modified privoxy config file, comment
 
-       out the "logfile" line so we don't log everything passed
 
-       through privoxy.
 
-     - Our TLS handshakes were generating a single public/private
 
-       keypair for the TLS context, rather than making a new one for
 
-       each new connection. Oops. (But we were still rotating them
 
-       periodically, so it's not so bad.)
 
-     - When we were cannibalizing a circuit with a particular exit
 
-       node in mind, we weren't checking to see if that exit node was
 
-       already present earlier in the circuit. Now we are.
 
-     - Require server descriptors to list IPv4 addresses -- hostnames
 
-       are no longer allowed. This also fixes potential vulnerabilities
 
-       to servers providing hostnames as their address and then
 
-       preferentially resolving them so they can partition users.
 
-     - Our logic to decide if the OR we connected to was the right guy
 
-       was brittle and maybe open to a mitm for invalid routers.
 
-   o Security fixes, minor:
 
-     - Adjust tor-spec.txt to parameterize cell and key lengths. Now
 
-       Ian Goldberg can prove things about our handshake protocol more
 
-       easily.
 
-     - Make directory authorities generate a separate "guard" flag to
 
-       mean "would make a good entry guard". Clients now honor the
 
-       is_guard flag rather than looking at is_fast or is_stable.
 
-     - Try to list MyFamily elements by key, not by nickname, and warn
 
-       if we've not heard of a server.
 
-     - Start using RAND_bytes rather than RAND_pseudo_bytes from
 
-       OpenSSL. Also, reseed our entropy every hour, not just at
 
-       startup. And add entropy in 512-bit chunks, not 160-bit chunks.
 
-     - Refuse server descriptors where the fingerprint line doesn't match
 
-       the included identity key. Tor doesn't care, but other apps (and
 
-       humans) might actually be trusting the fingerprint line.
 
-     - We used to kill the circuit when we receive a relay command we
 
-       don't recognize. Now we just drop that cell.
 
-     - Fix a bug found by Lasse Overlier: when we were making internal
 
-       circuits (intended to be cannibalized later for rendezvous and
 
-       introduction circuits), we were picking them so that they had
 
-       useful exit nodes. There was no need for this, and it actually
 
-       aids some statistical attacks.
 
-     - Start treating internal circuits and exit circuits separately.
 
-       It's important to keep them separate because internal circuits
 
-       have their last hops picked like middle hops, rather than like
 
-       exit hops. So exiting on them will break the user's expectations.
 
-     - Fix a possible way to DoS dirservers.
 
-     - When the client asked for a rendezvous port that the hidden
 
-       service didn't want to provide, we were sending an IP address
 
-       back along with the end cell. Fortunately, it was zero. But stop
 
-       that anyway.
 
-   o Packaging improvements:
 
-     - Implement --with-libevent-dir option to ./configure. Improve
 
-       search techniques to find libevent, and use those for openssl too.
 
-     - Fix a couple of bugs in OpenSSL detection. Deal better when
 
-       there are multiple SSLs installed with different versions.
 
-     - Avoid warnings about machine/limits.h on Debian GNU/kFreeBSD.
 
-     - On non-gcc compilers (e.g. Solaris's cc), use "-g -O" instead of
 
-       "-Wall -g -O2".
 
-     - Make unit tests (and other invocations that aren't the real Tor)
 
-       run without launching listeners, creating subdirectories, and so on.
 
-     - The OS X installer was adding a symlink for tor_resolve but
 
-       the binary was called tor-resolve (reported by Thomas Hardly).
 
-     - Now we can target arch and OS in rpm builds (contributed by
 
-       Phobos). Also make the resulting dist-rpm filename match the
 
-       target arch.
 
-     - Apply Matt Ghali's --with-syslog-facility patch to ./configure
 
-       if you log to syslog and want something other than LOG_DAEMON.
 
-     - Fix the torify (tsocks) config file to not use Tor for localhost
 
-       connections.
 
-     - Start shipping socks-extensions.txt, tor-doc-unix.html,
 
-       tor-doc-server.html, and stylesheet.css in the tarball.
 
-     - Stop shipping tor-doc.html, INSTALL, and README in the tarball.
 
-       They are useless now.
 
-     - Add Peter Palfrader's contributed check-tor script. It lets you
 
-       easily check whether a given server (referenced by nickname)
 
-       is reachable by you.
 
-     - Add BSD-style contributed startup script "rc.subr" from Peter
 
-       Thoenen.
 
-   o Directory improvements -- new directory protocol:
 
-     - See tor/doc/dir-spec.txt for all the juicy details. Key points:
 
-     - Authorities and caches publish individual descriptors (by
 
-       digest, by fingerprint, by "all", and by "tell me yours").
 
-     - Clients don't download or use the old directory anymore. Now they
 
-       download network-statuses from the directory authorities, and
 
-       fetch individual server descriptors as needed from mirrors.
 
-     - Clients don't download descriptors of non-running servers.
 
-     - Download descriptors by digest, not by fingerprint. Caches try to
 
-       download all listed digests from authorities; clients try to
 
-       download "best" digests from caches. This avoids partitioning
 
-       and isolating attacks better.
 
-     - Only upload a new server descriptor when options change, 18
 
-       hours have passed, uptime is reset, or bandwidth changes a lot.
 
-     - Directory authorities silently throw away new descriptors that
 
-       haven't changed much if the timestamps are similar. We do this to
 
-       tolerate older Tor servers that upload a new descriptor every 15
 
-       minutes. (It seemed like a good idea at the time.)
 
-     - Clients choose directory servers from the network status lists,
 
-       not from their internal list of router descriptors. Now they can
 
-       go to caches directly rather than needing to go to authorities
 
-       to bootstrap the first set of descriptors.
 
-     - When picking a random directory, prefer non-authorities if any
 
-       are known.
 
-     - Add a new flag to network-status indicating whether the server
 
-       can answer v2 directory requests too.
 
-     - Directory mirrors now cache up to 16 unrecognized network-status
 
-       docs, so new directory authorities will be cached too.
 
-     - Stop parsing, storing, or using running-routers output (but
 
-       mirrors still cache and serve it).
 
-     - Clients consider a threshold of "versioning" directory authorities
 
-       before deciding whether to warn the user that he's obsolete.
 
-     - Authorities publish separate sorted lists of recommended versions
 
-       for clients and for servers.
 
-     - Change DirServers config line to note which dirs are v1 authorities.
 
-     - Put nicknames on the DirServer line, so we can refer to them
 
-       without requiring all our users to memorize their IP addresses.
 
-     - Remove option when getting directory cache to see whether they
 
-       support running-routers; they all do now. Replace it with one
 
-       to see whether caches support v2 stuff.
 
-     - Stop listing down or invalid nodes in the v1 directory. This
 
-       reduces its bulk by about 1/3, and reduces load on mirrors.
 
-     - Mirrors no longer cache the v1 directory as often.
 
-     - If we as a directory mirror don't know of any v1 directory
 
-       authorities, then don't try to cache any v1 directories.
 
-   o Other directory improvements:
 
-     - Add lefkada.eecs.harvard.edu and tor.dizum.com as fourth and
 
-       fifth authoritative directory servers.
 
-     - Directory authorities no longer require an open connection from
 
-       a server to consider him "reachable". We need this change because
 
-       when we add new directory authorities, old servers won't know not
 
-       to hang up on them.
 
-     - Dir authorities now do their own external reachability testing
 
-       of each server, and only list as running the ones they found to
 
-       be reachable. We also send back warnings to the server's logs if
 
-       it uploads a descriptor that we already believe is unreachable.
 
-     - Spread the directory authorities' reachability testing over the
 
-       entire testing interval, so we don't try to do 500 TLS's at once
 
-       every 20 minutes.
 
-     - Make the "stable" router flag in network-status be the median of
 
-       the uptimes of running valid servers, and make clients pay
 
-       attention to the network-status flags. Thus the cutoff adapts
 
-       to the stability of the network as a whole, making IRC, IM, etc
 
-       connections more reliable.
 
-     - Make the v2 dir's "Fast" flag based on relative capacity, just
 
-       like "Stable" is based on median uptime. Name everything in the
 
-       top 7/8 Fast, and only the top 1/2 gets to be a Guard.
 
-     - Retry directory requests if we fail to get an answer we like
 
-       from a given dirserver (we were retrying before, but only if
 
-       we fail to connect).
 
-     - Return a robots.txt on our dirport to discourage google indexing.
 
-   o Controller protocol improvements:
 
-     - Revised controller protocol (version 1) that uses ascii rather
 
-       than binary: tor/doc/control-spec.txt. Add supporting libraries
 
-       in python and java and c# so you can use the controller from your
 
-       applications without caring how our protocol works.
 
-     - Allow the DEBUG controller event to work again. Mark certain log
 
-       entries as "don't tell this to controllers", so we avoid cycles.
 
-     - New controller function "getinfo accounting", to ask how
 
-       many bytes we've used in this time period.
 
-     - Add a "resetconf" command so you can set config options like
 
-       AllowUnverifiedNodes and LongLivedPorts to "". Also, if you give
 
-       a config option in the torrc with no value, then it clears it
 
-       entirely (rather than setting it to its default).
 
-     - Add a "getinfo config-file" to tell us where torrc is. Also
 
-       expose guard nodes, config options/names.
 
-     - Add a "quit" command (when when using the controller manually).
 
-     - Add a new signal "newnym" to "change pseudonyms" -- that is, to
 
-       stop using any currently-dirty circuits for new streams, so we
 
-       don't link new actions to old actions. This also occurs on HUP
 
-       or "signal reload".
 
-     - If we would close a stream early (e.g. it asks for a .exit that
 
-       we know would refuse it) but the LeaveStreamsUnattached config
 
-       option is set by the controller, then don't close it.
 
-     - Add a new controller event type "authdir_newdescs" that allows
 
-       controllers to get all server descriptors that were uploaded to
 
-       a router in its role as directory authority.
 
-     - New controller option "getinfo desc/all-recent" to fetch the
 
-       latest server descriptor for every router that Tor knows about.
 
-     - Fix the controller's "attachstream 0" command to treat conn like
 
-       it just connected, doing address remapping, handling .exit and
 
-       .onion idioms, and so on. Now we're more uniform in making sure
 
-       that the controller hears about new and closing connections.
 
-     - Permit transitioning from ORPort==0 to ORPort!=0, and back, from
 
-       the controller. Also, rotate dns and cpu workers if the controller
 
-       changes options that will affect them; and initialize the dns
 
-       worker cache tree whether or not we start out as a server.
 
-     - Add a new circuit purpose 'controller' to let the controller ask
 
-       for a circuit that Tor won't try to use. Extend the "extendcircuit"
 
-       controller command to let you specify the purpose if you're starting
 
-       a new circuit.  Add a new "setcircuitpurpose" controller command to
 
-       let you change a circuit's purpose after it's been created.
 
-     - Let the controller ask for "getinfo dir/server/foo" so it can ask
 
-       directly rather than connecting to the dir port. "getinfo
 
-       dir/status/foo" also works, but currently only if your DirPort
 
-       is enabled.
 
-     - Let the controller tell us about certain router descriptors
 
-       that it doesn't want Tor to use in circuits. Implement
 
-       "setrouterpurpose" and modify "+postdescriptor" to do this.
 
-     - If the controller's *setconf commands fail, collect an error
 
-       message in a string and hand it back to the controller -- don't
 
-       just tell them to go read their logs.
 
-   o Scalability, resource management, and performance:
 
-     - Fix a major load balance bug: we were round-robin reading in 16 KB
 
-       chunks, and servers with bandwidthrate of 20 KB, while downloading
 
-       a 600 KB directory, would starve their other connections. Now we
 
-       try to be a bit more fair.
 
-     - Be more conservative about whether to advertise our DirPort.
 
-       The main change is to not advertise if we're running at capacity
 
-       and either a) we could hibernate ever or b) our capacity is low
 
-       and we're using a default DirPort.
 
-     - We weren't cannibalizing circuits correctly for
 
-       CIRCUIT_PURPOSE_C_ESTABLISH_REND and
 
-       CIRCUIT_PURPOSE_S_ESTABLISH_INTRO, so we were being forced to
 
-       build those from scratch. This should make hidden services faster.
 
-     - Predict required circuits better, with an eye toward making hidden
 
-       services faster on the service end.
 
-     - Compress exit policies even more: look for duplicate lines and
 
-       remove them.
 
-     - Generate 18.0.0.0/8 address policy format in descs when we can;
 
-       warn when the mask is not reducible to a bit-prefix.
 
-     - There used to be two ways to specify your listening ports in a
 
-       server descriptor: on the "router" line and with a separate "ports"
 
-       line. Remove support for the "ports" line.
 
-     - Reduce memory requirements in our structs by changing the order
 
-       of fields. Replace balanced trees with hash tables. Inline
 
-       bottleneck smartlist functions. Add a "Map from digest to void*"
 
-       abstraction so we can do less hex encoding/decoding, and use it
 
-       in router_get_by_digest(). Many other CPU and memory improvements.
 
-     - Allow tor_gzip_uncompress to extract as much as possible from
 
-       truncated compressed data. Try to extract as many
 
-       descriptors as possible from truncated http responses (when
 
-       purpose is DIR_PURPOSE_FETCH_ROUTERDESC).
 
-     - Make circ->onionskin a pointer, not a static array. moria2 was using
 
-       125000 circuit_t's after it had been up for a few weeks, which
 
-       translates to 20+ megs of wasted space.
 
-     - The private half of our EDH handshake keys are now chosen out
 
-       of 320 bits, not 1024 bits. (Suggested by Ian Goldberg.)
 
-     - Stop doing the complex voodoo overkill checking for insecure
 
-       Diffie-Hellman keys. Just check if it's in [2,p-2] and be happy.
 
-     - Do round-robin writes for TLS of at most 16 kB per write. This
 
-       might be more fair on loaded Tor servers.
 
-     - Do not use unaligned memory access on alpha, mips, or mipsel.
 
-       It *works*, but is very slow, so we treat them as if it doesn't.
 
-   o Other bugfixes and improvements:
 
-     - Start storing useful information to $DATADIR/state, so we can
 
-       remember things across invocations of Tor. Retain unrecognized
 
-       lines so we can be forward-compatible, and write a TorVersion line
 
-       so we can be backward-compatible.
 
-     - If ORPort is set, Address is not explicitly set, and our hostname
 
-       resolves to a private IP address, try to use an interface address
 
-       if it has a public address. Now Windows machines that think of
 
-       themselves as localhost can guess their address.
 
-     - Regenerate our local descriptor if it's dirty and we try to use
 
-       it locally (e.g. if it changes during reachability detection).
 
-       This was causing some Tor servers to keep publishing the same
 
-       initial descriptor forever.
 
-     - Tor servers with dynamic IP addresses were needing to wait 18
 
-       hours before they could start doing reachability testing using
 
-       the new IP address and ports. This is because they were using
 
-       the internal descriptor to learn what to test, yet they were only
 
-       rebuilding the descriptor once they decided they were reachable.
 
-     - It turns out we couldn't bootstrap a network since we added
 
-       reachability detection in 0.1.0.1-rc. Good thing the Tor network
 
-       has never gone down. Add an AssumeReachable config option to let
 
-       servers and authorities bootstrap. When we're trying to build a
 
-       high-uptime or high-bandwidth circuit but there aren't enough
 
-       suitable servers, try being less picky rather than simply failing.
 
-     - Newly bootstrapped Tor networks couldn't establish hidden service
 
-       circuits until they had nodes with high uptime. Be more tolerant.
 
-     - Really busy servers were keeping enough circuits open on stable
 
-       connections that they were wrapping around the circuit_id
 
-       space. (It's only two bytes.) This exposed a bug where we would
 
-       feel free to reuse a circuit_id even if it still exists but has
 
-       been marked for close. Try to fix this bug. Some bug remains.
 
-     - When we fail to bind or listen on an incoming or outgoing
 
-       socket, we now close it before refusing, rather than just
 
-       leaking it. (Thanks to Peter Palfrader for finding.)
 
-     - Fix a file descriptor leak in start_daemon().
 
-     - On Windows, you can't always reopen a port right after you've
 
-       closed it. So change retry_listeners() to only close and re-open
 
-       ports that have changed.
 
-     - Workaround a problem with some http proxies that refuse GET
 
-       requests that specify "Content-Length: 0". Reported by Adrian.
 
-     - Recover better from TCP connections to Tor servers that are
 
-       broken but don't tell you (it happens!); and rotate TLS
 
-       connections once a week.
 
-     - Fix a scary-looking but apparently harmless bug where circuits
 
-       would sometimes start out in state CIRCUIT_STATE_OR_WAIT at
 
-       servers, and never switch to state CIRCUIT_STATE_OPEN.
 
-     - Check for even more Windows version flags when writing the platform
 
-       string in server descriptors, and note any we don't recognize.
 
-     - Add reasons to DESTROY and RELAY_TRUNCATED cells, so clients can
 
-       get a better idea of why their circuits failed. Not used yet.
 
-     - Add TTLs to RESOLVED, CONNECTED, and END_REASON_EXITPOLICY cells.
 
-       We don't use them yet, but maybe one day our DNS resolver will be
 
-       able to discover them.
 
-     - Let people type "tor --install" as well as "tor -install" when they
 
-       want to make it an NT service.
 
-     - Looks like we were never delivering deflated (i.e. compressed)
 
-       running-routers lists, even when asked. Oops.
 
-     - We were leaking some memory every time the client changed IPs.
 
-     - Clean up more of the OpenSSL memory when exiting, so we can detect
 
-       memory leaks better.
 
-     - Never call free() on tor_malloc()d memory. This will help us
 
-       use dmalloc to detect memory leaks.
 
-     - Some Tor servers process billions of cells per day. These
 
-       statistics are now uint64_t's.
 
-     - Check [X-]Forwarded-For headers in HTTP requests when generating
 
-       log messages. This lets people run dirservers (and caches) behind
 
-       Apache but still know which IP addresses are causing warnings.
 
-     - Fix minor integer overflow in calculating when we expect to use up
 
-       our bandwidth allocation before hibernating.
 
-     - Lower the minimum required number of file descriptors to 1000,
 
-       so we can have some overhead for Valgrind on Linux, where the
 
-       default ulimit -n is 1024.
 
-     - Stop writing the "router.desc" file, ever. Nothing uses it anymore,
 
-       and its existence is confusing some users.
 
-   o Config option fixes:
 
-     - Add a new config option ExitPolicyRejectPrivate which defaults
 
-       to on. Now all exit policies will begin with rejecting private
 
-       addresses, unless the server operator explicitly turns it off.
 
-     - Bump the default bandwidthrate to 3 MB, and burst to 6 MB.
 
-     - Add new ReachableORAddresses and ReachableDirAddresses options
 
-       that understand address policies. FascistFirewall is now a synonym
 
-       for "ReachableORAddresses *:443", "ReachableDirAddresses *:80".
 
-     - Start calling it FooListenAddress rather than FooBindAddress,
 
-       since few of our users know what it means to bind an address
 
-       or port.
 
-     - If the user gave Tor an odd number of command-line arguments,
 
-       we were silently ignoring the last one. Now we complain and fail.
 
-       This wins the oldest-bug prize -- this bug has been present since
 
-       November 2002, as released in Tor 0.0.0.
 
-     - If you write "HiddenServicePort 6667 127.0.0.1 6668" in your
 
-       torrc rather than "HiddenServicePort 6667 127.0.0.1:6668",
 
-       it would silently ignore the 6668.
 
-     - If we get a linelist or linelist_s config option from the torrc,
 
-       e.g. ExitPolicy, and it has no value, warn and skip rather than
 
-       silently resetting it to its default.
 
-     - Setconf was appending items to linelists, not clearing them.
 
-     - Add MyFamily to torrc.sample in the server section, so operators
 
-       will be more likely to learn that it exists.
 
-     - Make ContactInfo mandatory for authoritative directory servers.
 
-     - MaxConn has been obsolete for a while now. Document the ConnLimit
 
-       config option, which is a *minimum* number of file descriptors
 
-       that must be available else Tor refuses to start.
 
-     - Get rid of IgnoreVersion undocumented config option, and make us
 
-       only warn, never exit, when we're running an obsolete version.
 
-     - Make MonthlyAccountingStart config option truly obsolete now.
 
-     - Correct the man page entry on TrackHostExitsExpire.
 
-     - Let directory authorities start even if they don't specify an
 
-       Address config option.
 
-     - Change "AllowUnverifiedNodes" to "AllowInvalidNodes", to
 
-       reflect the updated flags in our v2 dir protocol.
 
-   o Config option features:
 
-     - Add a new config option FastFirstHopPK (on by default) so clients
 
-       do a trivial crypto handshake for their first hop, since TLS has
 
-       already taken care of confidentiality and authentication.
 
-     - Let the user set ControlListenAddress in the torrc. This can be
 
-       dangerous, but there are some cases (like a secured LAN) where it
 
-       makes sense.
 
-     - New config options to help controllers: FetchServerDescriptors
 
-       and FetchHidServDescriptors for whether to fetch server
 
-       info and hidserv info or let the controller do it, and
 
-       PublishServerDescriptor and PublishHidServDescriptors.
 
-     - Also let the controller set the __AllDirActionsPrivate config
 
-       option if you want all directory fetches/publishes to happen via
 
-       Tor (it assumes your controller bootstraps your circuits).
 
-     - Add "HardwareAccel" config option: support for crypto hardware
 
-       accelerators via OpenSSL. Off by default, until we find somebody
 
-       smart who can test it for us. (It appears to produce seg faults
 
-       in at least some cases.)
 
-     - New config option "AuthDirRejectUnlisted" for directory authorities
 
-       as a panic button: if we get flooded with unusable servers we can
 
-       revert to only listing servers in the approved-routers file.
 
-     - Directory authorities can now reject/invalidate by key and IP,
 
-       with the config options "AuthDirInvalid" and "AuthDirReject", or
 
-       by marking a fingerprint as "!reject" or "!invalid" (as its
 
-       nickname) in the approved-routers file. This is useful since
 
-       currently we automatically list servers as running and usable
 
-       even if we know they're jerks.
 
-     - Add a new config option TestSocks so people can see whether their
 
-       applications are using socks4, socks4a, socks5-with-ip, or
 
-       socks5-with-fqdn. This way they don't have to keep mucking
 
-       with tcpdump and wondering if something got cached somewhere.
 
-     - Add "private:*" as an alias in configuration for policies. Now
 
-       you can simplify your exit policy rather than needing to list
 
-       every single internal or nonroutable network space.
 
-     - Accept "private:*" in routerdesc exit policies; not generated yet
 
-       because older Tors do not understand it.
 
-     - Add configuration option "V1AuthoritativeDirectory 1" which
 
-       moria1, moria2, and tor26 have set.
 
-     - Implement an option, VirtualAddrMask, to set which addresses
 
-       get handed out in response to mapaddress requests. This works
 
-       around a bug in tsocks where 127.0.0.0/8 is never socksified.
 
-     - Add a new config option FetchUselessDescriptors, off by default,
 
-       for when you plan to run "exitlist" on your client and you want
 
-       to know about even the non-running descriptors.
 
-     - SocksTimeout: How long do we let a socks connection wait
 
-       unattached before we fail it?
 
-     - CircuitBuildTimeout: Cull non-open circuits that were born
 
-       at least this many seconds ago.
 
-     - CircuitIdleTimeout: Cull open clean circuits that were born
 
-       at least this many seconds ago.
 
-     - New config option SafeSocks to reject all application connections
 
-       using unsafe socks protocols. Defaults to off.
 
-   o Improved and clearer log messages:
 
-     - Reduce clutter in server logs. We're going to try to make
 
-       them actually usable now. New config option ProtocolWarnings that
 
-       lets you hear about how _other Tors_ are breaking the protocol. Off
 
-       by default.
 
-     - Divide log messages into logging domains. Once we put some sort
 
-       of interface on this, it will let people looking at more verbose
 
-       log levels specify the topics they want to hear more about.
 
-     - Log server fingerprint on startup, so new server operators don't
 
-       have to go hunting around their filesystem for it.
 
-     - Provide dire warnings to any users who set DirServer manually;
 
-       move it out of torrc.sample and into torrc.complete.
 
-     - Make the log message less scary when all the dirservers are
 
-       temporarily unreachable.
 
-     - When tor_socketpair() fails in Windows, give a reasonable
 
-       Windows-style errno back.
 
-     - Improve tor_gettimeofday() granularity on windows.
 
-     - We were printing the number of idle dns workers incorrectly when
 
-       culling them.
 
-     - Handle duplicate lines in approved-routers files without warning.
 
-     - We were whining about using socks4 or socks5-with-local-lookup
 
-       even when it's an IP address in the "virtual" range we designed
 
-       exactly for this case.
 
-     - Check for named servers when looking them up by nickname;
 
-       warn when we're calling a non-named server by its nickname;
 
-       don't warn twice about the same name.
 
-     - Downgrade the dirserver log messages when whining about
 
-       unreachability.
 
-     - Correct "your server is reachable" log entries to indicate that
 
-       it was self-testing that told us so.
 
-     - If we're trying to be a Tor server and running Windows 95/98/ME
 
-       as a server, explain that we'll likely crash.
 
-     - Provide a more useful warn message when our onion queue gets full:
 
-       the CPU is too slow or the exit policy is too liberal.
 
-     - Don't warn when we receive a 503 from a dirserver/cache -- this
 
-       will pave the way for them being able to refuse if they're busy.
 
-     - When we fail to bind a listener, try to provide a more useful
 
-       log message: e.g., "Is Tor already running?"
 
-     - Only start testing reachability once we've established a
 
-       circuit. This will make startup on dir authorities less noisy.
 
-     - Don't try to upload hidden service descriptors until we have
 
-       established a circuit.
 
-     - Tor didn't warn when it failed to open a log file.
 
-     - Warn when listening on a public address for socks. We suspect a
 
-       lot of people are setting themselves up as open socks proxies,
 
-       and they have no idea that jerks on the Internet are using them,
 
-       since they simply proxy the traffic into the Tor network.
 
-     - Give a useful message when people run Tor as the wrong user,
 
-       rather than telling them to start chowning random directories.
 
-     - Fix a harmless bug that was causing Tor servers to log
 
-       "Got an end because of misc error, but we're not an AP. Closing."
 
-     - Fix wrong log message when you add a "HiddenServiceNodes" config
 
-       line without any HiddenServiceDir line (reported by Chris Thomas).
 
-     - Directory authorities now stop whining so loudly about bad
 
-       descriptors that they fetch from other dirservers. So when there's
 
-       a log complaint, it's for sure from a freshly uploaded descriptor.
 
-     - When logging via syslog, include the pid whenever we provide
 
-       a log entry. Suggested by Todd Fries.
 
-     - When we're shutting down and we do something like try to post a
 
-       server descriptor or rendezvous descriptor, don't complain that
 
-       we seem to be unreachable. Of course we are, we're shutting down.
 
-     - Change log line for unreachability to explicitly suggest /etc/hosts
 
-       as the culprit. Also make it clearer what IP address and ports we're
 
-       testing for reachability.
 
-     - Put quotes around user-supplied strings when logging so users are
 
-       more likely to realize if they add bad characters (like quotes)
 
-       to the torrc.
 
-     - NT service patch from Matt Edman to improve error messages on Win32.
 
- Changes in version 0.1.0.17 - 2006-02-17
 
-   o Crash bugfixes on 0.1.0.x:
 
-     - When servers with a non-zero DirPort came out of hibernation,
 
-       sometimes they would trigger an assert.
 
-   o Other important bugfixes:
 
-     - On platforms that don't have getrlimit (like Windows), we were
 
-       artificially constraining ourselves to a max of 1024
 
-       connections. Now just assume that we can handle as many as 15000
 
-       connections. Hopefully this won't cause other problems.
 
-   o Backported features:
 
-     - When we're a server, a client asks for an old-style directory,
 
-       and our write bucket is empty, don't give it to him. This way
 
-       small servers can continue to serve the directory *sometimes*,
 
-       without getting overloaded.
 
-     - Whenever you get a 503 in response to a directory fetch, try
 
-       once more. This will become important once servers start sending
 
-       503's whenever they feel busy.
 
-     - Fetch a new directory every 120 minutes, not every 40 minutes.
 
-       Now that we have hundreds of thousands of users running the old
 
-       directory algorithm, it's starting to hurt a lot.
 
-     - Bump up the period for forcing a hidden service descriptor upload
 
-       from 20 minutes to 1 hour.
 
- Changes in version 0.1.0.16 - 2006-01-02
 
-   o Crash bugfixes on 0.1.0.x:
 
-     - On Windows, build with a libevent patch from "I-M Weasel" to avoid
 
-       corrupting the heap, losing FDs, or crashing when we need to resize
 
-       the fd_sets. (This affects the Win32 binaries, not Tor's sources.)
 
-     - It turns out sparc64 platforms crash on unaligned memory access
 
-       too -- so detect and avoid this.
 
-     - Handle truncated compressed data correctly (by detecting it and
 
-       giving an error).
 
-     - Fix possible-but-unlikely free(NULL) in control.c.
 
-     - When we were closing connections, there was a rare case that
 
-       stomped on memory, triggering seg faults and asserts.
 
-     - Avoid potential infinite recursion when building a descriptor. (We
 
-       don't know that it ever happened, but better to fix it anyway.)
 
-     - We were neglecting to unlink marked circuits from soon-to-close OR
 
-       connections, which caused some rare scribbling on freed memory.
 
-     - Fix a memory stomping race bug when closing the joining point of two
 
-       rendezvous circuits.
 
-     - Fix an assert in time parsing found by Steven Murdoch.
 
-   o Other bugfixes on 0.1.0.x:
 
-     - When we're doing reachability testing, provide more useful log
 
-       messages so the operator knows what to expect.
 
-     - Do not check whether DirPort is reachable when we are suppressing
 
-       advertising it because of hibernation.
 
-     - When building with -static or on Solaris, we sometimes needed -ldl.
 
-     - One of the dirservers (tor26) changed its IP address.
 
-     - When we're deciding whether a stream has enough circuits around
 
-       that can handle it, count the freshly dirty ones and not the ones
 
-       that are so dirty they won't be able to handle it.
 
-     - When we're expiring old circuits, we had a logic error that caused
 
-       us to close new rendezvous circuits rather than old ones.
 
-     - Give a more helpful log message when you try to change ORPort via
 
-       the controller: you should upgrade Tor if you want that to work.
 
-     - We were failing to parse Tor versions that start with "Tor ".
 
-     - Tolerate faulty streams better: when a stream fails for reason
 
-       exitpolicy, stop assuming that the router is lying about his exit
 
-       policy. When a stream fails for reason misc, allow it to retry just
 
-       as if it was resolvefailed. When a stream has failed three times,
 
-       reset its failure count so we can try again and get all three tries.
 
- Changes in version 0.1.0.15 - 2005-09-23
 
-   o Bugfixes on 0.1.0.x:
 
-     - Reject ports 465 and 587 (spam targets) in default exit policy.
 
-     - Don't crash when we don't have any spare file descriptors and we
 
-       try to spawn a dns or cpu worker.
 
-     - Get rid of IgnoreVersion undocumented config option, and make us
 
-       only warn, never exit, when we're running an obsolete version.
 
-     - Don't try to print a null string when your server finds itself to
 
-       be unreachable and the Address config option is empty.
 
-     - Make the numbers in read-history and write-history into uint64s,
 
-       so they don't overflow and publish negatives in the descriptor.
 
-     - Fix a minor memory leak in smartlist_string_remove().
 
-     - We were only allowing ourselves to upload a server descriptor at
 
-       most every 20 minutes, even if it changed earlier than that.
 
-     - Clean up log entries that pointed to old URLs.
 
- Changes in version 0.1.0.14 - 2005-08-08
 
-   o Bugfixes on 0.1.0.x:
 
-       - Fix the other half of the bug with crypto handshakes
 
-         (CVE-2005-2643).
 
-       - Fix an assert trigger if you send a 'signal term' via the
 
-         controller when it's listening for 'event info' messages.
 
- Changes in version 0.1.0.13 - 2005-08-04
 
-   o Bugfixes on 0.1.0.x:
 
-     - Fix a critical bug in the security of our crypto handshakes.
 
-     - Fix a size_t underflow in smartlist_join_strings2() that made
 
-       it do bad things when you hand it an empty smartlist.
 
-     - Fix Windows installer to ship Tor license (thanks to Aphex for
 
-       pointing out this oversight) and put a link to the doc directory
 
-       in the start menu.
 
-     - Explicitly set no-unaligned-access for sparc: it turns out the
 
-       new gcc's let you compile broken code, but that doesn't make it
 
-       not-broken.
 
- Changes in version 0.1.0.12 - 2005-07-18
 
-   o New directory servers:
 
-       - tor26 has changed IP address.
 
-   o Bugfixes on 0.1.0.x:
 
-     - Fix a possible double-free in tor_gzip_uncompress().
 
-     - When --disable-threads is set, do not search for or link against
 
-       pthreads libraries.
 
-     - Don't trigger an assert if an authoritative directory server
 
-       claims its dirport is 0.
 
-     - Fix bug with removing Tor as an NT service: some people were
 
-       getting "The service did not return an error." Thanks to Matt
 
-       Edman for the fix.
 
- Changes in version 0.1.0.11 - 2005-06-30
 
-   o Bugfixes on 0.1.0.x:
 
-     - Fix major security bug: servers were disregarding their
 
-       exit policies if clients behaved unexpectedly.
 
-     - Make OS X init script check for missing argument, so we don't
 
-       confuse users who invoke it incorrectly.
 
-     - Fix a seg fault in "tor --hash-password foo".
 
-     - The MAPADDRESS control command was broken.
 
- Changes in version 0.1.0.10 - 2005-06-14
 
-   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.
 
-     - Allow seeding the RNG on Win32 even when you're not running as
 
-       Administrator. If seeding the RNG on Win32 fails, quit.
 
-   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
 
-       (CVE-2005-2050).
 
-     - 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 (!), and on solaris since it has other
 
-         threading issues.
 
-     - 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.
 
-     - Fix possible memory leak in tor_lookup_hostname(). (Thanks to
 
-       Adam Langley.)
 
-     - 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.
 
-   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 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.
 
-   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).
 
-     - Require servers that use the default dirservers to have public IP
 
-       addresses. We have too many servers that are configured with private
 
-       IPs and their admins never notice the log entries complaining that
 
-       their descriptors are being rejected.
 
-   o 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.
 
-     - Reenable the part of the code that tries to flush as soon as an
 
-       OR outbuf has a full TLS record available. Perhaps this will make
 
-       OR outbufs not grow as huge except in rare cases, thus saving lots
 
-       of CPU time plus memory.
 
-     - Improve performance for dirservers: stop re-parsing the whole
 
-       directory every time you regenerate it.
 
-     - 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.
 
-     - Reject malformed .onion addresses rather then passing them on as
 
-       normal web requests.
 
-   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.
 
-   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.
 
-     - 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.
 
-     - 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.
 
-     - Initialize libevent later in the startup process, so the logs are
 
-       already established by the time we start logging libevent warns.
 
-     - Use correct errno on win32 if libevent fails.
 
-     - Check and warn about known-bad/slow libevent versions.
 
-     - Stop warning about sigpipes in the logs. We're going to
 
-       pretend that getting these occassionally is normal and fine.
 
-   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
 
-       have lots of capacity but haven't noticed it yet.
 
-     - New experimental script tor/contrib/PathDemo.py (needs more work)
 
-       that uses the controller interface to let you choose whole paths
 
-       via addresses like
 
-       "<hostname>.<path,separated by dots>.<length of path>.path"
 
-     - New contributed script "privoxy-tor-toggle" to toggle whether
 
-       Privoxy uses Tor. Seems to be configured for Debian by default.
 
-     - Have torctl.in/tor.sh.in check for location of su binary (needed
 
-       on FreeBSD)
 
-   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.
 
-     - 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.
 
-     - Pay more attention to the ClientOnly config option.
 
-     - Resolve OS X installer bugs: stop claiming to be 0.0.9.2 in certain
 
-       installer screens; and don't put stuff into StartupItems unless
 
-       the user asks you to.
 
-   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.
 
-     - 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.
 
-     - 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.)
 
-     - Add OSX uninstall instructions. An actual uninstall script will
 
-       come later.
 
-     - Add "opt hibernating 1" to server descriptor to make it clearer
 
-       whether the server is hibernating.
 
- Changes in version 0.0.9.10 - 2005-06-16
 
-   o Bugfixes on 0.0.9.x (backported from 0.1.0.10):
 
-     - 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
 
-       (CVE-2005-2050).
 
- Changes in version 0.0.9.9 - 2005-04-23
 
-   o Bugfixes on 0.0.9.x:
 
-     - If unofficial Tor clients connect and send weird TLS certs, our
 
-       Tor server triggers an assert. This release contains a minimal
 
-       backport from the broader fix that we put into 0.1.0.4-rc.
 
- Changes in version 0.0.9.8 - 2005-04-07
 
-   o Bugfixes on 0.0.9.x:
 
-     - We have a bug that I haven't found yet. Sometimes, very rarely,
 
-       cpuworkers get stuck in the 'busy' state, even though the cpuworker
 
-       thinks of itself as idle. This meant that no new circuits ever got
 
-       established. Here's a workaround to kill any cpuworker that's been
 
-       busy for more than 100 seconds.
 
- Changes in version 0.0.9.7 - 2005-04-01
 
-   o Bugfixes on 0.0.9.x:
 
-     - Fix another race crash bug (thanks to Glenn Fink for reporting).
 
-     - Compare identity to identity, not to nickname, when extending to
 
-       a router not already in the directory. This was preventing us from
 
-       extending to unknown routers. Oops.
 
-     - Make sure to create OS X Tor user in <500 range, so we aren't
 
-       creating actual system users.
 
-     - Note where connection-that-hasn't-sent-end was marked, and fix
 
-       a few really loud instances of this harmless bug (it's fixed more
 
-       in 0.1.0.x).
 
- Changes in version 0.0.9.6 - 2005-03-24
 
-   o Bugfixes on 0.0.9.x (crashes and asserts):
 
-     - Add new end stream reasons to maintainance branch. Fix bug where
 
-       reason (8) could trigger an assert.  Prevent bug from recurring.
 
-     - Apparently win32 stat wants paths to not end with a slash.
 
-     - Fix assert triggers in assert_cpath_layer_ok(), where we were
 
-       blowing away the circuit that conn->cpath_layer points to, then
 
-       checking to see if the circ is well-formed. Backport check to make
 
-       sure we dont use the cpath on a closed connection.
 
-     - Prevent circuit_resume_edge_reading_helper() from trying to package
 
-       inbufs for marked-for-close streams.
 
-     - Don't crash on hup if your options->address has become unresolvable.
 
-     - Some systems (like OS X) sometimes accept() a connection and tell
 
-       you the remote host is 0.0.0.0:0. If this happens, due to some
 
-       other mis-features, we get confused; so refuse the conn for now.
 
-   o Bugfixes on 0.0.9.x (other):
 
-     - Fix harmless but scary "Unrecognized content encoding" warn message.
 
-     - Add new stream error reason: TORPROTOCOL reason means "you are not
 
-       speaking a version of Tor I understand; say bye-bye to your stream."
 
-     - Be willing to cache directories from up to ROUTER_MAX_AGE seconds
 
-       into the future, now that we are more tolerant of skew. This
 
-       resolves a bug where a Tor server would refuse to cache a directory
 
-       because all the directories it gets are too far in the future;
 
-       yet the Tor server never logs any complaints about clock skew.
 
-     - Mac packaging magic: make man pages useable, and do not overwrite
 
-       existing torrc files.
 
-     - Make OS X log happily to /var/log/tor/tor.log
 
- Changes in version 0.0.9.5 - 2005-02-22
 
-   o Bugfixes on 0.0.9.x:
 
-     - Fix an assert race at exit nodes when resolve requests fail.
 
-     - Stop picking unverified dir mirrors--it only leads to misery.
 
-     - Patch from Matt Edman to make NT services work better. Service
 
-       support is still not compiled into the executable by default.
 
-     - Patch from Dmitri Bely so the Tor service runs better under
 
-       the win32 SYSTEM account.
 
-     - Make tor-resolve actually work (?) on Win32.
 
-     - Fix a sign bug when getrlimit claims to have 4+ billion
 
-       file descriptors available.
 
-     - Stop refusing to start when bandwidthburst == bandwidthrate.
 
-     - When create cells have been on the onion queue more than five
 
-       seconds, just send back a destroy and take them off the list.
 
- Changes in version 0.0.9.4 - 2005-02-03
 
-   o Bugfixes on 0.0.9:
 
-     - Fix an assert bug that took down most of our servers: when
 
-       a server claims to have 1 GB of bandwidthburst, don't
 
-       freak out.
 
-     - Don't crash as badly if we have spawned the max allowed number
 
-       of dnsworkers, or we're out of file descriptors.
 
-     - Block more file-sharing ports in the default exit policy.
 
-     - MaxConn is now automatically set to the hard limit of max
 
-       file descriptors we're allowed (ulimit -n), minus a few for
 
-       logs, etc.
 
-     - Give a clearer message when servers need to raise their
 
-       ulimit -n when they start running out of file descriptors.
 
-     - SGI Compatibility patches from Jan Schaumann.
 
-     - Tolerate a corrupt cached directory better.
 
-     - When a dirserver hasn't approved your server, list which one.
 
-     - Go into soft hibernation after 95% of the bandwidth is used,
 
-       not 99%. This is especially important for daily hibernators who
 
-       have a small accounting max. Hopefully it will result in fewer
 
-       cut connections when the hard hibernation starts.
 
-     - Load-balance better when using servers that claim more than
 
-       800kB/s of capacity.
 
-     - Make NT services work (experimental, only used if compiled in).
 
- Changes in version 0.0.9.3 - 2005-01-21
 
-   o Bugfixes on 0.0.9:
 
-     - Backport the cpu use fixes from main branch, so busy servers won't
 
-       need as much processor time.
 
-     - Work better when we go offline and then come back, or when we
 
-       run Tor at boot before the network is up. We do this by
 
-       optimistically trying to fetch a new directory whenever an
 
-       application request comes in and we think we're offline -- the
 
-       human is hopefully a good measure of when the network is back.
 
-     - Backport some minimal hidserv bugfixes: keep rend circuits open as
 
-       long as you keep using them; actually publish hidserv descriptors
 
-       shortly after they change, rather than waiting 20-40 minutes.
 
-     - Enable Mac startup script by default.
 
-     - Fix duplicate dns_cancel_pending_resolve reported by Giorgos Pallas.
 
-     - When you update AllowUnverifiedNodes or FirewallPorts via the
 
-       controller's setconf feature, we were always appending, never
 
-       resetting.
 
-     - When you update HiddenServiceDir via setconf, it was screwing up
 
-       the order of reading the lines, making it fail.
 
-     - Do not rewrite a cached directory back to the cache; otherwise we
 
-       will think it is recent and not fetch a newer one on startup.
 
-     - Workaround for webservers that lie about Content-Encoding: Tor
 
-       now tries to autodetect compressed directories and compression
 
-       itself. This lets us Proxypass dir fetches through apache.
 
- Changes in version 0.0.9.2 - 2005-01-04
 
-   o Bugfixes on 0.0.9 (crashes and asserts):
 
-     - Fix an assert on startup when the disk is full and you're logging
 
-       to a file.
 
-     - If you do socks4 with an IP of 0.0.0.x but *don't* provide a socks4a
 
-       style address, then we'd crash.
 
-     - Fix an assert trigger when the running-routers string we get from
 
-       a dirserver is broken.
 
-     - Make worker threads start and run on win32. Now win32 servers
 
-       may work better.
 
-     - Bandaid (not actually fix, but now it doesn't crash) an assert
 
-       where the dns worker dies mysteriously and the main Tor process
 
-       doesn't remember anything about the address it was resolving.
 
-   o Bugfixes on 0.0.9 (Win32):
 
-     - Workaround for brain-damaged __FILE__ handling on MSVC: keep Nick's
 
-       name out of the warning/assert messages.
 
-     - Fix a superficial "unhandled error on read" bug on win32.
 
-     - The win32 installer no longer requires a click-through for our
 
-       license, since our Free Software license grants rights but does not
 
-       take any away.
 
-     - Win32: When connecting to a dirserver fails, try another one
 
-       immediately. (This was already working for non-win32 Tors.)
 
-     - Stop trying to parse $HOME on win32 when hunting for default
 
-       DataDirectory.
 
-     - Make tor-resolve.c work on win32 by calling network_init().
 
-   o Bugfixes on 0.0.9 (other):
 
-     - Make 0.0.9.x build on Solaris again.
 
-     - Due to a fencepost error, we were blowing away the \n when reporting
 
-       confvalue items in the controller. So asking for multiple config
 
-       values at once couldn't work.
 
-     - When listing circuits that are pending on an opening OR connection,
 
-       if we're an OR we were listing circuits that *end* at us as
 
-       being pending on every listener, dns/cpu worker, etc. Stop that.
 
-     - Dirservers were failing to create 'running-routers' or 'directory'
 
-       strings if we had more than some threshold of routers. Fix them so
 
-       they can handle any number of routers.
 
-     - Fix a superficial "Duplicate mark for close" bug.
 
-     - Stop checking for clock skew for OR connections, even for servers.
 
-     - Fix a fencepost error that was chopping off the last letter of any
 
-       nickname that is the maximum allowed nickname length.
 
-     - Update URLs in log messages so they point to the new website.
 
-     - Fix a potential problem in mangling server private keys while
 
-       writing to disk (not triggered yet, as far as we know).
 
-     - Include the licenses for other free software we include in Tor,
 
-       now that we're shipping binary distributions more regularly.
 
- Changes in version 0.0.9.1 - 2004-12-15
 
-   o Bugfixes on 0.0.9:
 
-     - Make hibernation actually work.
 
-     - Make HashedControlPassword config option work.
 
-     - When we're reporting event circuit status to a controller,
 
-       don't use the stream status code.
 
- Changes in version 0.0.9 - 2004-12-12
 
-   o Bugfixes on 0.0.8.1 (Crashes and asserts):
 
-     - Catch and ignore SIGXFSZ signals when log files exceed 2GB; our
 
-       write() call will fail and we handle it there.
 
-     - When we run out of disk space, or other log writing error, don't
 
-       crash. Just stop logging to that log and continue.
 
-     - Fix isspace() and friends so they still make Solaris happy
 
-       but also so they don't trigger asserts on win32.
 
-     - Fix assert failure on malformed socks4a requests.
 
-     - Fix an assert bug where a hidden service provider would fail if
 
-       the first hop of his rendezvous circuit was down.
 
-     - Better handling of size_t vs int, so we're more robust on 64
 
-       bit platforms.
 
-   o Bugfixes on 0.0.8.1 (Win32):
 
-     - Make windows sockets actually non-blocking (oops), and handle
 
-       win32 socket errors better.
 
-     - Fix parse_iso_time on platforms without strptime (eg win32).
 
-     - win32: when being multithreaded, leave parent fdarray open.
 
-     - Better handling of winsock includes on non-MSV win32 compilers.
 
-     - Change our file IO stuff (especially wrt OpenSSL) so win32 is
 
-       happier.
 
-     - Make unit tests work on win32.
 
-   o Bugfixes on 0.0.8.1 (Path selection and streams):
 
-     - Calculate timeout for waiting for a connected cell from the time
 
-       we sent the begin cell, not from the time the stream started. If
 
-       it took a long time to establish the circuit, we would time out
 
-       right after sending the begin cell.
 
-     - Fix router_compare_addr_to_addr_policy: it was not treating a port
 
-       of * as always matching, so we were picking reject *:* nodes as
 
-       exit nodes too. Oops.
 
-     - When read() failed on a stream, we would close it without sending
 
-       back an end. So 'connection refused' would simply be ignored and
 
-       the user would get no response.
 
-     - Stop a sigpipe: when an 'end' cell races with eof from the app,
 
-       we shouldn't hold-open-until-flush if the eof arrived first.
 
-     - Let resolve conns retry/expire also, rather than sticking around
 
-       forever.
 
-     - Fix more dns related bugs: send back resolve_failed and end cells
 
-       more reliably when the resolve fails, rather than closing the
 
-       circuit and then trying to send the cell. Also attach dummy resolve
 
-       connections to a circuit *before* calling dns_resolve(), to fix
 
-       a bug where cached answers would never be sent in RESOLVED cells.
 
-   o Bugfixes on 0.0.8.1 (Circuits):
 
-     - Finally fix a bug that's been plaguing us for a year:
 
-       With high load, circuit package window was reaching 0. Whenever
 
-       we got a circuit-level sendme, we were reading a lot on each
 
-       socket, but only writing out a bit. So we would eventually reach
 
-       eof. This would be noticed and acted on even when there were still
 
-       bytes sitting in the inbuf.
 
-     - Use identity comparison, not nickname comparison, to choose which
 
-       half of circuit-ID-space each side gets to use. This is needed
 
-       because sometimes we think of a router as a nickname, and sometimes
 
-       as a hex ID, and we can't predict what the other side will do.
 
-   o Bugfixes on 0.0.8.1 (Other):
 
-     - Fix a whole slew of memory leaks.
 
-     - Disallow NDEBUG. We don't ever want anybody to turn off debug.
 
-     - If we are using select, make sure we stay within FD_SETSIZE.
 
-     - When poll() is interrupted, we shouldn't believe the revents values.
 
-     - Add a FAST_SMARTLIST define to optionally inline smartlist_get
 
-       and smartlist_len, which are two major profiling offenders.
 
-     - If do_hup fails, actually notice.
 
-     - Flush the log file descriptor after we print "Tor opening log file",
 
-       so we don't see those messages days later.
 
-     - Hidden service operators now correctly handle version 1 style
 
-       INTRODUCE1 cells (nobody generates them still, so not a critical
 
-       bug).
 
-     - Handle more errnos from accept() without closing the listener.
 
-       Some OpenBSD machines were closing their listeners because
 
-       they ran out of file descriptors.
 
-     - Some people had wrapped their tor client/server in a script
 
-       that would restart it whenever it died. This did not play well
 
-       with our "shut down if your version is obsolete" code. Now people
 
-       don't fetch a new directory if their local cached version is
 
-       recent enough.
 
-     - Make our autogen.sh work on ksh as well as bash.
 
-     - Better torrc example lines for dirbindaddress and orbindaddress.
 
-     - Improved bounds checking on parsed ints (e.g. config options and
 
-       the ones we find in directories.)
 
-     - Stop using separate defaults for no-config-file and
 
-       empty-config-file. Now you have to explicitly turn off SocksPort,
 
-       if you don't want it open.
 
-     - We were starting to daemonize before we opened our logs, so if
 
-       there were any problems opening logs, we would complain to stderr,
 
-       which wouldn't work, and then mysteriously exit.
 
-     - If a verified OR connects to us before he's uploaded his descriptor,
 
-       or we verify him and hup but he still has the original TLS
 
-       connection, then conn->nickname is still set like he's unverified.
 
-   o Code security improvements, inspired by Ilja:
 
-     - tor_snprintf wrapper over snprintf with consistent (though not C99)
 
-       overflow behavior.
 
-     - Replace sprintf with tor_snprintf. (I think they were all safe, but
 
-       hey.)
 
-     - Replace strcpy/strncpy with strlcpy in more places.
 
-     - Avoid strcat; use tor_snprintf or strlcat instead.
 
-   o Features (circuits and streams):
 
-     - New circuit building strategy: keep a list of ports that we've
 
-       used in the past 6 hours, and always try to have 2 circuits open
 
-       or on the way that will handle each such port. Seed us with port
 
-       80 so web users won't complain that Tor is "slow to start up".
 
-     - Make kill -USR1 dump more useful stats about circuits.
 
-     - When warning about retrying or giving up, print the address, so
 
-       the user knows which one it's talking about.
 
-     - If you haven't used a clean circuit in an hour, throw it away,
 
-       just to be on the safe side. (This means after 6 hours a totally
 
-       unused Tor client will have no circuits open.)
 
-     - Support "foo.nickname.exit" addresses, to let Alice request the
 
-       address "foo" as viewed by exit node "nickname". Based on a patch
 
-       from Geoff Goodell.
 
-     - If your requested entry or exit node has advertised bandwidth 0,
 
-       pick it anyway.
 
-     - Be more greedy about filling up relay cells -- we try reading again
 
-       once we've processed the stuff we read, in case enough has arrived
 
-       to fill the last cell completely.
 
-     - Refuse application socks connections to port 0.
 
-     - Use only 0.0.9pre1 and later servers for resolve cells.
 
-   o Features (bandwidth):
 
-     - Hibernation: New config option "AccountingMax" lets you
 
-       set how many bytes per month (in each direction) you want to
 
-       allow your server to consume. Rather than spreading those
 
-       bytes out evenly over the month, we instead hibernate for some
 
-       of the month and pop up at a deterministic time, work until
 
-       the bytes are consumed, then hibernate again. Config option
 
-       "MonthlyAccountingStart" lets you specify which day of the month
 
-       your billing cycle starts on.
 
-     - Implement weekly/monthly/daily accounting: now you specify your
 
-       hibernation properties by
 
-       AccountingMax N bytes|KB|MB|GB|TB
 
-       AccountingStart day|week|month [day] HH:MM
 
-         Defaults to "month 1 0:00".
 
-     - Let bandwidth and interval config options be specified as 5 bytes,
 
-       kb, kilobytes, etc; and as seconds, minutes, hours, days, weeks.
 
-   o Features (directories):
 
-     - New "router-status" line in directory, to better bind each verified
 
-       nickname to its identity key.
 
-     - Clients can ask dirservers for /dir.z to get a compressed version
 
-       of the directory. Only works for servers running 0.0.9, of course.
 
-     - Make clients cache directories and use them to seed their router
 
-       lists at startup. This means clients have a datadir again.
 
-     - Respond to content-encoding headers by trying to uncompress as
 
-       appropriate.
 
-     - Clients and servers now fetch running-routers; cache
 
-       running-routers; compress running-routers; serve compressed
 
-       running-routers.z
 
-     - Make moria2 advertise a dirport of 80, so people behind firewalls
 
-       will be able to get a directory.
 
-     - Http proxy support
 
-       - Dirservers translate requests for http://%s:%d/x to /x
 
-       - You can specify "HttpProxy %s[:%d]" and all dir fetches will
 
-         be routed through this host.
 
-       - Clients ask for /tor/x rather than /x for new enough dirservers.
 
-         This way we can one day coexist peacefully with apache.
 
-       - Clients specify a "Host: %s%d" http header, to be compatible
 
-         with more proxies, and so running squid on an exit node can work.
 
-     - Protect dirservers from overzealous descriptor uploading -- wait
 
-       10 seconds after directory gets dirty, before regenerating.
 
-   o Features (packages and install):
 
-     - Add NSI installer contributed by J Doe.
 
-     - Apply NT service patch from Osamu Fujino. Still needs more work.
 
-     - Commit VC6 and VC7 workspace/project files.
 
-     - Commit a tor.spec for making RPM files, with help from jbash.
 
-     - Add contrib/torctl.in contributed by Glenn Fink.
 
-     - Make expand_filename handle ~ and ~username.
 
-     - Use autoconf to enable largefile support where necessary. Use
 
-       ftello where available, since ftell can fail at 2GB.
 
-     - Ship src/win32/ in the tarball, so people can use it to build.
 
-     - Make old win32 fall back to CWD if SHGetSpecialFolderLocation
 
-       is broken.
 
-   o Features (ui controller):
 
-     - Control interface: a separate program can now talk to your
 
-       client/server over a socket, and get/set config options, receive
 
-       notifications of circuits and streams starting/finishing/dying,
 
-       bandwidth used, etc. The next step is to get some GUIs working.
 
-       Let us know if you want to help out. See doc/control-spec.txt .
 
-     - Ship a contrib/tor-control.py as an example script to interact
 
-       with the control port.
 
-     - "tor --hash-password zzyxz" will output a salted password for
 
-       use in authenticating to the control interface.
 
-     - Implement the control-spec's SAVECONF command, to write your
 
-       configuration to torrc.
 
-     - Get cookie authentication for the controller closer to working.
 
-     - When set_conf changes our server descriptor, upload a new copy.
 
-       But don't upload it too often if there are frequent changes.
 
-   o Features (config and command-line):
 
-     - Deprecate unofficial config option abbreviations, and abbreviations
 
-       not on the command line.
 
-     - Configuration infrastructure support for warning on obsolete
 
-       options.
 
-     - Give a slightly more useful output for "tor -h".
 
-     - Break DirFetchPostPeriod into:
 
-       - DirFetchPeriod for fetching full directory,
 
-       - StatusFetchPeriod for fetching running-routers,
 
-       - DirPostPeriod for posting server descriptor,
 
-       - RendPostPeriod for posting hidden service descriptors.
 
-     - New log format in config:
 
-       "Log minsev[-maxsev] stdout|stderr|syslog" or
 
-       "Log minsev[-maxsev] file /var/foo"
 
-     - DirPolicy config option, to let people reject incoming addresses
 
-       from their dirserver.
 
-     - "tor --list-fingerprint" will list your identity key fingerprint
 
-       and then exit.
 
-     - Make tor --version --version dump the cvs Id of every file.
 
-     - New 'MyFamily nick1,...' config option for a server to
 
-       specify other servers that shouldn't be used in the same circuit
 
-       with it. Only believed if nick1 also specifies us.
 
-     - New 'NodeFamily nick1,nick2,...' config option for a client to
 
-       specify nodes that it doesn't want to use in the same circuit.
 
-     - New 'Redirectexit pattern address:port' config option for a
 
-       server to redirect exit connections, e.g. to a local squid.
 
-     - Add "pass" target for RedirectExit, to make it easier to break
 
-       out of a sequence of RedirectExit rules.
 
-     - Make the dirservers file obsolete.
 
-       - Include a dir-signing-key token in directories to tell the
 
-         parsing entity which key is being used to sign.
 
-       - Remove the built-in bulky default dirservers string.
 
-       - New config option "Dirserver %s:%d [fingerprint]", which can be
 
-         repeated as many times as needed. If no dirservers specified,
 
-         default to moria1,moria2,tor26.
 
-       - Make 'Routerfile' config option obsolete.
 
-     - Discourage people from setting their dirfetchpostperiod more often
 
-       than once per minute.
 
-   o Features (other):
 
-     - kill -USR2 now moves all logs to loglevel debug (kill -HUP to
 
-       get back to normal.)
 
-     - Accept *:706 (silc) in default exit policy.
 
-     - Implement new versioning format for post 0.1.
 
-     - Distinguish between TOR_TLS_CLOSE and TOR_TLS_ERROR, so we can
 
-       log more informatively.
 
-     - Check clock skew for verified servers, but allow unverified
 
-       servers and clients to have any clock skew.
 
-     - Make sure the hidden service descriptors are at a random offset
 
-       from each other, to hinder linkability.
 
-     - Clients now generate a TLS cert too, in preparation for having
 
-       them act more like real nodes.
 
-     - Add a pure-C tor-resolve implementation.
 
-     - Use getrlimit and friends to ensure we can reach MaxConn (currently
 
-       1024) file descriptors.
 
-     - Raise the max dns workers from 50 to 100.
 
- Changes in version 0.0.8.1 - 2004-10-13
 
-   o Bugfixes:
 
-     - Fix a seg fault that can be triggered remotely for Tor
 
-       clients/servers with an open dirport.
 
-     - Fix a rare assert trigger, where routerinfos for entries in
 
-       our cpath would expire while we're building the path.
 
-     - Fix a bug in OutboundBindAddress so it (hopefully) works.
 
-     - Fix a rare seg fault for people running hidden services on
 
-       intermittent connections.
 
-     - Fix a bug in parsing opt keywords with objects.
 
-     - Fix a stale pointer assert bug when a stream detaches and
 
-       reattaches.
 
-     - Fix a string format vulnerability (probably not exploitable)
 
-       in reporting stats locally.
 
-     - Fix an assert trigger: sometimes launching circuits can fail
 
-       immediately, e.g. because too many circuits have failed recently.
 
-     - Fix a compile warning on 64 bit platforms.
 
- Changes in version 0.0.8 - 2004-08-25
 
-   o Bugfixes:
 
-     - Made our unit tests compile again on OpenBSD 3.5, and tor
 
-       itself compile again on OpenBSD on a sparc64.
 
-     - We were neglecting milliseconds when logging on win32, so
 
-       everything appeared to happen at the beginning of each second.
 
-     - Check directory signature _before_ you decide whether you're
 
-       you're running an obsolete version and should exit.
 
-     - Check directory signature _before_ you parse the running-routers
 
-       list to decide who's running.
 
-     - Check return value of fclose while writing to disk, so we don't
 
-       end up with broken files when servers run out of disk space.
 
-     - Port it to SunOS 5.9 / Athena
 
-     - Fix two bugs in saving onion keys to disk when rotating, so
 
-       hopefully we'll get fewer people using old onion keys.
 
-     - Remove our mostly unused -- and broken -- hex_encode()
 
-       function. Use base16_encode() instead. (Thanks to Timo Lindfors
 
-       for pointing out this bug.)
 
-     - Only pick and establish intro points after we've gotten a
 
-       directory.
 
-     - Fix assert triggers: if the other side returns an address 0.0.0.0,
 
-       don't put it into the client dns cache.
 
-     - If a begin failed due to exit policy, but we believe the IP
 
-       address should have been allowed, switch that router to exitpolicy
 
-       reject *:* until we get our next directory.
 
-   o Protocol changes:
 
-     - 'Extend' relay cell payloads now include the digest of the
 
-       intended next hop's identity key. Now we can verify that we're
 
-       extending to the right router, and also extend to routers we
 
-       hadn't heard of before.
 
-   o Features:
 
-     - Tor nodes can now act as relays (with an advertised ORPort)
 
-       without being manually verified by the dirserver operators.
 
-       - Uploaded descriptors of unverified routers are now accepted
 
-         by the dirservers, and included in the directory.
 
-       - Verified routers are listed by nickname in the running-routers
 
-         list; unverified routers are listed as "$<fingerprint>".
 
-       - We now use hash-of-identity-key in most places rather than
 
-         nickname or addr:port, for improved security/flexibility.
 
-       - AllowUnverifiedNodes config option to let circuits choose no-name
 
-         routers in entry,middle,exit,introduction,rendezvous positions.
 
-         Allow middle and rendezvous positions by default.
 
-       - When picking unverified routers, skip those with low uptime and/or
 
-         low bandwidth, depending on what properties you care about.
 
-       - ClientOnly option for nodes that never want to become servers.
 
-     - Directory caching.
 
-       - "AuthoritativeDir 1" option for the official dirservers.
 
-       - Now other nodes (clients and servers) will cache the latest
 
-         directory they've pulled down.
 
-       - They can enable their DirPort to serve it to others.
 
-       - Clients will pull down a directory from any node with an open
 
-         DirPort, and check the signature/timestamp correctly.
 
-       - Authoritative dirservers now fetch directories from other
 
-         authdirservers, to stay better synced.
 
-       - Running-routers list tells who's down also, along with noting
 
-         if they're verified (listed by nickname) or unverified (listed
 
-         by hash-of-key).
 
-       - Allow dirservers to serve running-router list separately.
 
-         This isn't used yet.
 
-       - You can now fetch $DIRURL/running-routers to get just the
 
-         running-routers line, not the whole descriptor list. (But
 
-         clients don't use this yet.)
 
-     - Clients choose nodes proportional to advertised bandwidth.
 
-     - Clients avoid using nodes with low uptime as introduction points.
 
-     - Handle servers with dynamic IP addresses: don't just replace
 
-       options->Address with the resolved one at startup, and
 
-       detect our address right before we make a routerinfo each time.
 
-     - 'FascistFirewall' option to pick dirservers and ORs on specific
 
-       ports; plus 'FirewallPorts' config option to tell FascistFirewall
 
-       which ports are open. (Defaults to 80,443)
 
-     - Try other dirservers immediately if the one you try is down. This
 
-       should tolerate down dirservers better now.
 
-     - ORs connect-on-demand to other ORs
 
-       - If you get an extend cell to an OR you're not connected to,
 
-         connect, handshake, and forward the create cell.
 
-       - The authoritative dirservers stay connected to everybody,
 
-         and everybody stays connected to 0.0.7 servers, but otherwise
 
-         clients/servers expire unused connections after 5 minutes.
 
-     - When servers get a sigint, they delay 30 seconds (refusing new
 
-       connections) then exit. A second sigint causes immediate exit.
 
-     - File and name management:
 
-       - Look for .torrc if no CONFDIR "torrc" is found.
 
-       - If no datadir is defined, then choose, make, and secure ~/.tor
 
-         as datadir.
 
-       - If torrc not found, exitpolicy reject *:*.
 
-       - Expands ~/ in filenames to $HOME/ (but doesn't yet expand ~arma).
 
-       - If no nickname is defined, derive default from hostname.
 
-       - Rename secret key files, e.g. identity.key -> secret_id_key,
 
-         to discourage people from mailing their identity key to tor-ops.
 
-     - Refuse to build a circuit before the directory has arrived --
 
-       it won't work anyway, since you won't know the right onion keys
 
-       to use.
 
-     - Parse tor version numbers so we can do an is-newer-than check
 
-       rather than an is-in-the-list check.
 
-     - New socks command 'resolve', to let us shim gethostbyname()
 
-       locally.
 
-       - A 'tor_resolve' script to access the socks resolve functionality.
 
-       - A new socks-extensions.txt doc file to describe our
 
-         interpretation and extensions to the socks protocols.
 
-     - Add a ContactInfo option, which gets published in descriptor.
 
-     - Write tor version at the top of each log file
 
-     - New docs in the tarball:
 
-       - tor-doc.html.
 
-       - Document that you should proxy your SSL traffic too.
 
-     - Log a warning if the user uses an unsafe socks variant, so people
 
-       are more likely to learn about privoxy or socat.
 
-     - Log a warning if you're running an unverified server, to let you
 
-       know you might want to get it verified.
 
-     - Change the default exit policy to reject the default edonkey,
 
-       kazaa, gnutella ports.
 
-     - Add replace_file() to util.[ch] to handle win32's rename().
 
-     - Publish OR uptime in descriptor (and thus in directory) too.
 
-     - Remember used bandwidth (both in and out), and publish 15-minute
 
-       snapshots for the past day into our descriptor.
 
-     - Be more aggressive about trying to make circuits when the network
 
-       has changed (e.g. when you unsuspend your laptop).
 
-     - Check for time skew on http headers; report date in response to
 
-       "GET /".
 
-     - If the entrynode config line has only one node, don't pick it as
 
-       an exitnode.
 
-     - Add strict{entry|exit}nodes config options. If set to 1, then
 
-       we refuse to build circuits that don't include the specified entry
 
-       or exit nodes.
 
-     - OutboundBindAddress config option, to bind to a specific
 
-       IP address for outgoing connect()s.
 
-     - End truncated log entries (e.g. directories) with "[truncated]".
 
- Changes in version 0.0.7.3 - 2004-08-12
 
-   o Stop dnsworkers from triggering an assert failure when you
 
-     ask them to resolve the host "".
 
- Changes in version 0.0.7.2 - 2004-07-07
 
-   o A better fix for the 0.0.0.0 problem, that will hopefully
 
-     eliminate the remaining related assertion failures.
 
- Changes in version 0.0.7.1 - 2004-07-04
 
-   o When an address resolves to 0.0.0.0, treat it as a failed resolve,
 
-     since internally we use 0.0.0.0 to signify "not yet resolved".
 
- Changes in version 0.0.7 - 2004-06-07
 
-   o Fixes for crashes and other obnoxious bugs:
 
-     - Fix an epipe bug: sometimes when directory connections failed
 
-       to connect, we would give them a chance to flush before closing
 
-       them.
 
-     - When we detached from a circuit because of resolvefailed, we
 
-       would immediately try the same circuit twice more, and then
 
-       give up on the resolve thinking we'd tried three different
 
-       exit nodes.
 
-     - Limit the number of intro circuits we'll attempt to build for a
 
-       hidden service per 15-minute period.
 
-     - Check recommended-software string *early*, before actually parsing
 
-       the directory. Thus we can detect an obsolete version and exit,
 
-       even if the new directory format doesn't parse.
 
-   o Fixes for security bugs:
 
-     - Remember which nodes are dirservers when you startup, and if a
 
-       random OR enables his dirport, don't automatically assume he's
 
-       a trusted dirserver.
 
-   o Other bugfixes:
 
-     - Directory connections were asking the wrong poll socket to
 
-       start writing, and not asking themselves to start writing.
 
-     - When we detached from a circuit because we sent a begin but
 
-       didn't get a connected, we would use it again the first time;
 
-       but after that we would correctly switch to a different one.
 
-     - Stop warning when the first onion decrypt attempt fails; they
 
-       will sometimes legitimately fail now that we rotate keys.
 
-     - Override unaligned-access-ok check when $host_cpu is ia64 or
 
-       arm. Apparently they allow it but the kernel whines.
 
-     - Dirservers try to reconnect periodically too, in case connections
 
-       have failed.
 
-     - Fix some memory leaks in directory servers.
 
-     - Allow backslash in Win32 filenames.
 
-     - Made Tor build complain-free on FreeBSD, hopefully without
 
-       breaking other BSD builds. We'll see.
 
-     - Check directory signatures based on name of signer, not on whom
 
-       we got the directory from. This will let us cache directories more
 
-       easily.
 
-     - Rotate dnsworkers and cpuworkers on SIGHUP, so they get new config
 
-       settings too.
 
-   o Features:
 
-     - Doxygen markup on all functions and global variables.
 
-     - Make directory functions update routerlist, not replace it. So
 
-       now directory disagreements are not so critical a problem.
 
-     - Remove the upper limit on number of descriptors in a dirserver's
 
-       directory (not that we were anywhere close).
 
-     - Allow multiple logfiles at different severity ranges.
 
-     - Allow *BindAddress to specify ":port" rather than setting *Port
 
-       separately. Allow multiple instances of each BindAddress config
 
-       option, so you can bind to multiple interfaces if you want.
 
-     - Allow multiple exit policy lines, which are processed in order.
 
-       Now we don't need that huge line with all the commas in it.
 
-     - Enable accept/reject policies on SOCKS connections, so you can bind
 
-       to 0.0.0.0 but still control who can use your OP.
 
-     - Updated the man page to reflect these features.
 
- Changes in version 0.0.6.2 - 2004-05-16
 
-   o Our integrity-checking digest was checking only the most recent cell,
 
-     not the previous cells like we'd thought.
 
-     Thanks to Stefan Mark for finding the flaw!
 
- Changes in version 0.0.6.1 - 2004-05-06
 
-   o Fix two bugs in our AES counter-mode implementation (this affected
 
-     onion-level stream encryption, but not TLS-level). It turns
 
-     out we were doing something much more akin to a 16-character
 
-     polyalphabetic cipher. Oops.
 
-     Thanks to Stefan Mark for finding the flaw!
 
-   o Retire moria3 as a directory server, and add tor26 as a directory
 
-     server.
 
- Changes in version 0.0.6 - 2004-05-02
 
-   o Features:
 
-     - Hidden services and rendezvous points are implemented. Go to
 
-       http://6sxoyfb3h2nvok2d.onion/ for an index of currently available
 
-       hidden services. (This only works via a socks4a proxy such as
 
-       Privoxy, and currently it's quite slow.)
 
-     - We now rotate link (tls context) keys and onion keys.
 
-     - CREATE cells now include oaep padding, so you can tell
 
-       if you decrypted them correctly.
 
-     - Retry stream correctly when we fail to connect because of
 
-       exit-policy-reject (should try another) or can't-resolve-address.
 
-     - When we hup a dirserver and we've *removed* a server from the
 
-       approved-routers list, now we remove that server from the
 
-       in-memory directories too.
 
-     - Add bandwidthburst to server descriptor.
 
-     - Directories now say which dirserver signed them.
 
-     - Use a tor_assert macro that logs failed assertions too.
 
-     - Since we don't support truncateds much, don't bother sending them;
 
-       just close the circ.
 
-     - Fetch randomness from /dev/urandom better (not via fopen/fread)
 
-     - Better debugging for tls errors
 
-     - Set Content-Type on the directory and hidserv descriptor.
 
-     - Remove IVs from cipher code, since AES-ctr has none.
 
-   o Bugfixes:
 
-     - Fix an assert trigger for exit nodes that's been plaguing us since
 
-       the days of 0.0.2prexx (thanks weasel!)
 
-     - Fix a bug where we were closing tls connections intermittently.
 
-       It turns out openssl keeps its errors around -- so if an error
 
-       happens, and you don't ask about it, and then another openssl
 
-       operation happens and succeeds, and you ask if there was an error,
 
-       it tells you about the first error.
 
-     - Fix a bug that's been lurking since 27 may 03 (!)
 
-       When passing back a destroy cell, we would use the wrong circ id.
 
-     - Don't crash if a conn that sent a begin has suddenly lost its circuit.
 
-     - Some versions of openssl have an SSL_pending function that erroneously
 
-       returns bytes when there is a non-application record pending.
 
-     - Win32 fixes. Tor now compiles on win32 with no warnings/errors.
 
-       o We were using an array of length zero in a few places.
 
-       o Win32's gethostbyname can't resolve an IP to an IP.
 
-       o Win32's close can't close a socket.
 
-       o Handle windows socket errors correctly.
 
-   o Portability:
 
-     - check for <sys/limits.h> so we build on FreeBSD again, and
 
-       <machine/limits.h> for NetBSD.
 
- Changes in version 0.0.5 - 2004-03-30
 
-   o Install torrc as torrc.sample -- we no longer clobber your
 
-     torrc. (Woo!)
 
-   o Fix mangled-state bug in directory fetching (was causing sigpipes).
 
-   o Only build circuits after we've fetched the directory: clients were
 
-     using only the directory servers before they'd fetched a directory.
 
-     This also means longer startup time; so it goes.
 
-   o Fix an assert trigger where an OP would fail to handshake, and we'd
 
-     expect it to have a nickname.
 
-   o Work around a tsocks bug: do a socks reject when AP connection dies
 
-     early, else tsocks goes into an infinite loop.
 
-   o Hold socks connection open until reply is flushed (if possible)
 
-   o Make exit nodes resolve IPs to IPs immediately, rather than asking
 
-     the dns farm to do it.
 
-   o Fix c99 aliasing warnings in rephist.c
 
-   o Don't include server descriptors that are older than 24 hours in the
 
-     directory.
 
-   o Give socks 'reject' replies their whole 15s to attempt to flush,
 
-     rather than seeing the 60s timeout and assuming the flush had failed.
 
-   o Clean automake droppings from the cvs repository
 
-   o Add in a 'notice' log level for things the operator should hear
 
-     but that aren't warnings
 
- Changes in version 0.0.4 - 2004-03-26
 
-   o When connecting to a dirserver or OR and the network is down,
 
-     we would crash.
 
- Changes in version 0.0.3 - 2004-03-26
 
-   o Warn and fail if server chose a nickname with illegal characters
 
-   o Port to Solaris and Sparc:
 
-     - include missing header fcntl.h
 
-     - have autoconf find -lsocket -lnsl automatically
 
-     - deal with hardware word alignment
 
-     - make uname() work (solaris has a different return convention)
 
-     - switch from using signal() to sigaction()
 
-   o Preliminary work on reputation system:
 
-     - Keep statistics on success/fail of connect attempts; they're published
 
-       by kill -USR1 currently.
 
-     - Add a RunTesting option to try to learn link state by creating test
 
-       circuits, even when SocksPort is off.
 
-     - Remove unused open circuits when there are too many.
 
- Changes in version 0.0.2 - 2004-03-19
 
-     - Include strlcpy and strlcat for safer string ops
 
-     - define INADDR_NONE so we compile (but still not run) on solaris
 
- Changes in version 0.0.2pre27 - 2004-03-14
 
-   o Bugfixes:
 
-     - Allow internal tor networks (we were rejecting internal IPs,
 
-       now we allow them if they're set explicitly).
 
-     - And fix a few endian issues.
 
- Changes in version 0.0.2pre26 - 2004-03-14
 
-   o New features:
 
-     - If a stream times out after 15s without a connected cell, don't
 
-       try that circuit again: try a new one.
 
-     - Retry streams at most 4 times. Then give up.
 
-     - When a dirserver gets a descriptor from an unknown router, it
 
-       logs its fingerprint (so the dirserver operator can choose to
 
-       accept it even without mail from the server operator).
 
-     - Inform unapproved servers when we reject their descriptors.
 
-     - Make tor build on Windows again. It works as a client, who knows
 
-       about as a server.
 
-     - Clearer instructions in the torrc for how to set up a server.
 
-     - Be more efficient about reading fd's when our global token bucket
 
-       (used for rate limiting) becomes empty.
 
-   o Bugfixes:
 
-     - Stop asserting that computers always go forward in time. It's
 
-       simply not true.
 
-     - When we sent a cell (e.g. destroy) and then marked an OR connection
 
-       expired, we might close it before finishing a flush if the other
 
-       side isn't reading right then.
 
-     - Don't allow dirservers to start if they haven't defined
 
-       RecommendedVersions
 
-     - We were caching transient dns failures. Oops.
 
-     - Prevent servers from publishing an internal IP as their address.
 
-     - Address a strcat vulnerability in circuit.c
 
- Changes in version 0.0.2pre25 - 2004-03-04
 
-   o New features:
 
-     - Put the OR's IP in its router descriptor, not its fqdn. That way
 
-       we'll stop being stalled by gethostbyname for nodes with flaky dns,
 
-       e.g. poblano.
 
-   o Bugfixes:
 
-     - If the user typed in an address that didn't resolve, the server
 
-       crashed.
 
- Changes in version 0.0.2pre24 - 2004-03-03
 
-   o Bugfixes:
 
-     - Fix an assertion failure in dns.c, where we were trying to dequeue
 
-       a pending dns resolve even if it wasn't pending
 
-     - Fix a spurious socks5 warning about still trying to write after the
 
-       connection is finished.
 
-     - Hold certain marked_for_close connections open until they're finished
 
-       flushing, rather than losing bytes by closing them too early.
 
-     - Correctly report the reason for ending a stream
 
-     - Remove some duplicate calls to connection_mark_for_close
 
-     - Put switch_id and start_daemon earlier in the boot sequence, so it
 
-       will actually try to chdir() to options.DataDirectory
 
-     - Make 'make test' exit(1) if a test fails; fix some unit tests
 
-     - Make tor fail when you use a config option it doesn't know about,
 
-       rather than warn and continue.
 
-     - Make --version work
 
-     - Bugfixes on the rpm spec file and tor.sh, so it's more up to date
 
- Changes in version 0.0.2pre23 - 2004-02-29
 
-   o New features:
 
-     - Print a statement when the first circ is finished, so the user
 
-       knows it's working.
 
-     - If a relay cell is unrecognized at the end of the circuit,
 
-       send back a destroy. (So attacks to mutate cells are more
 
-       clearly thwarted.)
 
-     - New config option 'excludenodes' to avoid certain nodes for circuits.
 
-     - When it daemonizes, it chdir's to the DataDirectory rather than "/",
 
-       so you can collect coredumps there.
 
-  o Bugfixes:
 
-     - Fix a bug in tls flushing where sometimes data got wedged and
 
-       didn't flush until more data got sent. Hopefully this bug was
 
-       a big factor in the random delays we were seeing.
 
-     - Make 'connected' cells include the resolved IP, so the client
 
-       dns cache actually gets populated.
 
-     - Disallow changing from ORPort=0 to ORPort>0 on hup.
 
-     - When we time-out on a stream and detach from the circuit, send an
 
-       end cell down it first.
 
-     - Only warn about an unknown router (in exitnodes, entrynodes,
 
-       excludenodes) after we've fetched a directory.
 
- Changes in version 0.0.2pre22 - 2004-02-26
 
-   o New features:
 
-     - Servers publish less revealing uname information in descriptors.
 
-     - More memory tracking and assertions, to crash more usefully when
 
-       errors happen.
 
-     - If the default torrc isn't there, just use some default defaults.
 
-       Plus provide an internal dirservers file if they don't have one.
 
-     - When the user tries to use Tor as an http proxy, give them an http
 
-       501 failure explaining that we're a socks proxy.
 
-     - Dump a new router.desc on hup, to help confused people who change
 
-       their exit policies and then wonder why router.desc doesn't reflect
 
-       it.
 
-     - Clean up the generic tor.sh init script that we ship with.
 
-   o Bugfixes:
 
-     - If the exit stream is pending on the resolve, and a destroy arrives,
 
-       then the stream wasn't getting removed from the pending list. I
 
-       think this was the one causing recent server crashes.
 
-     - Use a more robust poll on OSX 10.3, since their poll is flaky.
 
-     - When it couldn't resolve any dirservers, it was useless from then on.
 
-       Now it reloads the RouterFile (or default dirservers) if it has no
 
-       dirservers.
 
-     - Move the 'tor' binary back to /usr/local/bin/ -- it turns out
 
-       many users don't even *have* a /usr/local/sbin/.
 
- Changes in version 0.0.2pre21 - 2004-02-18
 
-   o New features:
 
-     - There's a ChangeLog file that actually reflects the changelog.
 
-     - There's a 'torify' wrapper script, with an accompanying
 
-       tor-tsocks.conf, that simplifies the process of using tsocks for
 
-       tor. It even has a man page.
 
-     - The tor binary gets installed to sbin rather than bin now.
 
-     - Retry streams where the connected cell hasn't arrived in 15 seconds
 
-     - Clean up exit policy handling -- get the default out of the torrc,
 
-       so we can update it without forcing each server operator to fix
 
-       his/her torrc.
 
-     - Allow imaps and pop3s in default exit policy
 
-   o Bugfixes:
 
-     - Prevent picking middleman nodes as the last node in the circuit
 
- Changes in version 0.0.2pre20 - 2004-01-30
 
-   o New features:
 
-     - We now have a deb package, and it's in debian unstable. Go to
 
-       it, apt-getters. :)
 
-     - I've split the TotalBandwidth option into BandwidthRate (how many
 
-       bytes per second you want to allow, long-term) and
 
-       BandwidthBurst (how many bytes you will allow at once before the cap
 
-       kicks in).  This better token bucket approach lets you, say, set
 
-       BandwidthRate to 10KB/s and BandwidthBurst to 10MB, allowing good
 
-       performance while not exceeding your monthly bandwidth quota.
 
-     - Push out a tls record's worth of data once you've got it, rather
 
-       than waiting until you've read everything waiting to be read. This
 
-       may improve performance by pipelining better. We'll see.
 
-     - Add an AP_CONN_STATE_CONNECTING state, to allow streams to detach
 
-       from failed circuits (if they haven't been connected yet) and attach
 
-       to new ones.
 
-     - Expire old streams that haven't managed to connect. Some day we'll
 
-       have them reattach to new circuits instead.
 
-   o Bugfixes:
 
-     - Fix several memory leaks that were causing servers to become bloated
 
-       after a while.
 
-     - Fix a few very rare assert triggers. A few more remain.
 
-     - Setuid to User _before_ complaining about running as root.
 
- Changes in version 0.0.2pre19 - 2004-01-07
 
-   o Bugfixes:
 
-     - Fix deadlock condition in dns farm. We were telling a child to die by
 
-       closing the parent's file descriptor to him. But newer children were
 
-       inheriting the open file descriptor from the parent, and since they
 
-       weren't closing it, the socket never closed, so the child never read
 
-       eof, so he never knew to exit. Similarly, dns workers were holding
 
-       open other sockets, leading to all sorts of chaos.
 
-     - New cleaner daemon() code for forking and backgrounding.
 
-     - If you log to a file, it now prints an entry at the top of the
 
-       logfile so you know it's working.
 
-     - The onionskin challenge length was 30 bytes longer than necessary.
 
-     - Started to patch up the spec so it's not quite so out of date.
 
- Changes in version 0.0.2pre18 - 2004-01-02
 
-   o Bugfixes:
 
-     - Fix endian issues with the 'integrity' field in the relay header.
 
-     - Fix a potential bug where connections in state
 
-       AP_CONN_STATE_CIRCUIT_WAIT might unexpectedly ask to write.
 
- Changes in version 0.0.2pre17 - 2003-12-30
 
-   o Bugfixes:
 
-     - Made --debuglogfile (or any second log file, actually) work.
 
-     - Resolved an edge case in get_unique_circ_id_by_conn where a smart
 
-       adversary could force us into an infinite loop.
 
-   o Features:
 
-     - Each onionskin handshake now includes a hash of the computed key,
 
-       to prove the server's identity and help perfect forward secrecy.
 
-     - Changed cell size from 256 to 512 bytes (working toward compatibility
 
-       with MorphMix).
 
-     - Changed cell length to 2 bytes, and moved it to the relay header.
 
-     - Implemented end-to-end integrity checking for the payloads of
 
-       relay cells.
 
-     - Separated streamid from 'recognized' (otherwise circuits will get
 
-       messed up when we try to have streams exit from the middle). We
 
-       use the integrity-checking to confirm that a cell is addressed to
 
-       this hop.
 
-     - Randomize the initial circid and streamid values, so an adversary who
 
-       breaks into a node can't learn how many circuits or streams have
 
-       been made so far.
 
- Changes in version 0.0.2pre16 - 2003-12-14
 
-   o Bugfixes:
 
-     - Fixed a bug that made HUP trigger an assert
 
-     - Fixed a bug where a circuit that immediately failed wasn't being
 
-       counted as a failed circuit in counting retries.
 
-   o Features:
 
-     - Now we close the circuit when we get a truncated cell: otherwise we're
 
-       open to an anonymity attack where a bad node in the path truncates
 
-       the circuit and then we open streams at him.
 
-     - Add port ranges to exit policies
 
-     - Add a conservative default exit policy
 
-     - Warn if you're running tor as root
 
-     - on HUP, retry OR connections and close/rebind listeners
 
-     - options.EntryNodes: try these nodes first when picking the first node
 
-     - options.ExitNodes: if your best choices happen to include any of
 
-       your preferred exit nodes, you choose among just those preferred
 
-       exit nodes.
 
-     - options.ExcludedNodes: nodes that are never picked in path building
 
- Changes in version 0.0.2pre15 - 2003-12-03
 
-   o Robustness and bugfixes:
 
-     - Sometimes clients would cache incorrect DNS resolves, which would
 
-       really screw things up.
 
-     - An OP that goes offline would slowly leak all its sockets and stop
 
-       working.
 
-     - A wide variety of bugfixes in exit node selection, exit policy
 
-       handling, and processing pending streams when a new circuit is
 
-       established.
 
-     - Pick nodes for a path only from those the directory says are up
 
-     - Choose randomly from all running dirservers, not always the first one
 
-     - Increase allowed http header size for directory fetch.
 
-     - Stop writing to stderr (if we're daemonized it will be closed).
 
-     - Enable -g always, so cores will be more useful to me.
 
-     - Switch "-lcrypto -lssl" to "-lssl -lcrypto" for broken distributions.
 
-   o Documentation:
 
-     - Wrote a man page. It lists commonly used options.
 
-   o Configuration:
 
-     - Change default loglevel to warn.
 
-     - Make PidFile default to null rather than littering in your CWD.
 
-     - OnionRouter config option is now obsolete. Instead it just checks
 
-       ORPort>0.
 
-     - Moved to a single unified torrc file for both clients and servers.
 
- Changes in version 0.0.2pre14 - 2003-11-29
 
-   o Robustness and bugfixes:
 
-     - Force the admin to make the DataDirectory himself
 
-       - to get ownership/permissions right
 
-       - so clients no longer make a DataDirectory and then never use it
 
-     - fix bug where a client who was offline for 45 minutes would never
 
-       pull down a directory again
 
-     - fix (or at least hide really well) the dns assert bug that was
 
-       causing server crashes
 
-     - warnings and improved robustness wrt clockskew for certs
 
-     - use the native daemon(3) to daemonize, when available
 
-     - exit if bind() fails
 
-     - exit if neither socksport nor orport is defined
 
-     - include our own tor_timegm (Win32 doesn't have its own)
 
-     - bugfix for win32 with lots of connections
 
-     - fix minor bias in PRNG
 
-     - make dirserver more robust to corrupt cached directory
 
-   o Documentation:
 
-     - Wrote the design document (woo)
 
-   o Circuit building and exit policies:
 
-     - Circuits no longer try to use nodes that the directory has told them
 
-       are down.
 
-     - Exit policies now support bitmasks (18.0.0.0/255.0.0.0) and
 
-       bitcounts (18.0.0.0/8).
 
-     - Make AP connections standby for a circuit if no suitable circuit
 
-       exists, rather than failing
 
-     - Circuits choose exit node based on addr/port, exit policies, and
 
-       which AP connections are standing by
 
-     - Bump min pathlen from 2 to 3
 
-     - Relay end cells have a payload to describe why the stream ended.
 
-     - If the stream failed because of exit policy, try again with a new
 
-       circuit.
 
-     - Clients have a dns cache to remember resolved addresses.
 
-     - Notice more quickly when we have no working circuits
 
-   o Configuration:
 
-     - APPort is now called SocksPort
 
-     - SocksBindAddress, ORBindAddress, DirBindAddress let you configure
 
-       where to bind
 
-     - RecommendedVersions is now a config variable rather than
 
-       hardcoded (for dirservers)
 
-     - Reloads config on HUP
 
-     - Usage info on -h or --help
 
-     - If you set User and Group config vars, it'll setu/gid to them.
 
- Changes in version 0.0.2pre13 - 2003-10-19
 
-   o General stability:
 
-     - SSL_write no longer fails when it returns WANTWRITE and the number
 
-       of bytes in the buf has changed by the next SSL_write call.
 
-     - Fix segfault fetching directory when network is down
 
-     - Fix a variety of minor memory leaks
 
-     - Dirservers reload the fingerprints file on HUP, so I don't have
 
-       to take down the network when I approve a new router
 
-     - Default server config file has explicit Address line to specify fqdn
 
-   o Buffers:
 
-     - Buffers grow and shrink as needed (Cut process size from 20M to 2M)
 
-     - Make listener connections not ever alloc bufs
 
-   o Autoconf improvements:
 
-     - don't clobber an external CFLAGS in ./configure
 
-     - Make install now works
 
-     - create var/lib/tor on make install
 
-     - autocreate a tor.sh initscript to help distribs
 
-     - autocreate the torrc and sample-server-torrc with correct paths
 
-   o Log files and Daemonizing now work:
 
-     - If --DebugLogFile is specified, log to it at -l debug
 
-     - If --LogFile is specified, use it instead of commandline
 
-     - If --RunAsDaemon is set, tor forks and backgrounds on startup
 
 
  |