| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394 | 
							
- This document summarizes new features and bugfixes in each stable release
 
- of Tor. If you want to see more detailed descriptions of the changes in
 
- each development snapshot, see the ChangeLog file.
 
- Changes in version 0.2.5.10 - 2014-10-24
 
-   Tor 0.2.5.10 is the first stable release in the 0.2.5 series.
 
-   It adds several new security features, including improved
 
-   denial-of-service resistance for relays, new compiler hardening
 
-   options, and a system-call sandbox for hardened installations on Linux
 
-   (requires seccomp2). The controller protocol has several new features,
 
-   resolving IPv6 addresses should work better than before, and relays
 
-   should be a little more CPU-efficient. We've added support for more
 
-   OpenBSD and FreeBSD transparent proxy types. We've improved the build
 
-   system and testing infrastructure to allow unit testing of more parts
 
-   of the Tor codebase. Finally, we've addressed several nagging pluggable
 
-   transport usability issues, and included numerous other small bugfixes
 
-   and features mentioned below.
 
-   This release marks end-of-life for Tor 0.2.3.x; those Tor versions
 
-   have accumulated many known flaws; everyone should upgrade.
 
-   o Major features (security):
 
-     - The ntor handshake is now on-by-default, no matter what the
 
-       directory authorities recommend. Implements ticket 8561.
 
-     - Make the "tor-gencert" tool used by directory authority operators
 
-       create 2048-bit signing keys by default (rather than 1024-bit, since
 
-       1024-bit is uncomfortably small these days). Addresses ticket 10324.
 
-     - Warn about attempts to run hidden services and relays in the same
 
-       process: that's probably not a good idea. Closes ticket 12908.
 
-     - Disable support for SSLv3. All versions of OpenSSL in use with Tor
 
-       today support TLS 1.0 or later, so we can safely turn off support
 
-       for this old (and insecure) protocol. Fixes bug 13426.
 
-   o Major features (relay security, DoS-resistance):
 
-     - When deciding whether we have run out of memory and we need to
 
-       close circuits, also consider memory allocated in buffers for
 
-       streams attached to each circuit.
 
-       This change, which extends an anti-DoS feature introduced in
 
-       0.2.4.13-alpha and improved in 0.2.4.14-alpha, lets Tor exit relays
 
-       better resist more memory-based DoS attacks than before. Since the
 
-       MaxMemInCellQueues option now applies to all queues, it is renamed
 
-       to MaxMemInQueues. This feature fixes bug 10169.
 
-     - Avoid hash-flooding denial-of-service attacks by using the secure
 
-       SipHash-2-4 hash function for our hashtables. Without this
 
-       feature, an attacker could degrade performance of a targeted
 
-       client or server by flooding their data structures with a large
 
-       number of entries to be stored at the same hash table position,
 
-       thereby slowing down the Tor instance. With this feature, hash
 
-       table positions are derived from a randomized cryptographic key,
 
-       and an attacker cannot predict which entries will collide. Closes
 
-       ticket 4900.
 
-     - If you don't specify MaxMemInQueues yourself, Tor now tries to
 
-       pick a good value based on your total system memory. Previously,
 
-       the default was always 8 GB. You can still override the default by
 
-       setting MaxMemInQueues yourself. Resolves ticket 11396.
 
-   o Major features (bridges and pluggable transports):
 
-     - Add support for passing arguments to managed pluggable transport
 
-       proxies. Implements ticket 3594.
 
-     - Bridges now track GeoIP information and the number of their users
 
-       even when pluggable transports are in use, and report usage
 
-       statistics in their extra-info descriptors. Resolves tickets 4773
 
-       and 5040.
 
-     - Don't launch pluggable transport proxies if we don't have any
 
-       bridges configured that would use them. Now we can list many
 
-       pluggable transports, and Tor will dynamically start one when it
 
-       hears a bridge address that needs it. Resolves ticket 5018.
 
-     - The bridge directory authority now assigns status flags (Stable,
 
-       Guard, etc) to bridges based on thresholds calculated over all
 
-       Running bridges. Now bridgedb can finally make use of its features
 
-       to e.g. include at least one Stable bridge in its answers. Fixes
 
-       bug 9859.
 
-   o Major features (controller):
 
-     - Extend ORCONN controller event to include an "ID" parameter,
 
-       and add four new controller event types CONN_BW, CIRC_BW,
 
-       CELL_STATS, and TB_EMPTY that show connection and circuit usage.
 
-       The new events are emitted in private Tor networks only, with the
 
-       goal of being able to better track performance and load during
 
-       full-network simulations. Implements proposal 218 and ticket 7359.
 
-   o Major features (relay performance):
 
-     - Speed up server-side lookups of rendezvous and introduction point
 
-       circuits by using hashtables instead of linear searches. These
 
-       functions previously accounted between 3 and 7% of CPU usage on
 
-       some busy relays. Resolves ticket 9841.
 
-     - Avoid wasting CPU when extending a circuit over a channel that is
 
-       nearly out of circuit IDs. Previously, we would do a linear scan
 
-       over possible circuit IDs before finding one or deciding that we
 
-       had exhausted our possibilities. Now, we try at most 64 random
 
-       circuit IDs before deciding that we probably won't succeed. Fixes
 
-       a possible root cause of ticket 11553.
 
-   o Major features (seccomp2 sandbox, Linux only):
 
-     - Use the seccomp2 syscall filtering facility on Linux to limit
 
-       which system calls Tor can invoke. This is an experimental,
 
-       Linux-only feature to provide defense-in-depth against unknown
 
-       attacks. To try turning it on, set "Sandbox 1" in your torrc
 
-       file. Please be ready to report bugs. We hope to add support
 
-       for better sandboxing in the future, including more fine-grained
 
-       filters, better division of responsibility, and support for more
 
-       platforms. This work has been done by Cristian-Matei Toader for
 
-       Google Summer of Code. Resolves tickets 11351 and 11465.
 
-   o Major features (testing networks):
 
-     - Make testing Tor networks bootstrap better: lower directory fetch
 
-       retry schedules and maximum interval without directory requests,
 
-       and raise maximum download tries. Implements ticket 6752.
 
-     - Add make target 'test-network' to run tests on a Chutney network.
 
-       Implements ticket 8530.
 
-   o Major features (other):
 
-     - On some platforms (currently: recent OSX versions, glibc-based
 
-       platforms that support the ELF format, and a few other
 
-       Unix-like operating systems), Tor can now dump stack traces
 
-       when a crash occurs or an assertion fails. By default, traces
 
-       are dumped to stderr (if possible) and to any logs that are
 
-       reporting errors. Implements ticket 9299.
 
-   o Deprecated versions:
 
-     - Tor 0.2.3.x has reached end-of-life; it has received no patches or
 
-       attention for some while.
 
-   o Major bugfixes (security, directory authorities):
 
-     - Directory authorities now include a digest of each relay's
 
-       identity key as a part of its microdescriptor.
 
-       This is a workaround for bug 11743 (reported by "cypherpunks"),
 
-       where Tor clients do not support receiving multiple
 
-       microdescriptors with the same SHA256 digest in the same
 
-       consensus. When clients receive a consensus like this, they only
 
-       use one of the relays. Without this fix, a hostile relay could
 
-       selectively disable some client use of target relays by
 
-       constructing a router descriptor with a different identity and the
 
-       same microdescriptor parameters and getting the authorities to
 
-       list it in a microdescriptor consensus. This fix prevents an
 
-       attacker from causing a microdescriptor collision, because the
 
-       router's identity is not forgeable.
 
-   o Major bugfixes (openssl bug workaround):
 
-     - Avoid crashing when using OpenSSL version 0.9.8zc, 1.0.0o, or
 
-       1.0.1j, built with the 'no-ssl3' configuration option. Fixes
 
-       bug 13471. This is a workaround for an OpenSSL bug.
 
-   o Major bugfixes (client):
 
-     - Perform circuit cleanup operations even when circuit
 
-       construction operations are disabled (because the network is
 
-       disabled, or because there isn't enough directory information).
 
-       Previously, when we were not building predictive circuits, we
 
-       were not closing expired circuits either. Fixes bug 8387; bugfix on
 
-       0.1.1.11-alpha. This bug became visible in 0.2.4.10-alpha when we
 
-       became more strict about when we have "enough directory information
 
-       to build circuits".
 
-   o Major bugfixes (client, pluggable transports):
 
-     - When managing pluggable transports, use OS notification facilities
 
-       to learn if they have crashed, and don't attempt to kill any
 
-       process that has already exited. Fixes bug 8746; bugfix
 
-       on 0.2.3.6-alpha.
 
-   o Major bugfixes (relay denial of service):
 
-     - Instead of writing destroy cells directly to outgoing connection
 
-       buffers, queue them and intersperse them with other outgoing cells.
 
-       This can prevent a set of resource starvation conditions where too
 
-       many pending destroy cells prevent data cells from actually getting
 
-       delivered. Reported by "oftc_must_be_destroyed". Fixes bug 7912;
 
-       bugfix on 0.2.0.1-alpha.
 
-   o Major bugfixes (relay):
 
-     - Avoid queuing or sending destroy cells for circuit ID zero when we
 
-       fail to send a CREATE cell. Fixes bug 12848; bugfix on 0.0.8pre1.
 
-       Found and fixed by "cypherpunks".
 
-     - Fix ORPort reachability detection on relays running behind a
 
-       proxy, by correctly updating the "local" mark on the controlling
 
-       channel when changing the address of an or_connection_t after the
 
-       handshake. Fixes bug 12160; bugfix on 0.2.4.4-alpha.
 
-     - Use a direct dirport connection when uploading non-anonymous
 
-       descriptors to the directory authorities. Previously, relays would
 
-       incorrectly use tunnel connections under a fairly wide variety of
 
-       circumstances. Fixes bug 11469; bugfix on 0.2.4.3-alpha.
 
-     - When a circuit accidentally has the same circuit ID for its
 
-       forward and reverse direction, correctly detect the direction of
 
-       cells using that circuit. Previously, this bug made roughly one
 
-       circuit in a million non-functional. Fixes bug 12195; this is a
 
-       bugfix on every version of Tor.
 
-   o Minor features (security):
 
-     - New --enable-expensive-hardening option to enable security
 
-       hardening options that consume nontrivial amounts of CPU and
 
-       memory. Right now, this includes AddressSanitizer and UbSan, which
 
-       are supported in newer versions of GCC and Clang. Closes ticket
 
-       11477.
 
-     - Authorities now assign the Guard flag to the fastest 25% of the
 
-       network (it used to be the fastest 50%). Also raise the consensus
 
-       weight that guarantees the Guard flag from 250 to 2000. For the
 
-       current network, this results in about 1100 guards, down from 2500.
 
-       This step paves the way for moving the number of entry guards
 
-       down to 1 (proposal 236) while still providing reasonable expected
 
-       performance for most users. Implements ticket 12690.
 
-   o Minor features (security, memory management):
 
-     - Memory allocation tricks (mempools and buffer freelists) are now
 
-       disabled by default. You can turn them back on with
 
-       --enable-mempools and --enable-buf-freelists respectively. We're
 
-       disabling these features because malloc performance is good enough
 
-       on most platforms, and a similar feature in OpenSSL exacerbated
 
-       exploitation of the Heartbleed attack. Resolves ticket 11476.
 
-   o Minor features (bridge client):
 
-     - Report a more useful failure message when we can't connect to a
 
-       bridge because we don't have the right pluggable transport
 
-       configured. Resolves ticket 9665. Patch from Fábio J. Bertinatto.
 
-   o Minor features (bridge):
 
-     - Add an ExtORPortCookieAuthFileGroupReadable option to make the
 
-       cookie file for the ExtORPort g+r by default.
 
-   o Minor features (bridges, pluggable transports):
 
-     - Bridges now write the SHA1 digest of their identity key
 
-       fingerprint (that is, a hash of a hash of their public key) to
 
-       notice-level logs, and to a new hashed-fingerprint file. This
 
-       information will help bridge operators look up their bridge in
 
-       Globe and similar tools. Resolves ticket 10884.
 
-     - Improve the message that Tor displays when running as a bridge
 
-       using pluggable transports without an Extended ORPort listener.
 
-       Also, log the message in the log file too. Resolves ticket 11043.
 
-     - Add threshold cutoffs to the networkstatus document created by
 
-       the Bridge Authority. Fixes bug 1117.
 
-     - On Windows, spawn background processes using the CREATE_NO_WINDOW
 
-       flag. Now Tor Browser Bundle 3.5 with pluggable transports enabled
 
-       doesn't pop up a blank console window. (In Tor Browser Bundle 2.x,
 
-       Vidalia set this option for us.) Implements ticket 10297.
 
-   o Minor features (build):
 
-     - The configure script has a --disable-seccomp option to turn off
 
-       support for libseccomp on systems that have it, in case it (or
 
-       Tor's use of it) is broken. Resolves ticket 11628.
 
-     - Assume that a user using ./configure --host wants to cross-compile,
 
-       and give an error if we cannot find a properly named
 
-       tool-chain. Add a --disable-tool-name-check option to proceed
 
-       nevertheless. Addresses ticket 9869. Patch by Benedikt Gollatz.
 
-     - If we run ./configure and the compiler recognizes -fstack-protector
 
-       but the linker rejects it, warn the user about a potentially missing
 
-       libssp package. Addresses ticket 9948. Patch from Benedikt Gollatz.
 
-     - Add support for `--library-versions` flag. Implements ticket 6384.
 
-     - Return the "unexpected sendme" warnings to a warn severity, but make
 
-       them rate limited, to help diagnose ticket 8093.
 
-     - Detect a missing asciidoc, and warn the user about it, during
 
-       configure rather than at build time. Fixes issue 6506. Patch from
 
-       Arlo Breault.
 
-   o Minor features (client):
 
-     - Add a new option, PredictedPortsRelevanceTime, to control how long
 
-       after having received a request to connect to a given port Tor
 
-       will try to keep circuits ready in anticipation of future requests
 
-       for that port. Patch from "unixninja92"; implements ticket 9176.
 
-   o Minor features (config options and command line):
 
-     - Add an --allow-missing-torrc commandline option that tells Tor to
 
-       run even if the configuration file specified by -f is not available.
 
-       Implements ticket 10060.
 
-     - Add support for the TPROXY transparent proxying facility on Linux.
 
-       See documentation for the new TransProxyType option for more
 
-       details. Implementation by "thomo". Closes ticket 10582.
 
-   o Minor features (config options):
 
-     - Config (torrc) lines now handle fingerprints which are missing
 
-       their initial '$'. Resolves ticket 4341; improvement over 0.0.9pre5.
 
-     - Support a --dump-config option to print some or all of the
 
-       configured options. Mainly useful for debugging the command-line
 
-       option parsing code. Helps resolve ticket 4647.
 
-     - Raise awareness of safer logging: notify user of potentially
 
-       unsafe config options, like logging more verbosely than severity
 
-       "notice" or setting SafeLogging to 0. Resolves ticket 5584.
 
-     - Add a new configuration option TestingV3AuthVotingStartOffset
 
-       that bootstraps a network faster by changing the timing for
 
-       consensus votes. Addresses ticket 8532.
 
-     - Add a new torrc option "ServerTransportOptions" that allows
 
-       bridge operators to pass configuration parameters to their
 
-       pluggable transports. Resolves ticket 8929.
 
-     - The config (torrc) file now accepts bandwidth and space limits in
 
-       bits as well as bytes. (Anywhere that you can say "2 Kilobytes",
 
-       you can now say "16 kilobits", and so on.) Resolves ticket 9214.
 
-       Patch by CharlieB.
 
-   o Minor features (controller):
 
-     - Make the entire exit policy available from the control port via
 
-       GETINFO exit-policy/*. Implements enhancement 7952. Patch from
 
-       "rl1987".
 
-     - Because of the fix for ticket 11396, the real limit for memory
 
-       usage may no longer match the configured MaxMemInQueues value. The
 
-       real limit is now exposed via GETINFO limits/max-mem-in-queues.
 
-     - Add a new "HS_DESC" controller event that reports activities
 
-       related to hidden service descriptors. Resolves ticket 8510.
 
-     - New "DROPGUARDS" controller command to forget all current entry
 
-       guards. Not recommended for ordinary use, since replacing guards
 
-       too frequently makes several attacks easier. Resolves ticket 9934;
 
-       patch from "ra".
 
-     - Implement the TRANSPORT_LAUNCHED control port event that
 
-       notifies controllers about new launched pluggable
 
-       transports. Resolves ticket 5609.
 
-   o Minor features (diagnostic):
 
-     - When logging a warning because of bug 7164, additionally check the
 
-       hash table for consistency (as proposed on ticket 11737). This may
 
-       help diagnose bug 7164.
 
-     - When we log a heartbeat, log how many one-hop circuits we have
 
-       that are at least 30 minutes old, and log status information about
 
-       a few of them. This is an attempt to track down bug 8387.
 
-     - When encountering an unexpected CR while writing text to a file on
 
-       Windows, log the name of the file. Should help diagnosing
 
-       bug 11233.
 
-     - Give more specific warnings when a client notices that an onion
 
-       handshake has failed. Fixes ticket 9635.
 
-     - Add significant new logging code to attempt to diagnose bug 12184,
 
-       where relays seem to run out of available circuit IDs.
 
-     - Improve the diagnostic log message for bug 8387 even further to
 
-       try to improve our odds of figuring out why one-hop directory
 
-       circuits sometimes do not get closed.
 
-     - Add more log messages to diagnose bug 7164, which causes
 
-       intermittent "microdesc_free() called but md was still referenced"
 
-       warnings. We now include more information, to figure out why we
 
-       might be cleaning a microdescriptor for being too old if it's
 
-       still referenced by a live node_t object.
 
-     - Log current accounting state (bytes sent and received + remaining
 
-       time for the current accounting period) in the relay's heartbeat
 
-       message. Implements ticket 5526; patch from Peter Retzlaff.
 
-   o Minor features (geoip):
 
-     - Update geoip and geoip6 to the August 7 2014 Maxmind GeoLite2
 
-       Country database.
 
-   o Minor features (interface):
 
-     - Generate a warning if any ports are listed in the SocksPolicy,
 
-       DirPolicy, AuthDirReject, AuthDirInvalid, AuthDirBadDir, or
 
-       AuthDirBadExit options. (These options only support address
 
-       ranges.) Fixes part of ticket 11108.
 
-   o Minor features (kernel API usage):
 
-     - Use the SOCK_NONBLOCK socket type, if supported, to open nonblocking
 
-       sockets in a single system call. Implements ticket 5129.
 
-   o Minor features (log messages):
 
-     - When ServerTransportPlugin is set on a bridge, Tor can write more
 
-       useful statistics about bridge use in its extrainfo descriptors,
 
-       but only if the Extended ORPort ("ExtORPort") is set too. Add a
 
-       log message to inform the user in this case. Resolves ticket 9651.
 
-     - When receiving a new controller connection, log the origin address.
 
-       Resolves ticket 9698; patch from "sigpipe".
 
-     - When logging OpenSSL engine status at startup, log the status of
 
-       more engines. Fixes ticket 10043; patch from Joshua Datko.
 
-   o Minor features (log verbosity):
 
-     - Demote the message that we give when a flushing connection times
 
-       out for too long from NOTICE to INFO. It was usually meaningless.
 
-       Resolves ticket 5286.
 
-     - Don't log so many notice-level bootstrapping messages at startup
 
-       about downloading descriptors. Previously, we'd log a notice
 
-       whenever we learned about more routers. Now, we only log a notice
 
-       at every 5% of progress. Fixes bug 9963.
 
-     - Warn less verbosely when receiving a malformed
 
-       ESTABLISH_RENDEZVOUS cell. Fixes ticket 11279.
 
-   o Minor features (performance):
 
-     - If we're using the pure-C 32-bit curve25519_donna implementation
 
-       of curve25519, build it with the -fomit-frame-pointer option to
 
-       make it go faster on register-starved hosts. This improves our
 
-       handshake performance by about 6% on i386 hosts without nacl.
 
-       Closes ticket 8109.
 
-   o Minor features (relay):
 
-     - If a circuit timed out for at least 3 minutes, check if we have a
 
-       new external IP address, and publish a new descriptor with the new
 
-       IP address if it changed. Resolves ticket 2454.
 
-   o Minor features (testing):
 
-     - If Python is installed, "make check" now runs extra tests beyond
 
-       the unit test scripts.
 
-     - When bootstrapping a test network, sometimes very few relays get
 
-       the Guard flag. Now a new option "TestingDirAuthVoteGuard" can
 
-       specify a set of relays which should be voted Guard regardless of
 
-       their uptime or bandwidth. Addresses ticket 9206.
 
-   o Minor features (transparent proxy, *BSD):
 
-     - Support FreeBSD's ipfw firewall interface for TransPort ports on
 
-       FreeBSD. To enable it, set "TransProxyType ipfw". Resolves ticket
 
-       10267; patch from "yurivict".
 
-     - Support OpenBSD's divert-to rules with the pf firewall for
 
-       transparent proxy ports. To enable it, set "TransProxyType
 
-       pf-divert". This allows Tor to run a TransPort transparent proxy
 
-       port on OpenBSD 4.4 or later without root privileges. See the
 
-       pf.conf(5) manual page for information on configuring pf to use
 
-       divert-to rules. Closes ticket 10896; patch from Dana Koch.
 
-   o Minor bugfixes (bridge client):
 
-     - Stop accepting bridge lines containing hostnames. Doing so would
 
-       cause clients to perform DNS requests on the hostnames, which was
 
-       not sensible behavior. Fixes bug 10801; bugfix on 0.2.0.1-alpha.
 
-   o Minor bugfixes (bridges):
 
-     - Avoid potential crashes or bad behavior when launching a
 
-       server-side managed proxy with ORPort or ExtORPort temporarily
 
-       disabled. Fixes bug 9650; bugfix on 0.2.3.16-alpha.
 
-     - Fix a bug where the first connection works to a bridge that uses a
 
-       pluggable transport with client-side parameters, but we don't send
 
-       the client-side parameters on subsequent connections. (We don't
 
-       use any pluggable transports with client-side parameters yet,
 
-       but ScrambleSuit will soon become the first one.) Fixes bug 9162;
 
-       bugfix on 0.2.0.3-alpha. Based on a patch from "rl1987".
 
-   o Minor bugfixes (build, auxiliary programs):
 
-     - Stop preprocessing the "torify" script with autoconf, since
 
-       it no longer refers to LOCALSTATEDIR. Fixes bug 5505; patch
 
-       from Guilhem.
 
-     - The tor-fw-helper program now follows the standard convention and
 
-       exits with status code "0" on success. Fixes bug 9030; bugfix on
 
-       0.2.3.1-alpha. Patch by Arlo Breault.
 
-     - Corrected ./configure advice for what openssl dev package you should
 
-       install on Debian. Fixes bug 9207; bugfix on 0.2.0.1-alpha.
 
-   o Minor bugfixes (client):
 
-     - Avoid "Tried to open a socket with DisableNetwork set" warnings
 
-       when starting a client with bridges configured and DisableNetwork
 
-       set. (Tor launcher starts Tor with DisableNetwork set the first
 
-       time it runs.) Fixes bug 10405; bugfix on 0.2.3.9-alpha.
 
-     - Improve the log message when we can't connect to a hidden service
 
-       because all of the hidden service directory nodes hosting its
 
-       descriptor are excluded. Improves on our fix for bug 10722, which
 
-       was a bugfix on 0.2.0.10-alpha.
 
-     - Raise a control port warning when we fail to connect to all of
 
-       our bridges. Previously, we didn't inform the controller, and
 
-       the bootstrap process would stall. Fixes bug 11069; bugfix on
 
-       0.2.1.2-alpha.
 
-     - Exit immediately when a process-owning controller exits.
 
-       Previously, tor relays would wait for a little while after their
 
-       controller exited, as if they had gotten an INT signal -- but this
 
-       was problematic, since there was no feedback for the user. To do a
 
-       clean shutdown, controllers should send an INT signal and give Tor
 
-       a chance to clean up. Fixes bug 10449; bugfix on 0.2.2.28-beta.
 
-     - Stop attempting to connect to bridges before our pluggable
 
-       transports are configured (harmless but resulted in some erroneous
 
-       log messages). Fixes bug 11156; bugfix on 0.2.3.2-alpha.
 
-     - Fix connections to IPv6 addresses over SOCKS5. Previously, we were
 
-       generating incorrect SOCKS5 responses, and confusing client
 
-       applications. Fixes bug 10987; bugfix on 0.2.4.7-alpha.
 
-   o Minor bugfixes (client, DNSPort):
 
-     - When using DNSPort, try to respond to AAAA requests with AAAA
 
-       answers. Previously, we hadn't looked at the request type when
 
-       deciding which answer type to prefer. Fixes bug 10468; bugfix on
 
-       0.2.4.7-alpha.
 
-     - When receiving a DNS query for an unsupported record type, reply
 
-       with no answer rather than with a NOTIMPL error. This behavior
 
-       isn't correct either, but it will break fewer client programs, we
 
-       hope. Fixes bug 10268; bugfix on 0.2.0.1-alpha. Original patch
 
-       from "epoch".
 
-   o Minor bugfixes (client, logging during bootstrap):
 
-     - Only report the first fatal bootstrap error on a given OR
 
-       connection. This stops us from telling the controller bogus error
 
-       messages like "DONE". Fixes bug 10431; bugfix on 0.2.1.1-alpha.
 
-     - Avoid generating spurious warnings when starting with
 
-       DisableNetwork enabled. Fixes bug 11200 and bug 10405; bugfix on
 
-       0.2.3.9-alpha.
 
-   o Minor bugfixes (closing OR connections):
 
-     - If write_to_buf() in connection_write_to_buf_impl_() ever fails,
 
-       check if it's an or_connection_t and correctly call
 
-       connection_or_close_for_error() rather than
 
-       connection_mark_for_close() directly. Fixes bug 11304; bugfix on
 
-       0.2.4.4-alpha.
 
-     - When closing all connections on setting DisableNetwork to 1, use
 
-       connection_or_close_normally() rather than closing OR connections
 
-       out from under the channel layer. Fixes bug 11306; bugfix on
 
-       0.2.4.4-alpha.
 
-   o Minor bugfixes (code correctness):
 
-     - Previously we used two temporary files when writing descriptors to
 
-       disk; now we only use one. Fixes bug 1376.
 
-     - Remove an erroneous (but impossible and thus harmless) pointer
 
-       comparison that would have allowed compilers to skip a bounds
 
-       check in channeltls.c. Fixes bugs 10313 and 9980; bugfix on
 
-       0.2.0.10-alpha. Noticed by Jared L Wong and David Fifield.
 
-     - Fix an always-true assertion in pluggable transports code so it
 
-       actually checks what it was trying to check. Fixes bug 10046;
 
-       bugfix on 0.2.3.9-alpha. Found by "dcb".
 
-   o Minor bugfixes (command line):
 
-     - Use a single command-line parser for parsing torrc options on the
 
-       command line and for finding special command-line options to avoid
 
-       inconsistent behavior for torrc option arguments that have the same
 
-       names as command-line options. Fixes bugs 4647 and 9578; bugfix on
 
-       0.0.9pre5.
 
-     - No longer allow 'tor --hash-password' with no arguments. Fixes bug
 
-       9573; bugfix on 0.0.9pre5.
 
-   o Minor bugfixes (compilation):
 
-     - Compile correctly with builds and forks of OpenSSL (such as
 
-       LibreSSL) that disable compression. Fixes bug 12602; bugfix on
 
-       0.2.1.1-alpha. Patch from "dhill".
 
-     - Restore the ability to compile Tor with V2_HANDSHAKE_SERVER
 
-       turned off (that is, without support for v2 link handshakes). Fixes
 
-       bug 4677; bugfix on 0.2.3.2-alpha. Patch from "piet".
 
-     - In routerlist_assert_ok(), don't take the address of a
 
-       routerinfo's cache_info member unless that routerinfo is non-NULL.
 
-       Fixes bug 13096; bugfix on 0.1.1.9-alpha. Patch by "teor".
 
-     - Fix a large number of false positive warnings from the clang
 
-       analyzer static analysis tool. This should make real warnings
 
-       easier for clang analyzer to find. Patch from "teor". Closes
 
-       ticket 13036.
 
-     - Resolve GCC complaints on OpenBSD about discarding constness in
 
-       TO_{ORIGIN,OR}_CIRCUIT functions. Fixes part of bug 11633; bugfix
 
-       on 0.1.1.23. Patch from Dana Koch.
 
-     - Resolve clang complaints on OpenBSD with -Wshorten-64-to-32 due to
 
-       treatment of long and time_t as comparable types. Fixes part of
 
-       bug 11633. Patch from Dana Koch.
 
-     - When deciding whether to build the 64-bit curve25519
 
-       implementation, detect platforms where we can compile 128-bit
 
-       arithmetic but cannot link it. Fixes bug 11729; bugfix on
 
-       0.2.4.8-alpha. Patch from "conradev".
 
-     - Fix compilation when DNS_CACHE_DEBUG is enabled. Fixes bug 11761;
 
-       bugfix on 0.2.3.13-alpha. Found by "cypherpunks".
 
-     - Fix compilation with dmalloc. Fixes bug 11605; bugfix
 
-       on 0.2.4.10-alpha.
 
-     - Build and run correctly on systems like OpenBSD-current that have
 
-       patched OpenSSL to remove get_cipher_by_char and/or its
 
-       implementations. Fixes issue 13325.
 
-   o Minor bugfixes (controller and command-line):
 
-     - If changing a config option via "setconf" fails in a recoverable
 
-       way, we used to nonetheless write our new control ports to the
 
-       file described by the "ControlPortWriteToFile" option. Now we only
 
-       write out that file if we successfully switch to the new config
 
-       option. Fixes bug 5605; bugfix on 0.2.2.26-beta. Patch from "Ryman".
 
-   o Minor bugfixes (directory server):
 
-     - No longer accept malformed http headers when parsing urls from
 
-       headers. Now we reply with Bad Request ("400"). Fixes bug 2767;
 
-       bugfix on 0.0.6pre1.
 
-     - When sending a compressed set of descriptors or microdescriptors,
 
-       make sure to finalize the zlib stream. Previously, we would write
 
-       all the compressed data, but if the last descriptor we wanted to
 
-       send was missing or too old, we would not mark the stream as
 
-       finished. This caused problems for decompression tools. Fixes bug
 
-       11648; bugfix on 0.1.1.23.
 
-   o Minor bugfixes (hidden service):
 
-     - Only retry attempts to connect to a chosen rendezvous point 8
 
-       times, not 30. Fixes bug 4241; bugfix on 0.1.0.1-rc.
 
-   o Minor bugfixes (interface):
 
-     - Reject relative control socket paths and emit a warning. Previously,
 
-       single-component control socket paths would be rejected, but Tor
 
-       would not log why it could not validate the config. Fixes bug 9258;
 
-       bugfix on 0.2.3.16-alpha.
 
-   o Minor bugfixes (log messages):
 
-     - Fix a bug where clients using bridges would report themselves
 
-       as 50% bootstrapped even without a live consensus document.
 
-       Fixes bug 9922; bugfix on 0.2.1.1-alpha.
 
-     - Suppress a warning where, if there's only one directory authority
 
-       in the network, we would complain that votes and signatures cannot
 
-       be uploaded to other directory authorities. Fixes bug 10842;
 
-       bugfix on 0.2.2.26-beta.
 
-     - Report bootstrapping progress correctly when we're downloading
 
-       microdescriptors. We had updated our "do we have enough microdescs
 
-       to begin building circuits?" logic most recently in 0.2.4.10-alpha
 
-       (see bug 5956), but we left the bootstrap status event logic at
 
-       "how far through getting 1/4 of them are we?" Fixes bug 9958;
 
-       bugfix on 0.2.2.36, which is where they diverged (see bug 5343).
 
-   o Minor bugfixes (logging):
 
-     - Downgrade "Unexpected onionskin length after decryption" warning
 
-       to a protocol-warn, since there's nothing relay operators can do
 
-       about a client that sends them a malformed create cell. Resolves
 
-       bug 12996; bugfix on 0.0.6rc1.
 
-     - Log more specific warnings when we get an ESTABLISH_RENDEZVOUS
 
-       cell on a cannibalized or non-OR circuit. Resolves ticket 12997.
 
-     - When logging information about an EXTEND2 or EXTENDED2 cell, log
 
-       their names correctly. Fixes part of bug 12700; bugfix
 
-       on 0.2.4.8-alpha.
 
-     - When logging information about a relay cell whose command we don't
 
-       recognize, log its command as an integer. Fixes part of bug 12700;
 
-       bugfix on 0.2.1.10-alpha.
 
-     - Escape all strings from the directory connection before logging
 
-       them. Fixes bug 13071; bugfix on 0.1.1.15. Patch from "teor".
 
-     - Squelch a spurious LD_BUG message "No origin circuit for
 
-       successful SOCKS stream" in certain hidden service failure cases;
 
-       fixes bug 10616.
 
-     - Downgrade the severity of the 'unexpected sendme cell from client'
 
-       from 'warn' to 'protocol warning'. Closes ticket 8093.
 
-   o Minor bugfixes (misc code correctness):
 
-     - In munge_extrainfo_into_routerinfo(), check the return value of
 
-       memchr(). This would have been a serious issue if we ever passed
 
-       it a non-extrainfo. Fixes bug 8791; bugfix on 0.2.0.6-alpha. Patch
 
-       from Arlo Breault.
 
-     - On the chance that somebody manages to build Tor on a
 
-       platform where time_t is unsigned, correct the way that
 
-       microdesc_add_to_cache() handles negative time arguments.
 
-       Fixes bug 8042; bugfix on 0.2.3.1-alpha.
 
-     - Fix various instances of undefined behavior in channeltls.c,
 
-       tor_memmem(), and eventdns.c that would cause us to construct
 
-       pointers to memory outside an allocated object. (These invalid
 
-       pointers were not accessed, but C does not even allow them to
 
-       exist.) Fixes bug 10363; bugfixes on 0.1.1.1-alpha, 0.1.2.1-alpha,
 
-       0.2.0.10-alpha, and 0.2.3.6-alpha. Reported by "bobnomnom".
 
-     - Use the AddressSanitizer and Ubsan sanitizers (in clang-3.4) to
 
-       fix some miscellaneous errors in our tests and codebase. Fixes bug
 
-       11232. Bugfixes on versions back as far as 0.2.1.11-alpha.
 
-     - Always check return values for unlink, munmap, UnmapViewOfFile;
 
-       check strftime return values more often. In some cases all we can
 
-       do is report a warning, but this may help prevent deeper bugs from
 
-       going unnoticed. Closes ticket 8787; bugfixes on many, many tor
 
-       versions.
 
-     - Fix numerous warnings from the clang "scan-build" static analyzer.
 
-       Some of these are programming style issues; some of them are false
 
-       positives that indicated awkward code; some are undefined behavior
 
-       cases related to constructing (but not using) invalid pointers;
 
-       some are assumptions about API behavior; some are (harmlessly)
 
-       logging sizeof(ptr) bytes from a token when sizeof(*ptr) would be
 
-       correct; and one or two are genuine bugs that weren't reachable
 
-       from the rest of the program. Fixes bug 8793; bugfixes on many,
 
-       many tor versions.
 
-   o Minor bugfixes (node selection):
 
-     - If ExcludeNodes is set, consider non-excluded hidden service
 
-       directory servers before excluded ones. Do not consider excluded
 
-       hidden service directory servers at all if StrictNodes is
 
-       set. (Previously, we would sometimes decide to connect to those
 
-       servers, and then realize before we initiated a connection that
 
-       we had excluded them.) Fixes bug 10722; bugfix on 0.2.0.10-alpha.
 
-       Reported by "mr-4".
 
-     - If we set the ExitNodes option but it doesn't include any nodes
 
-       that have the Exit flag, we would choose not to bootstrap. Now we
 
-       bootstrap so long as ExitNodes includes nodes which can exit to
 
-       some port. Fixes bug 10543; bugfix on 0.2.4.10-alpha.
 
-   o Minor bugfixes (performance):
 
-     - Avoid a bug where every successful connection made us recompute
 
-       the flag telling us whether we have sufficient information to
 
-       build circuits. Previously, we would forget our cached value
 
-       whenever we successfully opened a channel (or marked a router as
 
-       running or not running for any other reason), regardless of
 
-       whether we had previously believed the router to be running. This
 
-       forced us to run an expensive update operation far too often.
 
-       Fixes bug 12170; bugfix on 0.1.2.1-alpha.
 
-     - Avoid using tor_memeq() for checking relay cell integrity. This
 
-       removes a possible performance bottleneck. Fixes part of bug
 
-       12169; bugfix on 0.2.1.31.
 
-   o Minor bugfixes (platform-specific):
 
-     - When dumping a malformed directory object to disk, save it in
 
-       binary mode on Windows, not text mode. Fixes bug 11342; bugfix on
 
-       0.2.2.1-alpha.
 
-     - Don't report failures from make_socket_reuseable() on incoming
 
-       sockets on OSX: this can happen when incoming connections close
 
-       early. Fixes bug 10081.
 
-   o Minor bugfixes (pluggable transports):
 
-     - Avoid another 60-second delay when starting Tor in a pluggable-
 
-       transport-using configuration when we already have cached
 
-       descriptors for our bridges. Fixes bug 11965; bugfix
 
-       on 0.2.3.6-alpha.
 
-   o Minor bugfixes (protocol correctness):
 
-     - When receiving a VERSIONS cell with an odd number of bytes, close
 
-       the connection immediately since the cell is malformed. Fixes bug
 
-       10365; bugfix on 0.2.0.10-alpha. Spotted by "bobnomnom"; fix by
 
-       "rl1987".
 
-   o Minor bugfixes (relay, other):
 
-     - We now drop CREATE cells for already-existent circuit IDs and for
 
-       zero-valued circuit IDs, regardless of other factors that might
 
-       otherwise have called for DESTROY cells. Fixes bug 12191; bugfix
 
-       on 0.0.8pre1.
 
-     - When rejecting DATA cells for stream_id zero, still count them
 
-       against the circuit's deliver window so that we don't fail to send
 
-       a SENDME. Fixes bug 11246; bugfix on 0.2.4.10-alpha.
 
-   o Minor bugfixes (relay, threading):
 
-     - Check return code on spawn_func() in cpuworker code, so that we
 
-       don't think we've spawned a nonworking cpuworker and write junk to
 
-       it forever. Fix related to bug 4345; bugfix on all released Tor
 
-       versions. Found by "skruffy".
 
-     - Use a pthread_attr to make sure that spawn_func() cannot return an
 
-       error while at the same time launching a thread. Fix related to
 
-       bug 4345; bugfix on all released Tor versions. Reported
 
-       by "cypherpunks".
 
-   o Minor bugfixes (relays and bridges):
 
-     - Avoid crashing on a malformed resolv.conf file when running a
 
-       relay using Libevent 1. Fixes bug 8788; bugfix on 0.1.1.23.
 
-     - Non-exit relays no longer launch mock DNS requests to check for
 
-       DNS hijacking. This has been unnecessary since 0.2.1.7-alpha, when
 
-       non-exit relays stopped servicing DNS requests. Fixes bug 965;
 
-       bugfix on 0.2.1.7-alpha. Patch from Matt Pagan.
 
-     - Bridges now report complete directory request statistics. Related
 
-       to bug 5824; bugfix on 0.2.2.1-alpha.
 
-     - Bridges now never collect statistics that were designed for
 
-       relays. Fixes bug 5824; bugfix on 0.2.3.8-alpha.
 
-   o Minor bugfixes (testing):
 
-     - Fix all valgrind warnings produced by the unit tests. There were
 
-       over a thousand memory leak warnings previously, mostly produced
 
-       by forgetting to free things in the unit test code. Fixes bug
 
-       11618, bugfixes on many versions of Tor.
 
-   o Minor bugfixes (tor-fw-helper):
 
-     - Give a correct log message when tor-fw-helper fails to launch.
 
-       (Previously, we would say something like "tor-fw-helper sent us a
 
-       string we could not parse".) Fixes bug 9781; bugfix
 
-       on 0.2.4.2-alpha.
 
-   o Minor bugfixes (trivial memory leaks):
 
-     - Fix a small memory leak when signing a directory object. Fixes bug
 
-       11275; bugfix on 0.2.4.13-alpha.
 
-     - Resolve some memory leaks found by coverity in the unit tests, on
 
-       exit in tor-gencert, and on a failure to compute digests for our
 
-       own keys when generating a v3 networkstatus vote. These leaks
 
-       should never have affected anyone in practice.
 
-   o Code simplification and refactoring:
 
-     - Remove some old fallback code designed to keep Tor clients working
 
-       in a network with only two working relays. Elsewhere in the code we
 
-       have long since stopped supporting such networks, so there wasn't
 
-       much point in keeping it around. Addresses ticket 9926.
 
-     - Reject 0-length EXTEND2 cells more explicitly. Fixes bug 10536;
 
-       bugfix on 0.2.4.8-alpha. Reported by "cypherpunks".
 
-     - Extract the common duplicated code for creating a subdirectory
 
-       of the data directory and writing to a file in it. Fixes ticket
 
-       4282; patch from Peter Retzlaff.
 
-     - Since OpenSSL 0.9.7, the i2d_*() functions support allocating output
 
-       buffer. Avoid calling twice: i2d_RSAPublicKey(), i2d_DHparams(),
 
-       i2d_X509(), and i2d_PublicKey(). Resolves ticket 5170.
 
-     - Add a set of accessor functions for the circuit timeout data
 
-       structure. Fixes ticket 6153; patch from "piet".
 
-     - Clean up exit paths from connection_listener_new(). Closes ticket
 
-       8789. Patch from Arlo Breault.
 
-     - Since we rely on OpenSSL 0.9.8 now, we can use EVP_PKEY_cmp()
 
-       and drop our own custom pkey_eq() implementation. Fixes bug 9043.
 
-     - Use a doubly-linked list to implement the global circuit list.
 
-       Resolves ticket 9108. Patch from Marek Majkowski.
 
-     - Remove contrib/id_to_fp.c since it wasn't used anywhere.
 
-     - Remove constants and tests for PKCS1 padding; it's insecure and
 
-       shouldn't be used for anything new. Fixes bug 8792; patch
 
-       from Arlo Breault.
 
-     - Remove instances of strcpy() from the unit tests. They weren't
 
-       hurting anything, since they were only in the unit tests, but it's
 
-       embarassing to have strcpy() in the code at all, and some analysis
 
-       tools don't like it. Fixes bug 8790; bugfix on 0.2.3.6-alpha and
 
-       0.2.3.8-alpha. Patch from Arlo Breault.
 
-     - Remove is_internal_IP() function. Resolves ticket 4645.
 
-     - Remove unused function circuit_dump_by_chan from circuitlist.c.
 
-       Closes issue 9107; patch from "marek".
 
-     - Change our use of the ENUM_BF macro to avoid declarations that
 
-       confuse Doxygen.
 
-     - Get rid of router->address, since in all cases it was just the
 
-       string representation of router->addr. Resolves ticket 5528.
 
-   o Documentation:
 
-     - Adjust the URLs in the README to refer to the new locations of
 
-       several documents on the website. Fixes bug 12830. Patch from
 
-       Matt Pagan.
 
-     - Document 'reject6' and 'accept6' ExitPolicy entries. Resolves
 
-       ticket 12878.
 
-     - Update manpage to describe some of the files you can expect to
 
-       find in Tor's DataDirectory. Addresses ticket 9839.
 
-     - Clean up several option names in the manpage to match their real
 
-       names, add the missing documentation for a couple of testing and
 
-       directory authority options, remove the documentation for a
 
-       V2-directory fetching option that no longer exists. Resolves
 
-       ticket 11634.
 
-     - Correct the documenation so that it lists the correct directory
 
-       for the stats files. (They are in a subdirectory called "stats",
 
-       not "status".)
 
-     - In the manpage, move more authority-only options into the
 
-       directory authority section so that operators of regular directory
 
-       caches don't get confused.
 
-     - Fix the layout of the SOCKSPort flags in the manpage. Fixes bug
 
-       11061; bugfix on 0.2.4.7-alpha.
 
-     - Resolve warnings from Doxygen.
 
-     - Document in the manpage that "KBytes" may also be written as
 
-       "kilobytes" or "KB", that "Kbits" may also be written as
 
-       "kilobits", and so forth. Closes ticket 9222.
 
-     - Document that the ClientOnly config option overrides ORPort.
 
-       Our old explanation made ClientOnly sound as though it did
 
-       nothing at all. Resolves bug 9059.
 
-     - Explain that SocksPolicy, DirPolicy, and similar options don't
 
-       take port arguments. Fixes the other part of ticket 11108.
 
-     - Fix a comment about the rend_server_descriptor_t.protocols field
 
-       to more accurately describe its range. Also, make that field
 
-       unsigned, to more accurately reflect its usage. Fixes bug 9099;
 
-       bugfix on 0.2.1.5-alpha.
 
-     - Fix the manpage's description of HiddenServiceAuthorizeClient:
 
-       the maximum client name length is 16, not 19. Fixes bug 11118;
 
-       bugfix on 0.2.1.6-alpha.
 
-   o Package cleanup:
 
-     - The contrib directory has been sorted and tidied. Before, it was
 
-       an unsorted dumping ground for useful and not-so-useful things.
 
-       Now, it is divided based on functionality, and the items which
 
-       seemed to be nonfunctional or useless have been removed. Resolves
 
-       ticket 8966; based on patches from "rl1987".
 
-   o Removed code and features:
 
-     - Clients now reject any directory authority certificates lacking
 
-       a dir-key-crosscert element. These have been included since
 
-       0.2.1.9-alpha, so there's no real reason for them to be optional
 
-       any longer. Completes proposal 157. Resolves ticket 10162.
 
-     - Remove all code that existed to support the v2 directory system,
 
-       since there are no longer any v2 directory authorities. Resolves
 
-       ticket 10758.
 
-     - Remove the HSAuthoritativeDir and AlternateHSAuthority torrc
 
-       options, which were used for designating authorities as "Hidden
 
-       service authorities". There has been no use of hidden service
 
-       authorities since 0.2.2.1-alpha, when we stopped uploading or
 
-       downloading v0 hidden service descriptors. Fixes bug 10881; also
 
-       part of a fix for bug 10841.
 
-     - Remove /tor/dbg-stability.txt URL that was meant to help debug WFU
 
-       and MTBF calculations, but that nobody was using. Fixes bug 11742.
 
-     - The TunnelDirConns and PreferTunnelledDirConns options no longer
 
-       exist; tunneled directory connections have been available since
 
-       0.1.2.5-alpha, and turning them off is not a good idea. This is a
 
-       brute-force fix for 10849, where "TunnelDirConns 0" would break
 
-       hidden services.
 
-     - Remove all code for the long unused v1 directory protocol.
 
-       Resolves ticket 11070.
 
-     - Remove all remaining code related to version-0 hidden service
 
-       descriptors: they have not been in use since 0.2.2.1-alpha. Fixes
 
-       the rest of bug 10841.
 
-     - Remove migration code from when we renamed the "cached-routers"
 
-       file to "cached-descriptors" back in 0.2.0.8-alpha. This
 
-       incidentally resolves ticket 6502 by cleaning up the related code
 
-       a bit. Patch from Akshay Hebbar.
 
-   o Test infrastructure:
 
-     - Tor now builds each source file in two modes: a mode that avoids
 
-       exposing identifiers needlessly, and another mode that exposes
 
-       more identifiers for testing. This lets the compiler do better at
 
-       optimizing the production code, while enabling us to take more
 
-       radical measures to let the unit tests test things.
 
-     - The production builds no longer include functions used only in
 
-       the unit tests; all functions exposed from a module only for
 
-       unit-testing are now static in production builds.
 
-     - Add an --enable-coverage configuration option to make the unit
 
-       tests (and a new src/or/tor-cov target) to build with gcov test
 
-       coverage support.
 
-     - Update to the latest version of tinytest.
 
-     - Improve the tinytest implementation of string operation tests so
 
-       that comparisons with NULL strings no longer crash the tests; they
 
-       now just fail, normally. Fixes bug 9004; bugfix on 0.2.2.4-alpha.
 
-     - New macros in test.h to simplify writing mock-functions for unit
 
-       tests. Part of ticket 11507. Patch from Dana Koch.
 
-     - We now have rudimentary function mocking support that our unit
 
-       tests can use to test functions in isolation. Function mocking
 
-       lets the tests temporarily replace a function's dependencies with
 
-       stub functions, so that the tests can check the function without
 
-       invoking the other functions it calls.
 
-   o Testing:
 
-     - Complete tests for the status.c module. Resolves ticket 11507.
 
-       Patch from Dana Koch.
 
-     - Add more unit tests for the <circid,channel>->circuit map, and
 
-       the destroy-cell-tracking code to fix bug 7912.
 
-     - Unit tests for failing cases of the TAP onion handshake.
 
-     - More unit tests for address-manipulation functions.
 
-   o Distribution (systemd):
 
-     - Include a tor.service file in contrib/dist for use with systemd.
 
-       Some distributions will be able to use this file unmodified;
 
-       others will need to tweak it, or write their own. Patch from Jamie
 
-       Nguyen; resolves ticket 8368.
 
-     - Verify configuration file via ExecStartPre in the systemd unit
 
-       file. Patch from intrigeri; resolves ticket 12730.
 
-     - Explicitly disable RunAsDaemon in the systemd unit file. Our
 
-       current systemd unit uses "Type = simple", so systemd does not
 
-       expect tor to fork. If the user has "RunAsDaemon 1" in their
 
-       torrc, then things won't work as expected. This is e.g. the case
 
-       on Debian (and derivatives), since there we pass "--defaults-torrc
 
-       /usr/share/tor/tor-service-defaults-torrc" (that contains
 
-       "RunAsDaemon 1") by default. Patch by intrigeri; resolves
 
-       ticket 12731.
 
- Changes in version 0.2.4.25 - 2014-10-20
 
-   Tor 0.2.4.25 disables SSL3 in response to the recent "POODLE" attack
 
-   (even though POODLE does not affect Tor). It also works around a crash
 
-   bug caused by some operating systems' response to the "POODLE" attack
 
-   (which does affect Tor).
 
-   o Major security fixes (also in 0.2.5.9-rc):
 
-     - Disable support for SSLv3. All versions of OpenSSL in use with Tor
 
-       today support TLS 1.0 or later, so we can safely turn off support
 
-       for this old (and insecure) protocol. Fixes bug 13426.
 
-   o Major bugfixes (openssl bug workaround, also in 0.2.5.9-rc):
 
-     - Avoid crashing when using OpenSSL version 0.9.8zc, 1.0.0o, or
 
-       1.0.1j, built with the 'no-ssl3' configuration option. Fixes bug
 
-       13471. This is a workaround for an OpenSSL bug.
 
- Changes in version 0.2.4.24 - 2014-09-22
 
-   Tor 0.2.4.24 fixes a bug that affects consistency and speed when
 
-   connecting to hidden services, and it updates the location of one of
 
-   the directory authorities.
 
-   o Major bugfixes:
 
-     - Clients now send the correct address for their chosen rendezvous
 
-       point when trying to access a hidden service. They used to send
 
-       the wrong address, which would still work some of the time because
 
-       they also sent the identity digest of the rendezvous point, and if
 
-       the hidden service happened to try connecting to the rendezvous
 
-       point from a relay that already had a connection open to it,
 
-       the relay would reuse that connection. Now connections to hidden
 
-       services should be more robust and faster. Also, this bug meant
 
-       that clients were leaking to the hidden service whether they were
 
-       on a little-endian (common) or big-endian (rare) system, which for
 
-       some users might have reduced their anonymity. Fixes bug 13151;
 
-       bugfix on 0.2.1.5-alpha.
 
-   o Directory authority changes:
 
-     - Change IP address for gabelmoo (v3 directory authority).
 
-   o Minor features (geoip):
 
-     - Update geoip and geoip6 to the August 7 2014 Maxmind GeoLite2
 
-       Country database.
 
- Changes in version 0.2.4.23 - 2014-07-28
 
-   Tor 0.2.4.23 brings us a big step closer to slowing down the risk from
 
-   guard rotation, and also backports several important fixes from the
 
-   Tor 0.2.5 alpha release series.
 
-   o Major features:
 
-     - Clients now look at the "usecreatefast" consensus parameter to
 
-       decide whether to use CREATE_FAST or CREATE cells for the first hop
 
-       of their circuit. This approach can improve security on connections
 
-       where Tor's circuit handshake is stronger than the available TLS
 
-       connection security levels, but the tradeoff is more computational
 
-       load on guard relays. Implements proposal 221. Resolves ticket 9386.
 
-     - Make the number of entry guards configurable via a new
 
-       NumEntryGuards consensus parameter, and the number of directory
 
-       guards configurable via a new NumDirectoryGuards consensus
 
-       parameter. Implements ticket 12688.
 
-   o Major bugfixes:
 
-     - Fix a bug in the bounds-checking in the 32-bit curve25519-donna
 
-       implementation that caused incorrect results on 32-bit
 
-       implementations when certain malformed inputs were used along with
 
-       a small class of private ntor keys. This bug does not currently
 
-       appear to allow an attacker to learn private keys or impersonate a
 
-       Tor server, but it could provide a means to distinguish 32-bit Tor
 
-       implementations from 64-bit Tor implementations. Fixes bug 12694;
 
-       bugfix on 0.2.4.8-alpha. Bug found by Robert Ransom; fix from
 
-       Adam Langley.
 
-   o Minor bugfixes:
 
-     - Warn and drop the circuit if we receive an inbound 'relay early'
 
-       cell. Those used to be normal to receive on hidden service circuits
 
-       due to bug 1038, but the buggy Tor versions are long gone from
 
-       the network so we can afford to resume watching for them. Resolves
 
-       the rest of bug 1038; bugfix on 0.2.1.19.
 
-     - Correct a confusing error message when trying to extend a circuit
 
-       via the control protocol but we don't know a descriptor or
 
-       microdescriptor for one of the specified relays. Fixes bug 12718;
 
-       bugfix on 0.2.3.1-alpha.
 
-     - Avoid an illegal read from stack when initializing the TLS
 
-       module using a version of OpenSSL without all of the ciphers
 
-       used by the v2 link handshake. Fixes bug 12227; bugfix on
 
-       0.2.4.8-alpha.  Found by "starlight".
 
-   o Minor features:
 
-     - Update geoip and geoip6 to the July 10 2014 Maxmind GeoLite2
 
-       Country database.
 
- Changes in version 0.2.4.22 - 2014-05-16
 
-   Tor 0.2.4.22 backports numerous high-priority fixes from the Tor 0.2.5
 
-   alpha release series. These include blocking all authority signing
 
-   keys that may have been affected by the OpenSSL "heartbleed" bug,
 
-   choosing a far more secure set of TLS ciphersuites by default, closing
 
-   a couple of memory leaks that could be used to run a target relay out
 
-   of RAM, and several others.
 
-   o Major features (security, backport from 0.2.5.4-alpha):
 
-     - Block authority signing keys that were used on authorities
 
-       vulnerable to the "heartbleed" bug in OpenSSL (CVE-2014-0160). (We
 
-       don't have any evidence that these keys _were_ compromised; we're
 
-       doing this to be prudent.) Resolves ticket 11464.
 
-   o Major bugfixes (security, OOM):
 
-     - Fix a memory leak that could occur if a microdescriptor parse
 
-       fails during the tokenizing step. This bug could enable a memory
 
-       exhaustion attack by directory servers. Fixes bug 11649; bugfix
 
-       on 0.2.2.6-alpha.
 
-   o Major bugfixes (TLS cipher selection, backport from 0.2.5.4-alpha):
 
-     - The relay ciphersuite list is now generated automatically based on
 
-       uniform criteria, and includes all OpenSSL ciphersuites with
 
-       acceptable strength and forward secrecy. Previously, we had left
 
-       some perfectly fine ciphersuites unsupported due to omission or
 
-       typo. Resolves bugs 11513, 11492, 11498, 11499. Bugs reported by
 
-       'cypherpunks'. Bugfix on 0.2.4.8-alpha.
 
-     - Relays now trust themselves to have a better view than clients of
 
-       which TLS ciphersuites are better than others. (Thanks to bug
 
-       11513, the relay list is now well-considered, whereas the client
 
-       list has been chosen mainly for anti-fingerprinting purposes.)
 
-       Relays prefer: AES over 3DES; then ECDHE over DHE; then GCM over
 
-       CBC; then SHA384 over SHA256 over SHA1; and last, AES256 over
 
-       AES128. Resolves ticket 11528.
 
-     - Clients now try to advertise the same list of ciphersuites as
 
-       Firefox 28. This change enables selection of (fast) GCM
 
-       ciphersuites, disables some strange old ciphers, and stops
 
-       advertising the ECDH (not to be confused with ECDHE) ciphersuites.
 
-       Resolves ticket 11438.
 
-   o Minor bugfixes (configuration, security):
 
-     - When running a hidden service, do not allow TunneledDirConns 0:
 
-       trying to set that option together with a hidden service would
 
-       otherwise prevent the hidden service from running, and also make
 
-       it publish its descriptors directly over HTTP. Fixes bug 10849;
 
-       bugfix on 0.2.1.1-alpha.
 
-   o Minor bugfixes (controller, backport from 0.2.5.4-alpha):
 
-     - Avoid sending a garbage value to the controller when a circuit is
 
-       cannibalized. Fixes bug 11519; bugfix on 0.2.3.11-alpha.
 
-   o Minor bugfixes (exit relay, backport from 0.2.5.4-alpha):
 
-     - Stop leaking memory when we successfully resolve a PTR record.
 
-       Fixes bug 11437; bugfix on 0.2.4.7-alpha.
 
-   o Minor bugfixes (bridge client, backport from 0.2.5.4-alpha):
 
-     - Avoid 60-second delays in the bootstrapping process when Tor is
 
-       launching for a second time while using bridges. Fixes bug 9229;
 
-       bugfix on 0.2.0.3-alpha.
 
-   o Minor bugfixes (relays and bridges, backport from 0.2.5.4-alpha):
 
-     - Give the correct URL in the warning message when trying to run a
 
-       relay on an ancient version of Windows. Fixes bug 9393.
 
-   o Minor bugfixes (compilation):
 
-     - Fix a compilation error when compiling with --disable-curve25519.
 
-       Fixes bug 9700; bugfix on 0.2.4.17-rc.
 
-   o Minor bugfixes:
 
-     - Downgrade the warning severity for the the "md was still
 
-       referenced 1 node(s)" warning. Tor 0.2.5.4-alpha has better code
 
-       for trying to diagnose this bug, and the current warning in
 
-       earlier versions of tor achieves nothing useful. Addresses warning
 
-       from bug 7164.
 
-   o Minor features (log verbosity, backport from 0.2.5.4-alpha):
 
-     - When we run out of usable circuit IDs on a channel, log only one
 
-       warning for the whole channel, and describe how many circuits
 
-       there were on the channel. Fixes part of ticket 11553.
 
-   o Minor features (security, backport from 0.2.5.4-alpha):
 
-     - Decrease the lower limit of MaxMemInCellQueues to 256 MBytes (but
 
-       leave the default at 8GBytes), to better support Raspberry Pi
 
-       users. Fixes bug 9686; bugfix on 0.2.4.14-alpha.
 
-   o Documentation (backport from 0.2.5.4-alpha):
 
-     - Correctly document that we search for a system torrc file before
 
-       looking in ~/.torrc. Fixes documentation side of 9213; bugfix on
 
-       0.2.3.18-rc.
 
- Changes in version 0.2.4.21 - 2014-02-28
 
-   Tor 0.2.4.21 further improves security against potential adversaries who
 
-   find breaking 1024-bit crypto doable, and backports several stability
 
-   and robustness patches from the 0.2.5 branch.
 
-   o Major features (client security):
 
-     - When we choose a path for a 3-hop circuit, make sure it contains
 
-       at least one relay that supports the NTor circuit extension
 
-       handshake. Otherwise, there is a chance that we're building
 
-       a circuit that's worth attacking by an adversary who finds
 
-       breaking 1024-bit crypto doable, and that chance changes the game
 
-       theory. Implements ticket 9777.
 
-   o Major bugfixes:
 
-     - Do not treat streams that fail with reason
 
-       END_STREAM_REASON_INTERNAL as indicating a definite circuit failure,
 
-       since it could also indicate an ENETUNREACH connection error. Fixes
 
-       part of bug 10777; bugfix on 0.2.4.8-alpha.
 
-   o Code simplification and refactoring:
 
-     - Remove data structures which were introduced to implement the
 
-       CellStatistics option: they are now redundant with the new timestamp
 
-       field in the regular packed_cell_t data structure, which we did
 
-       in 0.2.4.18-rc in order to resolve bug 9093. Resolves ticket 10870.
 
-   o Minor features:
 
-     - Always clear OpenSSL bignums before freeing them -- even bignums
 
-       that don't contain secrets. Resolves ticket 10793. Patch by
 
-       Florent Daigniere.
 
-     - Build without warnings under clang 3.4. (We have some macros that
 
-       define static functions only some of which will get used later in
 
-       the module. Starting with clang 3.4, these give a warning unless the
 
-       unused attribute is set on them.) Resolves ticket 10904.
 
-     - Update geoip and geoip6 files to the February 7 2014 Maxmind
 
-       GeoLite2 Country database.
 
-   o Minor bugfixes:
 
-     - Set the listen() backlog limit to the largest actually supported
 
-       on the system, not to the value in a header file. Fixes bug 9716;
 
-       bugfix on every released Tor.
 
-     - Treat ENETUNREACH, EACCES, and EPERM connection failures at an
 
-       exit node as a NOROUTE error, not an INTERNAL error, since they
 
-       can apparently happen when trying to connect to the wrong sort
 
-       of netblocks. Fixes part of bug 10777; bugfix on 0.1.0.1-rc.
 
-     - Fix build warnings about missing "a2x" comment when building the
 
-       manpages from scratch on OpenBSD; OpenBSD calls it "a2x.py".
 
-       Fixes bug 10929; bugfix on 0.2.2.9-alpha. Patch from Dana Koch.
 
-     - Avoid a segfault on SIGUSR1, where we had freed a connection but did
 
-       not entirely remove it from the connection lists. Fixes bug 9602;
 
-       bugfix on 0.2.4.4-alpha.
 
-     - Fix a segmentation fault in our benchmark code when running with
 
-       Fedora's OpenSSL package, or any other OpenSSL that provides
 
-       ECDH but not P224. Fixes bug 10835; bugfix on 0.2.4.8-alpha.
 
-     - Turn "circuit handshake stats since last time" log messages into a
 
-       heartbeat message. Fixes bug 10485; bugfix on 0.2.4.17-rc.
 
-   o Documentation fixes:
 
-     - Document that all but one DirPort entry must have the NoAdvertise
 
-       flag set. Fixes bug 10470; bugfix on 0.2.3.3-alpha / 0.2.3.16-alpha.
 
- Changes in version 0.2.4.20 - 2013-12-22
 
-   Tor 0.2.4.20 fixes potentially poor random number generation for users
 
-   who 1) use OpenSSL 1.0.0 or later, 2) set "HardwareAccel 1" in their
 
-   torrc file, 3) have "Sandy Bridge" or "Ivy Bridge" Intel processors,
 
-   and 4) have no state file in their DataDirectory (as would happen on
 
-   first start). Users who generated relay or hidden service identity
 
-   keys in such a situation should discard them and generate new ones.
 
-   This release also fixes a logic error that caused Tor clients to build
 
-   many more preemptive circuits than they actually need.
 
-   o Major bugfixes:
 
-     - Do not allow OpenSSL engines to replace the PRNG, even when
 
-       HardwareAccel is set. The only default builtin PRNG engine uses
 
-       the Intel RDRAND instruction to replace the entire PRNG, and
 
-       ignores all attempts to seed it with more entropy. That's
 
-       cryptographically stupid: the right response to a new alleged
 
-       entropy source is never to discard all previously used entropy
 
-       sources. Fixes bug 10402; works around behavior introduced in
 
-       OpenSSL 1.0.0. Diagnosis and investigation thanks to "coderman"
 
-       and "rl1987".
 
-     - Fix assertion failure when AutomapHostsOnResolve yields an IPv6
 
-       address. Fixes bug 10465; bugfix on 0.2.4.7-alpha.
 
-     - Avoid launching spurious extra circuits when a stream is pending.
 
-       This fixes a bug where any circuit that _wasn't_ unusable for new
 
-       streams would be treated as if it were, causing extra circuits to
 
-       be launched. Fixes bug 10456; bugfix on 0.2.4.12-alpha.
 
-   o Minor bugfixes:
 
-     - Avoid a crash bug when starting with a corrupted microdescriptor
 
-       cache file. Fixes bug 10406; bugfix on 0.2.2.6-alpha.
 
-     - If we fail to dump a previously cached microdescriptor to disk, avoid
 
-       freeing duplicate data later on. Fixes bug 10423; bugfix on
 
-       0.2.4.13-alpha. Spotted by "bobnomnom".
 
- Changes in version 0.2.4.19 - 2013-12-11
 
-   The Tor 0.2.4 release series is dedicated to the memory of Aaron Swartz
 
-   (1986-2013). Aaron worked on diverse projects including helping to guide
 
-   Creative Commons, playing a key role in stopping SOPA/PIPA, bringing
 
-   transparency to the U.S government's PACER documents, and contributing
 
-   design and development for Tor and Tor2Web. Aaron was one of the latest
 
-   martyrs in our collective fight for civil liberties and human rights,
 
-   and his death is all the more painful because he was one of us.
 
-   Tor 0.2.4.19, the first stable release in the 0.2.4 branch, features
 
-   a new circuit handshake and link encryption that use ECC to provide
 
-   better security and efficiency; makes relays better manage circuit
 
-   creation requests; uses "directory guards" to reduce client enumeration
 
-   risks; makes bridges collect and report statistics about the pluggable
 
-   transports they support; cleans up and improves our geoip database;
 
-   gets much closer to IPv6 support for clients, bridges, and relays; makes
 
-   directory authorities use measured bandwidths rather than advertised
 
-   ones when computing flags and thresholds; disables client-side DNS
 
-   caching to reduce tracking risks; and fixes a big bug in bridge
 
-   reachability testing. This release introduces two new design
 
-   abstractions in the code: a new "channel" abstraction between circuits
 
-   and or_connections to allow for implementing alternate relay-to-relay
 
-   transports, and a new "circuitmux" abstraction storing the queue of
 
-   circuits for a channel. The release also includes many stability,
 
-   security, and privacy fixes.
 
-   o Major features (new circuit handshake):
 
-     - Tor now supports a new circuit extension handshake designed by Ian
 
-       Goldberg, Douglas Stebila, and Berkant Ustaoglu. Our original
 
-       circuit extension handshake, later called "TAP", was a bit slow
 
-       (especially on the relay side), had a fragile security proof, and
 
-       used weaker keys than we'd now prefer. The new circuit handshake
 
-       uses Dan Bernstein's "curve25519" elliptic-curve Diffie-Hellman
 
-       function, making it significantly more secure than the older
 
-       handshake, and significantly faster. Tor can use one of two built-in
 
-       pure-C curve25519-donna implementations by Adam Langley, or it
 
-       can link against the "nacl" library for a tuned version if present.
 
-       The built-in version is very fast for 64-bit systems when building
 
-       with GCC. The built-in 32-bit version is still faster than the
 
-       old TAP protocol, but using libnacl is better on most such hosts.
 
-       Implements proposal 216; closes ticket 7202.
 
-   o Major features (better link encryption):
 
-     - Relays can now enable the ECDHE TLS ciphersuites when available
 
-       and appropriate. These ciphersuites let us negotiate forward-secure
 
-       TLS secret keys more safely and more efficiently than with our
 
-       previous use of Diffie-Hellman modulo a 1024-bit prime. By default,
 
-       public relays prefer the (faster) P224 group, and bridges prefer
 
-       the (more common) P256 group; you can override this with the
 
-       TLSECGroup option.
 
-       This feature requires clients running 0.2.3.17-beta or later,
 
-       and requires both sides to be running OpenSSL 1.0.0 or later
 
-       with ECC support. OpenSSL 1.0.1, with the compile-time option
 
-       "enable-ec_nistp_64_gcc_128", is highly recommended.
 
-       Implements the relay side of proposal 198; closes ticket 7200.
 
-     - Re-enable TLS 1.1 and 1.2 when built with OpenSSL 1.0.1e or later.
 
-       Resolves ticket 6055. (OpenSSL before 1.0.1 didn't have TLS 1.1 or
 
-       1.2, and OpenSSL from 1.0.1 through 1.0.1d had bugs that prevented
 
-       renegotiation from working with TLS 1.1 or 1.2, so we had disabled
 
-       them to solve bug 6033.)
 
-   o Major features (relay performance):
 
-     - Instead of limiting the number of queued onionskins (aka circuit
 
-       create requests) to a fixed, hard-to-configure number, we limit
 
-       the size of the queue based on how many we expect to be able to
 
-       process in a given amount of time. We estimate the time it will
 
-       take to process an onionskin based on average processing time
 
-       of previous onionskins. Closes ticket 7291. You'll never have to
 
-       configure MaxOnionsPending again.
 
-     - Relays process the new "NTor" circuit-level handshake requests
 
-       with higher priority than the old "TAP" circuit-level handshake
 
-       requests. We still process some TAP requests to not totally starve
 
-       0.2.3 clients when NTor becomes popular. A new consensus parameter
 
-       "NumNTorsPerTAP" lets us tune the balance later if we need to.
 
-       Implements ticket 9574.
 
-   o Major features (client bootstrapping resilience):
 
-     - Add a new "FallbackDir" torrc option to use when we can't use
 
-       a directory mirror from the consensus (either because we lack a
 
-       consensus, or because they're all down). Currently, all authorities
 
-       are fallbacks by default, and there are no other default fallbacks,
 
-       but that will change. This option will allow us to give clients a
 
-       longer list of servers to try to get a consensus from when first
 
-       connecting to the Tor network, and thereby reduce load on the
 
-       directory authorities. Implements proposal 206, "Preconfigured
 
-       directory sources for bootstrapping". We also removed the old
 
-       "FallbackNetworkstatus" option, since we never got it working well
 
-       enough to use it. Closes bug 572.
 
-     - If we have no circuits open, use a relaxed timeout (the
 
-       95th-percentile cutoff) until a circuit succeeds. This heuristic
 
-       should allow Tor to succeed at building circuits even when the
 
-       network connection drastically changes. Should help with bug 3443.
 
-   o Major features (use of guards):
 
-     - Support directory guards (proposal 207): when possible, clients now
 
-       use their entry guards for non-anonymous directory requests. This
 
-       can help prevent client enumeration. Note that this behavior only
 
-       works when we have a usable consensus directory, and when options
 
-       about what to download are more or less standard. In the future we
 
-       should re-bootstrap from our guards, rather than re-bootstrapping
 
-       from the preconfigured list of directory sources that ships with
 
-       Tor. Resolves ticket 6526.
 
-     - Raise the default time that a client keeps an entry guard from
 
-       "1-2 months" to "2-3 months", as suggested by Tariq Elahi's WPES
 
-       2012 paper. (We would make it even longer, but we need better client
 
-       load balancing first.) Also, make the guard lifetime controllable
 
-       via a new GuardLifetime torrc option and a GuardLifetime consensus
 
-       parameter. Start of a fix for bug 8240; bugfix on 0.1.1.11-alpha.
 
-   o Major features (bridges with pluggable transports):
 
-     - Bridges now report the pluggable transports they support to the
 
-       bridge authority, so it can pass the supported transports on to
 
-       bridgedb and/or eventually do reachability testing. Implements
 
-       ticket 3589.
 
-     - Automatically forward the TCP ports of pluggable transport
 
-       proxies using tor-fw-helper if PortForwarding is enabled. Implements
 
-       ticket 4567.
 
-   o Major features (geoip database):
 
-     - Maxmind began labelling Tor relays as being in country "A1",
 
-       which breaks by-country node selection inside Tor. Now we use a
 
-       script to replace "A1" ("Anonymous Proxy") entries in our geoip
 
-       file with real country codes. This script fixes about 90% of "A1"
 
-       entries automatically and uses manual country code assignments to
 
-       fix the remaining 10%. See src/config/README.geoip for details.
 
-       Fixes bug 6266.
 
-     - Add GeoIP database for IPv6 addresses. The new config option
 
-       is GeoIPv6File.
 
-     - Update to the October 2 2013 Maxmind GeoLite Country database.
 
-   o Major features (IPv6):
 
-     - Clients who set "ClientUseIPv6 1" may connect to entry nodes over
 
-       IPv6. Set "ClientPreferIPv6ORPort 1" to make this even more likely
 
-       to happen. Implements ticket 5535.
 
-     - All kind of relays, not just bridges, can now advertise an IPv6
 
-       OR port. Implements ticket 6362.
 
-     - Relays can now exit to IPv6 addresses: make sure that you have IPv6
 
-       connectivity, then set the IPv6Exit flag to 1. Also make sure your
 
-       exit policy reads as you would like: the address * applies to all
 
-       address families, whereas *4 is IPv4 address only, and *6 is IPv6
 
-       addresses only. On the client side, you'll need to wait for enough
 
-       exits to support IPv6, apply the "IPv6Traffic" flag to a SocksPort,
 
-       and use Socks5. Closes ticket 5547, implements proposal 117 as
 
-       revised in proposal 208.
 
-     - Bridge authorities now accept IPv6 bridge addresses and include
 
-       them in network status documents. Implements ticket 5534.
 
-     - Directory authorities vote on IPv6 OR ports. Implements ticket 6363.
 
-   o Major features (directory authorities):
 
-     - Directory authorities now prefer using measured bandwidths to
 
-       advertised ones when computing flags and thresholds. Resolves
 
-       ticket 8273.
 
-     - Directory authorities that vote measured bandwidths about more
 
-       than a threshold number of relays now treat relays with
 
-       unmeasured bandwidths as having bandwidth 0 when computing their
 
-       flags. Resolves ticket 8435.
 
-     - Directory authorities now support a new consensus method (17)
 
-       where they cap the published bandwidth of relays for which
 
-       insufficient bandwidth measurements exist. Fixes part of bug 2286.
 
-     - Directory authorities that set "DisableV2DirectoryInfo_ 1" no longer
 
-       serve any v2 directory information. Now we can test disabling the
 
-       old deprecated v2 directory format, and see whether doing so has
 
-       any effect on network load. Begins to fix bug 6783.
 
-   o Major features (build and portability):
 
-     - Switch to a nonrecursive Makefile structure. Now instead of each
 
-       Makefile.am invoking other Makefile.am's, there is a master
 
-       Makefile.am that includes the others. This change makes our build
 
-       process slightly more maintainable, and improves parallelism for
 
-       building with make -j. Original patch by Stewart Smith; various
 
-       fixes by Jim Meyering.
 
-     - Where available, we now use automake's "silent" make rules by
 
-       default, so that warnings are easier to spot. You can get the old
 
-       behavior with "make V=1". Patch by Stewart Smith for ticket 6522.
 
-     - Resume building correctly with MSVC and Makefile.nmake. This patch
 
-       resolves numerous bugs and fixes reported by ultramage, including
 
-       7305, 7308, 7309, 7310, 7312, 7313, 7315, 7316, and 7669.
 
-   o Security features:
 
-     - Switch to a completely time-invariant approach for picking nodes
 
-       weighted by bandwidth. Our old approach would run through the
 
-       part of the loop after it had made its choice slightly slower
 
-       than it ran through the part of the loop before it had made its
 
-       choice. Addresses ticket 6538.
 
-     - Disable the use of Guard nodes when in Tor2WebMode. Guard usage
 
-       by tor2web clients allows hidden services to identify tor2web
 
-       clients through their repeated selection of the same rendezvous
 
-       and introduction point circuit endpoints (their guards). Resolves
 
-       ticket 6888.
 
-   o Major bugfixes (relay denial of service):
 
-     - When we have too much memory queued in circuits (according to a new
 
-       MaxMemInCellQueues option), close the circuits that have the oldest
 
-       queued cells, on the theory that those are most responsible for
 
-       us running low on memory. This prevents us from running out of
 
-       memory as a relay if circuits fill up faster than they can be
 
-       drained. Fixes bugs 9063 and 9093; bugfix on the 54th commit of
 
-       Tor. This bug is a further fix beyond bug 6252, whose fix was
 
-       merged into 0.2.3.21-rc.
 
-     - Reject bogus create and relay cells with 0 circuit ID or 0 stream
 
-       ID: these could be used to create unexpected streams and circuits
 
-       which would count as "present" to some parts of Tor but "absent"
 
-       to others, leading to zombie circuits and streams or to a bandwidth
 
-       denial-of-service. Fixes bug 7889; bugfix on every released version
 
-       of Tor. Reported by "oftc_must_be_destroyed".
 
-     - Avoid a bug where our response to TLS renegotiation under certain
 
-       network conditions could lead to a busy-loop, with 100% CPU
 
-       consumption. Fixes bug 5650; bugfix on 0.2.0.16-alpha.
 
-   o Major bugfixes (asserts, crashes, leaks):
 
-     - Prevent the get_freelists() function from running off the end of
 
-       the list of freelists if it somehow gets an unrecognized
 
-       allocation. Fixes bug 8844; bugfix on 0.2.0.16-alpha. Reported by
 
-       eugenis.
 
-     - Avoid a memory leak where we would leak a consensus body when we
 
-       find that a consensus which we couldn't previously verify due to
 
-       missing certificates is now verifiable. Fixes bug 8719; bugfix
 
-       on 0.2.0.10-alpha.
 
-     - If we are unable to save a microdescriptor to the journal, do not
 
-       drop it from memory and then reattempt downloading it. Fixes bug
 
-       9645; bugfix on 0.2.2.6-alpha.
 
-     - Fix an assertion failure that would occur when disabling the
 
-       ORPort setting on a running Tor process while accounting was
 
-       enabled. Fixes bug 6979; bugfix on 0.2.2.18-alpha.
 
-     - Avoid an assertion failure on OpenBSD (and perhaps other BSDs)
 
-       when an exit connection with optimistic data succeeds immediately
 
-       rather than returning EINPROGRESS. Fixes bug 9017; bugfix on
 
-       0.2.3.1-alpha.
 
-     - Fix a memory leak that would occur whenever a configuration
 
-       option changed. Fixes bug 8718; bugfix on 0.2.3.3-alpha.
 
-   o Major bugfixes (relay rate limiting):
 
-     - When a TLS write is partially successful but incomplete, remember
 
-       that the flushed part has been flushed, and notice that bytes were
 
-       actually written. Reported and fixed pseudonymously. Fixes bug 7708;
 
-       bugfix on Tor 0.1.0.5-rc.
 
-     - Raise the default BandwidthRate/BandwidthBurst values from 5MB/10MB
 
-       to 1GB/1GB. The previous defaults were intended to be "basically
 
-       infinite", but it turns out they're now limiting our 100mbit+
 
-       relays and bridges. Fixes bug 6605; bugfix on 0.2.0.10-alpha (the
 
-       last time we raised it).
 
-     - No longer stop reading or writing on cpuworker connections when
 
-       our rate limiting buckets go empty. Now we should handle circuit
 
-       handshake requests more promptly. Resolves bug 9731.
 
-   o Major bugfixes (client-side privacy):
 
-     - When we mark a circuit as unusable for new circuits, have it
 
-       continue to be unusable for new circuits even if MaxCircuitDirtiness
 
-       is increased too much at the wrong time, or the system clock jumps
 
-       backwards. Fixes bug 6174; bugfix on 0.0.2pre26.
 
-     - If ClientDNSRejectInternalAddresses ("do not believe DNS queries
 
-       which have resolved to internal addresses") is set, apply that
 
-       rule to IPv6 as well. Fixes bug 8475; bugfix on 0.2.0.7-alpha.
 
-     - When an exit relay rejects a stream with reason "exit policy", but
 
-       we only know an exit policy summary (e.g. from the microdesc
 
-       consensus) for it, do not mark the relay as useless for all exiting.
 
-       Instead, mark just the circuit as unsuitable for that particular
 
-       address. Fixes part of bug 7582; bugfix on 0.2.3.2-alpha.
 
-   o Major bugfixes (stream isolation):
 
-     - Allow applications to get proper stream isolation with
 
-       IsolateSOCKSAuth. Many SOCKS5 clients that want to offer
 
-       username/password authentication also offer "no authentication". Tor
 
-       had previously preferred "no authentication", so the applications
 
-       never actually sent Tor their auth details. Now Tor selects
 
-       username/password authentication if it's offered. You can disable
 
-       this behavior on a per-SOCKSPort basis via PreferSOCKSNoAuth. Fixes
 
-       bug 8117; bugfix on 0.2.3.3-alpha.
 
-     - Follow the socks5 protocol when offering username/password
 
-       authentication. The fix for bug 8117 exposed this bug, and it
 
-       turns out real-world applications like Pidgin do care. Bugfix on
 
-       0.2.3.2-alpha; fixes bug 8879.
 
-   o Major bugfixes (client circuit building):
 
-     - Alter circuit build timeout measurement to start at the point
 
-       where we begin the CREATE/CREATE_FAST step (as opposed to circuit
 
-       initialization). This should make our timeout measurements more
 
-       uniform. Previously, we were sometimes including ORconn setup time
 
-       in our circuit build time measurements. Should resolve bug 3443.
 
-     - If the circuit build timeout logic is disabled (via the consensus,
 
-       or because we are an authority), then don't build testing circuits.
 
-       Fixes bug 9657; bugfix on 0.2.2.14-alpha.
 
-   o Major bugfixes (client-side DNS):
 
-     - Turn off the client-side DNS cache by default. Updating and using
 
-       the DNS cache is now configurable on a per-client-port
 
-       level. SOCKSPort, DNSPort, etc lines may now contain
 
-       {No,}Cache{IPv4,IPv6,}DNS lines to indicate that we shouldn't
 
-       cache these types of DNS answers when we receive them from an
 
-       exit node in response to an application request on this port, and
 
-       {No,}UseCached{IPv4,IPv6,DNS} lines to indicate that if we have
 
-       cached DNS answers of these types, we shouldn't use them. It's
 
-       potentially risky to use cached DNS answers at the client, since
 
-       doing so can indicate to one exit what answers we've gotten
 
-       for DNS lookups in the past. With IPv6, this becomes especially
 
-       problematic. Using cached DNS answers for requests on the same
 
-       circuit would present less linkability risk, since all traffic
 
-       on a circuit is already linkable, but it would also provide
 
-       little performance benefit: the exit node caches DNS replies
 
-       too. Implements a simplified version of Proposal 205. Implements
 
-       ticket 7570.
 
-   o Major bugfixes (hidden service privacy):
 
-     - Limit hidden service descriptors to at most ten introduction
 
-       points, to slow one kind of guard enumeration. Fixes bug 9002;
 
-       bugfix on 0.1.1.11-alpha.
 
-   o Major bugfixes (directory fetching):
 
-     - If the time to download the next old-style networkstatus is in
 
-       the future, do not decline to consider whether to download the
 
-       next microdescriptor networkstatus. Fixes bug 9564; bugfix on
 
-       0.2.3.14-alpha.
 
-     - We used to always request authority certificates by identity digest,
 
-       meaning we'd get the newest one even when we wanted one with a
 
-       different signing key. Then we would complain about being given
 
-       a certificate we already had, and never get the one we really
 
-       wanted. Now we use the "fp-sk/" resource as well as the "fp/"
 
-       resource to request the one we want. Fixes bug 5595; bugfix on
 
-       0.2.0.8-alpha.
 
-   o Major bugfixes (bridge reachability):
 
-     - Bridges now send AUTH_CHALLENGE cells during their v3 handshakes;
 
-       previously they did not, which prevented them from receiving
 
-       successful connections from relays for self-test or bandwidth
 
-       testing. Also, when a relay is extending a circuit to a bridge,
 
-       it needs to send a NETINFO cell, even when the bridge hasn't sent
 
-       an AUTH_CHALLENGE cell. Fixes bug 9546; bugfix on 0.2.3.6-alpha.
 
-   o Major bugfixes (control interface):
 
-     - When receiving a new configuration file via the control port's
 
-       LOADCONF command, do not treat the defaults file as absent.
 
-       Fixes bug 9122; bugfix on 0.2.3.9-alpha.
 
-   o Major bugfixes (directory authorities):
 
-     - Stop marking every relay as having been down for one hour every
 
-       time we restart a directory authority. These artificial downtimes
 
-       were messing with our Stable and Guard flag calculations. Fixes
 
-       bug 8218 (introduced by the fix for 1035). Bugfix on 0.2.2.23-alpha.
 
-     - When computing directory thresholds, ignore any rejected-as-sybil
 
-       nodes during the computation so that they can't influence Fast,
 
-       Guard, etc. (We should have done this for proposal 109.) Fixes
 
-       bug 8146.
 
-     - When marking a node as a likely sybil, reset its uptime metrics
 
-       to zero, so that it cannot time towards getting marked as Guard,
 
-       Stable, or HSDir. (We should have done this for proposal 109.) Fixes
 
-       bug 8147.
 
-     - Fix a bug in the voting algorithm that could yield incorrect results
 
-       when a non-naming authority declared too many flags. Fixes bug 9200;
 
-       bugfix on 0.2.0.3-alpha.
 
-   o Internal abstraction features:
 
-     - Introduce new channel_t abstraction between circuits and
 
-       or_connection_t to allow for implementing alternate OR-to-OR
 
-       transports. A channel_t is an abstract object which can either be a
 
-       cell-bearing channel, which is responsible for authenticating and
 
-       handshaking with the remote OR and transmitting cells to and from
 
-       it, or a listening channel, which spawns new cell-bearing channels
 
-       at the request of remote ORs. Implements part of ticket 6465.
 
-     - Make a channel_tls_t subclass of channel_t, adapting it to the
 
-       existing or_connection_t code. The V2/V3 protocol handshaking
 
-       code which formerly resided in command.c has been moved below the
 
-       channel_t abstraction layer and may be found in channeltls.c now.
 
-       Implements the rest of ticket 6465.
 
-     - Introduce new circuitmux_t storing the queue of circuits for
 
-       a channel; this encapsulates and abstracts the queue logic and
 
-       circuit selection policy, and allows the latter to be overridden
 
-       easily by switching out a policy object. The existing EWMA behavior
 
-       is now implemented as a circuitmux_policy_t. Resolves ticket 6816.
 
-   o New build requirements:
 
-     - Tor now requires OpenSSL 0.9.8 or later. OpenSSL 1.0.0 or later is
 
-       strongly recommended.
 
-     - Tor maintainers now require Automake version 1.9 or later to build
 
-       Tor from the Git repository. (Automake is not required when building
 
-       from a source distribution.)
 
-   o Minor features (protocol):
 
-     - No longer include the "opt" prefix when generating routerinfos
 
-       or v2 directories: it has been needless since Tor 0.1.2. Closes
 
-       ticket 5124.
 
-     - Reject EXTEND cells sent to nonexistent streams. According to the
 
-       spec, an EXTEND cell sent to _any_ nonzero stream ID is invalid, but
 
-       we were only checking for stream IDs that were currently in use.
 
-       Found while hunting for more instances of bug 6271. Bugfix on
 
-       0.0.2pre8, which introduced incremental circuit construction.
 
-     - Tor relays and clients now support a better CREATE/EXTEND cell
 
-       format, allowing the sender to specify multiple address, identity,
 
-       and handshake types. Implements Robert Ransom's proposal 200;
 
-       closes ticket 7199.
 
-     - Reject as invalid most directory objects containing a NUL.
 
-       Belt-and-suspender fix for bug 8037.
 
-   o Minor features (security):
 
-     - Clear keys and key-derived material left on the stack in
 
-       rendservice.c and rendclient.c. Check return value of
 
-       crypto_pk_write_private_key_to_string() in rend_service_load_keys().
 
-       These fixes should make us more forward-secure against cold-boot
 
-       attacks and the like. Fixes bug 2385.
 
-     - Use our own weak RNG when we need a weak RNG. Windows's rand() and
 
-       Irix's random() only return 15 bits; Solaris's random() returns more
 
-       bits but its RAND_MAX says it only returns 15, and so on. Motivated
 
-       by the fix for bug 7801; bugfix on 0.2.2.20-alpha.
 
-   o Minor features (control protocol):
 
-     - Add a "GETINFO signal/names" control port command. Implements
 
-       ticket 3842.
 
-     - Provide default values for all options via "GETINFO config/defaults".
 
-       Implements ticket 4971.
 
-     - Allow an optional $ before the node identity digest in the
 
-       controller command GETINFO ns/id/<identity>, for consistency with
 
-       md/id/<identity> and desc/id/<identity>. Resolves ticket 7059.
 
-     - Add CACHED keyword to ADDRMAP events in the control protocol
 
-       to indicate whether a DNS result will be cached or not. Resolves
 
-       ticket 8596.
 
-     - Generate bootstrapping status update events correctly when fetching
 
-       microdescriptors. Fixes bug 9927.
 
-   o Minor features (path selection):
 
-     - When deciding whether we have enough descriptors to build circuits,
 
-       instead of looking at raw relay counts, look at which fraction
 
-       of (bandwidth-weighted) paths we're able to build. This approach
 
-       keeps clients from building circuits if their paths are likely to
 
-       stand out statistically. The default fraction of paths needed is
 
-       taken from the consensus directory; you can override it with the
 
-       new PathsNeededToBuildCircuits option. Fixes ticket 5956.
 
-     - When any country code is listed in ExcludeNodes or ExcludeExitNodes,
 
-       and we have GeoIP information, also exclude all nodes with unknown
 
-       countries "??" and "A1". This behavior is controlled by the
 
-       new GeoIPExcludeUnknown option: you can make such nodes always
 
-       excluded with "GeoIPExcludeUnknown 1", and disable the feature
 
-       with "GeoIPExcludeUnknown 0". Setting "GeoIPExcludeUnknown auto"
 
-       gets you the default behavior. Implements feature 7706.
 
-   o Minor features (hidden services):
 
-     - Improve circuit build timeout handling for hidden services.
 
-       In particular: adjust build timeouts more accurately depending
 
-       upon the number of hop-RTTs that a particular circuit type
 
-       undergoes. Additionally, launch intro circuits in parallel
 
-       if they timeout, and take the first one to reply as valid.
 
-     - The Tor client now ignores sub-domain components of a .onion
 
-       address. This change makes HTTP "virtual" hosting
 
-       possible: http://foo.aaaaaaaaaaaaaaaa.onion/ and
 
-       http://bar.aaaaaaaaaaaaaaaa.onion/ can be two different websites
 
-       hosted on the same hidden service. Implements proposal 204.
 
-     - Enable Tor to read configuration, state, and key information from
 
-       a FIFO. Previously Tor would only read from files with a positive
 
-       stat.st_size. Code from meejah; fixes bug 6044.
 
-   o Minor features (clients):
 
-     - Teach bridge-using clients to avoid 0.2.2.x bridges when making
 
-       microdescriptor-related dir requests, and only fall back to normal
 
-       descriptors if none of their bridges can handle microdescriptors
 
-       (as opposed to the fix in ticket 4013, which caused them to fall
 
-       back to normal descriptors if *any* of their bridges preferred
 
-       them). Resolves ticket 4994.
 
-     - Tweak tor-fw-helper to accept an arbitrary amount of arbitrary
 
-       TCP ports to forward. In the past it only accepted two ports:
 
-       the ORPort and the DirPort.
 
-   o Minor features (protecting client timestamps):
 
-     - Clients no longer send timestamps in their NETINFO cells. These were
 
-       not used for anything, and they provided one small way for clients
 
-       to be distinguished from each other as they moved from network to
 
-       network or behind NAT. Implements part of proposal 222.
 
-     - Clients now round timestamps in INTRODUCE cells down to the nearest
 
-       10 minutes. If a new Support022HiddenServices option is set to 0, or
 
-       if it's set to "auto" and the feature is disabled in the consensus,
 
-       the timestamp is sent as 0 instead. Implements part of proposal 222.
 
-     - Stop sending timestamps in AUTHENTICATE cells. This is not such
 
-       a big deal from a security point of view, but it achieves no actual
 
-       good purpose, and isn't needed. Implements part of proposal 222.
 
-     - Reduce down accuracy of timestamps in hidden service descriptors.
 
-       Implements part of proposal 222.
 
-   o Minor features (bridges):
 
-     - Make bridge relays check once a minute for whether their IP
 
-       address has changed, rather than only every 15 minutes. Resolves
 
-       bugs 1913 and 1992.
 
-     - Bridge statistics now count bridge clients connecting over IPv6:
 
-       bridge statistics files now list "bridge-ip-versions" and
 
-       extra-info documents list "geoip6-db-digest". The control protocol
 
-       "CLIENTS_SEEN" and "ip-to-country" queries now support IPv6. Initial
 
-       implementation by "shkoo", addressing ticket 5055.
 
-     - Add a new torrc option "ServerTransportListenAddr" to let bridge
 
-       operators select the address where their pluggable transports will
 
-       listen for connections. Resolves ticket 7013.
 
-     - Randomize the lifetime of our SSL link certificate, so censors can't
 
-       use the static value for filtering Tor flows. Resolves ticket 8443;
 
-       related to ticket 4014 which was included in 0.2.2.33.
 
-   o Minor features (relays):
 
-     - Option OutboundBindAddress can be specified multiple times and
 
-       accepts IPv6 addresses. Resolves ticket 6876.
 
-   o Minor features (IPv6, client side):
 
-     - AutomapHostsOnResolve now supports IPv6 addresses. By default, we
 
-       prefer to hand out virtual IPv6 addresses, since there are more of
 
-       them and we can't run out. To override this behavior and make IPv4
 
-       addresses preferred, set NoPreferIPv6Automap on whatever SOCKSPort
 
-       or DNSPort you're using for resolving. Implements ticket 7571.
 
-     - AutomapHostsOnResolve responses are now randomized, to avoid
 
-       annoying situations where Tor is restarted and applications
 
-       connect to the wrong addresses.
 
-     - Never try more than 1000 times to pick a new virtual address when
 
-       AutomapHostsOnResolve is set. That's good enough so long as we
 
-       aren't close to handing out our entire virtual address space;
 
-       if you're getting there, it's best to switch to IPv6 virtual
 
-       addresses anyway.
 
-   o Minor features (IPv6, relay/authority side):
 
-     - New config option "AuthDirHasIPv6Connectivity 1" that directory
 
-       authorities should set if they have IPv6 connectivity and want to
 
-       do reachability tests for IPv6 relays. Implements feature 5974.
 
-     - A relay with an IPv6 OR port now sends that address in NETINFO
 
-       cells (in addition to its other address). Implements ticket 6364.
 
-   o Minor features (directory authorities):
 
-     - Directory authorities no long accept descriptors for any version of
 
-       Tor before 0.2.2.35, or for any 0.2.3 release before 0.2.3.10-alpha.
 
-       These versions are insecure, unsupported, or both. Implements
 
-       ticket 6789.
 
-     - When directory authorities are computing thresholds for flags,
 
-       never let the threshold for the Fast flag fall below 4096
 
-       bytes. Also, do not consider nodes with extremely low bandwidths
 
-       when deciding thresholds for various directory flags. This change
 
-       should raise our threshold for Fast relays, possibly in turn
 
-       improving overall network performance; see ticket 1854. Resolves
 
-       ticket 8145.
 
-     - Directory authorities now include inside each vote a statement of
 
-       the performance thresholds they used when assigning flags.
 
-       Implements ticket 8151.
 
-     - Add an "ignoring-advertised-bws" boolean to the flag-threshold lines
 
-       in directory authority votes to describe whether they have enough
 
-       measured bandwidths to ignore advertised (relay descriptor)
 
-       bandwidth claims. Resolves ticket 8711.
 
-   o Minor features (path bias detection):
 
-     - Path Use Bias: Perform separate accounting for successful circuit
 
-       use. Keep separate statistics on stream attempt rates versus stream
 
-       success rates for each guard. Provide configurable thresholds to
 
-       determine when to emit log messages or disable use of guards that
 
-       fail too many stream attempts. Resolves ticket 7802.
 
-     - Create three levels of Path Bias log messages, as opposed to just
 
-       two. These are configurable via consensus as well as via the torrc
 
-       options PathBiasNoticeRate, PathBiasWarnRate, PathBiasExtremeRate.
 
-       The default values are 0.70, 0.50, and 0.30 respectively.
 
-     - Separate the log message levels from the decision to drop guards,
 
-       which also is available via torrc option PathBiasDropGuards.
 
-       PathBiasDropGuards still defaults to 0 (off).
 
-     - Deprecate PathBiasDisableRate in favor of PathBiasDropGuards
 
-       in combination with PathBiasExtremeRate.
 
-     - Increase the default values for PathBiasScaleThreshold and
 
-       PathBiasCircThreshold from (200, 20) to (300, 150).
 
-     - Add in circuit usage accounting to path bias. If we try to use a
 
-       built circuit but fail for any reason, it counts as path bias.
 
-       Certain classes of circuits where the adversary gets to pick your
 
-       destination node are exempt from this accounting. Usage accounting
 
-       can be specifically disabled via consensus parameter or torrc.
 
-     - Convert all internal path bias state to double-precision floating
 
-       point, to avoid roundoff error and other issues.
 
-     - Only record path bias information for circuits that have completed
 
-       *two* hops. Assuming end-to-end tagging is the attack vector, this
 
-       makes us more resilient to ambient circuit failure without any
 
-       detection capability loss.
 
-   o Minor features (build):
 
-     - Tor now builds correctly on Bitrig, an OpenBSD fork. Patch from
 
-       dhill. Resolves ticket 6982.
 
-     - Compile on win64 using mingw64. Fixes bug 7260; patches from
 
-       "yayooo".
 
-     - Work correctly on Unix systems where EAGAIN and EWOULDBLOCK are
 
-       separate error codes; or at least, don't break for that reason.
 
-       Fixes bug 7935. Reported by "oftc_must_be_destroyed".
 
-   o Build improvements (autotools):
 
-     - Warn if building on a platform with an unsigned time_t: there
 
-       are too many places where Tor currently assumes that time_t can
 
-       hold negative values. We'd like to fix them all, but probably
 
-       some will remain.
 
-     - Do not report status verbosely from autogen.sh unless the -v flag
 
-       is specified. Fixes issue 4664. Patch from Onizuka.
 
-     - Detect and reject attempts to build Tor with threading support
 
-       when OpenSSL has been compiled without threading support.
 
-       Fixes bug 6673.
 
-     - Try to detect if we are ever building on a platform where
 
-       memset(...,0,...) does not set the value of a double to 0.0. Such
 
-       platforms are permitted by the C standard, though in practice
 
-       they're pretty rare (since IEEE 754 is nigh-ubiquitous). We don't
 
-       currently support them, but it's better to detect them and fail
 
-       than to perform erroneously.
 
-     - We no longer warn so much when generating manpages from their
 
-       asciidoc source.
 
-     - Use Ville Laurikari's implementation of AX_CHECK_SIGN() to determine
 
-       the signs of types during autoconf. This is better than our old
 
-       approach, which didn't work when cross-compiling.
 
-   o Minor features (log messages, warnings):
 
-     - Detect when we're running with a version of OpenSSL other than the
 
-       one we compiled with. This conflict has occasionally given people
 
-       hard-to-track-down errors.
 
-     - Warn users who run hidden services on a Tor client with
 
-       UseEntryGuards disabled that their hidden services will be
 
-       vulnerable to http://freehaven.net/anonbib/#hs-attack06 (the
 
-       attack which motivated Tor to support entry guards in the first
 
-       place). Resolves ticket 6889.
 
-     - Warn when we are binding low ports when hibernation is enabled;
 
-       previously we had warned when we were _advertising_ low ports with
 
-       hibernation enabled. Fixes bug 7285; bugfix on 0.2.3.9-alpha.
 
-     - Issue a warning when running with the bufferevents backend enabled.
 
-       It's still not stable, and people should know that they're likely
 
-       to hit unexpected problems. Closes ticket 9147.
 
-   o Minor features (log messages, notices):
 
-     - Refactor resolve_my_address() so it returns the method by which we
 
-       decided our public IP address (explicitly configured, resolved from
 
-       explicit hostname, guessed from interfaces, learned by gethostname).
 
-       Now we can provide more helpful log messages when a relay guesses
 
-       its IP address incorrectly (e.g. due to unexpected lines in
 
-       /etc/hosts). Resolves ticket 2267.
 
-     - Track how many "TAP" and "NTor" circuit handshake requests we get,
 
-       and how many we complete, and log it every hour to help relay
 
-       operators follow trends in network load. Addresses ticket 9658.
 
-   o Minor features (log messages, diagnostics):
 
-     - If we fail to free a microdescriptor because of bug 7164, log
 
-       the filename and line number from which we tried to free it.
 
-     - We compute the overhead from passing onionskins back and forth to
 
-       cpuworkers, and report it when dumping statistics in response to
 
-       SIGUSR1. Supports ticket 7291.
 
-     - Add another diagnostic to the heartbeat message: track and log
 
-       overhead that TLS is adding to the data we write. If this is
 
-       high, we are sending too little data to SSL_write at a time.
 
-       Diagnostic for bug 7707.
 
-     - Log packaged cell fullness as part of the heartbeat message.
 
-       Diagnosis to try to determine the extent of bug 7743.
 
-     - Add more detail to a log message about relaxed timeouts, to help
 
-       track bug 7799.
 
-     - When learning a fingerprint for a bridge, log its corresponding
 
-       transport type. Implements ticket 7896.
 
-     - Warn more aggressively when flushing microdescriptors to a
 
-       microdescriptor cache fails, in an attempt to mitigate bug 8031,
 
-       or at least make it more diagnosable.
 
-     - Improve the log message when "Bug/attack: unexpected sendme cell
 
-       from client" occurs, to help us track bug 8093.
 
-     - Improve debugging output to help track down bug 8185 ("Bug:
 
-       outgoing relay cell has n_chan==NULL. Dropping.")
 
-   o Minor features (log messages, quieter bootstrapping):
 
-     - Log fewer lines at level "notice" about our OpenSSL and Libevent
 
-       versions and capabilities when everything is going right. Resolves
 
-       part of ticket 6736.
 
-     - Omit the first heartbeat log message, because it never has anything
 
-       useful to say, and it clutters up the bootstrapping messages.
 
-       Resolves ticket 6758.
 
-     - Don't log about reloading the microdescriptor cache at startup. Our
 
-       bootstrap warnings are supposed to tell the user when there's a
 
-       problem, and our bootstrap notices say when there isn't. Resolves
 
-       ticket 6759; bugfix on 0.2.2.6-alpha.
 
-     - Don't log "I learned some more directory information" when we're
 
-       reading cached directory information. Reserve it for when new
 
-       directory information arrives in response to a fetch. Resolves
 
-       ticket 6760.
 
-     - Don't complain about bootstrapping problems while hibernating.
 
-       These complaints reflect a general code problem, but not one
 
-       with any problematic effects (no connections are actually
 
-       opened). Fixes part of bug 7302; bugfix on 0.2.3.2-alpha.
 
-   o Minor features (testing):
 
-     - In our testsuite, create temporary directories with a bit more
 
-       entropy in their name to make name collisions less likely. Fixes
 
-       bug 8638.
 
-     - Add benchmarks for DH (1024-bit multiplicative group) and ECDH
 
-       (P-256) Diffie-Hellman handshakes to src/or/bench.
 
-     - Add benchmark functions to test onion handshake performance.
 
-   o Renamed options:
 
-     - The DirServer option is now DirAuthority, for consistency with
 
-       current naming patterns. You can still use the old DirServer form.
 
-   o Minor bugfixes (protocol):
 
-     - Fix the handling of a TRUNCATE cell when it arrives while the
 
-       circuit extension is in progress. Fixes bug 7947; bugfix on 0.0.7.1.
 
-     - When a Tor client gets a "truncated" relay cell, the first byte of
 
-       its payload specifies why the circuit was truncated. We were
 
-       ignoring this 'reason' byte when tearing down the circuit, resulting
 
-       in the controller not being told why the circuit closed. Now we
 
-       pass the reason from the truncated cell to the controller. Bugfix
 
-       on 0.1.2.3-alpha; fixes bug 7039.
 
-     - Fix a misframing issue when reading the version numbers in a
 
-       VERSIONS cell. Previously we would recognize [00 01 00 02] as
 
-       'version 1, version 2, and version 0x100', when it should have
 
-       only included versions 1 and 2. Fixes bug 8059; bugfix on
 
-       0.2.0.10-alpha. Reported pseudonymously.
 
-     - Make the format and order of STREAM events for DNS lookups
 
-       consistent among the various ways to launch DNS lookups. Fixes
 
-       bug 8203; bugfix on 0.2.0.24-rc. Patch by "Desoxy".
 
-   o Minor bugfixes (syscalls and disk interaction):
 
-     - Always check the return values of functions fcntl() and
 
-       setsockopt(). We don't believe these are ever actually failing in
 
-       practice, but better safe than sorry. Also, checking these return
 
-       values should please analysis tools like Coverity. Patch from
 
-       'flupzor'. Fixes bug 8206; bugfix on all versions of Tor.
 
-     - Avoid double-closing the listener socket in our socketpair()
 
-       replacement (used on Windows) in the case where the addresses on
 
-       our opened sockets don't match what we expected. Fixes bug 9400;
 
-       bugfix on 0.0.2pre7. Found by Coverity.
 
-     - Correctly store microdescriptors and extrainfo descriptors that
 
-       include an internal NUL byte. Fixes bug 8037; bugfix on
 
-       0.2.0.1-alpha. Bug reported by "cypherpunks".
 
-     - If for some reason we fail to write a microdescriptor while
 
-       rebuilding the cache, do not let the annotations from that
 
-       microdescriptor linger in the cache file, and do not let the
 
-       microdescriptor stay recorded as present in its old location.
 
-       Fixes bug 9047; bugfix on 0.2.2.6-alpha.
 
-     - Use direct writes rather than stdio when building microdescriptor
 
-       caches, in an attempt to mitigate bug 8031, or at least make it
 
-       less common.
 
-   o Minor fixes (config options):
 
-     - Warn and fail if a server is configured not to advertise any
 
-       ORPorts at all. (We need *something* to put in our descriptor,
 
-       or we just won't work.)
 
-     - Behave correctly when the user disables LearnCircuitBuildTimeout
 
-       but doesn't tell us what they would like the timeout to be. Fixes
 
-       bug 6304; bugfix on 0.2.2.14-alpha.
 
-     - Rename the (internal-use-only) UsingTestingNetworkDefaults option
 
-       to start with a triple-underscore so the controller won't touch it.
 
-       Patch by Meejah. Fixes bug 3155. Bugfix on 0.2.2.23-alpha.
 
-     - Rename the (testing-use-only) _UseFilteringSSLBufferevents option
 
-       so it doesn't start with _. Fixes bug 3155. Bugfix on 0.2.3.1-alpha.
 
-     - When autodetecting the number of CPUs, use the number of available
 
-       CPUs in preference to the number of configured CPUs. Inform the
 
-       user if this reduces the number of available CPUs. Fixes bug 8002;
 
-       bugfix on 0.2.3.1-alpha.
 
-     - Command-line option "--version" implies "--quiet". Fixes bug 6997.
 
-     - Make it an error when you set EntryNodes but disable UseGuardNodes,
 
-       since it will (surprisingly to some users) ignore EntryNodes. Fixes
 
-       bug 8180; bugfix on 0.2.3.11-alpha.
 
-     - Avoid overflows when the user sets MaxCircuitDirtiness to a
 
-       ridiculously high value, by imposing a (ridiculously high) 30-day
 
-       maximum on MaxCircuitDirtiness.
 
-   o Minor bugfixes (control protocol):
 
-     - Stop sending a stray "(null)" in some cases for the server status
 
-       "EXTERNAL_ADDRESS" controller event. Resolves bug 8200; bugfix
 
-       on 0.1.2.6-alpha.
 
-     - The ADDRMAP command can no longer generate an ill-formed error
 
-       code on a failed MAPADDRESS. It now says "internal" rather than
 
-       an English sentence fragment with spaces in the middle. Bugfix on
 
-       Tor 0.2.0.19-alpha.
 
-   o Minor bugfixes (clients / edges):
 
-     - When we receive a RELAY_END cell with the reason DONE, or with no
 
-       reason, before receiving a RELAY_CONNECTED cell, report the SOCKS
 
-       status as "connection refused". Previously we reported these cases
 
-       as success but then immediately closed the connection. Fixes bug
 
-       7902; bugfix on 0.1.0.1-rc. Reported by "oftc_must_be_destroyed".
 
-     - If the guard we choose first doesn't answer, we would try the
 
-       second guard, but once we connected to the second guard we would
 
-       abandon it and retry the first one, slowing down bootstrapping.
 
-       The fix is to treat all our initially chosen guards as acceptable
 
-       to use. Fixes bug 9946; bugfix on 0.1.1.11-alpha.
 
-     - When choosing which stream on a formerly stalled circuit to wake
 
-       first, make better use of the platform's weak RNG. Previously,
 
-       we had been using the % ("modulo") operator to try to generate a
 
-       1/N chance of picking each stream, but this behaves badly with
 
-       many platforms' choice of weak RNG. Fixes bug 7801; bugfix on
 
-       0.2.2.20-alpha.
 
-   o Minor bugfixes (path bias detection):
 
-     - If the state file's path bias counts are invalid (presumably from a
 
-       buggy Tor prior to 0.2.4.10-alpha), make them correct. Also add
 
-       additional checks and log messages to the scaling of Path Bias
 
-       counts, in case there still are remaining issues with scaling.
 
-       Should help resolve bug 8235.
 
-     - Prevent rounding error in path bias counts when scaling
 
-       them down, and use the correct scale factor default. Also demote
 
-       some path bias related log messages down a level and make others
 
-       less scary sounding. Fixes bug 6647. Bugfix on 0.2.3.17-beta.
 
-     - Remove a source of rounding error during path bias count scaling;
 
-       don't count cannibalized circuits as used for path bias until we
 
-       actually try to use them; and fix a circuit_package_relay_cell()
 
-       warning message about n_chan==NULL. Fixes bug 7802.
 
-     - Paste the description for PathBias parameters from the man
 
-       page into or.h, so the code documents them too. Fixes bug 7982;
 
-       bugfix on 0.2.3.17-beta.
 
-   o Minor bugfixes (relays):
 
-     - Stop trying to resolve our hostname so often (e.g. every time we
 
-       think about doing a directory fetch). Now we reuse the cached
 
-       answer in some cases. Fixes bugs 1992 (bugfix on 0.2.0.20-rc)
 
-       and 2410 (bugfix on 0.1.2.2-alpha).
 
-     - When examining the list of network interfaces to find our address,
 
-       do not consider non-running or disabled network interfaces. Fixes
 
-       bug 9904; bugfix on 0.2.3.11-alpha. Patch from "hantwister".
 
-   o Minor bugfixes (blocking resistance):
 
-     - Only disable TLS session ticket support when running as a TLS
 
-       server. Now clients will blend better with regular Firefox
 
-       connections. Fixes bug 7189; bugfix on Tor 0.2.3.23-rc.
 
-   o Minor bugfixes (IPv6):
 
-     - Use square brackets around IPv6 addresses in numerous places
 
-       that needed them, including log messages, HTTPS CONNECT proxy
 
-       requests, TransportProxy statefile entries, and pluggable transport
 
-       extra-info lines. Fixes bug 7011; patch by David Fifield.
 
-   o Minor bugfixes (directory authorities):
 
-     - Reject consensus votes with more than 64 known-flags. We aren't even
 
-       close to that limit yet, and our code doesn't handle it correctly.
 
-       Fixes bug 6833; bugfix on 0.2.0.1-alpha.
 
-     - Correctly handle votes with more than 31 flags. Fixes bug 6853;
 
-       bugfix on 0.2.0.3-alpha.
 
-   o Minor bugfixes (memory leaks):
 
-     - Avoid leaking memory if we fail to compute a consensus signature
 
-       or we generate a consensus we can't parse. Bugfix on 0.2.0.5-alpha.
 
-     - Fix a memory leak when receiving headers from an HTTPS proxy. Bugfix
 
-       on 0.2.1.1-alpha; fixes bug 7816.
 
-     - Fix a memory leak during safe-cookie controller authentication.
 
-       Bugfix on 0.2.3.13-alpha; fixes bug 7816.
 
-     - Free some more still-in-use memory at exit, to make hunting for
 
-       memory leaks easier. Resolves bug 7029.
 
-   o Minor bugfixes (code correctness):
 
-     - Increase the width of the field used to remember a connection's
 
-       link protocol version to two bytes. Harmless for now, since the
 
-       only currently recognized versions are one byte long. Reported
 
-       pseudonymously. Fixes bug 8062; bugfix on 0.2.0.10-alpha.
 
-     - Fix a crash when debugging unit tests on Windows: deallocate a
 
-       shared library with FreeLibrary, not CloseHandle. Fixes bug 7306;
 
-       bugfix on 0.2.2.17-alpha. Reported by "ultramage".
 
-     - When detecting the largest possible file descriptor (in order to
 
-       close all file descriptors when launching a new program), actually
 
-       use _SC_OPEN_MAX. The old code for doing this was very, very broken.
 
-       Fixes bug 8209; bugfix on 0.2.3.1-alpha. Found by Coverity; this
 
-       is CID 743383.
 
-     - Avoid a crash if we fail to generate an extrainfo descriptor.
 
-       Fixes bug 8208; bugfix on 0.2.3.16-alpha. Found by Coverity;
 
-       this is CID 718634.
 
-     - Avoid an off-by-one error when checking buffer boundaries when
 
-       formatting the exit status of a pluggable transport helper.
 
-       This is probably not an exploitable bug, but better safe than
 
-       sorry. Fixes bug 9928; bugfix on 0.2.3.18-rc. Bug found by
 
-       Pedro Ribeiro.
 
-     - Get rid of a couple of harmless clang warnings, where we compared
 
-       enums to ints. These warnings are newly introduced in clang 3.2.
 
-   o Minor bugfixes (code cleanliness):
 
-     - Avoid use of reserved identifiers in our C code. The C standard
 
-       doesn't like us declaring anything that starts with an
 
-       underscore, so let's knock it off before we get in trouble. Fix
 
-       for bug 1031; bugfix on the first Tor commit.
 
-     - Fix round_to_power_of_2() so it doesn't invoke undefined behavior
 
-       with large values. This situation was untriggered, but nevertheless
 
-       incorrect. Fixes bug 6831; bugfix on 0.2.0.1-alpha.
 
-     - Fix an impossible buffer overrun in the AES unit tests. Fixes
 
-       bug 8845; bugfix on 0.2.0.7-alpha. Found by eugenis.
 
-     - Fix handling of rendezvous client authorization types over 8.
 
-       Fixes bug 6861; bugfix on 0.2.1.5-alpha.
 
-     - Remove a couple of extraneous semicolons that were upsetting the
 
-       cparser library. Patch by Christian Grothoff. Fixes bug 7115;
 
-       bugfix on 0.2.2.1-alpha.
 
-     - When complaining about a client port on a public address, log
 
-       which address we're complaining about. Fixes bug 4020; bugfix on
 
-       0.2.3.3-alpha. Patch by Tom Fitzhenry.
 
-   o Minor bugfixes (log messages, warnings):
 
-     - If we encounter a write failure on a SOCKS connection before we
 
-       finish our SOCKS handshake, don't warn that we closed the
 
-       connection before we could send a SOCKS reply. Fixes bug 8427;
 
-       bugfix on 0.1.0.1-rc.
 
-     - Fix a directory authority warn caused when we have a large amount
 
-       of badexit bandwidth. Fixes bug 8419; bugfix on 0.2.2.10-alpha.
 
-     - Downgrade "Failed to hand off onionskin" messages to "debug"
 
-       severity, since they're typically redundant with the "Your computer
 
-       is too slow" messages. Fixes bug 7038; bugfix on 0.2.2.16-alpha.
 
-     - Avoid spurious warnings when configuring multiple client ports of
 
-       which only some are nonlocal. Previously, we had claimed that some
 
-       were nonlocal when in fact they weren't. Fixes bug 7836; bugfix on
 
-       0.2.3.3-alpha.
 
-   o Minor bugfixes (log messages, other):
 
-     - Fix log messages and comments to avoid saying "GMT" when we mean
 
-       "UTC". Fixes bug 6113.
 
-     - When rejecting a configuration because we were unable to parse a
 
-       quoted string, log an actual error message. Fixes bug 7950; bugfix
 
-       on 0.2.0.16-alpha.
 
-     - Correctly recognize that [::1] is a loopback address. Fixes
 
-       bug 8377; bugfix on 0.2.1.3-alpha.
 
-     - Don't log inappropriate heartbeat messages when hibernating: a
 
-       hibernating node is _expected_ to drop out of the consensus,
 
-       decide it isn't bootstrapped, and so forth. Fixes bug 7302;
 
-       bugfix on 0.2.3.1-alpha.
 
-     - Eliminate several instances where we use "Nickname=ID" to refer to
 
-       nodes in logs. Use "Nickname (ID)" instead. (Elsewhere, we still use
 
-       "$ID=Nickname", which is also acceptable.) Fixes bug 7065. Bugfix
 
-       on 0.2.3.21-rc.
 
-   o Minor bugfixes (build):
 
-     - Fix some bugs in tor-fw-helper-natpmp when trying to build and
 
-       run it on Windows. More bugs likely remain. Patch from Gisle Vanem.
 
-       Fixes bug 7280; bugfix on 0.2.3.1-alpha.
 
-   o Documentation fixes:
 
-     - Make the torify manpage no longer refer to tsocks; torify hasn't
 
-       supported tsocks since 0.2.3.14-alpha.
 
-     - Make the tor manpage no longer reference tsocks.
 
-     - Fix the GeoIPExcludeUnknown documentation to refer to
 
-       ExcludeExitNodes rather than the currently nonexistent
 
-       ExcludeEntryNodes. Spotted by "hamahangi" on tor-talk.
 
-     - Resolve a typo in torrc.sample.in. Fixes bug 6819; bugfix on
 
-       0.2.3.14-alpha.
 
-     - Say "KBytes" rather than "KB" in the man page (for various values
 
-       of K), to further reduce confusion about whether Tor counts in
 
-       units of memory or fractions of units of memory. Resolves ticket 7054.
 
-     - Update tor-fw-helper.1.txt and tor-fw-helper.c to make option
 
-       names match. Fixes bug 7768.
 
-     - Fix the documentation of HeartbeatPeriod to say that the heartbeat
 
-       message is logged at notice, not at info.
 
-     - Clarify the usage and risks of setting the ContactInfo torrc line
 
-       for your relay or bridge. Resolves ticket 9854.
 
-     - Add anchors to the manpage so we can link to the html version of
 
-       the documentation for specific options. Resolves ticket 9866.
 
-     - Replace remaining references to DirServer in man page and
 
-       log entries. Resolves ticket 10124.
 
-   o Removed features:
 
-     - Stop exporting estimates of v2 and v3 directory traffic shares
 
-       in extrainfo documents. They were unneeded and sometimes inaccurate.
 
-       Also stop exporting any v2 directory request statistics. Resolves
 
-       ticket 5823.
 
-     - Drop support for detecting and warning about versions of Libevent
 
-       before 1.3e. Nothing reasonable ships with them any longer; warning
 
-       the user about them shouldn't be needed. Resolves ticket 6826.
 
-     - Now that all versions before 0.2.2.x are disallowed, we no longer
 
-       need to work around their missing features. Remove a bunch of
 
-       compatibility code.
 
-   o Removed files:
 
-     - The tor-tsocks.conf is no longer distributed or installed. We
 
-       recommend that tsocks users use torsocks instead. Resolves
 
-       ticket 8290.
 
-     - Remove some of the older contents of doc/ as obsolete; move others
 
-       to torspec.git. Fixes bug 8965.
 
-   o Code simplification:
 
-     - Avoid using character buffers when constructing most directory
 
-       objects: this approach was unwieldy and error-prone. Instead,
 
-       build smartlists of strings, and concatenate them when done.
 
-     - Rename "isin" functions to "contains", for grammar. Resolves
 
-       ticket 5285.
 
-     - Rename Tor's logging function log() to tor_log(), to avoid conflicts
 
-       with the natural logarithm function from the system libm. Resolves
 
-       ticket 7599.
 
-     - Start using OpenBSD's implementation of queue.h, so that we don't
 
-       need to hand-roll our own pointer and list structures whenever we
 
-       need them. (We can't rely on a sys/queue.h, since some operating
 
-       systems don't have them, and the ones that do have them don't all
 
-       present the same extensions.)
 
-     - Start using OpenBSD's implementation of queue.h (originally by
 
-       Niels Provos).
 
-     - Enhance our internal sscanf replacement so that we can eliminate
 
-       the last remaining uses of the system sscanf. (Though those uses
 
-       of sscanf were safe, sscanf itself is generally error prone, so
 
-       we want to eliminate when we can.) Fixes ticket 4195 and Coverity
 
-       CID 448.
 
-     - Replace all calls to snprintf() outside of src/ext with
 
-       tor_snprintf(). Also remove the #define to replace snprintf with
 
-       _snprintf on Windows; they have different semantics, and all of
 
-       our callers should be using tor_snprintf() anyway. Fixes bug 7304.
 
-   o Refactoring:
 
-     - Add a wrapper function for the common "log a message with a
 
-       rate-limit" case.
 
-     - Split the onion.c file into separate modules for the onion queue
 
-       and the different handshakes it supports.
 
-     - Move the client-side address-map/virtual-address/DNS-cache code
 
-       out of connection_edge.c into a new addressmap.c module.
 
-     - Move the entry node code from circuitbuild.c to its own file.
 
-     - Move the circuit build timeout tracking code from circuitbuild.c
 
-       to its own file.
 
-     - Source files taken from other packages now reside in src/ext;
 
-       previously they were scattered around the rest of Tor.
 
-     - Move the generic "config" code into a new file, and have "config.c"
 
-       hold only torrc- and state-related code. Resolves ticket 6823.
 
-     - Move the core of our "choose a weighted element at random" logic
 
-       into its own function, and give it unit tests. Now the logic is
 
-       testable, and a little less fragile too.
 
-     - Move ipv6_preferred from routerinfo_t to node_t. Addresses bug 4620.
 
-     - Move last_reachable and testing_since from routerinfo_t to node_t.
 
-       Implements ticket 5529.
 
-     - Add replaycache_t structure, functions and unit tests, then refactor
 
-       rend_service_introduce() to be more clear to read, improve, debug,
 
-       and test. Resolves bug 6177.
 
-   o Removed code:
 
-     - Remove some now-needless code that tried to aggressively flush
 
-       OR connections as data was added to them. Since 0.2.0.1-alpha, our
 
-       cell queue logic has saved us from the failure mode that this code
 
-       was supposed to prevent. Removing this code will limit the number
 
-       of baroque control flow paths through Tor's network logic. Reported
 
-       pseudonymously on IRC. Fixes bug 6468; bugfix on 0.2.0.1-alpha.
 
-     - Remove unused code for parsing v1 directories and "running routers"
 
-       documents. Fixes bug 6887.
 
-     - Remove the marshalling/unmarshalling code for sending requests to
 
-       cpuworkers over a socket, and instead just send structs. The
 
-       recipient will always be the same Tor binary as the sender, so
 
-       any encoding is overkill.
 
-     - Remove the testing_since field of node_t, which hasn't been used
 
-       for anything since 0.2.0.9-alpha.
 
-     - Finally remove support for malloc_good_size and malloc_usable_size.
 
-       We had hoped that these functions would let us eke a little more
 
-       memory out of our malloc implementation. Unfortunately, the only
 
-       implementations that provided these functions are also ones that
 
-       are already efficient about not overallocation: they never got us
 
-       more than 7 or so bytes per allocation. Removing them saves us a
 
-       little code complexity and a nontrivial amount of build complexity.
 
- Changes in version 0.2.3.25 - 2012-11-19
 
-   The Tor 0.2.3 release series is dedicated to the memory of Len "rabbi"
 
-   Sassaman (1980-2011), a long-time cypherpunk, anonymity researcher,
 
-   Mixmaster maintainer, Pynchon Gate co-designer, CodeCon organizer,
 
-   programmer, and friend. Unstinting in his dedication to the cause of
 
-   freedom, he inspired and helped many of us as we began our work on
 
-   anonymity, and inspires us still. Please honor his memory by writing
 
-   software to protect people's freedoms, and by helping others to do so.
 
-   Tor 0.2.3.25, the first stable release in the 0.2.3 branch, features
 
-   significantly reduced directory overhead (via microdescriptors),
 
-   enormous crypto performance improvements for fast relays on new
 
-   enough hardware, a new v3 TLS handshake protocol that can better
 
-   resist fingerprinting, support for protocol obfuscation plugins (aka
 
-   pluggable transports), better scalability for hidden services, IPv6
 
-   support for bridges, performance improvements like allowing clients
 
-   to skip the first round-trip on the circuit ("optimistic data") and
 
-   refilling token buckets more often, a new "stream isolation" design
 
-   to isolate different applications on different circuits, and many
 
-   stability, security, and privacy fixes.
 
-   Major features (v3 directory protocol):
 
-     - Clients now use microdescriptors instead of regular descriptors
 
-       to build circuits. Microdescriptors are authority-generated
 
-       summaries of regular descriptors' contents, designed to change very
 
-       rarely (see proposal 158 for details). This feature is designed
 
-       to save bandwidth, especially for clients on slow internet
 
-       connections. Use "UseMicrodescriptors 0" to disable it.
 
-     - Caches now download, cache, and serve microdescriptors, as well
 
-       as multiple "flavors" of the consensus, including a flavor that
 
-       describes microdescriptors.
 
-   o Major features (build hardening):
 
-     - Enable gcc and ld hardening by default. Resolves ticket 5210.
 
-   o Major features (relay scaling):
 
-     - When built to use OpenSSL 1.0.1, and built for an x86 or x86_64
 
-       instruction set, take advantage of OpenSSL's AESNI, bitsliced, or
 
-       vectorized AES implementations as appropriate. These can be much,
 
-       much faster than other AES implementations.
 
-     - When using OpenSSL 1.0.0 or later, use OpenSSL's counter mode
 
-       implementation. It makes AES_CTR about 7% faster than our old one
 
-       (which was about 10% faster than the one OpenSSL used to provide).
 
-       Resolves ticket 4526.
 
-     - Use OpenSSL's EVP interface for AES encryption, so that all AES
 
-       operations can use hardware acceleration (if present). Resolves
 
-       ticket 4442.
 
-     - Unconditionally use OpenSSL's AES implementation instead of our
 
-       old built-in one. OpenSSL's AES has been better for a while, and
 
-       relatively few servers should still be on any version of OpenSSL
 
-       that doesn't have good optimized assembly AES.
 
-   o Major features (blocking resistance):
 
-     - Update TLS cipher list to match Firefox 8 and later. Resolves
 
-       ticket 4744.
 
-     - Remove support for clients falsely claiming to support standard
 
-       ciphersuites that they can actually provide. As of modern OpenSSL
 
-       versions, it's not necessary to fake any standard ciphersuite,
 
-       and doing so prevents us from using better ciphersuites in the
 
-       future, since servers can't know whether an advertised ciphersuite
 
-       is really supported or not. Some hosts -- notably, ones with very
 
-       old versions of OpenSSL or where OpenSSL has been built with ECC
 
-       disabled -- will stand out because of this change; TBB users should
 
-       not be affected. Implements the client side of proposal 198.
 
-     - Implement a new handshake protocol (v3) for authenticating Tors to
 
-       each other over TLS. It should be more resistant to fingerprinting
 
-       than previous protocols, and should require less TLS hacking for
 
-       future Tor implementations. Implements proposal 176.
 
-     - Allow variable-length padding cells, to disguise the length of
 
-       Tor's TLS records. Implements part of proposal 184.
 
-     - While we're trying to bootstrap, record how many TLS connections
 
-       fail in each state, and report which states saw the most failures
 
-       in response to any bootstrap failures. This feature may speed up
 
-       diagnosis of censorship events. Implements ticket 3116.
 
-   o Major features (pluggable transports):
 
-     - Clients and bridges can now be configured to use a separate
 
-       "transport" proxy. This approach makes the censorship arms race
 
-       easier by allowing bridges to use protocol obfuscation plugins.
 
-       Implements proposal 180 (tickets 2841 and 3472).
 
-   o Major features (DoS resistance):
 
-     - Now that Tor 0.2.0.x is completely deprecated, enable the final
 
-       part of "Proposal 110: Avoiding infinite length circuits" by
 
-       refusing all circuit-extend requests that do not use a relay_early
 
-       cell. This change helps Tor resist a class of denial-of-service
 
-       attacks by limiting the maximum circuit length.
 
-     - Tear down the circuit if we get an unexpected SENDME cell. Clients
 
-       could use this trick to make their circuits receive cells faster
 
-       than our flow control would have allowed, or to gum up the network,
 
-       or possibly to do targeted memory denial-of-service attacks on
 
-       entry nodes. Fixes bug 6252. Bugfix on the 54th commit on Tor --
 
-       from July 2002, before the release of Tor 0.0.0.
 
-   o Major features (hidden services):
 
-     - Adjust the number of introduction points that a hidden service
 
-       will try to maintain based on how long its introduction points
 
-       remain in use and how many introductions they handle. Fixes
 
-       part of bug 3825.
 
-     - Add a "tor2web mode" for clients that want to connect to hidden
 
-       services non-anonymously (and possibly more quickly). As a safety
 
-       measure to try to keep users from turning this on without knowing
 
-       what they are doing, tor2web mode must be explicitly enabled at
 
-       compile time, and a copy of Tor compiled to run in tor2web mode
 
-       cannot be used as a normal Tor client. Implements feature 2553.
 
-   o Major features (IPv6):
 
-     - Clients can now connect to private bridges over IPv6. Bridges
 
-       still need at least one IPv4 address in order to connect to
 
-       other relays. Note that we don't yet handle the case where the
 
-       user has two bridge lines for the same bridge (one IPv4, one
 
-       IPv6). Implements parts of proposal 186.
 
-   o Major features (directory authorities):
 
-     - Use a more secure consensus parameter voting algorithm. Now at
 
-       least three directory authorities or a majority of them must
 
-       vote on a given parameter before it will be included in the
 
-       consensus. Implements proposal 178.
 
-     - Remove the artificially low cutoff of 20KB to guarantee the Fast
 
-       flag. In the past few years the average relay speed has picked
 
-       up, and while the "top 7/8 of the network get the Fast flag" and
 
-       "all relays with 20KB or more of capacity get the Fast flag" rules
 
-       used to have the same result, now the top 7/8 of the network has
 
-       a capacity more like 32KB. Bugfix on 0.2.1.14-rc. Fixes bug 4489.
 
-   o Major features (performance):
 
-     - Exit nodes now accept and queue data on not-yet-connected streams.
 
-       Previously, the client wasn't allowed to send data until the
 
-       stream was connected, which slowed down all connections. This
 
-       change will enable clients to perform a "fast-start" on streams
 
-       and send data without having to wait for a confirmation that the
 
-       stream has opened. Patch from Ian Goldberg; implements the server
 
-       side of Proposal 174.
 
-     - When using an exit relay running 0.2.3.x, clients can now
 
-       "optimistically" send data before the exit relay reports that
 
-       the stream has opened. This saves a round trip when starting
 
-       connections where the client speaks first (such as web browsing).
 
-       This behavior is controlled by a consensus parameter (currently
 
-       disabled). To turn it on or off manually, use the "OptimisticData"
 
-       torrc option. Implements proposal 181; code by Ian Goldberg.
 
-     - Add a new TokenBucketRefillInterval option to refill token buckets
 
-       more frequently than once per second. This should improve network
 
-       performance, alleviate queueing problems, and make traffic less
 
-       bursty. Implements proposal 183; closes ticket 3630. Design by
 
-       Florian Tschorsch and Björn Scheuermann; implementation by
 
-       Florian Tschorsch.
 
-     - Raise the threshold of server descriptors needed (75%) and exit
 
-       server descriptors needed (50%) before we will declare ourselves
 
-       bootstrapped. This will make clients start building circuits a
 
-       little later, but makes the initially constructed circuits less
 
-       skewed and less in conflict with further directory fetches. Fixes
 
-       ticket 3196.
 
-   o Major features (relays):
 
-     - Relays now try regenerating and uploading their descriptor more
 
-       frequently if they are not listed in the consensus, or if the
 
-       version of their descriptor listed in the consensus is too
 
-       old. This fix should prevent situations where a server declines
 
-       to re-publish itself because it has done so too recently, even
 
-       though the authorities decided not to list its recent-enough
 
-       descriptor. Fix for bug 3327.
 
-   o Major features (stream isolation):
 
-     - You can now configure Tor so that streams from different
 
-       applications are isolated on different circuits, to prevent an
 
-       attacker who sees your streams as they leave an exit node from
 
-       linking your sessions to one another. To do this, choose some way
 
-       to distinguish the applications: have them connect to different
 
-       SocksPorts, or have one of them use SOCKS4 while the other uses
 
-       SOCKS5, or have them pass different authentication strings to the
 
-       SOCKS proxy. Then, use the new SocksPort syntax to configure the
 
-       degree of isolation you need. This implements Proposal 171.
 
-     - There's a new syntax for specifying multiple client ports (such as
 
-       SOCKSPort, TransPort, DNSPort, NATDPort): you can now just declare
 
-       multiple *Port entries with full addr:port syntax on each.
 
-       The old *ListenAddress format is still supported, but you can't
 
-       mix it with the new *Port syntax.
 
-   o Major features (bufferevents):
 
-     - Tor can now optionally build with the "bufferevents" buffered IO
 
-       backend provided by Libevent 2. To use this feature, make sure you
 
-       have the latest possible version of Libevent, and pass the
 
-       --enable-bufferevents flag to configure when building Tor from
 
-       source. This feature will make our networking code more flexible,
 
-       let us stack layers on each other, and let us use more efficient
 
-       zero-copy transports where available.
 
-     - Add experimental support for running on Windows with IOCP and no
 
-       kernel-space socket buffers. This feature is controlled by a new
 
-       "UserspaceIOCPBuffers" config option (off by default), which has
 
-       no effect unless Tor has been built with bufferevents enabled,
 
-       you're running on Windows, and you've set "DisableIOCP 0". In the
 
-       long run, this may help solve or mitigate bug 98.
 
-   o Major features (path selection):
 
-     - The EntryNodes option can now include country codes like {de} or IP
 
-       addresses or network masks. Previously we had disallowed these
 
-       options because we didn't have an efficient way to keep the list up
 
-       to date. Addresses ticket 1982, but see bug 2798 for an unresolved
 
-       issue here.
 
-   o Major features (port forwarding):
 
-     - Add support for automatic port mapping on the many home routers
 
-       that support NAT-PMP or UPnP. To build the support code, you'll
 
-       need to have the libnatpnp library and/or the libminiupnpc library,
 
-       and you'll need to enable the feature specifically by passing
 
-       "--enable-upnp" and/or "--enable-natpnp" to ./configure. To turn
 
-       it on, use the new PortForwarding option.
 
-   o Major features (logging):
 
-     - Add a new 'Heartbeat' log message type to periodically log a message
 
-       describing Tor's status at level Notice. This feature is meant for
 
-       operators who log at notice, and want to make sure that their Tor
 
-       server is still working. Implementation by George Kadianakis.
 
-     - Make logging resolution configurable with a new LogTimeGranularity
 
-       option, and change the default from 1 millisecond to 1 second.
 
-       Implements enhancement 1668.
 
-   o Major features (other):
 
-     - New "DisableNetwork" config option to prevent Tor from launching any
 
-       connections or accepting any connections except on a control port.
 
-       Bundles and controllers can set this option before letting Tor talk
 
-       to the rest of the network, for example to prevent any connections
 
-       to a non-bridge address. Packages like Orbot can also use this
 
-       option to instruct Tor to save power when the network is off.
 
-     - Try to use system facilities for enumerating local interface
 
-       addresses, before falling back to our old approach (which was
 
-       binding a UDP socket, and calling getsockname() on it). That
 
-       approach was scaring OS X users whose draconian firewall
 
-       software warned about binding to UDP sockets regardless of
 
-       whether packets were sent. Now we try to use getifaddrs(),
 
-       SIOCGIFCONF, or GetAdaptersAddresses(), depending on what the
 
-       system supports. Resolves ticket 1827.
 
-     - Add experimental support for a "defaults" torrc file to be parsed
 
-       before the regular torrc. Torrc options override the defaults file's
 
-       options in the same way that the command line overrides the torrc.
 
-       The SAVECONF controller command saves only those options which
 
-       differ between the current configuration and the defaults file. HUP
 
-       reloads both files. Implements task 4552.
 
-   o New directory authorities:
 
-     - Add Faravahar (run by Sina Rabbani) as the ninth v3 directory
 
-       authority. Closes ticket 5749.
 
-   o Security/privacy fixes:
 
-     - Avoid read-from-freed-memory and double-free bugs that could occur
 
-       when a DNS request fails while launching it. Fixes bug 6480;
 
-       bugfix on 0.2.0.1-alpha.
 
-     - Reject any attempt to extend to an internal address. Without
 
-       this fix, a router could be used to probe addresses on an internal
 
-       network to see whether they were accepting connections. Fixes bug
 
-       6710; bugfix on 0.0.8pre1.
 
-     - Close any connection that sends unrecognized junk before the TLS
 
-       handshake. Solves an issue noted in bug 4369.
 
-     - The advertised platform of a relay now includes only its operating
 
-       system's name (e.g., "Linux", "Darwin", "Windows 7"), and not
 
-       its service pack level (for Windows) or its CPU architecture
 
-       (for Unix). Also drop the "git-XYZ" tag in the version. Packagers
 
-       can insert an extra string in the platform line by setting the
 
-       preprocessor variable TOR_BUILD_TAG. Resolves bug 2988.
 
-     - Disable TLS session tickets. OpenSSL's implementation was giving
 
-       our TLS session keys the lifetime of our TLS context objects, when
 
-       perfect forward secrecy would want us to discard anything that
 
-       could decrypt a link connection as soon as the link connection
 
-       was closed. Fixes bug 7139; bugfix on all versions of Tor linked
 
-       against OpenSSL 1.0.0 or later. Found by Florent Daignière.
 
-     - Tor tries to wipe potentially sensitive data after using it, so
 
-       that if some subsequent security failure exposes Tor's memory,
 
-       the damage will be limited. But we had a bug where the compiler
 
-       was eliminating these wipe operations when it decided that the
 
-       memory was no longer visible to a (correctly running) program,
 
-       hence defeating our attempt at defense in depth. We fix that
 
-       by using OpenSSL's OPENSSL_cleanse() operation, which a compiler
 
-       is unlikely to optimize away. Future versions of Tor may use
 
-       a less ridiculously heavy approach for this. Fixes bug 7352.
 
-       Reported in an article by Andrey Karpov.
 
-   o Major bugfixes (crashes and asserts):
 
-     - Avoid a pair of double-free and use-after-mark bugs that can
 
-       occur with certain timings in canceled and re-received DNS
 
-       requests. Fixes bug 6472; bugfix on 0.0.7rc1.
 
-     - Fix a denial of service attack by which any directory authority
 
-       could crash all the others, or by which a single v2 directory
 
-       authority could crash everybody downloading v2 directory
 
-       information. Fixes bug 7191; bugfix on 0.2.0.10-alpha.
 
-     - Fix an assert that directory authorities could trigger on sighup
 
-       during some configuration state transitions. We now don't treat
 
-       it as a fatal error when the new descriptor we just generated in
 
-       init_keys() isn't accepted. Fixes bug 4438; bugfix on 0.2.1.9-alpha.
 
-     - Avoid segfault when starting up having run with an extremely old
 
-       version of Tor and parsing its state file. Fixes bug 6801; bugfix
 
-       on 0.2.2.23-alpha.
 
-   o Major bugfixes (clients):
 
-     - If we are unable to find any exit that supports our predicted ports,
 
-       stop calling them predicted, so that we don't loop and build
 
-       hopeless circuits indefinitely. Fixes bug 3296; bugfix on 0.0.9pre6,
 
-       which introduced predicted ports.
 
-     - Check at each new consensus whether our entry guards were picked
 
-       long enough ago that we should rotate them. Previously, we only
 
-       did this check at startup, which could lead to us holding a guard
 
-       indefinitely. Fixes bug 5380; bugfix on 0.2.1.14-rc.
 
-     - When fetching a bridge descriptor from a bridge authority,
 
-       always do so anonymously, whether we have been able to open
 
-       circuits or not. Partial fix for bug 1938; bugfix on 0.2.0.7-alpha.
 
-       This behavior makes it *safer* to use UpdateBridgesFromAuthority,
 
-       but we'll need to wait for bug 6010 before it's actually usable.
 
-   o Major bugfixes (directory voting):
 
-     - Check more thoroughly to prevent a rogue authority from
 
-       double-voting on any consensus directory parameter. Previously,
 
-       authorities would crash in this case if the total number of
 
-       votes for any parameter exceeded the number of active voters,
 
-       but would let it pass otherwise. Partially fixes bug 5786; bugfix
 
-       on 0.2.2.2-alpha.
 
-     - When computing weight parameters, behave more robustly in the
 
-       presence of a bad bwweightscale value. Previously, the authorities
 
-       would crash if they agreed on a sufficiently broken weight_scale
 
-       value; now, they use a reasonable default and carry on. Fixes the
 
-       rest of bug 5786; bugfix on 0.2.2.17-alpha.
 
-     - If authorities are unable to get a v2 consensus document from other
 
-       directory authorities, they no longer fall back to fetching
 
-       them from regular directory caches. Fixes bug 5635; bugfix on
 
-       0.2.2.26-beta, where routers stopped downloading v2 consensus
 
-       documents entirely.
 
-   o Major bugfixes (relays):
 
-     - Fix a bug handling SENDME cells on nonexistent streams that could
 
-       result in bizarre window values. Report and patch contributed
 
-       pseudonymously. Fixes part of bug 6271. This bug was introduced
 
-       before the first Tor release, in svn commit r152.
 
-     - Don't update the AccountingSoftLimitHitAt state file entry whenever
 
-       tor gets started. This prevents a wrong average bandwidth
 
-       estimate, which would cause relays to always start a new accounting
 
-       interval at the earliest possible moment. Fixes bug 2003; bugfix
 
-       on 0.2.2.7-alpha. Reported by Bryon Eldridge, who also helped
 
-       immensely in tracking this bug down.
 
-     - Fix a possible crash bug when checking for deactivated circuits
 
-       in connection_or_flush_from_first_active_circuit(). Fixes bug 6341;
 
-       bugfix on 0.2.2.7-alpha. Bug report and fix received pseudonymously.
 
-     - Set the SO_REUSEADDR socket option before we call bind() on outgoing
 
-       connections. This change should allow busy exit relays to stop
 
-       running out of available sockets as quickly. Fixes bug 4950;
 
-       bugfix on 0.2.2.26-beta.
 
-   o Major bugfixes (blocking resistance):
 
-     - Bridges no longer include their address in NETINFO cells on outgoing
 
-       OR connections, to allow them to blend in better with clients.
 
-       Removes another avenue for enumerating bridges. Reported by
 
-       "troll_un". Fixes bug 4348; bugfix on 0.2.0.10-alpha, when NETINFO
 
-       cells were introduced.
 
-     - Warn the user when HTTPProxy, but no other proxy type, is
 
-       configured. This can cause surprising behavior: it doesn't send
 
-       all of Tor's traffic over the HTTPProxy -- it sends unencrypted
 
-       directory traffic only. Resolves ticket 4663.
 
-   o Major bugfixes (hidden services):
 
-     - Improve hidden service robustness: when an attempt to connect to
 
-       a hidden service ends, be willing to refetch its hidden service
 
-       descriptors from each of the HSDir relays responsible for them
 
-       immediately. Previously, we would not consider refetching the
 
-       service's descriptors from each HSDir for 15 minutes after the last
 
-       fetch, which was inconvenient if the hidden service was not running
 
-       during the first attempt. Bugfix on 0.2.0.18-alpha; fixes bug 3335.
 
-     - Hidden services now ignore the timestamps on INTRODUCE2 cells.
 
-       They used to check that the timestamp was within 30 minutes
 
-       of their system clock, so they could cap the size of their
 
-       replay-detection cache, but that approach unnecessarily refused
 
-       service to clients with wrong clocks. Bugfix on 0.2.1.6-alpha, when
 
-       the v3 intro-point protocol (the first one which sent a timestamp
 
-       field in the INTRODUCE2 cell) was introduced; fixes bug 3460.
 
-     - When one of a hidden service's introduction points appears to be
 
-       unreachable, stop trying it. Previously, we would keep trying
 
-       to build circuits to the introduction point until we lost the
 
-       descriptor, usually because the user gave up and restarted Tor.
 
-       Fixes part of bug 3825.
 
-   o Changes to default torrc file:
 
-     - Stop listing "socksport 9050" in torrc.sample. We open a socks
 
-       port on 9050 by default anyway, so this should not change anything
 
-       in practice.
 
-     - Stop mentioning the deprecated *ListenAddress options in
 
-       torrc.sample. Fixes bug 5438.
 
-     - Document unit of bandwidth-related options in sample torrc.
 
-       Fixes bug 5621.
 
-     - Fix broken URLs in the sample torrc file, and tell readers about
 
-       the OutboundBindAddress, ExitPolicyRejectPrivate, and
 
-       PublishServerDescriptor options. Addresses bug 4652.
 
-   o Minor features (directory authorities):
 
-     - Consider new, removed or changed IPv6 OR ports a non-cosmetic
 
-       change when the authority is deciding whether to accept a newly
 
-       uploaded descriptor. Implements ticket 6423.
 
-     - Directory authorities are now a little more lenient at accepting
 
-       older router descriptors, or newer router descriptors that don't
 
-       make big changes. This should help ameliorate past and future
 
-       issues where routers think they have uploaded valid descriptors,
 
-       but the authorities don't think so. Fix for ticket 2479.
 
-     - Authority operators can now vote for all relays in a given
 
-       set of countries to be BadDir/BadExit/Invalid/Rejected.
 
-     - Provide two consensus parameters (FastFlagMinThreshold and
 
-       FastFlagMaxThreshold) to control the range of allowable bandwidths
 
-       for the Fast directory flag. These allow authorities to run
 
-       experiments on appropriate requirements for being a "Fast" node.
 
-       The AuthDirFastGuarantee config value still applies. Implements
 
-       ticket 3946.
 
-   o Minor features (bridges / bridge authorities):
 
-     - Make bridge SSL certificates a bit more stealthy by using random
 
-       serial numbers, in the same fashion as OpenSSL when generating
 
-       self-signed certificates. Implements ticket 4584.
 
-     - Tag a bridge's descriptor as "never to be sent unencrypted".
 
-       This shouldn't matter, since bridges don't open non-anonymous
 
-       connections to the bridge authority and don't allow unencrypted
 
-       directory connections from clients, but we might as well make
 
-       sure. Closes bug 5139.
 
-     - The Bridge Authority now writes statistics on how many bridge
 
-       descriptors it gave out in total, and how many unique descriptors
 
-       it gave out. It also lists how often the most and least commonly
 
-       fetched descriptors were given out, as well as the median and
 
-       25th/75th percentile. Implements tickets 4200 and 4294.
 
-   o Minor features (IPv6):
 
-     - Make the code that clients use to detect an address change be
 
-       IPv6-aware, so that it won't fill clients' logs with error
 
-       messages when trying to get the IPv4 address of an IPv6
 
-       connection. Implements ticket 5537.
 
-     - Relays now understand an IPv6 address when they get one from a
 
-       directory server. Resolves ticket 4875.
 
-   o Minor features (hidden services):
 
-     - Expire old or over-used hidden service introduction points.
 
-       Required by fix for bug 3460.
 
-     - Reduce the lifetime of elements of hidden services' Diffie-Hellman
 
-       public key replay-detection cache from 60 minutes to 5 minutes. This
 
-       replay-detection cache is now used only to detect multiple
 
-       INTRODUCE2 cells specifying the same rendezvous point, so we can
 
-       avoid launching multiple simultaneous attempts to connect to it.
 
-     - When a hidden service's introduction point times out, consider
 
-       trying it again during the next attempt to connect to the
 
-       HS. Previously, we would not try it again unless a newly fetched
 
-       descriptor contained it. Required by fixes for bugs 1297 and 3825.
 
-   o Minor features (relays):
 
-     - Relays now include a reason for regenerating their descriptors
 
-       in an HTTP header when uploading to the authorities. This will
 
-       make it easier to debug descriptor-upload issues in the future.
 
-     - Turn on directory request statistics by default and include them in
 
-       extra-info descriptors. Don't break if we have no GeoIP database.
 
-     - Replace files in stats/ rather than appending to them. Now that we
 
-       include statistics in extra-info descriptors, it makes no sense to
 
-       keep old statistics forever. Implements ticket 2930.
 
-     - Relays that set "ConnDirectionStatistics 1" write statistics on the
 
-       bidirectional use of connections to disk every 24 hours.
 
-     - Add a GeoIP file digest to the extra-info descriptor. Implements
 
-       ticket 1883.
 
-   o Minor features (new config options):
 
-     - New config option "DynamicDHGroups" (disabled by default) provides
 
-       each bridge with a unique prime DH modulus to be used during
 
-       SSL handshakes. This option attempts to help against censors
 
-       who might use the Apache DH modulus as a static identifier for
 
-       bridges. Addresses ticket 4548.
 
-     - New config option "DisableDebuggerAttachment" (on by default)
 
-       to prevent basic debugging attachment attempts by other processes.
 
-       Supports Mac OS X and Gnu/Linux. Resolves ticket 3313.
 
-     - Ordinarily, Tor does not count traffic from private addresses (like
 
-       127.0.0.1 or 10.0.0.1) when calculating rate limits or accounting.
 
-       There is now a new option, CountPrivateBandwidth, to disable this
 
-       behavior. Patch from Daniel Cagara.
 
-   o Minor features (different behavior for old config options):
 
-     - Allow MapAddress directives to specify matches against super-domains,
 
-       as in "MapAddress *.torproject.org *.torproject.org.torserver.exit".
 
-       Implements issue 933.
 
-     - Don't disable the DirPort when we cannot exceed our AccountingMax
 
-       limit during this interval because the effective bandwidthrate is
 
-       low enough. This is useful in a situation where AccountMax is only
 
-       used as an additional safeguard or to provide statistics.
 
-     - Add port 6523 (Gobby) to LongLivedPorts. Patch by intrigeri;
 
-       implements ticket 3439.
 
-     - When configuring a large set of nodes in EntryNodes, and there are
 
-       enough of them listed as Guard so that we don't need to consider
 
-       the non-guard entries, prefer the ones listed with the Guard flag.
 
-     - If you set the NumCPUs option to 0, Tor will now try to detect how
 
-       many CPUs you have. This is the new default behavior.
 
-     - The NodeFamily option -- which let you declare that you want to
 
-       consider nodes to be part of a family whether they list themselves
 
-       that way or not -- now allows IP address ranges and country codes.
 
-   o Minor features (new command-line config behavior):
 
-     - Slightly change behavior of "list" options (that is, config
 
-       options that can appear more than once) when they appear both in
 
-       torrc and on the command line. Previously, the command-line options
 
-       would be appended to the ones from torrc. Now, the command-line
 
-       options override the torrc options entirely. This new behavior
 
-       allows the user to override list options (like exit policies and
 
-       ports to listen on) from the command line, rather than simply
 
-       appending to the list.
 
-     - You can get the old (appending) command-line behavior for "list"
 
-       options by prefixing the option name with a "+".
 
-     - You can remove all the values for a "list" option from the command
 
-       line without adding any new ones by prefixing the option name
 
-       with a "/".
 
-   o Minor features (controller, new events):
 
-     - Extend the control protocol to report flags that control a circuit's
 
-       path selection in CIRC events and in replies to 'GETINFO
 
-       circuit-status'. Implements part of ticket 2411.
 
-     - Extend the control protocol to report the hidden service address
 
-       and current state of a hidden-service-related circuit in CIRC
 
-       events and in replies to 'GETINFO circuit-status'. Implements part
 
-       of ticket 2411.
 
-     - Include the creation time of a circuit in CIRC and CIRC2
 
-       control-port events and the list produced by the 'GETINFO
 
-       circuit-status' control-port command.
 
-     - Add a new CONF_CHANGED event so that controllers can be notified
 
-       of any configuration changes made by other controllers, or by the
 
-       user. Implements ticket 1692.
 
-     - Add a new SIGNAL event to the controller interface so that
 
-       controllers can be notified when Tor handles a signal. Resolves
 
-       issue 1955. Patch by John Brooks.
 
-   o Minor features (controller, new getinfo options):
 
-     - Expose our view of whether we have gone dormant to the controller,
 
-       via a new "GETINFO dormant" value. Torbutton and other controllers
 
-       can use this to avoid doing periodic requests through Tor while
 
-       it's dormant (bug 4718). Resolves ticket 5954.
 
-     - Add a new GETINFO option to get total bytes read and written. Patch
 
-       from pipe, revised by atagar. Resolves ticket 2345.
 
-     - Implement new GETINFO controller fields to provide information about
 
-       the Tor process's pid, euid, username, and resource limits.
 
-   o Minor features (controller, other):
 
-     - Allow controllers to request an event notification whenever a
 
-       circuit is cannibalized or its purpose is changed. Implements
 
-       part of ticket 3457.
 
-     - Use absolute path names when reporting the torrc filename in the
 
-       control protocol, so a controller can more easily find the torrc
 
-       file. Resolves bug 1101.
 
-     - When reporting the path to the cookie file to the controller,
 
-       give an absolute path. Resolves ticket 4881.
 
-   o Minor features (log messages):
 
-     - Add more information to a log statement that might help track down
 
-       bug 4091. If you're seeing "Bug: tor_addr_is_internal() called with a
 
-       non-IP address" messages (or any Bug messages, for that matter!),
 
-       please let us know about it.
 
-     - If EntryNodes are given, but UseEntryGuards is set to 0, warn that
 
-       EntryNodes will have no effect. Resolves issue 2571.
 
-     - Try to make the introductory warning message that Tor prints on
 
-       startup more useful for actually finding help and information.
 
-       Resolves ticket 2474.
 
-     - When the system call to create a listener socket fails, log the
 
-       error message explaining why. This may help diagnose bug 4027.
 
-   o Minor features (other):
 
-     - When we fail to initialize Libevent, retry with IOCP disabled so we
 
-       don't need to turn on multi-threading support in Libevent, which in
 
-       turn requires a working socketpair(). This is a workaround for bug
 
-       4457, which affects Libevent versions from 2.0.1-alpha through
 
-       2.0.15-stable.
 
-     - When starting as root and then changing our UID via the User
 
-       control option, and we have a ControlSocket configured, make sure
 
-       that the ControlSocket is owned by the same account that Tor will
 
-       run under. Implements ticket 3421; fix by Jérémy Bobbio.
 
-     - Accept attempts to include a password authenticator in the
 
-       handshake, as supported by SOCKS5. This handles SOCKS clients that
 
-       don't know how to omit a password when authenticating. Resolves
 
-       bug 1666.
 
-     - Check for and recover from inconsistency in the microdescriptor
 
-       cache. This will make it harder for us to accidentally free a
 
-       microdescriptor without removing it from the appropriate data
 
-       structures. Fixes issue 3135; issue noted by "wanoskarnet".
 
-     - Shorten links in the tor-exit-notice file. Patch by Christian Kujau.
 
-   o Minor bugfixes (code security):
 
-     - Prevent a null-pointer dereference when receiving a data cell
 
-       for a nonexistent stream when the circuit in question has an
 
-       empty deliver window. We don't believe this is triggerable,
 
-       since we don't currently allow deliver windows to become empty,
 
-       but the logic is tricky enough that it's better to make the code
 
-       robust. Fixes bug 5541; bugfix on 0.0.2pre14.
 
-     - Fix a (harmless) integer overflow in cell statistics reported by
 
-       some fast relays. Fixes bug 5849; bugfix on 0.2.2.1-alpha.
 
-     - Fix our implementation of crypto_random_hostname() so it can't
 
-       overflow on ridiculously large inputs. (No Tor version has ever
 
-       provided this kind of bad inputs, but let's be correct in depth.)
 
-       Fixes bug 4413; bugfix on 0.2.2.9-alpha. Fix by Stephen Palmateer.
 
-     - Add a (probably redundant) memory clear between iterations of
 
-       the router status voting loop, to prevent future coding errors
 
-       where data might leak between iterations of the loop. Resolves
 
-       ticket 6514.
 
-   o Minor bugfixes (wrapper functions):
 
-     - Abort if tor_vasprintf() fails in connection_printf_to_buf() (a
 
-       utility function used in the control-port code). This shouldn't
 
-       ever happen unless Tor is completely out of memory, but if it did
 
-       happen and Tor somehow recovered from it, Tor could have sent a log
 
-       message to a control port in the middle of a reply to a controller
 
-       command. Fixes part of bug 3428; bugfix on 0.1.2.3-alpha.
 
-     - Fix some (not actually triggerable) buffer size checks in usage of
 
-       tor_inet_ntop(). Fixes bug 4434; bugfix on Tor 0.2.0.1-alpha. Patch
 
-       by Anders Sundman.
 
-     - Fix parsing of some corner-cases with tor_inet_pton(). Fixes
 
-       bug 4515; bugfix on 0.2.0.1-alpha; fix by Anders Sundman.
 
-     - Enforce correct return behavior of tor_vsscanf() when the '%%'
 
-       pattern is used. Fixes bug 5558. Bugfix on 0.2.1.13.
 
-     - Make our replacement implementation of strtok_r() compatible with
 
-       the standard behavior of strtok_r(). Patch by nils. Fixes bug 5091;
 
-       bugfix on 0.2.2.1-alpha.
 
-     - Find more places in the code that should have been testing for
 
-       invalid sockets using the SOCKET_OK macro. Required for a fix
 
-       for bug 4533. Bugfix on 0.2.2.28-beta.
 
-   o Minor bugfixes (code correctness):
 
-     - Check return value of fputs() when writing authority certificate
 
-       file. Fixes Coverity issue 709056; bugfix on 0.2.0.1-alpha.
 
-     - When building Tor on Windows with -DUNICODE (not default), ensure
 
-       that error messages, filenames, and DNS server names are always
 
-       NUL-terminated when we convert them to a single-byte encoding.
 
-       Fixes bug 5909; bugfix on 0.2.2.16-alpha.
 
-     - Fix a memory leak when trying to launch a DNS request when the
 
-       nameservers are unconfigurable. Fixes bug 5916; bugfix on Tor
 
-       0.1.2.1-alpha.
 
-     - Correct file sizes when reading binary files on Cygwin, to avoid
 
-       a bug where Tor would fail to read its state file. Fixes bug 6844;
 
-       bugfix on 0.1.2.7-alpha.
 
-     - Make sure to set *socket_error in all error cases in
 
-       connection_connect(), so it can't produce a warning about
 
-       errno being zero from errno_to_orconn_end_reason(). Bugfix on
 
-       0.2.1.1-alpha; resolves ticket 6028.
 
-     - Initialize conn->addr to a valid state in spawn_cpuworker(). Fixes
 
-       bug 4532; found by "troll_un".
 
-   o Minor bugfixes (clients):
 
-     - Allow one-hop directory-fetching circuits the full "circuit build
 
-       timeout" period, rather than just half of it, before failing them
 
-       and marking the relay down. This fix should help reduce cases where
 
-       clients declare relays (or worse, bridges) unreachable because
 
-       the TLS handshake takes a few seconds to complete. Fixes bug 6743;
 
-       bugfix on 0.2.2.2-alpha, where we changed the timeout from a static
 
-       30 seconds.
 
-     - Ensure we don't cannibalize circuits that are longer than three hops
 
-       already, so we don't end up making circuits with 5 or more
 
-       hops. Patch contributed by wanoskarnet. Fixes bug 5231; bugfix on
 
-       0.1.0.1-rc which introduced cannibalization.
 
-   o Minor bugfixes (relays):
 
-     - Don't publish a new relay descriptor when we reload our onion key,
 
-       unless the onion key has actually changed. Fixes bug 3263 and
 
-       resolves another cause of bug 1810. Bugfix on 0.1.1.11-alpha.
 
-     - When relays refuse a "create" cell because their queue of pending
 
-       create cells is too big (typically because their cpu can't keep up
 
-       with the arrival rate), send back reason "resource limit" rather
 
-       than reason "internal", so network measurement scripts can get a
 
-       more accurate picture. Bugfix on 0.1.1.11-alpha; fixes bug 7037.
 
-     - Exit nodes don't need to fetch certificates for authorities that
 
-       they don't recognize; only directory authorities, bridges,
 
-       and caches need to do that. Fixes part of bug 2297; bugfix on
 
-       0.2.2.11-alpha.
 
-   o Minor bugfixes (directory authority / mirrors):
 
-     - Avoid O(n^2) performance characteristics when parsing a large
 
-       extrainfo cache. Fixes bug 5828; bugfix on 0.2.0.1-alpha.
 
-     - Authorities no longer include any router in their microdescriptor
 
-       consensuses for which they couldn't generate or agree on a
 
-       microdescriptor. Fixes the second piece of bug 6404; fix on
 
-       0.2.2.6-alpha.
 
-     - When checking for requested signatures on the latest consensus
 
-       before serving it to a client, make sure to check the right
 
-       consensus flavor. Bugfix on 0.2.2.6-alpha.
 
-     - Fix an edge case where TestingTorNetwork is set but the authorities
 
-       and relays all have an uptime of zero, so the private Tor network
 
-       could briefly lack support for hidden services. Fixes bug 3886;
 
-       bugfix on 0.2.2.18-alpha.
 
-     - Directory caches no longer refuse to clean out descriptors because
 
-       of missing v2 networkstatus documents, unless they're configured
 
-       to retrieve v2 networkstatus documents. Fixes bug 4838; bugfix on
 
-       0.2.2.26-beta. Patch by Daniel Bryg.
 
-     - Don't serve or accept v2 hidden service descriptors over a relay's
 
-       DirPort. It's never correct to do so, and disabling it might
 
-       make it more annoying to exploit any bugs that turn up in the
 
-       descriptor-parsing code. Fixes bug 7149.
 
-   o Minor bugfixes (hidden services, client-side):
 
-     - Assert that hidden-service-related operations are not performed
 
-       using single-hop circuits. Previously, Tor would assert that
 
-       client-side streams are not attached to single-hop circuits,
 
-       but not that other sensitive operations on the client and service
 
-       side are not performed using single-hop circuits. Fixes bug 3332;
 
-       bugfix on 0.0.6.
 
-     - Avoid undefined behaviour when parsing the list of supported
 
-       rendezvous/introduction protocols in a hidden service descriptor.
 
-       Previously, Tor would have confused (as-yet-unused) protocol version
 
-       numbers greater than 32 with lower ones on many platforms. Fixes
 
-       bug 6827; bugfix on 0.2.0.10-alpha. Found by George Kadianakis.
 
-     - Don't close hidden service client circuits which have almost
 
-       finished connecting to their destination when they reach
 
-       the normal circuit-build timeout. Previously, we would close
 
-       introduction circuits which are waiting for an acknowledgement
 
-       from the introduction point, and rendezvous circuits which have
 
-       been specified in an INTRODUCE1 cell sent to a hidden service,
 
-       after the normal CBT. Now, we mark them as 'timed out', and launch
 
-       another rendezvous attempt in parallel. This behavior change can
 
-       be disabled using the new CloseHSClientCircuitsImmediatelyOnTimeout
 
-       option. Fixes part of bug 1297; bugfix on 0.2.2.2-alpha.
 
-   o Minor bugfixes (hidden services, service-side):
 
-     - Don't close hidden-service-side rendezvous circuits when they
 
-       reach the normal circuit-build timeout. This behaviour change can
 
-       be disabled using the new
 
-       CloseHSServiceRendCircuitsImmediatelyOnTimeout option. Fixes the
 
-       remaining part of bug 1297; bugfix on 0.2.2.2-alpha.
 
-     - Don't launch more than 10 service-side introduction-point circuits
 
-       for a hidden service in five minutes. Previously, we would consider
 
-       launching more introduction-point circuits if at least one second
 
-       had passed without any introduction-point circuits failing. Fixes
 
-       bug 4607; bugfix on 0.0.7pre1.
 
-   o Minor bugfixes (config option behavior):
 
-     - If the user tries to set MyFamily on a bridge, refuse to
 
-       do so, and warn about the security implications. Fixes bug 4657;
 
-       bugfix on 0.2.0.3-alpha.
 
-     - The "--quiet" and "--hush" options now apply not only to Tor's
 
-       behavior before logs are configured, but also to Tor's behavior in
 
-       the absense of configured logs. Fixes bug 3550; bugfix on
 
-       0.2.0.10-alpha.
 
-     - Change the AllowDotExit rules so they should actually work.
 
-       We now enforce AllowDotExit only immediately after receiving an
 
-       address via SOCKS or DNSPort: other sources are free to provide
 
-       .exit addresses after the resolution occurs. Fixes bug 3940;
 
-       bugfix on 0.2.2.1-alpha.
 
-     - Make "LearnCircuitBuildTimeout 0" work more reliably. Specifically,
 
-       don't depend on the consensus parameters or compute adaptive
 
-       timeouts when it is disabled. Fixes bug 5049; bugfix on
 
-       0.2.2.14-alpha.
 
-     - After we pick a directory mirror, we would refuse to use it if
 
-       it's in our ExcludeExitNodes list, resulting in mysterious failures
 
-       to bootstrap for people who just wanted to avoid exiting from
 
-       certain locations. Fixes bug 5623; bugfix on 0.2.2.25-alpha.
 
-     - When told to add a bridge with the same digest as a preexisting
 
-       bridge but a different addr:port, change the addr:port as
 
-       requested. Previously we would not notice the change. Fixes half
 
-       of bug 5603; fix on 0.2.2.26-beta.
 
-   o Minor bugfixes (controller):
 
-     - Allow manual 'authenticate' commands to the controller interface
 
-       from netcat (nc) as well as telnet. We were rejecting them because
 
-       they didn't come with the expected whitespace at the end of the
 
-       command. Bugfix on 0.1.1.1-alpha; fixes bug 2893.
 
-     - Report a real bootstrap problem to the controller on router
 
-       identity mismatch. Previously we just said "foo", which probably
 
-       made a lot of sense at the time. Fixes bug 4169; bugfix on
 
-       0.2.1.1-alpha.
 
-     - When we receive a SIGHUP and the controller __ReloadTorrcOnSIGHUP
 
-       option is set to 0 (which Vidalia version 0.2.16 now does when
 
-       a SAVECONF attempt fails), perform other actions that SIGHUP
 
-       usually causes (like reopening the logs). Fixes bug 5095; bugfix
 
-       on 0.2.1.9-alpha.
 
-     - Correctly handle checking the permissions on the parent
 
-       directory of a control socket in the root directory. Bug found
 
-       by Esteban Manchado Velázquez. Fixes bug 5089; bugfix on Tor
 
-       0.2.2.26-beta.
 
-     - End AUTHCHALLENGE error messages (in the control protocol) with
 
-       a CRLF. Fixes bug 5760; bugfix on 0.2.2.36.
 
-   o Minor bugfixes (network reading/writing):
 
-     - Disable writing on marked-for-close connections when they are
 
-       blocked on bandwidth, to prevent busy-looping in Libevent. Fixes
 
-       bug 5263; bugfix on 0.0.2pre13, where we first added a special
 
-       case for flushing marked connections.
 
-     - Make sure that there are no unhandled pending TLS errors before
 
-       reading from a TLS stream. We had checks in 0.1.0.3-rc, but
 
-       lost them in 0.1.0.5-rc when we refactored read_to_buf_tls().
 
-       Bugfix on 0.1.0.5-rc; fixes bug 4528.
 
-     - Detect SSL handshake even when the initial attempt to write the
 
-       server hello fails. Fixes bug 4592; bugfix on 0.2.0.13-alpha.
 
-     - If the client fails to set a reasonable set of ciphersuites
 
-       during its v2 handshake renegotiation, allow the renegotiation to
 
-       continue nevertheless (i.e. send all the required certificates).
 
-       Fixes bug 4591; bugfix on 0.2.0.20-rc.
 
-   o Minor bugfixes (other):
 
-     - Exit nodes now correctly report EADDRINUSE and EADDRNOTAVAIL as
 
-       resource exhaustion, so that clients can adjust their load to
 
-       try other exits. Fixes bug 4710; bugfix on 0.1.0.1-rc, which
 
-       started using END_STREAM_REASON_RESOURCELIMIT.
 
-     - Don't check for whether the address we're using for outbound
 
-       connections has changed until after the outbound connection has
 
-       completed. On Windows, getsockname() doesn't succeed until the
 
-       connection is finished. Fixes bug 5374; bugfix on 0.1.1.14-alpha.
 
-     - Don't hold a Windows file handle open for every file mapping;
 
-       the file mapping handle is sufficient. Fixes bug 5951; bugfix on
 
-       0.1.2.1-alpha.
 
-     - Fix wrong TCP port range in parse_port_range(). Fixes bug 6218;
 
-       bugfix on 0.2.1.10-alpha.
 
-     - If we fail to write a microdescriptor to the disk cache, do not
 
-       continue replacing the old microdescriptor file. Fixes bug 2954;
 
-       bugfix on 0.2.2.6-alpha.
 
-   o Minor bugfixes (log messages, path selection):
 
-     - Downgrade "set buildtimeout to low value" messages to "info"
 
-       severity; they were never an actual problem, there was never
 
-       anything reasonable to do about them, and they tended to spam logs
 
-       from time to time. Fixes bug 6251; bugfix on 0.2.2.2-alpha.
 
-     - Rate-limit the "Weighted bandwidth is 0.000000" message, and add
 
-       more information to it, so that we can track it down in case it
 
-       returns again. Mitigates bug 5235.
 
-     - Check CircuitBuildTimeout and LearnCircuitBuildTimeout in
 
-       options_validate(); warn if LearnCircuitBuildTimeout is disabled and
 
-       CircuitBuildTimeout is set unreasonably low. Resolves ticket 5452.
 
-     - Issue a log message if a guard completes less than 40% of your
 
-       circuits. Threshold is configurable by torrc option
 
-       PathBiasNoticeRate and consensus parameter pb_noticepct. There is
 
-       additional, off-by-default code to disable guards which fail too
 
-       many circuits. Addresses ticket 5458.
 
-   o Minor bugfixes (log messages, client):
 
-     - Downgrade "Got a certificate, but we already have it" log messages
 
-       from warning to info, except when we're a dirauth. Fixes bug 5238;
 
-       bugfix on 0.2.1.7-alpha.
 
-     - Fix the log message describing how we work around discovering
 
-       that our version is the ill-fated OpenSSL 0.9.8l. Fixes bug
 
-       4837; bugfix on 0.2.2.9-alpha.
 
-     - When logging about a disallowed .exit name, do not also call it
 
-       an "invalid onion address". Fixes bug 3325; bugfix on 0.2.2.9-alpha.
 
-     - Fix a log message suggesting that people contact a non-existent
 
-       email address. Fixes bug 3448.
 
-     - Rephrase the log message emitted if the TestSocks check is
 
-       successful. Patch from Fabian Keil; fixes bug 4094.
 
-     - Log (at debug level) whenever a circuit's purpose is changed.
 
-     - Log SSL state transitions at log level DEBUG, log domain
 
-       HANDSHAKE. This can be useful for debugging censorship events.
 
-       Implements ticket 3264.
 
-     - We now log which torrc file we're using on startup. Implements
 
-       ticket 2444.
 
-     - Rate-limit log messages when asked to connect anonymously to
 
-       a private address. When these hit, they tended to hit fast and
 
-       often. Also, don't bother trying to connect to addresses that we
 
-       are sure will resolve to 127.0.0.1: getting 127.0.0.1 in a directory
 
-       reply makes us think we have been lied to, even when the address the
 
-       client tried to connect to was "localhost." Resolves ticket 2822.
 
-   o Minor bugfixes (log messages, non-client):
 
-     - Downgrade "eventdns rejected address" message to LOG_PROTOCOL_WARN.
 
-       Fixes bug 5932; bugfix on 0.2.2.7-alpha.
 
-     - Don't log that we have "decided to publish new relay descriptor"
 
-       unless we are actually publishing a descriptor. Fixes bug 3942;
 
-       bugfix on 0.2.2.28-beta.
 
-     - Log which authority we're missing votes from when we go to fetch
 
-       them from the other auths.
 
-     - Replace "Sending publish request" log messages with "Launching
 
-       upload", so that they no longer confusingly imply that we're
 
-       sending something to a directory we might not even be connected
 
-       to yet. Fixes bug 3311; bugfix on 0.2.0.10-alpha.
 
-     - Warn when Tor is configured to use accounting in a way that can
 
-       link a hidden service to some other hidden service or public
 
-       address. Resolves ticket 6490.
 
-     - Fix a minor formatting issue in one of tor-gencert's error messages.
 
-       Fixes bug 4574.
 
-   o Testing:
 
-     - Update to the latest version of the tinytest unit testing framework.
 
-       This includes a couple of bugfixes that can be relevant for
 
-       running forked unit tests on Windows, and removes all reserved
 
-       identifiers.
 
-     - Avoid a false positive in the util/threads unit test by increasing
 
-       the maximum timeout time. Fixes bug 6227; bugfix on 0.2.0.4-alpha.
 
-     - Make it possible to set the TestingTorNetwork configuration
 
-       option using AlternateDirAuthority and AlternateBridgeAuthority
 
-       as an alternative to setting DirServer. Addresses ticket 6377.
 
-     - Add a unit test for the environment_variable_names_equal() function.
 
-     - A wide variety of new unit tests by Esteban Manchado Velázquez.
 
-     - Numerous new unit tests for functions in util.c and address.c by
 
-       Anders Sundman.
 
-     - The long-disabled benchmark tests are now split into their own
 
-       ./src/test/bench binary.
 
-     - The benchmark tests can now use more accurate timers than
 
-       gettimeofday() when such timers are available.
 
-     - Use tt_assert(), not tor_assert(), for checking for test failures.
 
-       This makes the unit tests more able to go on in the event that
 
-       one of them fails.
 
-   o Build improvements:
 
-     - Use the dead_strip option when building Tor on OS X. This reduces
 
-       binary size by almost 19% when linking openssl and libevent
 
-       statically, which we do for Tor Browser Bundle.
 
-     - Provide a better error message about possible OSX Asciidoc failure
 
-       reasons. Fixes bug 6436.
 
-     - Detect attempts to build Tor on (as yet hypothetical) versions
 
-       of Windows where sizeof(intptr_t) != sizeof(SOCKET). Partial
 
-       fix for bug 4533. Bugfix on 0.2.2.28-beta.
 
-     - On Windows, we now define the _WIN32_WINNT macros only if they
 
-       are not already defined. This lets the person building Tor decide,
 
-       if they want, to require a later version of Windows.
 
-     - Our autogen.sh script now uses autoreconf to launch autoconf,
 
-       automake, and so on. This is more robust against some of the failure
 
-       modes associated with running the autotools pieces on their own.
 
-     - Running "make version" now displays the version of Tor that
 
-       we're about to build. Idea from katmagic; resolves issue 4400.
 
-     - Make 'tor --digests' list hashes of all Tor source files. Bugfix
 
-       on 0.2.2.4-alpha; fixes bug 3427.
 
-     - New --enable-static-tor configure option for building Tor as
 
-       statically as possible. Idea, general hackery and thoughts from
 
-       Alexei Czeskis, John Gilmore, Jacob Appelbaum. Implements ticket
 
-       2702.
 
-     - Limited, experimental support for building with nmake and MSVC.
 
-   o Build requirements:
 
-     - Building Tor with bufferevent support now requires Libevent
 
-       2.0.13-stable or later. Previous versions of Libevent had bugs in
 
-       SSL-related bufferevents and related issues that would make Tor
 
-       work badly with bufferevents. Requiring 2.0.13-stable also allows
 
-       Tor with bufferevents to take advantage of Libevent APIs
 
-       introduced after 2.0.8-rc.
 
-     - Our build system requires automake 1.6 or later to create the
 
-       Makefile.in files. Previously, you could have used 1.4.
 
-       This only affects developers and people building Tor from git;
 
-       people who build Tor from the source distribution without changing
 
-       the Makefile.am files should be fine.
 
-     - Detect when we try to build on a platform that doesn't define
 
-       AF_UNSPEC to 0. We don't work there, so refuse to compile.
 
-   o Build fixes (compile/link):
 
-     - Format more doubles with %f, not %lf. Patch from grarpamp to make
 
-       Tor build correctly on older BSDs again. Fixes bug 3894; bugfix on
 
-       Tor 0.2.0.8-alpha.
 
-     - When building with --enable-static-tor on OpenBSD, do not
 
-       erroneously attempt to link -lrt. Fixes bug 5103.
 
-     - Set _WIN32_WINNT to 0x0501 consistently throughout the code, so
 
-       that IPv6 stuff will compile on MSVC, and compilation issues
 
-       will be easier to track down. Fixes bug 5861.
 
-     - Fix build and 64-bit compile warnings from --enable-openbsd-malloc.
 
-       Fixes bug 6379. Bugfix on 0.2.0.20-rc.
 
-     - Make Tor build correctly again with -DUNICODE -D_UNICODE defined.
 
-       Fixes bug 6097; bugfix on 0.2.2.16-alpha.
 
-   o Build fixes (other):
 
-     - Use the _WIN32 macro throughout our code to detect Windows.
 
-       (Previously we had used the obsolete 'WIN32' and the idiosyncratic
 
-       'MS_WINDOWS'.)
 
-     - Properly handle the case where the build-tree is not the same
 
-       as the source tree when generating src/common/common_sha1.i,
 
-       src/or/micro-revision.i, and src/or/or_sha1.i. Fixes bug 3953;
 
-       bugfix on 0.2.0.1-alpha.
 
-     - During configure, search for library containing cos function as
 
-       libm lives in libcore on some platforms (BeOS/Haiku). Linking
 
-       against libm was hard-coded before. Fixes the first part of bug
 
-       4727; bugfix on 0.2.2.2-alpha. Patch and analysis by Martin Hebnes
 
-       Pedersen.
 
-     - Prevent a false positive from the check-spaces script, by disabling
 
-       the "whitespace between function name and (" check for functions
 
-       named 'op()'.
 
-   o Packaging (RPM) changes:
 
-     - Update our default RPM spec files to work with mock and rpmbuild
 
-       on RHEL/Fedora. They have an updated set of dependencies and
 
-       conflicts, a fix for an ancient typo when creating the "_tor"
 
-       user, and better instructions. Thanks to Ondrej Mikle for the
 
-       patch series. Fixes bug 6043.
 
-     - On OpenSUSE, create the /var/run/tor directory on startup if it
 
-       is not already created. Patch from Andreas Stieger. Fixes bug 2573.
 
-   o Code refactoring (safety):
 
-     - Do not use SMARTLIST_FOREACH for any loop whose body exceeds
 
-       10 lines. Also, don't nest them. Doing so in the past has
 
-       led to hard-to-debug code. The new style is to use the
 
-       SMARTLIST_FOREACH_{BEGIN,END} pair. Addresses issue 6400.
 
-     - Use macros to indicate OpenSSL versions, so we don't need to worry
 
-       about accidental hexadecimal bit shifts.
 
-     - Use tor_sscanf() in place of scanf() in more places through the
 
-       code. This makes us a little more locale-independent, and
 
-       should help shut up code-analysis tools that can't tell
 
-       a safe sscanf string from a dangerous one.
 
-     - Convert more instances of tor_snprintf+tor_strdup into tor_asprintf.
 
-     - Use the smartlist_add_asprintf() alias more consistently.
 
-   o Code refactoring (consolidate):
 
-     - A major revision to our internal node-selecting and listing logic.
 
-       Tor already had at least two major ways to look at the question of
 
-       "which Tor servers do we know about": a list of router descriptors,
 
-       and a list of entries in the current consensus. With
 
-       microdescriptors, we're adding a third. Having so many systems
 
-       without an abstraction layer over them was hurting the codebase.
 
-       Now, we have a new "node_t" abstraction that presents a consistent
 
-       interface to a client's view of a Tor node, and holds (nearly) all
 
-       of the mutable state formerly in routerinfo_t and routerstatus_t.
 
-     - Move tor_gettimeofday_cached() into compat_libevent.c, and use
 
-       Libevent's notion of cached time when possible.
 
-     - Remove duplicate code for invoking getrlimit() from control.c.
 
-     - Use OpenSSL's built-in SSL_state_string_long() instead of our
 
-       own homebrewed ssl_state_to_string() replacement. Patch from
 
-       Emile Snyder. Fixes bug 4653.
 
-     - Change the symmetric cipher interface so that creating and
 
-       initializing a stream cipher are no longer separate functions.
 
-   o Code refactoring (separate):
 
-     - Make a new "entry connection" struct as an internal subtype of "edge
 
-       connection", to simplify the code and make exit connections smaller.
 
-     - Split connection_about_to_close() into separate functions for each
 
-       connection type.
 
-     - Rewrite the listener-selection logic so that parsing which ports
 
-       we want to listen on is now separate from binding to the ports
 
-       we want.
 
-   o Code refactoring (name changes):
 
-     - Rename a handful of old identifiers, mostly related to crypto
 
-       structures and crypto functions. By convention, our "create an
 
-       object" functions are called "type_new()", our "free an object"
 
-       functions are called "type_free()", and our types indicate that
 
-       they are types only with a final "_t". But a handful of older
 
-       types and functions broke these rules, with function names like
 
-       "type_create" or "subsystem_op_type", or with type names like
 
-       type_env_t.
 
-     - Rename Tor functions that turn strings into addresses, so that
 
-       "parse" indicates that no hostname resolution occurs, and
 
-       "lookup" indicates that hostname resolution may occur. This
 
-       should help prevent mistakes in the future. Fixes bug 3512.
 
-     - Use the name "CERTS" consistently to refer to the new cell type;
 
-       we were calling it CERT in some places and CERTS in others.
 
-     - Use a TOR_INVALID_SOCKET macro when initializing a socket to an
 
-       invalid value, rather than just -1.
 
-     - Rename the bench_{aes,dmap} functions to test_*, so that tinytest
 
-       can pick them up when the tests aren't disabled. Bugfix on
 
-       0.2.2.4-alpha which introduced tinytest.
 
-   o Code refactoring (other):
 
-     - Defensively refactor rend_mid_rendezvous() so that protocol
 
-       violations and length checks happen in the beginning. Fixes
 
-       bug 5645.
 
-     - Remove the pure attribute from all functions that used it
 
-       previously. In many cases we assigned it incorrectly, because the
 
-       functions might assert or call impure functions, and we don't have
 
-       evidence that keeping the pure attribute is worthwhile. Implements
 
-       changes suggested in ticket 4421.
 
-     - Move the replay-detection cache for the RSA-encrypted parts of
 
-       INTRODUCE2 cells to the introduction point data structures.
 
-       Previously, we would use one replay-detection cache per hidden
 
-       service. Required by fix for bug 3460.
 
-     - The helper programs tor-gencert, tor-resolve, and tor-checkkey
 
-       no longer link against Libevent: they never used it, but
 
-       our library structure used to force them to link it.
 
-   o Removed features and files:
 
-     - Remove all internal support for unpadded RSA. We never used it, and
 
-       it would be a bad idea to start.
 
-     - Remove some workaround code for OpenSSL 0.9.6 (which is no longer
 
-       supported).
 
-     - Remove some redundant #include directives throughout the code.
 
-       Patch from Andrea Gelmini.
 
-     - Remove some old code to remember statistics about which descriptors
 
-       we've served as a directory mirror. The feature wasn't used and
 
-       is outdated now that microdescriptors are around.
 
-     - Remove some old code to work around even older versions of Tor that
 
-       used forked processes to handle DNS requests. Such versions of Tor
 
-       are no longer in use as relays.
 
-     - The "torify" script no longer supports the "tsocks" socksifier
 
-       tool, since tsocks doesn't support DNS and UDP right for Tor.
 
-       Everyone should be using torsocks instead. Fixes bugs 3530 and
 
-       5180. Based on a patch by "ugh".
 
-     - Remove the torrc.bridge file: we don't use it for anything, and
 
-       it had become badly desynchronized from torrc.sample. Resolves
 
-       bug 5622.
 
-   o Documentation:
 
-     - Begin a doc/state-contents.txt file to explain the contents of
 
-       the Tor state file. Fixes bug 2987.
 
-     - Clarify the documentation for the Alternate*Authority options.
 
-       Fixes bug 6387.
 
-     - Document the --defaults-torrc option, and the new semantics for
 
-       overriding, extending, and clearing lists of options. Closes
 
-       bug 4748.
 
-     - Add missing man page documentation for consensus and microdesc
 
-       files. Resolves ticket 6732.
 
-     - Fix some typos in the manpages. Patch from A. Costa. Fixes bug 6500.
 
-   o Documentation fixes:
 
-     - Improve the manual's documentation for the NT Service command-line
 
-       options. Addresses ticket 3964.
 
-     - Clarify SessionGroup documentation slightly; resolves ticket 5437.
 
-     - Document the changes to the ORPort and DirPort options, and the
 
-       fact that {OR/Dir}ListenAddress is now unnecessary (and
 
-       therefore deprecated). Resolves ticket 5597.
 
-     - Correct a broken faq link in the INSTALL file. Fixes bug 2307.
 
-     - Clarify that hidden services are TCP only. Fixes bug 6024.
 
- Changes in version 0.2.2.39 - 2012-09-11
 
-   Tor 0.2.2.39 fixes two more opportunities for remotely triggerable
 
-   assertions.
 
-   o Security fixes:
 
-     - Fix an assertion failure in tor_timegm() that could be triggered
 
-       by a badly formatted directory object. Bug found by fuzzing with
 
-       Radamsa. Fixes bug 6811; bugfix on 0.2.0.20-rc.
 
-     - Do not crash when comparing an address with port value 0 to an
 
-       address policy. This bug could have been used to cause a remote
 
-       assertion failure by or against directory authorities, or to
 
-       allow some applications to crash clients. Fixes bug 6690; bugfix
 
-       on 0.2.1.10-alpha.
 
- Changes in version 0.2.2.38 - 2012-08-12
 
-   Tor 0.2.2.38 fixes a remotely triggerable crash bug, and fixes a timing
 
-   attack that could in theory leak path information.
 
-   o Security fixes:
 
-     - Avoid an uninitialized memory read when reading a vote or consensus
 
-       document that has an unrecognized flavor name. This read could
 
-       lead to a remote crash bug. Fixes bug 6530; bugfix on 0.2.2.6-alpha.
 
-     - Try to leak less information about what relays a client is
 
-       choosing to a side-channel attacker. Previously, a Tor client would
 
-       stop iterating through the list of available relays as soon as it
 
-       had chosen one, thus finishing a little earlier when it picked
 
-       a router earlier in the list. If an attacker can recover this
 
-       timing information (nontrivial but not proven to be impossible),
 
-       they could learn some coarse-grained information about which relays
 
-       a client was picking (middle nodes in particular are likelier to
 
-       be affected than exits). The timing attack might be mitigated by
 
-       other factors (see bug 6537 for some discussion), but it's best
 
-       not to take chances. Fixes bug 6537; bugfix on 0.0.8rc1.
 
- Changes in version 0.2.2.37 - 2012-06-06
 
-   Tor 0.2.2.37 introduces a workaround for a critical renegotiation
 
-   bug in OpenSSL 1.0.1 (where 20% of the Tor network can't talk to itself
 
-   currently).
 
-   o Major bugfixes:
 
-     - Work around a bug in OpenSSL that broke renegotiation with TLS
 
-       1.1 and TLS 1.2. Without this workaround, all attempts to speak
 
-       the v2 Tor connection protocol when both sides were using OpenSSL
 
-       1.0.1 would fail. Resolves ticket 6033.
 
-     - When waiting for a client to renegotiate, don't allow it to add
 
-       any bytes to the input buffer. This fixes a potential DoS issue.
 
-       Fixes bugs 5934 and 6007; bugfix on 0.2.0.20-rc.
 
-     - Fix an edge case where if we fetch or publish a hidden service
 
-       descriptor, we might build a 4-hop circuit and then use that circuit
 
-       for exiting afterwards -- even if the new last hop doesn't obey our
 
-       ExitNodes config option. Fixes bug 5283; bugfix on 0.2.0.10-alpha.
 
-   o Minor bugfixes:
 
-     - Fix a build warning with Clang 3.1 related to our use of vasprintf.
 
-       Fixes bug 5969. Bugfix on 0.2.2.11-alpha.
 
-   o Minor features:
 
-     - Tell GCC and Clang to check for any errors in format strings passed
 
-       to the tor_v*(print|scan)f functions.
 
- Changes in version 0.2.2.36 - 2012-05-24
 
-   Tor 0.2.2.36 updates the addresses for two of the eight directory
 
-   authorities, fixes some potential anonymity and security issues,
 
-   and fixes several crash bugs.
 
-   Tor 0.2.1.x has reached its end-of-life. Those Tor versions have many
 
-   known flaws, and nobody should be using them. You should upgrade. If
 
-   you're using a Linux or BSD and its packages are obsolete, stop using
 
-   those packages and upgrade anyway.
 
-   o Directory authority changes:
 
-     - Change IP address for maatuska (v3 directory authority).
 
-     - Change IP address for ides (v3 directory authority), and rename
 
-       it to turtles.
 
-   o Security fixes:
 
-     - When building or running with any version of OpenSSL earlier
 
-       than 0.9.8s or 1.0.0f, disable SSLv3 support. These OpenSSL
 
-       versions have a bug (CVE-2011-4576) in which their block cipher
 
-       padding includes uninitialized data, potentially leaking sensitive
 
-       information to any peer with whom they make a SSLv3 connection. Tor
 
-       does not use SSL v3 by default, but a hostile client or server
 
-       could force an SSLv3 connection in order to gain information that
 
-       they shouldn't have been able to get. The best solution here is to
 
-       upgrade to OpenSSL 0.9.8s or 1.0.0f (or later). But when building
 
-       or running with a non-upgraded OpenSSL, we disable SSLv3 entirely
 
-       to make sure that the bug can't happen.
 
-     - Never use a bridge or a controller-supplied node as an exit, even
 
-       if its exit policy allows it. Found by wanoskarnet. Fixes bug
 
-       5342. Bugfix on 0.1.1.15-rc (for controller-purpose descriptors)
 
-       and 0.2.0.3-alpha (for bridge-purpose descriptors).
 
-     - Only build circuits if we have a sufficient threshold of the total
 
-       descriptors that are marked in the consensus with the "Exit"
 
-       flag. This mitigates an attack proposed by wanoskarnet, in which
 
-       all of a client's bridges collude to restrict the exit nodes that
 
-       the client knows about. Fixes bug 5343.
 
-     - Provide controllers with a safer way to implement the cookie
 
-       authentication mechanism. With the old method, if another locally
 
-       running program could convince a controller that it was the Tor
 
-       process, then that program could trick the controller into telling
 
-       it the contents of an arbitrary 32-byte file. The new "SAFECOOKIE"
 
-       authentication method uses a challenge-response approach to prevent
 
-       this attack. Fixes bug 5185; implements proposal 193.
 
-   o Major bugfixes:
 
-     - Avoid logging uninitialized data when unable to decode a hidden
 
-       service descriptor cookie. Fixes bug 5647; bugfix on 0.2.1.5-alpha.
 
-     - Avoid a client-side assertion failure when receiving an INTRODUCE2
 
-       cell on a general purpose circuit. Fixes bug 5644; bugfix on
 
-       0.2.1.6-alpha.
 
-     - Fix builds when the path to sed, openssl, or sha1sum contains
 
-       spaces, which is pretty common on Windows. Fixes bug 5065; bugfix
 
-       on 0.2.2.1-alpha.
 
-     - Correct our replacements for the timeradd() and timersub() functions
 
-       on platforms that lack them (for example, Windows). The timersub()
 
-       function is used when expiring circuits, while timeradd() is
 
-       currently unused. Bug report and patch by Vektor. Fixes bug 4778;
 
-       bugfix on 0.2.2.24-alpha.
 
-     - Fix the SOCKET_OK test that we use to tell when socket
 
-       creation fails so that it works on Win64. Fixes part of bug 4533;
 
-       bugfix on 0.2.2.29-beta. Bug found by wanoskarnet.
 
-   o Minor bugfixes:
 
-     - Reject out-of-range times like 23:59:61 in parse_rfc1123_time().
 
-       Fixes bug 5346; bugfix on 0.0.8pre3.
 
-     - Make our number-parsing functions always treat too-large values
 
-       as an error, even when those values exceed the width of the
 
-       underlying type. Previously, if the caller provided these
 
-       functions with minima or maxima set to the extreme values of the
 
-       underlying integer type, these functions would return those
 
-       values on overflow rather than treating overflow as an error.
 
-       Fixes part of bug 5786; bugfix on 0.0.9.
 
-     - Older Linux kernels erroneously respond to strange nmap behavior
 
-       by having accept() return successfully with a zero-length
 
-       socket. When this happens, just close the connection. Previously,
 
-       we would try harder to learn the remote address: but there was
 
-       no such remote address to learn, and our method for trying to
 
-       learn it was incorrect. Fixes bugs 1240, 4745, and 4747. Bugfix
 
-       on 0.1.0.3-rc. Reported and diagnosed by "r1eo".
 
-     - Correct parsing of certain date types in parse_http_time().
 
-       Without this patch, If-Modified-Since would behave
 
-       incorrectly. Fixes bug 5346; bugfix on 0.2.0.2-alpha. Patch from
 
-       Esteban Manchado Velázques.
 
-     - Change the BridgePassword feature (part of the "bridge community"
 
-       design, which is not yet implemented) to use a time-independent
 
-       comparison. The old behavior might have allowed an adversary
 
-       to use timing to guess the BridgePassword value. Fixes bug 5543;
 
-       bugfix on 0.2.0.14-alpha.
 
-     - Detect and reject certain misformed escape sequences in
 
-       configuration values. Previously, these values would cause us
 
-       to crash if received in a torrc file or over an authenticated
 
-       control port. Bug found by Esteban Manchado Velázquez, and
 
-       independently by Robert Connolly from Matta Consulting who further
 
-       noted that it allows a post-authentication heap overflow. Patch
 
-       by Alexander Schrijver. Fixes bugs 5090 and 5402 (CVE 2012-1668);
 
-       bugfix on 0.2.0.16-alpha.
 
-     - Fix a compile warning when using the --enable-openbsd-malloc
 
-       configure option. Fixes bug 5340; bugfix on 0.2.0.20-rc.
 
-     - During configure, detect when we're building with clang version
 
-       3.0 or lower and disable the -Wnormalized=id and -Woverride-init
 
-       CFLAGS. clang doesn't support them yet.
 
-     - When sending an HTTP/1.1 proxy request, include a Host header.
 
-       Fixes bug 5593; bugfix on 0.2.2.1-alpha.
 
-     - Fix a NULL-pointer dereference on a badly formed SETCIRCUITPURPOSE
 
-       command. Found by mikeyc. Fixes bug 5796; bugfix on 0.2.2.9-alpha.
 
-     - If we hit the error case where routerlist_insert() replaces an
 
-       existing (old) server descriptor, make sure to remove that
 
-       server descriptor from the old_routers list. Fix related to bug
 
-       1776. Bugfix on 0.2.2.18-alpha.
 
-   o Minor bugfixes (documentation and log messages):
 
-     - Fix a typo in a log message in rend_service_rendezvous_has_opened().
 
-       Fixes bug 4856; bugfix on Tor 0.0.6.
 
-     - Update "ClientOnly" man page entry to explain that there isn't
 
-       really any point to messing with it. Resolves ticket 5005.
 
-     - Document the GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays
 
-       directory authority option (introduced in Tor 0.2.2.34).
 
-     - Downgrade the "We're missing a certificate" message from notice
 
-       to info: people kept mistaking it for a real problem, whereas it
 
-       is seldom the problem even when we are failing to bootstrap. Fixes
 
-       bug 5067; bugfix on 0.2.0.10-alpha.
 
-     - Correctly spell "connect" in a log message on failure to create a
 
-       controlsocket. Fixes bug 4803; bugfix on 0.2.2.26-beta.
 
-     - Clarify the behavior of MaxCircuitDirtiness with hidden service
 
-       circuits. Fixes issue 5259.
 
-   o Minor features:
 
-     - Directory authorities now reject versions of Tor older than
 
-       0.2.1.30, and Tor versions between 0.2.2.1-alpha and 0.2.2.20-alpha
 
-       inclusive. These versions accounted for only a small fraction of
 
-       the Tor network, and have numerous known security issues. Resolves
 
-       issue 4788.
 
-     - Update to the May 1 2012 Maxmind GeoLite Country database.
 
-   - Feature removal:
 
-     - When sending or relaying a RELAY_EARLY cell, we used to convert
 
-       it to a RELAY cell if the connection was using the v1 link
 
-       protocol. This was a workaround for older versions of Tor, which
 
-       didn't handle RELAY_EARLY cells properly. Now that all supported
 
-       versions can handle RELAY_EARLY cells, and now that we're enforcing
 
-       the "no RELAY_EXTEND commands except in RELAY_EARLY cells" rule,
 
-       remove this workaround. Addresses bug 4786.
 
- Changes in version 0.2.2.35 - 2011-12-16
 
-   Tor 0.2.2.35 fixes a critical heap-overflow security issue in Tor's
 
-   buffers code. Absolutely everybody should upgrade.
 
-   The bug relied on an incorrect calculation when making data continuous
 
-   in one of our IO buffers, if the first chunk of the buffer was
 
-   misaligned by just the wrong amount. The miscalculation would allow an
 
-   attacker to overflow a piece of heap-allocated memory. To mount this
 
-   attack, the attacker would need to either open a SOCKS connection to
 
-   Tor's SocksPort (usually restricted to localhost), or target a Tor
 
-   instance configured to make its connections through a SOCKS proxy
 
-   (which Tor does not do by default).
 
-   Good security practice requires that all heap-overflow bugs should be
 
-   presumed to be exploitable until proven otherwise, so we are treating
 
-   this as a potential code execution attack. Please upgrade immediately!
 
-   This bug does not affect bufferevents-based builds of Tor. Special
 
-   thanks to "Vektor" for reporting this issue to us!
 
-   Tor 0.2.2.35 also fixes several bugs in previous versions, including
 
-   crash bugs for unusual configurations, and a long-term bug that
 
-   would prevent Tor from starting on Windows machines with draconian
 
-   AV software.
 
-   With this release, we remind everyone that 0.2.0.x has reached its
 
-   formal end-of-life. Those Tor versions have many known flaws, and
 
-   nobody should be using them. You should upgrade -- ideally to the
 
-   0.2.2.x series. If you're using a Linux or BSD and its packages are
 
-   obsolete, stop using those packages and upgrade anyway.
 
-   The Tor 0.2.1.x series is also approaching its end-of-life: it will no
 
-   longer receive support after some time in early 2012.
 
-   o Major bugfixes:
 
-     - Fix a heap overflow bug that could occur when trying to pull
 
-       data into the first chunk of a buffer, when that chunk had
 
-       already had some data drained from it. Fixes CVE-2011-2778;
 
-       bugfix on 0.2.0.16-alpha. Reported by "Vektor".
 
-     - Initialize Libevent with the EVENT_BASE_FLAG_NOLOCK flag enabled, so
 
-       that it doesn't attempt to allocate a socketpair. This could cause
 
-       some problems on Windows systems with overzealous firewalls. Fix for
 
-       bug 4457; workaround for Libevent versions 2.0.1-alpha through
 
-       2.0.15-stable.
 
-     - If we mark an OR connection for close based on a cell we process,
 
-       don't process any further cells on it. We already avoid further
 
-       reads on marked-for-close connections, but now we also discard the
 
-       cells we'd already read. Fixes bug 4299; bugfix on 0.2.0.10-alpha,
 
-       which was the first version where we might mark a connection for
 
-       close based on processing a cell on it.
 
-     - Correctly sanity-check that we don't underflow on a memory
 
-       allocation (and then assert) for hidden service introduction
 
-       point decryption. Bug discovered by Dan Rosenberg. Fixes bug 4410;
 
-       bugfix on 0.2.1.5-alpha.
 
-     - Fix a memory leak when we check whether a hidden service
 
-       descriptor has any usable introduction points left. Fixes bug
 
-       4424. Bugfix on 0.2.2.25-alpha.
 
-     - Don't crash when we're running as a relay and don't have a GeoIP
 
-       file. Bugfix on 0.2.2.34; fixes bug 4340. This backports a fix
 
-       we've had in the 0.2.3.x branch already.
 
-     - When running as a client, do not print a misleading (and plain
 
-       wrong) log message that we're collecting "directory request"
 
-       statistics: clients don't collect statistics. Also don't create a
 
-       useless (because empty) stats file in the stats/ directory. Fixes
 
-       bug 4353; bugfix on 0.2.2.34.
 
-   o Minor bugfixes:
 
-     - Detect failure to initialize Libevent. This fix provides better
 
-       detection for future instances of bug 4457.
 
-     - Avoid frequent calls to the fairly expensive cull_wedged_cpuworkers
 
-       function. This was eating up hideously large amounts of time on some
 
-       busy servers. Fixes bug 4518; bugfix on 0.0.9.8.
 
-     - Resolve an integer overflow bug in smartlist_ensure_capacity().
 
-       Fixes bug 4230; bugfix on Tor 0.1.0.1-rc. Based on a patch by
 
-       Mansour Moufid.
 
-     - Don't warn about unused log_mutex in log.c when building with
 
-       --disable-threads using a recent GCC. Fixes bug 4437; bugfix on
 
-       0.1.0.6-rc which introduced --disable-threads.
 
-     - When configuring, starting, or stopping an NT service, stop
 
-       immediately after the service configuration attempt has succeeded
 
-       or failed. Fixes bug 3963; bugfix on 0.2.0.7-alpha.
 
-     - When sending a NETINFO cell, include the original address
 
-       received for the other side, not its canonical address. Found
 
-       by "troll_un"; fixes bug 4349; bugfix on 0.2.0.10-alpha.
 
-     - Fix a typo in a hibernation-related log message. Fixes bug 4331;
 
-       bugfix on 0.2.2.23-alpha; found by "tmpname0901".
 
-     - Fix a memory leak in launch_direct_bridge_descriptor_fetch() that
 
-       occurred when a client tried to fetch a descriptor for a bridge
 
-       in ExcludeNodes. Fixes bug 4383; bugfix on 0.2.2.25-alpha.
 
-     - Backport fixes for a pair of compilation warnings on Windows.
 
-       Fixes bug 4521; bugfix on 0.2.2.28-beta and on 0.2.2.29-beta.
 
-     - If we had ever tried to call tor_addr_to_str on an address of
 
-       unknown type, we would have done a strdup on an uninitialized
 
-       buffer. Now we won't. Fixes bug 4529; bugfix on 0.2.1.3-alpha.
 
-       Reported by "troll_un".
 
-     - Correctly detect and handle transient lookup failures from
 
-       tor_addr_lookup. Fixes bug 4530; bugfix on 0.2.1.5-alpha.
 
-       Reported by "troll_un".
 
-     - Fix null-pointer access that could occur if TLS allocation failed.
 
-       Fixes bug 4531; bugfix on 0.2.0.20-rc. Found by "troll_un".
 
-     - Use tor_socket_t type for listener argument to accept(). Fixes bug
 
-       4535; bugfix on 0.2.2.28-beta. Found by "troll_un".
 
-   o Minor features:
 
-     - Add two new config options for directory authorities:
 
-       AuthDirFastGuarantee sets a bandwidth threshold for guaranteeing the
 
-       Fast flag, and AuthDirGuardBWGuarantee sets a bandwidth threshold
 
-       that is always sufficient to satisfy the bandwidth requirement for
 
-       the Guard flag. Now it will be easier for researchers to simulate
 
-       Tor networks with different values. Resolves ticket 4484.
 
-     - When Tor ignores a hidden service specified in its configuration,
 
-       include the hidden service's directory in the warning message.
 
-       Previously, we would only tell the user that some hidden service
 
-       was ignored. Bugfix on 0.0.6; fixes bug 4426.
 
-     - Update to the December 6 2011 Maxmind GeoLite Country database.
 
-   o Packaging changes:
 
-     - Make it easier to automate expert package builds on Windows,
 
-       by removing an absolute path from makensis.exe command.
 
- Changes in version 0.2.1.32 - 2011-12-16
 
-   Tor 0.2.1.32 backports important security and privacy fixes for
 
-   oldstable. This release is intended only for package maintainers and
 
-   others who cannot use the 0.2.2 stable series. All others should be
 
-   using Tor 0.2.2.x or newer.
 
-   The Tor 0.2.1.x series will reach formal end-of-life some time in
 
-   early 2012; we will stop releasing patches for it then.
 
-   o Major bugfixes (also included in 0.2.2.x):
 
-     - Correctly sanity-check that we don't underflow on a memory
 
-       allocation (and then assert) for hidden service introduction
 
-       point decryption. Bug discovered by Dan Rosenberg. Fixes bug 4410;
 
-       bugfix on 0.2.1.5-alpha.
 
-     - Fix a heap overflow bug that could occur when trying to pull
 
-       data into the first chunk of a buffer, when that chunk had
 
-       already had some data drained from it. Fixes CVE-2011-2778;
 
-       bugfix on 0.2.0.16-alpha. Reported by "Vektor".
 
-   o Minor features:
 
-     - Update to the December 6 2011 Maxmind GeoLite Country database.
 
- Changes in version 0.2.2.34 - 2011-10-26
 
-   Tor 0.2.2.34 fixes a critical anonymity vulnerability where an attacker
 
-   can deanonymize Tor users. Everybody should upgrade.
 
-   The attack relies on four components: 1) Clients reuse their TLS cert
 
-   when talking to different relays, so relays can recognize a user by
 
-   the identity key in her cert. 2) An attacker who knows the client's
 
-   identity key can probe each guard relay to see if that identity key
 
-   is connected to that guard relay right now. 3) A variety of active
 
-   attacks in the literature (starting from "Low-Cost Traffic Analysis
 
-   of Tor" by Murdoch and Danezis in 2005) allow a malicious website to
 
-   discover the guard relays that a Tor user visiting the website is using.
 
-   4) Clients typically pick three guards at random, so the set of guards
 
-   for a given user could well be a unique fingerprint for her. This
 
-   release fixes components #1 and #2, which is enough to block the attack;
 
-   the other two remain as open research problems. Special thanks to
 
-   "frosty_un" for reporting the issue to us!
 
-   Clients should upgrade so they are no longer recognizable by the TLS
 
-   certs they present. Relays should upgrade so they no longer allow a
 
-   remote attacker to probe them to test whether unpatched clients are
 
-   currently connected to them.
 
-   This release also fixes several vulnerabilities that allow an attacker
 
-   to enumerate bridge relays. Some bridge enumeration attacks still
 
-   remain; see for example proposal 188.
 
-   o Privacy/anonymity fixes (clients):
 
-     - Clients and bridges no longer send TLS certificate chains on
 
-       outgoing OR connections. Previously, each client or bridge would
 
-       use the same cert chain for all outgoing OR connections until
 
-       its IP address changes, which allowed any relay that the client
 
-       or bridge contacted to determine which entry guards it is using.
 
-       Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
 
-     - If a relay receives a CREATE_FAST cell on a TLS connection, it
 
-       no longer considers that connection as suitable for satisfying a
 
-       circuit EXTEND request. Now relays can protect clients from the
 
-       CVE-2011-2768 issue even if the clients haven't upgraded yet.
 
-     - Directory authorities no longer assign the Guard flag to relays
 
-       that haven't upgraded to the above "refuse EXTEND requests
 
-       to client connections" fix. Now directory authorities can
 
-       protect clients from the CVE-2011-2768 issue even if neither
 
-       the clients nor the relays have upgraded yet. There's a new
 
-       "GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays" config option
 
-       to let us transition smoothly, else tomorrow there would be no
 
-       guard relays.
 
-   o Privacy/anonymity fixes (bridge enumeration):
 
-     - Bridge relays now do their directory fetches inside Tor TLS
 
-       connections, like all the other clients do, rather than connecting
 
-       directly to the DirPort like public relays do. Removes another
 
-       avenue for enumerating bridges. Fixes bug 4115; bugfix on 0.2.0.35.
 
-     - Bridges relays now build circuits for themselves in a more similar
 
-       way to how clients build them. Removes another avenue for
 
-       enumerating bridges. Fixes bug 4124; bugfix on 0.2.0.3-alpha,
 
-       when bridges were introduced.
 
-     - Bridges now refuse CREATE or CREATE_FAST cells on OR connections
 
-       that they initiated. Relays could distinguish incoming bridge
 
-       connections from client connections, creating another avenue for
 
-       enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
 
-       Found by "frosty_un".
 
-   o Major bugfixes:
 
-     - Fix a crash bug when changing node restrictions while a DNS lookup
 
-       is in-progress. Fixes bug 4259; bugfix on 0.2.2.25-alpha. Bugfix
 
-       by "Tey'".
 
-     - Don't launch a useless circuit after failing to use one of a
 
-       hidden service's introduction points. Previously, we would
 
-       launch a new introduction circuit, but not set the hidden service
 
-       which that circuit was intended to connect to, so it would never
 
-       actually be used. A different piece of code would then create a
 
-       new introduction circuit correctly. Bug reported by katmagic and
 
-       found by Sebastian Hahn. Bugfix on 0.2.1.13-alpha; fixes bug 4212.
 
-   o Minor bugfixes:
 
-     - Change an integer overflow check in the OpenBSD_Malloc code so
 
-       that GCC is less likely to eliminate it as impossible. Patch
 
-       from Mansour Moufid. Fixes bug 4059.
 
-     - When a hidden service turns an extra service-side introduction
 
-       circuit into a general-purpose circuit, free the rend_data and
 
-       intro_key fields first, so we won't leak memory if the circuit
 
-       is cannibalized for use as another service-side introduction
 
-       circuit. Bugfix on 0.2.1.7-alpha; fixes bug 4251.
 
-     - Bridges now skip DNS self-tests, to act a little more stealthily.
 
-       Fixes bug 4201; bugfix on 0.2.0.3-alpha, which first introduced
 
-       bridges. Patch by "warms0x".
 
-     - Fix internal bug-checking logic that was supposed to catch
 
-       failures in digest generation so that it will fail more robustly
 
-       if we ask for a nonexistent algorithm. Found by Coverity Scan.
 
-       Bugfix on 0.2.2.1-alpha; fixes Coverity CID 479.
 
-     - Report any failure in init_keys() calls launched because our
 
-       IP address has changed. Spotted by Coverity Scan. Bugfix on
 
-       0.1.1.4-alpha; fixes CID 484.
 
-   o Minor bugfixes (log messages and documentation):
 
-     - Remove a confusing dollar sign from the example fingerprint in the
 
-       man page, and also make the example fingerprint a valid one. Fixes
 
-       bug 4309; bugfix on 0.2.1.3-alpha.
 
-     - The next version of Windows will be called Windows 8, and it has
 
-       a major version of 6, minor version of 2. Correctly identify that
 
-       version instead of calling it "Very recent version". Resolves
 
-       ticket 4153; reported by funkstar.
 
-     - Downgrade log messages about circuit timeout calibration from
 
-       "notice" to "info": they don't require or suggest any human
 
-       intervention. Patch from Tom Lowenthal. Fixes bug 4063;
 
-       bugfix on 0.2.2.14-alpha.
 
-   o Minor features:
 
-     - Turn on directory request statistics by default and include them in
 
-       extra-info descriptors. Don't break if we have no GeoIP database.
 
-       Backported from 0.2.3.1-alpha; implements ticket 3951.
 
-     - Update to the October 4 2011 Maxmind GeoLite Country database.
 
- Changes in version 0.2.1.31 - 2011-10-26
 
-   Tor 0.2.1.31 backports important security and privacy fixes for
 
-   oldstable. This release is intended only for package maintainers and
 
-   others who cannot use the 0.2.2 stable series. All others should be
 
-   using Tor 0.2.2.x or newer.
 
-   o Security fixes (also included in 0.2.2.x):
 
-     - Replace all potentially sensitive memory comparison operations
 
-       with versions whose runtime does not depend on the data being
 
-       compared. This will help resist a class of attacks where an
 
-       adversary can use variations in timing information to learn
 
-       sensitive data. Fix for one case of bug 3122. (Safe memcmp
 
-       implementation by Robert Ransom based partially on code by DJB.)
 
-     - Fix an assert in parsing router descriptors containing IPv6
 
-       addresses. This one took down the directory authorities when
 
-       somebody tried some experimental code. Bugfix on 0.2.1.3-alpha.
 
-   o Privacy/anonymity fixes (also included in 0.2.2.x):
 
-     - Clients and bridges no longer send TLS certificate chains on
 
-       outgoing OR connections. Previously, each client or bridge would
 
-       use the same cert chain for all outgoing OR connections until
 
-       its IP address changes, which allowed any relay that the client
 
-       or bridge contacted to determine which entry guards it is using.
 
-       Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
 
-     - If a relay receives a CREATE_FAST cell on a TLS connection, it
 
-       no longer considers that connection as suitable for satisfying a
 
-       circuit EXTEND request. Now relays can protect clients from the
 
-       CVE-2011-2768 issue even if the clients haven't upgraded yet.
 
-     - Bridges now refuse CREATE or CREATE_FAST cells on OR connections
 
-       that they initiated. Relays could distinguish incoming bridge 
 
-       connections from client connections, creating another avenue for
 
-       enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
 
-       Found by "frosty_un".
 
-     - When receiving a hidden service descriptor, check that it is for
 
-       the hidden service we wanted. Previously, Tor would store any
 
-       hidden service descriptors that a directory gave it, whether it
 
-       wanted them or not. This wouldn't have let an attacker impersonate
 
-       a hidden service, but it did let directories pre-seed a client
 
-       with descriptors that it didn't want. Bugfix on 0.0.6.
 
-     - Avoid linkability based on cached hidden service descriptors: forget
 
-       all hidden service descriptors cached as a client when processing a
 
-       SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6.
 
-     - Make the bridge directory authority refuse to answer directory
 
-       requests for "all" descriptors. It used to include bridge
 
-       descriptors in its answer, which was a major information leak.
 
-       Found by "piebeer". Bugfix on 0.2.0.3-alpha.
 
-     - Don't attach new streams to old rendezvous circuits after SIGNAL
 
-       NEWNYM. Previously, we would keep using an existing rendezvous
 
-       circuit if it remained open (i.e. if it were kept open by a
 
-       long-lived stream, or if a new stream were attached to it before
 
-       Tor could notice that it was old and no longer in use). Bugfix on
 
-       0.1.1.15-rc; fixes bug 3375.
 
-   o Minor bugfixes (also included in 0.2.2.x):
 
-     - When we restart our relay, we might get a successful connection
 
-       from the outside before we've started our reachability tests,
 
-       triggering a warning: "ORPort found reachable, but I have no
 
-       routerinfo yet. Failing to inform controller of success." This
 
-       bug was harmless unless Tor is running under a controller
 
-       like Vidalia, in which case the controller would never get a
 
-       REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha;
 
-       fixes bug 1172.
 
-     - Build correctly on OSX with zlib 1.2.4 and higher with all warnings
 
-       enabled. Fixes bug 1526.
 
-     - Remove undocumented option "-F" from tor-resolve: it hasn't done
 
-       anything since 0.2.1.16-rc.
 
-     - Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned.
 
-       None of the cases where we did this before were wrong, but by making
 
-       this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28.
 
-     - Fix a rare crash bug that could occur when a client was configured
 
-       with a large number of bridges. Fixes bug 2629; bugfix on
 
-       0.2.1.2-alpha. Bugfix by trac user "shitlei".
 
-     - Correct the warning displayed when a rendezvous descriptor exceeds
 
-       the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by
 
-       John Brooks.
 
-     - Fix an uncommon assertion failure when running with DNSPort under
 
-       heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha.
 
-     - When warning about missing zlib development packages during compile,
 
-       give the correct package names. Bugfix on 0.2.0.1-alpha.
 
-     - Require that introduction point keys and onion keys have public
 
-       exponent 65537. Bugfix on 0.2.0.10-alpha.
 
-     - Do not crash when our configuration file becomes unreadable, for
 
-       example due to a permissions change, between when we start up
 
-       and when a controller calls SAVECONF. Fixes bug 3135; bugfix
 
-       on 0.0.9pre6.
 
-     - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option.
 
-       Fixes bug 3208.
 
-     - Always NUL-terminate the sun_path field of a sockaddr_un before
 
-       passing it to the kernel. (Not a security issue: kernels are
 
-       smart enough to reject bad sockaddr_uns.) Found by Coverity;
 
-       CID #428. Bugfix on Tor 0.2.0.3-alpha.
 
-     - Don't stack-allocate the list of supplementary GIDs when we're
 
-       about to log them. Stack-allocating NGROUPS_MAX gid_t elements
 
-       could take up to 256K, which is way too much stack. Found by
 
-       Coverity; CID #450. Bugfix on 0.2.1.7-alpha.
 
-   o Minor bugfixes (only in 0.2.1.x):
 
-     - Resume using micro-version numbers in 0.2.1.x: our Debian packages
 
-       rely on them. Bugfix on 0.2.1.30.
 
-     - Use git revisions instead of svn revisions when generating our
 
-       micro-version numbers. Bugfix on 0.2.1.15-rc; fixes bug 2402.
 
-   o Minor features (also included in 0.2.2.x):
 
-     - Adjust the expiration time on our SSL session certificates to
 
-       better match SSL certs seen in the wild. Resolves ticket 4014.
 
-     - Allow nameservers with IPv6 address. Resolves bug 2574.
 
-     - Update to the October 4 2011 Maxmind GeoLite Country database.
 
- Changes in version 0.2.2.33 - 2011-09-13
 
-   Tor 0.2.2.33 fixes several bugs, and includes a slight tweak to Tor's
 
-   TLS handshake that makes relays and bridges that run this new version
 
-   reachable from Iran again.
 
-   o Major bugfixes:
 
-     - Avoid an assertion failure when reloading a configuration with
 
-       TrackExitHosts changes. Found and fixed by 'laruldan'. Fixes bug
 
-       3923; bugfix on 0.2.2.25-alpha.
 
-   o Minor features (security):
 
-     - Check for replays of the public-key encrypted portion of an
 
-       INTRODUCE1 cell, in addition to the current check for replays of
 
-       the g^x value. This prevents a possible class of active attacks
 
-       by an attacker who controls both an introduction point and a
 
-       rendezvous point, and who uses the malleability of AES-CTR to
 
-       alter the encrypted g^x portion of the INTRODUCE1 cell. We think
 
-       that these attacks are infeasible (requiring the attacker to send
 
-       on the order of zettabytes of altered cells in a short interval),
 
-       but we'd rather block them off in case there are any classes of
 
-       this attack that we missed. Reported by Willem Pinckaers.
 
-   o Minor features:
 
-     - Adjust the expiration time on our SSL session certificates to
 
-       better match SSL certs seen in the wild. Resolves ticket 4014.
 
-     - Change the default required uptime for a relay to be accepted as
 
-       a HSDir (hidden service directory) from 24 hours to 25 hours.
 
-       Improves on 0.2.0.10-alpha; resolves ticket 2649.
 
-     - Add a VoteOnHidServDirectoriesV2 config option to allow directory
 
-       authorities to abstain from voting on assignment of the HSDir
 
-       consensus flag. Related to bug 2649.
 
-     - Update to the September 6 2011 Maxmind GeoLite Country database.
 
-   o Minor bugfixes (documentation and log messages):
 
-     - Correct the man page to explain that HashedControlPassword and
 
-       CookieAuthentication can both be set, in which case either method
 
-       is sufficient to authenticate to Tor. Bugfix on 0.2.0.7-alpha,
 
-       when we decided to allow these config options to both be set. Issue
 
-       raised by bug 3898.
 
-     - Demote the 'replay detected' log message emitted when a hidden
 
-       service receives the same Diffie-Hellman public key in two different
 
-       INTRODUCE2 cells to info level. A normal Tor client can cause that
 
-       log message during its normal operation. Bugfix on 0.2.1.6-alpha;
 
-       fixes part of bug 2442.
 
-     - Demote the 'INTRODUCE2 cell is too {old,new}' log message to info
 
-       level. There is nothing that a hidden service's operator can do
 
-       to fix its clients' clocks. Bugfix on 0.2.1.6-alpha; fixes part
 
-       of bug 2442.
 
-     - Clarify a log message specifying the characters permitted in
 
-       HiddenServiceAuthorizeClient client names. Previously, the log
 
-       message said that "[A-Za-z0-9+-_]" were permitted; that could have
 
-       given the impression that every ASCII character between "+" and "_"
 
-       was permitted. Now we say "[A-Za-z0-9+_-]". Bugfix on 0.2.1.5-alpha.
 
-   o Build fixes:
 
-     - Provide a substitute implementation of lround() for MSVC, which
 
-       apparently lacks it. Patch from Gisle Vanem.
 
-     - Clean up some code issues that prevented Tor from building on older
 
-       BSDs. Fixes bug 3894; reported by "grarpamp".
 
-     - Search for a platform-specific version of "ar" when cross-compiling.
 
-       Should fix builds on iOS. Resolves bug 3909, found by Marco Bonetti.
 
- Changes in version 0.2.2.32 - 2011-08-27
 
-   The Tor 0.2.2 release series is dedicated to the memory of Andreas
 
-   Pfitzmann (1958-2010), a pioneer in anonymity and privacy research,
 
-   a founder of the PETS community, a leader in our field, a mentor,
 
-   and a friend. He left us with these words: "I had the possibility
 
-   to contribute to this world that is not as it should be. I hope I
 
-   could help in some areas to make the world a better place, and that
 
-   I could also encourage other people to be engaged in improving the
 
-   world. Please, stay engaged. This world needs you, your love, your
 
-   initiative -- now I cannot be part of that anymore."
 
-   Tor 0.2.2.32, the first stable release in the 0.2.2 branch, is finally
 
-   ready. More than two years in the making, this release features improved
 
-   client performance and hidden service reliability, better compatibility
 
-   for Android, correct behavior for bridges that listen on more than
 
-   one address, more extensible and flexible directory object handling,
 
-   better reporting of network statistics, improved code security, and
 
-   many many other features and bugfixes.
 
-   o Major features (client performance):
 
-     - When choosing which cells to relay first, relays now favor circuits
 
-       that have been quiet recently, to provide lower latency for
 
-       low-volume circuits. By default, relays enable or disable this
 
-       feature based on a setting in the consensus. They can override
 
-       this default by using the new "CircuitPriorityHalflife" config
 
-       option. Design and code by Ian Goldberg, Can Tang, and Chris
 
-       Alexander.
 
-     - Directory authorities now compute consensus weightings that instruct
 
-       clients how to weight relays flagged as Guard, Exit, Guard+Exit,
 
-       and no flag. Clients use these weightings to distribute network load
 
-       more evenly across these different relay types. The weightings are
 
-       in the consensus so we can change them globally in the future. Extra
 
-       thanks to "outofwords" for finding some nasty security bugs in
 
-       the first implementation of this feature.
 
-   o Major features (client performance, circuit build timeout):
 
-     - Tor now tracks how long it takes to build client-side circuits
 
-       over time, and adapts its timeout to local network performance.
 
-       Since a circuit that takes a long time to build will also provide
 
-       bad performance, we get significant latency improvements by
 
-       discarding the slowest 20% of circuits. Specifically, Tor creates
 
-       circuits more aggressively than usual until it has enough data
 
-       points for a good timeout estimate. Implements proposal 151.
 
-     - Circuit build timeout constants can be controlled by consensus
 
-       parameters. We set good defaults for these parameters based on
 
-       experimentation on broadband and simulated high-latency links.
 
-     - Circuit build time learning can be disabled via consensus parameter
 
-       or by the client via a LearnCircuitBuildTimeout config option. We
 
-       also automatically disable circuit build time calculation if either
 
-       AuthoritativeDirectory is set, or if we fail to write our state
 
-       file. Implements ticket 1296.
 
-   o Major features (relays use their capacity better):
 
-     - Set SO_REUSEADDR socket option on all sockets, not just
 
-       listeners. This should help busy exit nodes avoid running out of
 
-       useable ports just because all the ports have been used in the
 
-       near past. Resolves issue 2850.
 
-     - Relays now save observed peak bandwidth throughput rates to their
 
-       state file (along with total usage, which was already saved),
 
-       so that they can determine their correct estimated bandwidth on
 
-       restart. Resolves bug 1863, where Tor relays would reset their
 
-       estimated bandwidth to 0 after restarting.
 
-     - Lower the maximum weighted-fractional-uptime cutoff to 98%. This
 
-       should give us approximately 40-50% more Guard-flagged nodes,
 
-       improving the anonymity the Tor network can provide and also
 
-       decreasing the dropoff in throughput that relays experience when
 
-       they first get the Guard flag.
 
-     - Directory authorities now take changes in router IP address and
 
-       ORPort into account when determining router stability. Previously,
 
-       if a router changed its IP or ORPort, the authorities would not
 
-       treat it as having any downtime for the purposes of stability
 
-       calculation, whereas clients would experience downtime since the
 
-       change would take a while to propagate to them. Resolves issue 1035.
 
-     - New AccelName and AccelDir options add support for dynamic OpenSSL
 
-       hardware crypto acceleration engines.
 
-   o Major features (relays control their load better):
 
-     - Exit relays now try harder to block exit attempts from unknown
 
-       relays, to make it harder for people to use them as one-hop proxies
 
-       a la tortunnel. Controlled by the refuseunknownexits consensus
 
-       parameter (currently enabled), or you can override it on your
 
-       relay with the RefuseUnknownExits torrc option. Resolves bug 1751;
 
-       based on a variant of proposal 163.
 
-     - Add separate per-conn write limiting to go with the per-conn read
 
-       limiting. We added a global write limit in Tor 0.1.2.5-alpha,
 
-       but never per-conn write limits.
 
-     - New consensus params "bwconnrate" and "bwconnburst" to let us
 
-       rate-limit client connections as they enter the network. It's
 
-       controlled in the consensus so we can turn it on and off for
 
-       experiments. It's starting out off. Based on proposal 163.
 
-   o Major features (controllers):
 
-     - Export GeoIP information on bridge usage to controllers even if we
 
-       have not yet been running for 24 hours. Now Vidalia bridge operators
 
-       can get more accurate and immediate feedback about their
 
-       contributions to the network.
 
-     - Add an __OwningControllerProcess configuration option and a
 
-       TAKEOWNERSHIP control-port command. Now a Tor controller can ensure
 
-       that when it exits, Tor will shut down. Implements feature 3049.
 
-   o Major features (directory authorities):
 
-     - Directory authorities now create, vote on, and serve multiple
 
-       parallel formats of directory data as part of their voting process.
 
-       Partially implements Proposal 162: "Publish the consensus in
 
-       multiple flavors".
 
-     - Directory authorities now agree on and publish small summaries
 
-       of router information that clients can use in place of regular
 
-       server descriptors. This transition will allow Tor 0.2.3 clients
 
-       to use far less bandwidth for downloading information about the
 
-       network. Begins the implementation of Proposal 158: "Clients
 
-       download consensus + microdescriptors".
 
-     - The directory voting system is now extensible to use multiple hash
 
-       algorithms for signatures and resource selection. Newer formats
 
-       are signed with SHA256, with a possibility for moving to a better
 
-       hash algorithm in the future.
 
-     - Directory authorities can now vote on arbitary integer values as
 
-       part of the consensus process. This is designed to help set
 
-       network-wide parameters. Implements proposal 167.
 
-   o Major features and bugfixes (node selection):
 
-     - Revise and reconcile the meaning of the ExitNodes, EntryNodes,
 
-       ExcludeEntryNodes, ExcludeExitNodes, ExcludeNodes, and Strict*Nodes
 
-       options. Previously, we had been ambiguous in describing what
 
-       counted as an "exit" node, and what operations exactly "StrictNodes
 
-       0" would permit. This created confusion when people saw nodes built
 
-       through unexpected circuits, and made it hard to tell real bugs from
 
-       surprises. Now the intended behavior is:
 
-         . "Exit", in the context of ExitNodes and ExcludeExitNodes, means
 
-           a node that delivers user traffic outside the Tor network.
 
-         . "Entry", in the context of EntryNodes, means a node used as the
 
-           first hop of a multihop circuit. It doesn't include direct
 
-           connections to directory servers.
 
-         . "ExcludeNodes" applies to all nodes.
 
-         . "StrictNodes" changes the behavior of ExcludeNodes only. When
 
-           StrictNodes is set, Tor should avoid all nodes listed in
 
-           ExcludeNodes, even when it will make user requests fail. When
 
-           StrictNodes is *not* set, then Tor should follow ExcludeNodes
 
-           whenever it can, except when it must use an excluded node to
 
-           perform self-tests, connect to a hidden service, provide a
 
-           hidden service, fulfill a .exit request, upload directory
 
-           information, or fetch directory information.
 
-       Collectively, the changes to implement the behavior fix bug 1090.
 
-     - If EntryNodes, ExitNodes, ExcludeNodes, or ExcludeExitNodes
 
-       change during a config reload, mark and discard all our origin
 
-       circuits. This fix should address edge cases where we change the
 
-       config options and but then choose a circuit that we created before
 
-       the change.
 
-     - Make EntryNodes config option much more aggressive even when
 
-       StrictNodes is not set. Before it would prepend your requested
 
-       entrynodes to your list of guard nodes, but feel free to use others
 
-       after that. Now it chooses only from your EntryNodes if any of
 
-       those are available, and only falls back to others if a) they're
 
-       all down and b) StrictNodes is not set.
 
-     - Now we refresh your entry guards from EntryNodes at each consensus
 
-       fetch -- rather than just at startup and then they slowly rot as
 
-       the network changes.
 
-     - Add support for the country code "{??}" in torrc options like
 
-       ExcludeNodes, to indicate all routers of unknown country. Closes
 
-       bug 1094.
 
-     - ExcludeNodes now takes precedence over EntryNodes and ExitNodes: if
 
-       a node is listed in both, it's treated as excluded.
 
-     - ExcludeNodes now applies to directory nodes -- as a preference if
 
-       StrictNodes is 0, or an absolute requirement if StrictNodes is 1.
 
-       Don't exclude all the directory authorities and set StrictNodes to 1
 
-       unless you really want your Tor to break.
 
-     - ExcludeNodes and ExcludeExitNodes now override exit enclaving.
 
-     - ExcludeExitNodes now overrides .exit requests.
 
-     - We don't use bridges listed in ExcludeNodes.
 
-     - When StrictNodes is 1:
 
-        . We now apply ExcludeNodes to hidden service introduction points
 
-          and to rendezvous points selected by hidden service users. This
 
-          can make your hidden service less reliable: use it with caution!
 
-        . If we have used ExcludeNodes on ourself, do not try relay
 
-          reachability self-tests.
 
-        . If we have excluded all the directory authorities, we will not
 
-          even try to upload our descriptor if we're a relay.
 
-        . Do not honor .exit requests to an excluded node.
 
-     - When the set of permitted nodes changes, we now remove any mappings
 
-       introduced via TrackExitHosts to now-excluded nodes. Bugfix on
 
-       0.1.0.1-rc.
 
-     - We never cannibalize a circuit that had excluded nodes on it, even
 
-       if StrictNodes is 0. Bugfix on 0.1.0.1-rc.
 
-     - Improve log messages related to excluded nodes.
 
-   o Major features (misc):
 
-     - Numerous changes, bugfixes, and workarounds from Nathan Freitas
 
-       to help Tor build correctly for Android phones.
 
-     - The options SocksPort, ControlPort, and so on now all accept a
 
-       value "auto" that opens a socket on an OS-selected port. A
 
-       new ControlPortWriteToFile option tells Tor to write its
 
-       actual control port or ports to a chosen file. If the option
 
-       ControlPortFileGroupReadable is set, the file is created as
 
-       group-readable. Now users can run two Tor clients on the same
 
-       system without needing to manually mess with parameters. Resolves
 
-       part of ticket 3076.
 
-     - Tor now supports tunneling all of its outgoing connections over
 
-       a SOCKS proxy, using the SOCKS4Proxy and/or SOCKS5Proxy
 
-       configuration options. Code by Christopher Davis.
 
-   o Code security improvements:
 
-     - Replace all potentially sensitive memory comparison operations
 
-       with versions whose runtime does not depend on the data being
 
-       compared. This will help resist a class of attacks where an
 
-       adversary can use variations in timing information to learn
 
-       sensitive data. Fix for one case of bug 3122. (Safe memcmp
 
-       implementation by Robert Ransom based partially on code by DJB.)
 
-     - Enable Address Space Layout Randomization (ASLR) and Data Execution
 
-       Prevention (DEP) by default on Windows to make it harder for
 
-       attackers to exploit vulnerabilities. Patch from John Brooks.
 
-     - New "--enable-gcc-hardening" ./configure flag (off by default)
 
-       to turn on gcc compile time hardening options. It ensures
 
-       that signed ints have defined behavior (-fwrapv), enables
 
-       -D_FORTIFY_SOURCE=2 (requiring -O2), adds stack smashing protection
 
-       with canaries (-fstack-protector-all), turns on ASLR protection if
 
-       supported by the kernel (-fPIE, -pie), and adds additional security
 
-       related warnings. Verified to work on Mac OS X and Debian Lenny.
 
-     - New "--enable-linker-hardening" ./configure flag (off by default)
 
-       to turn on ELF specific hardening features (relro, now). This does
 
-       not work with Mac OS X or any other non-ELF binary format.
 
-     - Always search the Windows system directory for system DLLs, and
 
-       nowhere else. Bugfix on 0.1.1.23; fixes bug 1954.
 
-     - New DisableAllSwap option. If set to 1, Tor will attempt to lock all
 
-       current and future memory pages via mlockall(). On supported
 
-       platforms (modern Linux and probably BSD but not Windows or OS X),
 
-       this should effectively disable any and all attempts to page out
 
-       memory. This option requires that you start your Tor as root --
 
-       if you use DisableAllSwap, please consider using the User option
 
-       to properly reduce the privileges of your Tor.
 
-   o Major bugfixes (crashes):
 
-     - Fix crash bug on platforms where gmtime and localtime can return
 
-       NULL. Windows 7 users were running into this one. Fixes part of bug
 
-       2077. Bugfix on all versions of Tor. Found by boboper.
 
-     - Introduce minimum/maximum values that clients will believe
 
-       from the consensus. Now we'll have a better chance to avoid crashes
 
-       or worse when a consensus param has a weird value.
 
-     - Fix a rare crash bug that could occur when a client was configured
 
-       with a large number of bridges. Fixes bug 2629; bugfix on
 
-       0.2.1.2-alpha. Bugfix by trac user "shitlei".
 
-     - Do not crash when our configuration file becomes unreadable, for
 
-       example due to a permissions change, between when we start up
 
-       and when a controller calls SAVECONF. Fixes bug 3135; bugfix
 
-       on 0.0.9pre6.
 
-     - If we're in the pathological case where there's no exit bandwidth
 
-       but there is non-exit bandwidth, or no guard bandwidth but there
 
-       is non-guard bandwidth, don't crash during path selection. Bugfix
 
-       on 0.2.0.3-alpha.
 
-     - Fix a crash bug when trying to initialize the evdns module in
 
-       Libevent 2. Bugfix on 0.2.1.16-rc.
 
-   o Major bugfixes (stability):
 
-     - Fix an assert in parsing router descriptors containing IPv6
 
-       addresses. This one took down the directory authorities when
 
-       somebody tried some experimental code. Bugfix on 0.2.1.3-alpha.
 
-     - Fix an uncommon assertion failure when running with DNSPort under
 
-       heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha.
 
-     - Treat an unset $HOME like an empty $HOME rather than triggering an
 
-       assert. Bugfix on 0.0.8pre1; fixes bug 1522.
 
-     - More gracefully handle corrupt state files, removing asserts
 
-       in favor of saving a backup and resetting state.
 
-     - Instead of giving an assertion failure on an internal mismatch
 
-       on estimated freelist size, just log a BUG warning and try later.
 
-       Mitigates but does not fix bug 1125.
 
-     - Fix an assert that got triggered when using the TestingTorNetwork
 
-       configuration option and then issuing a GETINFO config-text control
 
-       command. Fixes bug 2250; bugfix on 0.2.1.2-alpha.
 
-     - If the cached cert file is unparseable, warn but don't exit.
 
-   o Privacy fixes (relays/bridges):
 
-     - Don't list Windows capabilities in relay descriptors. We never made
 
-       use of them, and maybe it's a bad idea to publish them. Bugfix
 
-       on 0.1.1.8-alpha.
 
-     - If the Nickname configuration option isn't given, Tor would pick a
 
-       nickname based on the local hostname as the nickname for a relay.
 
-       Because nicknames are not very important in today's Tor and the
 
-       "Unnamed" nickname has been implemented, this is now problematic
 
-       behavior: It leaks information about the hostname without being
 
-       useful at all. Fixes bug 2979; bugfix on 0.1.2.2-alpha, which
 
-       introduced the Unnamed nickname. Reported by tagnaq.
 
-     - Maintain separate TLS contexts and certificates for incoming and
 
-       outgoing connections in bridge relays. Previously we would use the
 
-       same TLS contexts and certs for incoming and outgoing connections.
 
-       Bugfix on 0.2.0.3-alpha; addresses bug 988.
 
-     - Maintain separate identity keys for incoming and outgoing TLS
 
-       contexts in bridge relays. Previously we would use the same
 
-       identity keys for incoming and outgoing TLS contexts. Bugfix on
 
-       0.2.0.3-alpha; addresses the other half of bug 988.
 
-     - Make the bridge directory authority refuse to answer directory
 
-       requests for "all descriptors". It used to include bridge
 
-       descriptors in its answer, which was a major information leak.
 
-       Found by "piebeer". Bugfix on 0.2.0.3-alpha.
 
-   o Privacy fixes (clients):
 
-     - When receiving a hidden service descriptor, check that it is for
 
-       the hidden service we wanted. Previously, Tor would store any
 
-       hidden service descriptors that a directory gave it, whether it
 
-       wanted them or not. This wouldn't have let an attacker impersonate
 
-       a hidden service, but it did let directories pre-seed a client
 
-       with descriptors that it didn't want. Bugfix on 0.0.6.
 
-     - Start the process of disabling ".exit" address notation, since it
 
-       can be used for a variety of esoteric application-level attacks
 
-       on users. To reenable it, set "AllowDotExit 1" in your torrc. Fix
 
-       on 0.0.9rc5.
 
-     - Reject attempts at the client side to open connections to private
 
-       IP addresses (like 127.0.0.1, 10.0.0.1, and so on) with
 
-       a randomly chosen exit node. Attempts to do so are always
 
-       ill-defined, generally prevented by exit policies, and usually
 
-       in error. This will also help to detect loops in transparent
 
-       proxy configurations. You can disable this feature by setting
 
-       "ClientRejectInternalAddresses 0" in your torrc.
 
-     - Log a notice when we get a new control connection. Now it's easier
 
-       for security-conscious users to recognize when a local application
 
-       is knocking on their controller door. Suggested by bug 1196.
 
-   o Privacy fixes (newnym):
 
-     - Avoid linkability based on cached hidden service descriptors: forget
 
-       all hidden service descriptors cached as a client when processing a
 
-       SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6.
 
-     - On SIGHUP, do not clear out all TrackHostExits mappings, client
 
-       DNS cache entries, and virtual address mappings: that's what
 
-       NEWNYM is for. Fixes bug 1345; bugfix on 0.1.0.1-rc.
 
-     - Don't attach new streams to old rendezvous circuits after SIGNAL
 
-       NEWNYM. Previously, we would keep using an existing rendezvous
 
-       circuit if it remained open (i.e. if it were kept open by a
 
-       long-lived stream, or if a new stream were attached to it before
 
-       Tor could notice that it was old and no longer in use). Bugfix on
 
-       0.1.1.15-rc; fixes bug 3375.
 
-   o Major bugfixes (relay bandwidth accounting):
 
-     - Fix a bug that could break accounting on 64-bit systems with large
 
-       time_t values, making them hibernate for impossibly long intervals.
 
-       Fixes bug 2146. Bugfix on 0.0.9pre6; fix by boboper.
 
-     - Fix a bug in bandwidth accounting that could make us use twice
 
-       the intended bandwidth when our interval start changes due to
 
-       daylight saving time. Now we tolerate skew in stored vs computed
 
-       interval starts: if the start of the period changes by no more than
 
-       50% of the period's duration, we remember bytes that we transferred
 
-       in the old period. Fixes bug 1511; bugfix on 0.0.9pre5.
 
-   o Major bugfixes (bridges):
 
-     - Bridges now use "reject *:*" as their default exit policy. Bugfix
 
-       on 0.2.0.3-alpha. Fixes bug 1113.
 
-     - If you configure your bridge with a known identity fingerprint,
 
-       and the bridge authority is unreachable (as it is in at least
 
-       one country now), fall back to directly requesting the descriptor
 
-       from the bridge. Finishes the feature started in 0.2.0.10-alpha;
 
-       closes bug 1138.
 
-     - Fix a bug where bridge users who configure the non-canonical
 
-       address of a bridge automatically switch to its canonical
 
-       address. If a bridge listens at more than one address, it
 
-       should be able to advertise those addresses independently and
 
-       any non-blocked addresses should continue to work. Bugfix on Tor
 
-       0.2.0.3-alpha. Fixes bug 2510.
 
-     - If you configure Tor to use bridge A, and then quit and
 
-       configure Tor to use bridge B instead (or if you change Tor
 
-       to use bridge B via the controller), it would happily continue
 
-       to use bridge A if it's still reachable. While this behavior is
 
-       a feature if your goal is connectivity, in some scenarios it's a
 
-       dangerous bug. Bugfix on Tor 0.2.0.1-alpha; fixes bug 2511.
 
-     - When the controller configures a new bridge, don't wait 10 to 60
 
-       seconds before trying to fetch its descriptor. Bugfix on
 
-       0.2.0.3-alpha; fixes bug 3198 (suggested by 2355).
 
-   o Major bugfixes (directory authorities):
 
-     - Many relays have been falling out of the consensus lately because
 
-       not enough authorities know about their descriptor for them to get
 
-       a majority of votes. When we deprecated the v2 directory protocol,
 
-       we got rid of the only way that v3 authorities can hear from each
 
-       other about other descriptors. Now authorities examine every v3
 
-       vote for new descriptors, and fetch them from that authority. Bugfix
 
-       on 0.2.1.23.
 
-     - Authorities could be tricked into giving out the Exit flag to relays
 
-       that didn't allow exiting to any ports. This bug could screw
 
-       with load balancing and stats. Bugfix on 0.1.1.6-alpha; fixes bug
 
-       1238. Bug discovered by Martin Kowalczyk.
 
-     - If all authorities restart at once right before a consensus vote,
 
-       nobody will vote about "Running", and clients will get a consensus
 
-       with no usable relays. Instead, authorities refuse to build a
 
-       consensus if this happens. Bugfix on 0.2.0.10-alpha; fixes bug 1066.
 
-   o Major bugfixes (stream-level fairness):
 
-     - When receiving a circuit-level SENDME for a blocked circuit, try
 
-       to package cells fairly from all the streams that had previously
 
-       been blocked on that circuit. Previously, we had started with the
 
-       oldest stream, and allowed each stream to potentially exhaust
 
-       the circuit's package window. This gave older streams on any
 
-       given circuit priority over newer ones. Fixes bug 1937. Detected
 
-       originally by Camilo Viecco. This bug was introduced before the
 
-       first Tor release, in svn commit r152: it is the new winner of
 
-       the longest-lived bug prize.
 
-     - Fix a stream fairness bug that would cause newer streams on a given
 
-       circuit to get preference when reading bytes from the origin or
 
-       destination. Fixes bug 2210. Fix by Mashael AlSabah. This bug was
 
-       introduced before the first Tor release, in svn revision r152.
 
-     - When the exit relay got a circuit-level sendme cell, it started
 
-       reading on the exit streams, even if had 500 cells queued in the
 
-       circuit queue already, so the circuit queue just grew and grew in
 
-       some cases. We fix this by not re-enabling reading on receipt of a
 
-       sendme cell when the cell queue is blocked. Fixes bug 1653. Bugfix
 
-       on 0.2.0.1-alpha. Detected by Mashael AlSabah. Original patch by
 
-       "yetonetime".
 
-     - Newly created streams were allowed to read cells onto circuits,
 
-       even if the circuit's cell queue was blocked and waiting to drain.
 
-       This created potential unfairness, as older streams would be
 
-       blocked, but newer streams would gladly fill the queue completely.
 
-       We add code to detect this situation and prevent any stream from
 
-       getting more than one free cell. Bugfix on 0.2.0.1-alpha. Partially
 
-       fixes bug 1298.
 
-   o Major bugfixes (hidden services):
 
-     - Apply circuit timeouts to opened hidden-service-related circuits
 
-       based on the correct start time. Previously, we would apply the
 
-       circuit build timeout based on time since the circuit's creation;
 
-       it was supposed to be applied based on time since the circuit
 
-       entered its current state. Bugfix on 0.0.6; fixes part of bug 1297.
 
-     - Improve hidden service robustness: When we find that we have
 
-       extended a hidden service's introduction circuit to a relay not
 
-       listed as an introduction point in the HS descriptor we currently
 
-       have, retry with an introduction point from the current
 
-       descriptor. Previously we would just give up. Fixes bugs 1024 and
 
-       1930; bugfix on 0.2.0.10-alpha.
 
-     - Directory authorities now use data collected from their own
 
-       uptime observations when choosing whether to assign the HSDir flag
 
-       to relays, instead of trusting the uptime value the relay reports in
 
-       its descriptor. This change helps prevent an attack where a small
 
-       set of nodes with frequently-changing identity keys can blackhole
 
-       a hidden service. (Only authorities need upgrade; others will be
 
-       fine once they do.) Bugfix on 0.2.0.10-alpha; fixes bug 2709.
 
-     - Stop assigning the HSDir flag to relays that disable their
 
-       DirPort (and thus will refuse to answer directory requests). This
 
-       fix should dramatically improve the reachability of hidden services:
 
-       hidden services and hidden service clients pick six HSDir relays
 
-       to store and retrieve the hidden service descriptor, and currently
 
-       about half of the HSDir relays will refuse to work. Bugfix on
 
-       0.2.0.10-alpha; fixes part of bug 1693.
 
-   o Major bugfixes (misc):
 
-     - Clients now stop trying to use an exit node associated with a given
 
-       destination by TrackHostExits if they fail to reach that exit node.
 
-       Fixes bug 2999. Bugfix on 0.2.0.20-rc.
 
-     - Fix a regression that caused Tor to rebind its ports if it receives
 
-       SIGHUP while hibernating. Bugfix in 0.1.1.6-alpha; closes bug 919.
 
-     - Remove an extra pair of quotation marks around the error
 
-       message in control-port STATUS_GENERAL BUG events. Bugfix on
 
-       0.1.2.6-alpha; fixes bug 3732.
 
-   o Minor features (relays):
 
-     - Ensure that no empty [dirreq-](read|write)-history lines are added
 
-       to an extrainfo document. Implements ticket 2497.
 
-     - When bandwidth accounting is enabled, be more generous with how
 
-       much bandwidth we'll use up before entering "soft hibernation".
 
-       Previously, we'd refuse new connections and circuits once we'd
 
-       used up 95% of our allotment. Now, we use up 95% of our allotment,
 
-       AND make sure that we have no more than 500MB (or 3 hours of
 
-       expected traffic, whichever is lower) remaining before we enter
 
-       soft hibernation.
 
-     - Relays now log the reason for publishing a new relay descriptor,
 
-       so we have a better chance of hunting down instances of bug 1810.
 
-       Resolves ticket 3252.
 
-     - Log a little more clearly about the times at which we're no longer
 
-       accepting new connections (e.g. due to hibernating). Resolves
 
-       bug 2181.
 
-     - When AllowSingleHopExits is set, print a warning to explain to the
 
-       relay operator why most clients are avoiding her relay.
 
-     - Send END_STREAM_REASON_NOROUTE in response to EHOSTUNREACH errors.
 
-       Clients before 0.2.1.27 didn't handle NOROUTE correctly, but such
 
-       clients are already deprecated because of security bugs.
 
-   o Minor features (network statistics):
 
-     - Directory mirrors that set "DirReqStatistics 1" write statistics
 
-       about directory requests to disk every 24 hours. As compared to the
 
-       "--enable-geoip-stats" ./configure flag in 0.2.1.x, there are a few
 
-       improvements: 1) stats are written to disk exactly every 24 hours;
 
-       2) estimated shares of v2 and v3 requests are determined as mean
 
-       values, not at the end of a measurement period; 3) unresolved
 
-       requests are listed with country code '??'; 4) directories also
 
-       measure download times.
 
-     - Exit nodes that set "ExitPortStatistics 1" write statistics on the
 
-       number of exit streams and transferred bytes per port to disk every
 
-       24 hours.
 
-     - Relays that set "CellStatistics 1" write statistics on how long
 
-       cells spend in their circuit queues to disk every 24 hours.
 
-     - Entry nodes that set "EntryStatistics 1" write statistics on the
 
-       rough number and origins of connecting clients to disk every 24
 
-       hours.
 
-     - Relays that write any of the above statistics to disk and set
 
-       "ExtraInfoStatistics 1" include the past 24 hours of statistics in
 
-       their extra-info documents. Implements proposal 166.
 
-   o Minor features (GeoIP and statistics):
 
-     - Provide a log message stating which geoip file we're parsing
 
-       instead of just stating that we're parsing the geoip file.
 
-       Implements ticket 2432.
 
-     - Make sure every relay writes a state file at least every 12 hours.
 
-       Previously, a relay could go for weeks without writing its state
 
-       file, and on a crash could lose its bandwidth history, capacity
 
-       estimates, client country statistics, and so on. Addresses bug 3012.
 
-     - Relays report the number of bytes spent on answering directory
 
-       requests in extra-info descriptors similar to {read,write}-history.
 
-       Implements enhancement 1790.
 
-     - Report only the top 10 ports in exit-port stats in order not to
 
-       exceed the maximum extra-info descriptor length of 50 KB. Implements
 
-       task 2196.
 
-     - If writing the state file to disk fails, wait up to an hour before
 
-       retrying again, rather than trying again each second. Fixes bug
 
-       2346; bugfix on Tor 0.1.1.3-alpha.
 
-     - Delay geoip stats collection by bridges for 6 hours, not 2 hours,
 
-       when we switch from being a public relay to a bridge. Otherwise
 
-       there will still be clients that see the relay in their consensus,
 
-       and the stats will end up wrong. Bugfix on 0.2.1.15-rc; fixes
 
-       bug 932.
 
-     - Update to the August 2 2011 Maxmind GeoLite Country database.
 
-   o Minor features (clients):
 
-     - When expiring circuits, use microsecond timers rather than
 
-       one-second timers. This can avoid an unpleasant situation where a
 
-       circuit is launched near the end of one second and expired right
 
-       near the beginning of the next, and prevent fluctuations in circuit
 
-       timeout values.
 
-     - If we've configured EntryNodes and our network goes away and/or all
 
-       our entrynodes get marked down, optimistically retry them all when
 
-       a new socks application request appears. Fixes bug 1882.
 
-     - Always perform router selections using weighted relay bandwidth,
 
-       even if we don't need a high capacity circuit at the time. Non-fast
 
-       circuits now only differ from fast ones in that they can use relays
 
-       not marked with the Fast flag. This "feature" could turn out to
 
-       be a horrible bug; we should investigate more before it goes into
 
-       a stable release.
 
-     - When we run out of directory information such that we can't build
 
-       circuits, but then get enough that we can build circuits, log when
 
-       we actually construct a circuit, so the user has a better chance of
 
-       knowing what's going on. Fixes bug 1362.
 
-     - Log SSL state transitions at debug level during handshake, and
 
-       include SSL states in error messages. This may help debug future
 
-       SSL handshake issues.
 
-   o Minor features (directory authorities):
 
-     - When a router changes IP address or port, authorities now launch
 
-       a new reachability test for it. Implements ticket 1899.
 
-     - Directory authorities now reject relays running any versions of
 
-       Tor between 0.2.1.3-alpha and 0.2.1.18 inclusive; they have
 
-       known bugs that keep RELAY_EARLY cells from working on rendezvous
 
-       circuits. Followup to fix for bug 2081.
 
-     - Directory authorities now reject relays running any version of Tor
 
-       older than 0.2.0.26-rc. That version is the earliest that fetches
 
-       current directory information correctly. Fixes bug 2156.
 
-     - Directory authorities now do an immediate reachability check as soon
 
-       as they hear about a new relay. This change should slightly reduce
 
-       the time between setting up a relay and getting listed as running
 
-       in the consensus. It should also improve the time between setting
 
-       up a bridge and seeing use by bridge users.
 
-     - Directory authorities no longer launch a TLS connection to every
 
-       relay as they startup. Now that we have 2k+ descriptors cached,
 
-       the resulting network hiccup is becoming a burden. Besides,
 
-       authorities already avoid voting about Running for the first half
 
-       hour of their uptime.
 
-     - Directory authorities now log the source of a rejected POSTed v3
 
-       networkstatus vote, so we can track failures better.
 
-     - Backport code from 0.2.3.x that allows directory authorities to
 
-       clean their microdescriptor caches. Needed to resolve bug 2230.
 
-   o Minor features (hidden services):
 
-     - Use computed circuit-build timeouts to decide when to launch
 
-       parallel introduction circuits for hidden services. (Previously,
 
-       we would retry after 15 seconds.)
 
-     - Don't allow v0 hidden service authorities to act as clients.
 
-       Required by fix for bug 3000.
 
-     - Ignore SIGNAL NEWNYM commands on relay-only Tor instances. Required
 
-       by fix for bug 3000.
 
-     - Make hidden services work better in private Tor networks by not
 
-       requiring any uptime to join the hidden service descriptor
 
-       DHT. Implements ticket 2088.
 
-     - Log (at info level) when purging pieces of hidden-service-client
 
-       state because of SIGNAL NEWNYM.
 
-   o Minor features (controller interface):
 
-     - New "GETINFO net/listeners/(type)" controller command to return
 
-       a list of addresses and ports that are bound for listeners for a
 
-       given connection type. This is useful when the user has configured
 
-       "SocksPort auto" and the controller needs to know which port got
 
-       chosen. Resolves another part of ticket 3076.
 
-     - Have the controller interface give a more useful message than
 
-       "Internal Error" in response to failed GETINFO requests.
 
-     - Add a TIMEOUT_RATE keyword to the BUILDTIMEOUT_SET control port
 
-       event, to give information on the current rate of circuit timeouts
 
-       over our stored history.
 
-     - The 'EXTENDCIRCUIT' control port command can now be used with
 
-       a circ id of 0 and no path. This feature will cause Tor to build
 
-       a new 'fast' general purpose circuit using its own path selection
 
-       algorithms.
 
-     - Added a BUILDTIMEOUT_SET controller event to describe changes
 
-       to the circuit build timeout.
 
-     - New controller command "getinfo config-text". It returns the
 
-       contents that Tor would write if you send it a SAVECONF command,
 
-       so the controller can write the file to disk itself.
 
-   o Minor features (controller protocol):
 
-     - Add a new ControlSocketsGroupWritable configuration option: when
 
-       it is turned on, ControlSockets are group-writeable by the default
 
-       group of the current user. Patch by Jérémy Bobbio; implements
 
-       ticket 2972.
 
-     - Tor now refuses to create a ControlSocket in a directory that is
 
-       world-readable (or group-readable if ControlSocketsGroupWritable
 
-       is 0). This is necessary because some operating systems do not
 
-       enforce permissions on an AF_UNIX sockets. Permissions on the
 
-       directory holding the socket, however, seems to work everywhere.
 
-     - Warn when CookieAuthFileGroupReadable is set but CookieAuthFile is
 
-       not. This would lead to a cookie that is still not group readable.
 
-       Closes bug 1843. Suggested by katmagic.
 
-     - Future-proof the controller protocol a bit by ignoring keyword
 
-       arguments we do not recognize.
 
-   o Minor features (more useful logging):
 
-     - Revise most log messages that refer to nodes by nickname to
 
-       instead use the "$key=nickname at address" format. This should be
 
-       more useful, especially since nicknames are less and less likely
 
-       to be unique. Resolves ticket 3045.
 
-     - When an HTTPS proxy reports "403 Forbidden", we now explain
 
-       what it means rather than calling it an unexpected status code.
 
-       Closes bug 2503. Patch from Michael Yakubovich.
 
-     - Rate-limit a warning about failures to download v2 networkstatus
 
-       documents. Resolves part of bug 1352.
 
-     - Rate-limit the "your application is giving Tor only an IP address"
 
-       warning. Addresses bug 2000; bugfix on 0.0.8pre2.
 
-     - Rate-limit "Failed to hand off onionskin" warnings.
 
-     - When logging a rate-limited warning, we now mention how many messages
 
-       got suppressed since the last warning.
 
-     - Make the formerly ugly "2 unknown, 7 missing key, 0 good, 0 bad,
 
-       2 no signature, 4 required" messages about consensus signatures
 
-       easier to read, and make sure they get logged at the same severity
 
-       as the messages explaining which keys are which. Fixes bug 1290.
 
-     - Don't warn when we have a consensus that we can't verify because
 
-       of missing certificates, unless those certificates are ones
 
-       that we have been trying and failing to download. Fixes bug 1145.
 
-   o Minor features (log domains):
 
-     - Add documentation for configuring logging at different severities in
 
-       different log domains. We've had this feature since 0.2.1.1-alpha,
 
-       but for some reason it never made it into the manpage. Fixes
 
-       bug 2215.
 
-     - Make it simpler to specify "All log domains except for A and B".
 
-       Previously you needed to say "[*,~A,~B]". Now you can just say
 
-       "[~A,~B]".
 
-     - Add a "LogMessageDomains 1" option to include the domains of log
 
-       messages along with the messages. Without this, there's no way
 
-       to use log domains without reading the source or doing a lot
 
-       of guessing.
 
-     - Add a new "Handshake" log domain for activities that happen
 
-       during the TLS handshake.
 
-   o Minor features (build process):
 
-     - Make compilation with clang possible when using
 
-       "--enable-gcc-warnings" by removing two warning options that clang
 
-       hasn't implemented yet and by fixing a few warnings. Resolves
 
-       ticket 2696.
 
-     - Detect platforms that brokenly use a signed size_t, and refuse to
 
-       build there. Found and analyzed by doorss and rransom.
 
-     - Fix a bunch of compile warnings revealed by mingw with gcc 4.5.
 
-       Resolves bug 2314.
 
-     - Add support for statically linking zlib by specifying
 
-       "--enable-static-zlib", to go with our support for statically
 
-       linking openssl and libevent. Resolves bug 1358.
 
-     - Instead of adding the svn revision to the Tor version string, report
 
-       the git commit (when we're building from a git checkout).
 
-     - Rename the "log.h" header to "torlog.h" so as to conflict with fewer
 
-       system headers.
 
-     - New --digests command-line switch to output the digests of the
 
-       source files Tor was built with.
 
-     - Generate our manpage and HTML documentation using Asciidoc. This
 
-       change should make it easier to maintain the documentation, and
 
-       produce nicer HTML. The build process fails if asciidoc cannot
 
-       be found and building with asciidoc isn't disabled (via the
 
-       "--disable-asciidoc" argument to ./configure. Skipping the manpage
 
-       speeds up the build considerably.
 
-   o Minor features (options / torrc):
 
-     - Warn when the same option is provided more than once in a torrc
 
-       file, on the command line, or in a single SETCONF statement, and
 
-       the option is one that only accepts a single line. Closes bug 1384.
 
-     - Warn when the user configures two HiddenServiceDir lines that point
 
-       to the same directory. Bugfix on 0.0.6 (the version introducing
 
-       HiddenServiceDir); fixes bug 3289.
 
-     - Add new "perconnbwrate" and "perconnbwburst" consensus params to
 
-       do individual connection-level rate limiting of clients. The torrc
 
-       config options with the same names trump the consensus params, if
 
-       both are present. Replaces the old "bwconnrate" and "bwconnburst"
 
-       consensus params which were broken from 0.2.2.7-alpha through
 
-       0.2.2.14-alpha. Closes bug 1947.
 
-     - New config option "WarnUnsafeSocks 0" disables the warning that
 
-       occurs whenever Tor receives a socks handshake using a version of
 
-       the socks protocol that can only provide an IP address (rather
 
-       than a hostname). Setups that do DNS locally over Tor are fine,
 
-       and we shouldn't spam the logs in that case.
 
-     - New config option "CircuitStreamTimeout" to override our internal
 
-       timeout schedule for how many seconds until we detach a stream from
 
-       a circuit and try a new circuit. If your network is particularly
 
-       slow, you might want to set this to a number like 60.
 
-     - New options for SafeLogging to allow scrubbing only log messages
 
-       generated while acting as a relay. Specify "SafeLogging relay" if
 
-       you want to ensure that only messages known to originate from
 
-       client use of the Tor process will be logged unsafely.
 
-     - Time and memory units in the configuration file can now be set to
 
-       fractional units. For example, "2.5 GB" is now a valid value for
 
-       AccountingMax.
 
-     - Support line continuations in the torrc config file. If a line
 
-       ends with a single backslash character, the newline is ignored, and
 
-       the configuration value is treated as continuing on the next line.
 
-       Resolves bug 1929.
 
-   o Minor features (unit tests):
 
-     - Revise our unit tests to use the "tinytest" framework, so we
 
-       can run tests in their own processes, have smarter setup/teardown
 
-       code, and so on. The unit test code has moved to its own
 
-       subdirectory, and has been split into multiple modules.
 
-     - Add a unit test for cross-platform directory-listing code.
 
-     - Add some forgotten return value checks during unit tests. Found
 
-       by coverity.
 
-     - Use GetTempDir to find the proper temporary directory location on
 
-       Windows when generating temporary files for the unit tests. Patch
 
-       by Gisle Vanem.
 
-   o Minor features (misc):
 
-     - The "torify" script now uses torsocks where available.
 
-     - Make Libevent log messages get delivered to controllers later,
 
-       and not from inside the Libevent log handler. This prevents unsafe
 
-       reentrant Libevent calls while still letting the log messages
 
-       get through.
 
-     - Certain Tor clients (such as those behind check.torproject.org) may
 
-       want to fetch the consensus in an extra early manner. To enable this
 
-       a user may now set FetchDirInfoExtraEarly to 1. This also depends on
 
-       setting FetchDirInfoEarly to 1. Previous behavior will stay the same
 
-       as only certain clients who must have this information sooner should
 
-       set this option.
 
-     - Expand homedirs passed to tor-checkkey. This should silence a
 
-       coverity complaint about passing a user-supplied string into
 
-       open() without checking it.
 
-     - Make sure to disable DirPort if running as a bridge. DirPorts aren't
 
-       used on bridges, and it makes bridge scanning somewhat easier.
 
-     - Create the /var/run/tor directory on startup on OpenSUSE if it is
 
-       not already created. Patch from Andreas Stieger. Fixes bug 2573.
 
-   o Minor bugfixes (relays):
 
-     - When a relay decides that its DNS is too broken for it to serve
 
-       as an exit server, it advertised itself as a non-exit, but
 
-       continued to act as an exit. This could create accidental
 
-       partitioning opportunities for users. Instead, if a relay is
 
-       going to advertise reject *:* as its exit policy, it should
 
-       really act with exit policy "reject *:*". Fixes bug 2366.
 
-       Bugfix on Tor 0.1.2.5-alpha. Bugfix by user "postman" on trac.
 
-     - Publish a router descriptor even if generating an extra-info
 
-       descriptor fails. Previously we would not publish a router
 
-       descriptor without an extra-info descriptor; this can cause fast
 
-       exit relays collecting exit-port statistics to drop from the
 
-       consensus. Bugfix on 0.1.2.9-rc; fixes bug 2195.
 
-     - When we're trying to guess whether we know our IP address as
 
-       a relay, we would log various ways that we failed to guess
 
-       our address, but never log that we ended up guessing it
 
-       successfully. Now add a log line to help confused and anxious
 
-       relay operators. Bugfix on 0.1.2.1-alpha; fixes bug 1534.
 
-     - For bandwidth accounting, calculate our expected bandwidth rate
 
-       based on the time during which we were active and not in
 
-       soft-hibernation during the last interval. Previously, we were
 
-       also considering the time spent in soft-hibernation. If this
 
-       was a long time, we would wind up underestimating our bandwidth
 
-       by a lot, and skewing our wakeup time towards the start of the
 
-       accounting interval. Fixes bug 1789. Bugfix on 0.0.9pre5.
 
-     - Demote a confusing TLS warning that relay operators might get when
 
-       someone tries to talk to their ORPort. It is not the operator's
 
-       fault, nor can they do anything about it. Fixes bug 1364; bugfix
 
-       on 0.2.0.14-alpha.
 
-     - Change "Application request when we're believed to be offline."
 
-       notice to "Application request when we haven't used client
 
-       functionality lately.", to clarify that it's not an error. Bugfix
 
-       on 0.0.9.3; fixes bug 1222.
 
-   o Minor bugfixes (bridges):
 
-     - When a client starts or stops using bridges, never use a circuit
 
-       that was built before the configuration change. This behavior could
 
-       put at risk a user who uses bridges to ensure that her traffic
 
-       only goes to the chosen addresses. Bugfix on 0.2.0.3-alpha; fixes
 
-       bug 3200.
 
-     - Do not reset the bridge descriptor download status every time we
 
-       re-parse our configuration or get a configuration change. Fixes
 
-       bug 3019; bugfix on 0.2.0.3-alpha.
 
-     - Users couldn't configure a regular relay to be their bridge. It
 
-       didn't work because when Tor fetched the bridge descriptor, it found
 
-       that it already had it, and didn't realize that the purpose of the
 
-       descriptor had changed. Now we replace routers with a purpose other
 
-       than bridge with bridge descriptors when fetching them. Bugfix on
 
-       0.1.1.9-alpha. Fixes bug 1776.
 
-     - In the special case where you configure a public exit relay as your
 
-       bridge, Tor would be willing to use that exit relay as the last
 
-       hop in your circuit as well. Now we fail that circuit instead.
 
-       Bugfix on 0.2.0.12-alpha. Fixes bug 2403. Reported by "piebeer".
 
-   o Minor bugfixes (clients):
 
-     - We now ask the other side of a stream (the client or the exit)
 
-       for more data on that stream when the amount of queued data on
 
-       that stream dips low enough. Previously, we wouldn't ask the
 
-       other side for more data until either it sent us more data (which
 
-       it wasn't supposed to do if it had exhausted its window!) or we
 
-       had completely flushed all our queued data. This flow control fix
 
-       should improve throughput. Fixes bug 2756; bugfix on the earliest
 
-       released versions of Tor (svn commit r152).
 
-     - When a client finds that an origin circuit has run out of 16-bit
 
-       stream IDs, we now mark it as unusable for new streams. Previously,
 
-       we would try to close the entire circuit. Bugfix on 0.0.6.
 
-     - Make it explicit that we don't cannibalize one-hop circuits. This
 
-       happens in the wild, but doesn't turn out to be a problem because
 
-       we fortunately don't use those circuits. Many thanks to outofwords
 
-       for the initial analysis and to swissknife who confirmed that
 
-       two-hop circuits are actually created.
 
-     - Resolve an edge case in path weighting that could make us misweight
 
-       our relay selection. Fixes bug 1203; bugfix on 0.0.8rc1.
 
-     - Make the DNSPort option work with libevent 2.x. Don't alter the
 
-       behaviour for libevent 1.x. Fixes bug 1143. Found by SwissTorExit.
 
-   o Minor bugfixes (directory authorities):
 
-     - Make directory authorities more accurate at recording when
 
-       relays that have failed several reachability tests became
 
-       unreachable, so we can provide more accuracy at assigning Stable,
 
-       Guard, HSDir, etc flags. Bugfix on 0.2.0.6-alpha. Resolves bug 2716.
 
-     - Directory authorities are now more robust to hops back in time
 
-       when calculating router stability. Previously, if a run of uptime
 
-       or downtime appeared to be negative, the calculation could give
 
-       incorrect results. Bugfix on 0.2.0.6-alpha; noticed when fixing
 
-       bug 1035.
 
-     - Directory authorities will now attempt to download consensuses
 
-       if their own efforts to make a live consensus have failed. This
 
-       change means authorities that restart will fetch a valid
 
-       consensus, and it means authorities that didn't agree with the
 
-       current consensus will still fetch and serve it if it has enough
 
-       signatures. Bugfix on 0.2.0.9-alpha; fixes bug 1300.
 
-     - Never vote for a server as "Running" if we have a descriptor for
 
-       it claiming to be hibernating, and that descriptor was published
 
-       more recently than our last contact with the server. Bugfix on
 
-       0.2.0.3-alpha; fixes bug 911.
 
-     - Directory authorities no longer change their opinion of, or vote on,
 
-       whether a router is Running, unless they have themselves been
 
-       online long enough to have some idea. Bugfix on 0.2.0.6-alpha.
 
-       Fixes bug 1023.
 
-   o Minor bugfixes (hidden services):
 
-     - Log malformed requests for rendezvous descriptors as protocol
 
-       warnings, not warnings. Also, use a more informative log message
 
-       in case someone sees it at log level warning without prior
 
-       info-level messages. Fixes bug 2748; bugfix on 0.2.0.10-alpha.
 
-     - Accept hidden service descriptors if we think we might be a hidden
 
-       service directory, regardless of what our consensus says. This
 
-       helps robustness, since clients and hidden services can sometimes
 
-       have a more up-to-date view of the network consensus than we do,
 
-       and if they think that the directory authorities list us a HSDir,
 
-       we might actually be one. Related to bug 2732; bugfix on
 
-       0.2.0.10-alpha.
 
-     - Correct the warning displayed when a rendezvous descriptor exceeds
 
-       the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by
 
-       John Brooks.
 
-     - Clients and hidden services now use HSDir-flagged relays for hidden
 
-       service descriptor downloads and uploads even if the relays have no
 
-       DirPort set and the client has disabled TunnelDirConns. This will
 
-       eventually allow us to give the HSDir flag to relays with no
 
-       DirPort. Fixes bug 2722; bugfix on 0.2.1.6-alpha.
 
-     - Only limit the lengths of single HS descriptors, even when multiple
 
-       HS descriptors are published to an HSDir relay in a single POST
 
-       operation. Fixes bug 2948; bugfix on 0.2.1.5-alpha. Found by hsdir.
 
-   o Minor bugfixes (controllers):
 
-     - Allow GETINFO fingerprint to return a fingerprint even when
 
-       we have not yet built a router descriptor. Fixes bug 3577;
 
-       bugfix on 0.2.0.1-alpha.
 
-     - Send a SUCCEEDED stream event to the controller when a reverse
 
-       resolve succeeded. Fixes bug 3536; bugfix on 0.0.8pre1. Issue
 
-       discovered by katmagic.
 
-     - Remove a trailing asterisk from "exit-policy/default" in the
 
-       output of the control port command "GETINFO info/names". Bugfix
 
-       on 0.1.2.5-alpha.
 
-     - Make the SIGNAL DUMP controller command work on FreeBSD. Fixes bug
 
-       2917. Bugfix on 0.1.1.1-alpha.
 
-     - When we restart our relay, we might get a successful connection
 
-       from the outside before we've started our reachability tests,
 
-       triggering a warning: "ORPort found reachable, but I have no
 
-       routerinfo yet. Failing to inform controller of success." This
 
-       bug was harmless unless Tor is running under a controller
 
-       like Vidalia, in which case the controller would never get a
 
-       REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha;
 
-       fixes bug 1172.
 
-     - When a controller changes TrackHostExits, remove mappings for
 
-       hosts that should no longer have their exits tracked. Bugfix on
 
-       0.1.0.1-rc.
 
-     - When a controller changes VirtualAddrNetwork, remove any mappings
 
-       for hosts that were automapped to the old network. Bugfix on
 
-       0.1.1.19-rc.
 
-     - When a controller changes one of the AutomapHosts* options, remove
 
-       any mappings for hosts that should no longer be automapped. Bugfix
 
-       on 0.2.0.1-alpha.
 
-     - Fix an off-by-one error in calculating some controller command
 
-       argument lengths. Fortunately, this mistake is harmless since
 
-       the controller code does redundant NUL termination too. Found by
 
-       boboper. Bugfix on 0.1.1.1-alpha.
 
-     - Fix a bug in the controller interface where "GETINFO ns/asdaskljkl"
 
-       would return "551 Internal error" rather than "552 Unrecognized key
 
-       ns/asdaskljkl". Bugfix on 0.1.2.3-alpha.
 
-     - Don't spam the controller with events when we have no file
 
-       descriptors available. Bugfix on 0.2.1.5-alpha. (Rate-limiting
 
-       for log messages was already solved from bug 748.)
 
-     - Emit a GUARD DROPPED controller event for a case we missed.
 
-     - Ensure DNS requests launched by "RESOLVE" commands from the
 
-       controller respect the __LeaveStreamsUnattached setconf options. The
 
-       same goes for requests launched via DNSPort or transparent
 
-       proxying. Bugfix on 0.2.0.1-alpha; fixes bug 1525.
 
-   o Minor bugfixes (config options):
 
-     - Tor used to limit HttpProxyAuthenticator values to 48 characters.
 
-       Change the limit to 512 characters by removing base64 newlines.
 
-       Fixes bug 2752. Fix by Michael Yakubovich.
 
-     - Complain if PublishServerDescriptor is given multiple arguments that
 
-       include 0 or 1. This configuration will be rejected in the future.
 
-       Bugfix on 0.2.0.1-alpha; closes bug 1107.
 
-     - Disallow BridgeRelay 1 and ORPort 0 at once in the configuration.
 
-       Bugfix on 0.2.0.13-alpha; closes bug 928.
 
-   o Minor bugfixes (log subsystem fixes):
 
-     - When unable to format an address as a string, report its value
 
-       as "???" rather than reusing the last formatted address. Bugfix
 
-       on 0.2.1.5-alpha.
 
-     - Be more consistent in our treatment of file system paths. "~" should
 
-       get expanded to the user's home directory in the Log config option.
 
-       Fixes bug 2971; bugfix on 0.2.0.1-alpha, which introduced the
 
-       feature for the -f and --DataDirectory options.
 
-   o Minor bugfixes (memory management):
 
-     - Don't stack-allocate the list of supplementary GIDs when we're
 
-       about to log them. Stack-allocating NGROUPS_MAX gid_t elements
 
-       could take up to 256K, which is way too much stack. Found by
 
-       Coverity; CID #450. Bugfix on 0.2.1.7-alpha.
 
-     - Save a couple bytes in memory allocation every time we escape
 
-       certain characters in a string. Patch from Florian Zumbiehl.
 
-   o Minor bugfixes (protocol correctness):
 
-     - When checking for 1024-bit keys, check for 1024 bits, not 128
 
-       bytes. This allows Tor to correctly discard keys of length 1017
 
-       through 1023. Bugfix on 0.0.9pre5.
 
-     - Require that introduction point keys and onion handshake keys
 
-       have a public exponent of 65537. Starts to fix bug 3207; bugfix
 
-       on 0.2.0.10-alpha.
 
-     - Handle SOCKS messages longer than 128 bytes long correctly, rather
 
-       than waiting forever for them to finish. Fixes bug 2330; bugfix
 
-       on 0.2.0.16-alpha. Found by doorss.
 
-     - Never relay a cell for a circuit we have already destroyed.
 
-       Between marking a circuit as closeable and finally closing it,
 
-       it may have been possible for a few queued cells to get relayed,
 
-       even though they would have been immediately dropped by the next
 
-       OR in the circuit. Fixes bug 1184; bugfix on 0.2.0.1-alpha.
 
-     - Never queue a cell for a circuit that's already been marked
 
-       for close.
 
-     - Fix a spec conformance issue: the network-status-version token
 
-       must be the first token in a v3 consensus or vote. Discovered by
 
-       "parakeep". Bugfix on 0.2.0.3-alpha.
 
-     - A networkstatus vote must contain exactly one signature. Spec
 
-       conformance issue. Bugfix on 0.2.0.3-alpha.
 
-     - When asked about a DNS record type we don't support via a
 
-       client DNSPort, reply with NOTIMPL rather than an empty
 
-       reply. Patch by intrigeri. Fixes bug 3369; bugfix on 2.0.1-alpha.
 
-     - Make more fields in the controller protocol case-insensitive, since
 
-       control-spec.txt said they were.
 
-   o Minor bugfixes (log messages):
 
-     - Fix a log message that said "bits" while displaying a value in
 
-       bytes. Found by wanoskarnet. Fixes bug 3318; bugfix on
 
-       0.2.0.1-alpha.
 
-     - Downgrade "no current certificates known for authority" message from
 
-       Notice to Info. Fixes bug 2899; bugfix on 0.2.0.10-alpha.
 
-     - Correctly describe errors that occur when generating a TLS object.
 
-       Previously we would attribute them to a failure while generating a
 
-       TLS context. Patch by Robert Ransom. Bugfix on 0.1.0.4-rc; fixes
 
-       bug 1994.
 
-     - Fix an instance where a Tor directory mirror might accidentally
 
-       log the IP address of a misbehaving Tor client. Bugfix on
 
-       0.1.0.1-rc.
 
-     - Stop logging at severity 'warn' when some other Tor client tries
 
-       to establish a circuit with us using weak DH keys. It's a protocol
 
-       violation, but that doesn't mean ordinary users need to hear about
 
-       it. Fixes the bug part of bug 1114. Bugfix on 0.1.0.13.
 
-     - If your relay can't keep up with the number of incoming create
 
-       cells, it would log one warning per failure into your logs. Limit
 
-       warnings to 1 per minute. Bugfix on 0.0.2pre10; fixes bug 1042.
 
-   o Minor bugfixes (build fixes):
 
-     - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option.
 
-     - When warning about missing zlib development packages during compile,
 
-       give the correct package names. Bugfix on 0.2.0.1-alpha.
 
-     - Fix warnings that newer versions of autoconf produce during
 
-       ./autogen.sh. These warnings appear to be harmless in our case,
 
-       but they were extremely verbose. Fixes bug 2020.
 
-     - Squash a compile warning on OpenBSD. Reported by Tas; fixes
 
-       bug 1848.
 
-   o Minor bugfixes (portability):
 
-     - Write several files in text mode, on OSes that distinguish text
 
-       mode from binary mode (namely, Windows). These files are:
 
-       'buffer-stats', 'dirreq-stats', and 'entry-stats' on relays
 
-       that collect those statistics; 'client_keys' and 'hostname' for
 
-       hidden services that use authentication; and (in the tor-gencert
 
-       utility) newly generated identity and signing keys. Previously,
 
-       we wouldn't specify text mode or binary mode, leading to an
 
-       assertion failure. Fixes bug 3607. Bugfix on 0.2.1.1-alpha (when
 
-       the DirRecordUsageByCountry option which would have triggered
 
-       the assertion failure was added), although this assertion failure
 
-       would have occurred in tor-gencert on Windows in 0.2.0.1-alpha.
 
-     - Selectively disable deprecation warnings on OS X because Lion
 
-       started deprecating the shipped copy of openssl. Fixes bug 3643.
 
-     - Use a wide type to hold sockets when built for 64-bit Windows.
 
-       Fixes bug 3270.
 
-     - Fix an issue that prevented static linking of libevent on
 
-       some platforms (notably Linux). Fixes bug 2698; bugfix on 0.2.1.23,
 
-       where we introduced the "--with-static-libevent" configure option.
 
-     - Fix a bug with our locking implementation on Windows that couldn't
 
-       correctly detect when a file was already locked. Fixes bug 2504,
 
-       bugfix on 0.2.1.6-alpha.
 
-     - Build correctly on OSX with zlib 1.2.4 and higher with all warnings
 
-       enabled.
 
-     - Fix IPv6-related connect() failures on some platforms (BSD, OS X).
 
-       Bugfix on 0.2.0.3-alpha; fixes first part of bug 2660. Patch by
 
-       "piebeer".
 
-   o Minor bugfixes (code correctness):
 
-     - Always NUL-terminate the sun_path field of a sockaddr_un before
 
-       passing it to the kernel. (Not a security issue: kernels are
 
-       smart enough to reject bad sockaddr_uns.) Found by Coverity;
 
-       CID #428. Bugfix on Tor 0.2.0.3-alpha.
 
-     - Make connection_printf_to_buf()'s behaviour sane. Its callers
 
-       expect it to emit a CRLF iff the format string ends with CRLF;
 
-       it actually emitted a CRLF iff (a) the format string ended with
 
-       CRLF or (b) the resulting string was over 1023 characters long or
 
-       (c) the format string did not end with CRLF *and* the resulting
 
-       string was 1021 characters long or longer. Bugfix on 0.1.1.9-alpha;
 
-       fixes part of bug 3407.
 
-     - Make send_control_event_impl()'s behaviour sane. Its callers
 
-       expect it to always emit a CRLF at the end of the string; it
 
-       might have emitted extra control characters as well. Bugfix on
 
-       0.1.1.9-alpha; fixes another part of bug 3407.
 
-     - Make crypto_rand_int() check the value of its input correctly.
 
-       Previously, it accepted values up to UINT_MAX, but could return a
 
-       negative number if given a value above INT_MAX+1. Found by George
 
-       Kadianakis. Fixes bug 3306; bugfix on 0.2.2pre14.
 
-     - Fix a potential null-pointer dereference while computing a
 
-       consensus. Bugfix on tor-0.2.0.3-alpha, found with the help of
 
-       clang's analyzer.
 
-     - If we fail to compute the identity digest of a v3 legacy keypair,
 
-       warn, and don't use a buffer-full of junk instead. Bugfix on
 
-       0.2.1.1-alpha; fixes bug 3106.
 
-     - Resolve an untriggerable issue in smartlist_string_num_isin(),
 
-       where if the function had ever in the future been used to check
 
-       for the presence of a too-large number, it would have given an
 
-       incorrect result. (Fortunately, we only used it for 16-bit
 
-       values.) Fixes bug 3175; bugfix on 0.1.0.1-rc.
 
-     - Be more careful about reporting the correct error from a failed
 
-       connect() system call. Under some circumstances, it was possible to
 
-       look at an incorrect value for errno when sending the end reason.
 
-       Bugfix on 0.1.0.1-rc.
 
-     - Correctly handle an "impossible" overflow cases in connection byte
 
-       counting, where we write or read more than 4GB on an edge connection
 
-       in a single second. Bugfix on 0.1.2.8-beta.
 
-     - Avoid a double mark-for-free warning when failing to attach a
 
-       transparent proxy connection. Bugfix on 0.1.2.1-alpha. Fixes
 
-       bug 2279.
 
-     - Correctly detect failure to allocate an OpenSSL BIO. Fixes bug 2378;
 
-       found by "cypherpunks". This bug was introduced before the first
 
-       Tor release, in svn commit r110.
 
-     - Fix a bug in bandwidth history state parsing that could have been
 
-       triggered if a future version of Tor ever changed the timing
 
-       granularity at which bandwidth history is measured. Bugfix on
 
-       Tor 0.1.1.11-alpha.
 
-     - Add assertions to check for overflow in arguments to
 
-       base32_encode() and base32_decode(); fix a signed-unsigned
 
-       comparison there too. These bugs are not actually reachable in Tor,
 
-       but it's good to prevent future errors too. Found by doorss.
 
-     - Avoid a bogus overlapped memcpy in tor_addr_copy(). Reported by
 
-       "memcpyfail".
 
-     - Set target port in get_interface_address6() correctly. Bugfix
 
-       on 0.1.1.4-alpha and 0.2.0.3-alpha; fixes second part of bug 2660.
 
-     - Fix an impossible-to-actually-trigger buffer overflow in relay
 
-       descriptor generation. Bugfix on 0.1.0.15.
 
-     - Fix numerous small code-flaws found by Coverity Scan Rung 3.
 
-   o Minor bugfixes (code improvements):
 
-     - After we free an internal connection structure, overwrite it
 
-       with a different memory value than we use for overwriting a freed
 
-       internal circuit structure. Should help with debugging. Suggested
 
-       by bug 1055.
 
-     - If OpenSSL fails to make a duplicate of a private or public key, log
 
-       an error message and try to exit cleanly. May help with debugging
 
-       if bug 1209 ever remanifests.
 
-     - Some options used different conventions for uppercasing of acronyms
 
-       when comparing manpage and source. Fix those in favor of the
 
-       manpage, as it makes sense to capitalize acronyms.
 
-     - Take a first step towards making or.h smaller by splitting out
 
-       function definitions for all source files in src/or/. Leave
 
-       structures and defines in or.h for now.
 
-     - Remove a few dead assignments during router parsing. Found by
 
-       coverity.
 
-     - Don't use 1-bit wide signed bit fields. Found by coverity.
 
-     - Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned.
 
-       None of the cases where we did this before were wrong, but by making
 
-       this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28.
 
-     - The memarea code now uses a sentinel value at the end of each area
 
-       to make sure nothing writes beyond the end of an area. This might
 
-       help debug some conceivable causes of bug 930.
 
-     - Always treat failure to allocate an RSA key as an unrecoverable
 
-       allocation error.
 
-     - Add some more defensive programming for architectures that can't
 
-       handle unaligned integer accesses. We don't know of any actual bugs
 
-       right now, but that's the best time to fix them. Fixes bug 1943.
 
-   o Minor bugfixes (misc):
 
-     - Fix a rare bug in rend_fn unit tests: we would fail a test when
 
-       a randomly generated port is 0. Diagnosed by Matt Edman. Bugfix
 
-       on 0.2.0.10-alpha; fixes bug 1808.
 
-     - Where available, use Libevent 2.0's periodic timers so that our
 
-       once-per-second cleanup code gets called even more closely to
 
-       once per second than it would otherwise. Fixes bug 943.
 
-     - Ignore OutboundBindAddress when connecting to localhost.
 
-       Connections to localhost need to come _from_ localhost, or else
 
-       local servers (like DNS and outgoing HTTP/SOCKS proxies) will often
 
-       refuse to listen.
 
-     - Update our OpenSSL 0.9.8l fix so that it works with OpenSSL 0.9.8m
 
-       too.
 
-     - If any of the v3 certs we download are unparseable, we should
 
-       actually notice the failure so we don't retry indefinitely. Bugfix
 
-       on 0.2.0.x; reported by "rotator".
 
-     - When Tor fails to parse a descriptor of any kind, dump it to disk.
 
-       Might help diagnosing bug 1051.
 
-     - Make our 'torify' script more portable; if we have only one of
 
-       'torsocks' or 'tsocks' installed, don't complain to the user;
 
-       and explain our warning about tsocks better.
 
-     - Fix some urls in the exit notice file and make it XHTML1.1 strict
 
-       compliant. Based on a patch from Christian Kujau.
 
-   o Documentation changes:
 
-     - Modernize the doxygen configuration file slightly. Fixes bug 2707.
 
-     - Resolve all doxygen warnings except those for missing documentation.
 
-       Fixes bug 2705.
 
-     - Add doxygen documentation for more functions, fields, and types.
 
-     - Convert the HACKING file to asciidoc, and add a few new sections
 
-       to it, explaining how we use Git, how we make changelogs, and
 
-       what should go in a patch.
 
-     - Document the default socks host and port (127.0.0.1:9050) for
 
-       tor-resolve.
 
-     - Removed some unnecessary files from the source distribution. The
 
-       AUTHORS file has now been merged into the people page on the
 
-       website. The roadmaps and design doc can now be found in the
 
-       projects directory in svn.
 
-   o Deprecated and removed features (config):
 
-     - Remove the torrc.complete file. It hasn't been kept up to date
 
-       and users will have better luck checking out the manpage.
 
-     - Remove the HSAuthorityRecordStats option that version 0 hidden
 
-       service authorities could use to track statistics of overall v0
 
-       hidden service usage.
 
-     - Remove the obsolete "NoPublish" option; it has been flagged
 
-       as obsolete and has produced a warning since 0.1.1.18-rc.
 
-     - Caches no longer download and serve v2 networkstatus documents
 
-       unless FetchV2Networkstatus flag is set: these documents haven't
 
-       haven't been used by clients or relays since 0.2.0.x. Resolves
 
-       bug 3022.
 
-   o Deprecated and removed features (controller):
 
-     - The controller no longer accepts the old obsolete "addr-mappings/"
 
-       or "unregistered-servers-" GETINFO values.
 
-     - The EXTENDED_EVENTS and VERBOSE_NAMES controller features are now
 
-       always on; using them is necessary for correct forward-compatible
 
-       controllers.
 
-   o Deprecated and removed features (misc):
 
-     - Hidden services no longer publish version 0 descriptors, and clients
 
-       do not request or use version 0 descriptors. However, the old hidden
 
-       service authorities still accept and serve version 0 descriptors
 
-       when contacted by older hidden services/clients.
 
-     - Remove undocumented option "-F" from tor-resolve: it hasn't done
 
-       anything since 0.2.1.16-rc.
 
-     - Remove everything related to building the expert bundle for OS X.
 
-       It has confused many users, doesn't work right on OS X 10.6,
 
-       and is hard to get rid of once installed. Resolves bug 1274.
 
-     - Remove support for .noconnect style addresses. Nobody was using
 
-       them, and they provided another avenue for detecting Tor users
 
-       via application-level web tricks.
 
-     - When we fixed bug 1038 we had to put in a restriction not to send
 
-       RELAY_EARLY cells on rend circuits. This was necessary as long
 
-       as relays using Tor 0.2.1.3-alpha through 0.2.1.18-alpha were
 
-       active. Now remove this obsolete check. Resolves bug 2081.
 
-     - Remove workaround code to handle directory responses from servers
 
-       that had bug 539 (they would send HTTP status 503 responses _and_
 
-       send a body too). Since only server versions before
 
-       0.2.0.16-alpha/0.1.2.19 were affected, there is no longer reason to
 
-       keep the workaround in place.
 
-     - Remove the old 'fuzzy time' logic. It was supposed to be used for
 
-       handling calculations where we have a known amount of clock skew and
 
-       an allowed amount of unknown skew. But we only used it in three
 
-       places, and we never adjusted the known/unknown skew values. This is
 
-       still something we might want to do someday, but if we do, we'll
 
-       want to do it differently.
 
-     - Remove the "--enable-iphone" option to ./configure. According to
 
-       reports from Marco Bonetti, Tor builds fine without any special
 
-       tweaking on recent iPhone SDK versions.
 
- Changes in version 0.2.1.30 - 2011-02-23
 
-   Tor 0.2.1.30 fixes a variety of less critical bugs. The main other
 
-   change is a slight tweak to Tor's TLS handshake that makes relays
 
-   and bridges that run this new version reachable from Iran again.
 
-   We don't expect this tweak will win the arms race long-term, but it
 
-   buys us time until we roll out a better solution.
 
-   o Major bugfixes:
 
-     - Stop sending a CLOCK_SKEW controller status event whenever
 
-       we fetch directory information from a relay that has a wrong clock.
 
-       Instead, only inform the controller when it's a trusted authority
 
-       that claims our clock is wrong. Bugfix on 0.1.2.6-alpha; fixes
 
-       the rest of bug 1074.
 
-     - Fix a bounds-checking error that could allow an attacker to
 
-       remotely crash a directory authority. Bugfix on 0.2.1.5-alpha.
 
-       Found by "piebeer".
 
-     - If relays set RelayBandwidthBurst but not RelayBandwidthRate,
 
-       Tor would ignore their RelayBandwidthBurst setting,
 
-       potentially using more bandwidth than expected. Bugfix on
 
-       0.2.0.1-alpha. Reported by Paul Wouters. Fixes bug 2470.
 
-     - Ignore and warn if the user mistakenly sets "PublishServerDescriptor
 
-       hidserv" in her torrc. The 'hidserv' argument never controlled
 
-       publication of hidden service descriptors. Bugfix on 0.2.0.1-alpha.
 
-   o Minor features:
 
-     - Adjust our TLS Diffie-Hellman parameters to match those used by
 
-       Apache's mod_ssl.
 
-     - Update to the February 1 2011 Maxmind GeoLite Country database.
 
-   o Minor bugfixes:
 
-     - Check for and reject overly long directory certificates and
 
-       directory tokens before they have a chance to hit any assertions.
 
-       Bugfix on 0.2.1.28. Found by "doorss".
 
-     - Bring the logic that gathers routerinfos and assesses the
 
-       acceptability of circuits into line. This prevents a Tor OP from
 
-       getting locked in a cycle of choosing its local OR as an exit for a
 
-       path (due to a .exit request) and then rejecting the circuit because
 
-       its OR is not listed yet. It also prevents Tor clients from using an
 
-       OR running in the same instance as an exit (due to a .exit request)
 
-       if the OR does not meet the same requirements expected of an OR
 
-       running elsewhere. Fixes bug 1859; bugfix on 0.1.0.1-rc.
 
-   o Packaging changes:
 
-     - Stop shipping the Tor specs files and development proposal documents
 
-       in the tarball. They are now in a separate git repository at
 
-       git://git.torproject.org/torspec.git
 
-     - Do not include Git version tags as though they are SVN tags when
 
-       generating a tarball from inside a repository that has switched
 
-       between branches. Bugfix on 0.2.1.15-rc; fixes bug 2402.
 
- Changes in version 0.2.1.29 - 2011-01-15
 
-   Tor 0.2.1.29 continues our recent code security audit work. The main
 
-   fix resolves a remote heap overflow vulnerability that can allow remote
 
-   code execution. Other fixes address a variety of assert and crash bugs,
 
-   most of which we think are hard to exploit remotely.
 
-   o Major bugfixes (security):
 
-     - Fix a heap overflow bug where an adversary could cause heap
 
-       corruption. This bug probably allows remote code execution
 
-       attacks. Reported by "debuger". Fixes CVE-2011-0427. Bugfix on
 
-       0.1.2.10-rc.
 
-     - Prevent a denial-of-service attack by disallowing any
 
-       zlib-compressed data whose compression factor is implausibly
 
-       high. Fixes part of bug 2324; reported by "doorss".
 
-     - Zero out a few more keys in memory before freeing them. Fixes
 
-       bug 2384 and part of bug 2385. These key instances found by
 
-       "cypherpunks", based on Andrew Case's report about being able
 
-       to find sensitive data in Tor's memory space if you have enough
 
-       permissions. Bugfix on 0.0.2pre9.
 
-   o Major bugfixes (crashes):
 
-     - Prevent calls to Libevent from inside Libevent log handlers.
 
-       This had potential to cause a nasty set of crashes, especially
 
-       if running Libevent with debug logging enabled, and running
 
-       Tor with a controller watching for low-severity log messages.
 
-       Bugfix on 0.1.0.2-rc. Fixes bug 2190.
 
-     - Add a check for SIZE_T_MAX to tor_realloc() to try to avoid
 
-       underflow errors there too. Fixes the other part of bug 2324.
 
-     - Fix a bug where we would assert if we ever had a
 
-       cached-descriptors.new file (or another file read directly into
 
-       memory) of exactly SIZE_T_CEILING bytes. Fixes bug 2326; bugfix
 
-       on 0.2.1.25. Found by doorss.
 
-     - Fix some potential asserts and parsing issues with grossly
 
-       malformed router caches. Fixes bug 2352; bugfix on Tor 0.2.1.27.
 
-       Found by doorss.
 
-   o Minor bugfixes (other):
 
-     - Fix a bug with handling misformed replies to reverse DNS lookup
 
-       requests in DNSPort. Bugfix on Tor 0.2.0.1-alpha. Related to a
 
-       bug reported by doorss.
 
-     - Fix compilation on mingw when a pthreads compatibility library
 
-       has been installed. (We don't want to use it, so we shouldn't
 
-       be including pthread.h.) Fixes bug 2313; bugfix on 0.1.0.1-rc.
 
-     - Fix a bug where we would declare that we had run out of virtual
 
-       addresses when the address space was only half-exhausted. Bugfix
 
-       on 0.1.2.1-alpha.
 
-     - Correctly handle the case where AutomapHostsOnResolve is set but
 
-       no virtual addresses are available. Fixes bug 2328; bugfix on
 
-       0.1.2.1-alpha. Bug found by doorss.
 
-     - Correctly handle wrapping around when we run out of virtual
 
-       address space. Found by cypherpunks; bugfix on 0.2.0.5-alpha.
 
-   o Minor features:
 
-     - Update to the January 1 2011 Maxmind GeoLite Country database.
 
-     - Introduce output size checks on all of our decryption functions.
 
-   o Build changes:
 
-     - Tor does not build packages correctly with Automake 1.6 and earlier;
 
-       added a check to Makefile.am to make sure that we're building with
 
-       Automake 1.7 or later.
 
-     - The 0.2.1.28 tarball was missing src/common/OpenBSD_malloc_Linux.c
 
-       because we built it with a too-old version of automake. Thus that
 
-       release broke ./configure --enable-openbsd-malloc, which is popular
 
-       among really fast exit relays on Linux.
 
- Changes in version 0.2.1.28 - 2010-12-17
 
-   Tor 0.2.1.28 does some code cleanup to reduce the risk of remotely
 
-   exploitable bugs. We also took this opportunity to change the IP address
 
-   for one of our directory authorities, and to update the geoip database
 
-   we ship.
 
-   o Major bugfixes:
 
-     - Fix a remotely exploitable bug that could be used to crash instances
 
-       of Tor remotely by overflowing on the heap. Remote-code execution
 
-       hasn't been confirmed, but can't be ruled out. Everyone should
 
-       upgrade. Bugfix on the 0.1.1 series and later.
 
-   o Directory authority changes:
 
-     - Change IP address and ports for gabelmoo (v3 directory authority).
 
-   o Minor features:
 
-     - Update to the December 1 2010 Maxmind GeoLite Country database.
 
- Changes in version 0.2.1.27 - 2010-11-23
 
-   Yet another OpenSSL security patch broke its compatibility with Tor:
 
-   Tor 0.2.1.27 makes relays work with openssl 0.9.8p and 1.0.0.b. We
 
-   also took this opportunity to fix several crash bugs, integrate a new
 
-   directory authority, and update the bundled GeoIP database.
 
-   o Major bugfixes:
 
-     - Resolve an incompatibility with OpenSSL 0.9.8p and OpenSSL 1.0.0b:
 
-       No longer set the tlsext_host_name extension on server SSL objects;
 
-       but continue to set it on client SSL objects. Our goal in setting
 
-       it was to imitate a browser, not a vhosting server. Fixes bug 2204;
 
-       bugfix on 0.2.1.1-alpha.
 
-     - Do not log messages to the controller while shrinking buffer
 
-       freelists. Doing so would sometimes make the controller connection
 
-       try to allocate a buffer chunk, which would mess up the internals
 
-       of the freelist and cause an assertion failure. Fixes bug 1125;
 
-       fixed by Robert Ransom. Bugfix on 0.2.0.16-alpha.
 
-     - Learn our external IP address when we're a relay or bridge, even if
 
-       we set PublishServerDescriptor to 0. Bugfix on 0.2.0.3-alpha,
 
-       where we introduced bridge relays that don't need to publish to
 
-       be useful. Fixes bug 2050.
 
-     - Do even more to reject (and not just ignore) annotations on
 
-       router descriptors received anywhere but from the cache. Previously
 
-       we would ignore such annotations at first, but cache them to disk
 
-       anyway. Bugfix on 0.2.0.8-alpha. Found by piebeer.
 
-     - When you're using bridges and your network goes away and your
 
-       bridges get marked as down, recover when you attempt a new socks
 
-       connection (if the network is back), rather than waiting up to an
 
-       hour to try fetching new descriptors for your bridges. Bugfix on
 
-       0.2.0.3-alpha; fixes bug 1981.
 
-   o Major features:
 
-     - Move to the November 2010 Maxmind GeoLite country db (rather
 
-       than the June 2009 ip-to-country GeoIP db) for our statistics that
 
-       count how many users relays are seeing from each country. Now we'll
 
-       have more accurate data, especially for many African countries.
 
-   o New directory authorities:
 
-     - Set up maatuska (run by Linus Nordberg) as the eighth v3 directory
 
-       authority.
 
-   o Minor bugfixes:
 
-     - Fix an assertion failure that could occur in directory caches or
 
-       bridge users when using a very short voting interval on a testing
 
-       network. Diagnosed by Robert Hogan. Fixes bug 1141; bugfix on
 
-       0.2.0.8-alpha.
 
-     - Enforce multiplicity rules when parsing annotations. Bugfix on
 
-       0.2.0.8-alpha. Found by piebeer.
 
-     - Allow handshaking OR connections to take a full KeepalivePeriod
 
-       seconds to handshake. Previously, we would close them after
 
-       IDLE_OR_CONN_TIMEOUT (180) seconds, the same timeout as if they
 
-       were open. Bugfix on 0.2.1.26; fixes bug 1840. Thanks to mingw-san
 
-       for analysis help.
 
-     - When building with --enable-gcc-warnings on OpenBSD, disable
 
-       warnings in system headers. This makes --enable-gcc-warnings
 
-       pass on OpenBSD 4.8.
 
-   o Minor features:
 
-     - Exit nodes didn't recognize EHOSTUNREACH as a plausible error code,
 
-       and so sent back END_STREAM_REASON_MISC. Clients now recognize a new
 
-       stream ending reason for this case: END_STREAM_REASON_NOROUTE.
 
-       Servers can start sending this code when enough clients recognize
 
-       it. Bugfix on 0.1.0.1-rc; fixes part of bug 1793.
 
-     - Build correctly on mingw with more recent versions of OpenSSL 0.9.8.
 
-       Patch from mingw-san.
 
-   o Removed files:
 
-     - Remove the old debian/ directory from the main Tor distribution.
 
-       The official Tor-for-debian git repository lives at the URL
 
-       https://git.torproject.org/debian/tor.git
 
-     - Stop shipping the old doc/website/ directory in the tarball. We
 
-       changed the website format in late 2010, and what we shipped in
 
-       0.2.1.26 really wasn't that useful anyway.
 
- Changes in version 0.2.1.26 - 2010-05-02
 
-   Tor 0.2.1.26 addresses the recent connection and memory overload
 
-   problems we've been seeing on relays, especially relays with their
 
-   DirPort open. If your relay has been crashing, or you turned it off
 
-   because it used too many resources, give this release a try.
 
-   This release also fixes yet another instance of broken OpenSSL libraries
 
-   that was causing some relays to drop out of the consensus.
 
-   o Major bugfixes:
 
-     - Teach relays to defend themselves from connection overload. Relays
 
-       now close idle circuits early if it looks like they were intended
 
-       for directory fetches. Relays are also more aggressive about closing
 
-       TLS connections that have no circuits on them. Such circuits are
 
-       unlikely to be re-used, and tens of thousands of them were piling
 
-       up at the fast relays, causing the relays to run out of sockets
 
-       and memory. Bugfix on 0.2.0.22-rc (where clients started tunneling
 
-       their directory fetches over TLS).
 
-     - Fix SSL renegotiation behavior on OpenSSL versions like on Centos
 
-       that claim to be earlier than 0.9.8m, but which have in reality
 
-       backported huge swaths of 0.9.8m or 0.9.8n renegotiation
 
-       behavior. Possible fix for some cases of bug 1346.
 
-     - Directory mirrors were fetching relay descriptors only from v2
 
-       directory authorities, rather than v3 authorities like they should.
 
-       Only 2 v2 authorities remain (compared to 7 v3 authorities), leading
 
-       to a serious bottleneck. Bugfix on 0.2.0.9-alpha. Fixes bug 1324.
 
-   o Minor bugfixes:
 
-     - Finally get rid of the deprecated and now harmful notion of "clique
 
-       mode", where directory authorities maintain TLS connections to
 
-       every other relay.
 
-   o Testsuite fixes:
 
-     - In the util/threads test, no longer free the test_mutex before all
 
-       worker threads have finished. Bugfix on 0.2.1.6-alpha.
 
-     - The master thread could starve the worker threads quite badly on
 
-       certain systems, causing them to run only partially in the allowed
 
-       window. This resulted in test failures. Now the master thread sleeps
 
-       occasionally for a few microseconds while the two worker-threads
 
-       compete for the mutex. Bugfix on 0.2.0.1-alpha.
 
- Changes in version 0.2.1.25 - 2010-03-16
 
-   Tor 0.2.1.25 fixes a regression introduced in 0.2.1.23 that could
 
-   prevent relays from guessing their IP address correctly. It also fixes
 
-   several minor potential security bugs.
 
-   o Major bugfixes:
 
-     - Fix a regression from our patch for bug 1244 that caused relays
 
-       to guess their IP address incorrectly if they didn't set Address
 
-       in their torrc and/or their address fails to resolve. Bugfix on
 
-       0.2.1.23; fixes bug 1269.
 
-     - When freeing a session key, zero it out completely. We only zeroed
 
-       the first ptrsize bytes. Bugfix on 0.0.2pre8. Discovered and
 
-       patched by ekir. Fixes bug 1254.
 
-   o Minor bugfixes:
 
-     - Fix a dereference-then-NULL-check sequence when publishing
 
-       descriptors. Bugfix on 0.2.1.5-alpha. Discovered by ekir; fixes
 
-       bug 1255.
 
-     - Fix another dereference-then-NULL-check sequence. Bugfix on
 
-       0.2.1.14-rc. Discovered by ekir; fixes bug 1256.
 
-     - Make sure we treat potentially not NUL-terminated strings correctly.
 
-       Bugfix on 0.1.1.13-alpha. Discovered by rieo; fixes bug 1257.
 
- Changes in version 0.2.1.24 - 2010-02-21
 
-   Tor 0.2.1.24 makes Tor work again on the latest OS X -- this time
 
-   for sure!
 
-   o Minor bugfixes:
 
-     - Work correctly out-of-the-box with even more vendor-patched versions
 
-       of OpenSSL. In particular, make it so Debian and OS X don't need
 
-       customized patches to run/build.
 
- Changes in version 0.2.1.23 - 2010-02-13
 
-   Tor 0.2.1.23 fixes a huge client-side performance bug, makes Tor work
 
-   again on the latest OS X, and updates the location of a directory
 
-   authority.
 
-   o Major bugfixes (performance):
 
-     - We were selecting our guards uniformly at random, and then weighting
 
-       which of our guards we'd use uniformly at random. This imbalance
 
-       meant that Tor clients were severely limited on throughput (and
 
-       probably latency too) by the first hop in their circuit. Now we
 
-       select guards weighted by currently advertised bandwidth. We also
 
-       automatically discard guards picked using the old algorithm. Fixes
 
-       bug 1217; bugfix on 0.2.1.3-alpha. Found by Mike Perry.
 
-   o Major bugfixes:
 
-     - Make Tor work again on the latest OS X: when deciding whether to
 
-       use strange flags to turn TLS renegotiation on, detect the OpenSSL
 
-       version at run-time, not compile time. We need to do this because
 
-       Apple doesn't update its dev-tools headers when it updates its
 
-       libraries in a security patch.
 
-     - Fix a potential buffer overflow in lookup_last_hid_serv_request()
 
-       that could happen on 32-bit platforms with 64-bit time_t. Also fix
 
-       a memory leak when requesting a hidden service descriptor we've
 
-       requested before. Fixes bug 1242, bugfix on 0.2.0.18-alpha. Found
 
-       by aakova.
 
-   o Minor bugfixes:
 
-     - Refactor resolve_my_address() to not use gethostbyname() anymore.
 
-       Fixes bug 1244; bugfix on 0.0.2pre25. Reported by Mike Mestnik.
 
-   o Minor features:
 
-     - Avoid a mad rush at the beginning of each month when each client
 
-       rotates half of its guards. Instead we spread the rotation out
 
-       throughout the month, but we still avoid leaving a precise timestamp
 
-       in the state file about when we first picked the guard. Improves
 
-       over the behavior introduced in 0.1.2.17.
 
- Changes in version 0.2.1.22 - 2010-01-19
 
-   Tor 0.2.1.22 fixes a critical privacy problem in bridge directory
 
-   authorities -- it would tell you its whole history of bridge descriptors
 
-   if you make the right directory request. This stable update also
 
-   rotates two of the seven v3 directory authority keys and locations.
 
-   o Directory authority changes:
 
-     - Rotate keys (both v3 identity and relay identity) for moria1
 
-       and gabelmoo.
 
-   o Major bugfixes:
 
-     - Stop bridge directory authorities from answering dbg-stability.txt
 
-       directory queries, which would let people fetch a list of all
 
-       bridge identities they track. Bugfix on 0.2.1.6-alpha.
 
- Changes in version 0.2.1.21 - 2009-12-21
 
-   Tor 0.2.1.21 fixes an incompatibility with the most recent OpenSSL
 
-   library. If you use Tor on Linux / Unix and you're getting SSL
 
-   renegotiation errors, upgrading should help. We also recommend an
 
-   upgrade if you're an exit relay.
 
-   o Major bugfixes:
 
-     - Work around a security feature in OpenSSL 0.9.8l that prevents our
 
-       handshake from working unless we explicitly tell OpenSSL that we
 
-       are using SSL renegotiation safely. We are, of course, but OpenSSL
 
-       0.9.8l won't work unless we say we are.
 
-     - Avoid crashing if the client is trying to upload many bytes and the
 
-       circuit gets torn down at the same time, or if the flip side
 
-       happens on the exit relay. Bugfix on 0.2.0.1-alpha; fixes bug 1150.
 
-   o Minor bugfixes:
 
-     - Do not refuse to learn about authority certs and v2 networkstatus
 
-       documents that are older than the latest consensus. This bug might
 
-       have degraded client bootstrapping. Bugfix on 0.2.0.10-alpha.
 
-       Spotted and fixed by xmux.
 
-     - Fix a couple of very-hard-to-trigger memory leaks, and one hard-to-
 
-       trigger platform-specific option misparsing case found by Coverity
 
-       Scan.
 
-     - Fix a compilation warning on Fedora 12 by removing an impossible-to-
 
-       trigger assert. Fixes bug 1173.
 
- Changes in version 0.2.1.20 - 2009-10-15
 
-   Tor 0.2.1.20 fixes a crash bug when you're accessing many hidden
 
-   services at once, prepares for more performance improvements, and
 
-   fixes a bunch of smaller bugs.
 
-   The Windows and OS X bundles also include a more recent Vidalia,
 
-   and switch from Privoxy to Polipo.
 
-   The OS X installers are now drag and drop. It's best to un-install
 
-   Tor/Vidalia and then install this new bundle, rather than upgrade. If
 
-   you want to upgrade, you'll need to update the paths for Tor and Polipo
 
-   in the Vidalia Settings window.
 
-   o Major bugfixes:
 
-     - Send circuit or stream sendme cells when our window has decreased
 
-       by 100 cells, not when it has decreased by 101 cells. Bug uncovered
 
-       by Karsten when testing the "reduce circuit window" performance
 
-       patch. Bugfix on the 54th commit on Tor -- from July 2002,
 
-       before the release of Tor 0.0.0. This is the new winner of the
 
-       oldest-bug prize.
 
-     - Fix a remotely triggerable memory leak when a consensus document
 
-       contains more than one signature from the same voter. Bugfix on
 
-       0.2.0.3-alpha.
 
-     - Avoid segfault in rare cases when finishing an introduction circuit
 
-       as a client and finding out that we don't have an introduction key
 
-       for it. Fixes bug 1073. Reported by Aaron Swartz.
 
-   o Major features:
 
-     - Tor now reads the "circwindow" parameter out of the consensus,
 
-       and uses that value for its circuit package window rather than the
 
-       default of 1000 cells. Begins the implementation of proposal 168.
 
-   o New directory authorities:
 
-     - Set up urras (run by Jacob Appelbaum) as the seventh v3 directory
 
-       authority.
 
-     - Move moria1 and tonga to alternate IP addresses.
 
-   o Minor bugfixes:
 
-     - Fix a signed/unsigned compile warning in 0.2.1.19.
 
-     - Fix possible segmentation fault on directory authorities. Bugfix on
 
-       0.2.1.14-rc.
 
-     - Fix an extremely rare infinite recursion bug that could occur if
 
-       we tried to log a message after shutting down the log subsystem.
 
-       Found by Matt Edman. Bugfix on 0.2.0.16-alpha.
 
-     - Fix an obscure bug where hidden services on 64-bit big-endian
 
-       systems might mis-read the timestamp in v3 introduce cells, and
 
-       refuse to connect back to the client. Discovered by "rotor".
 
-       Bugfix on 0.2.1.6-alpha.
 
-     - We were triggering a CLOCK_SKEW controller status event whenever
 
-       we connect via the v2 connection protocol to any relay that has
 
-       a wrong clock. Instead, we should only inform the controller when
 
-       it's a trusted authority that claims our clock is wrong. Bugfix
 
-       on 0.2.0.20-rc; starts to fix bug 1074. Reported by SwissTorExit.
 
-     - We were telling the controller about CHECKING_REACHABILITY and
 
-       REACHABILITY_FAILED status events whenever we launch a testing
 
-       circuit or notice that one has failed. Instead, only tell the
 
-       controller when we want to inform the user of overall success or
 
-       overall failure. Bugfix on 0.1.2.6-alpha. Fixes bug 1075. Reported
 
-       by SwissTorExit.
 
-     - Don't warn when we're using a circuit that ends with a node
 
-       excluded in ExcludeExitNodes, but the circuit is not used to access
 
-       the outside world. This should help fix bug 1090. Bugfix on
 
-       0.2.1.6-alpha.
 
-     - Work around a small memory leak in some versions of OpenSSL that
 
-       stopped the memory used by the hostname TLS extension from being
 
-       freed.
 
-   o Minor features:
 
-     - Add a "getinfo status/accepted-server-descriptor" controller
 
-       command, which is the recommended way for controllers to learn
 
-       whether our server descriptor has been successfully received by at
 
-       least on directory authority. Un-recommend good-server-descriptor
 
-       getinfo and status events until we have a better design for them.
 
- Changes in version 0.2.1.19 - 2009-07-28
 
-   Tor 0.2.1.19 fixes a major bug with accessing and providing hidden
 
-   services.
 
-   o Major bugfixes:
 
-     - Make accessing hidden services on 0.2.1.x work right again.
 
-       Bugfix on 0.2.1.3-alpha; workaround for bug 1038. Diagnosis and
 
-       part of patch provided by "optimist".
 
-   o Minor features:
 
-     - When a relay/bridge is writing out its identity key fingerprint to
 
-       the "fingerprint" file and to its logs, write it without spaces. Now
 
-       it will look like the fingerprints in our bridges documentation,
 
-       and confuse fewer users.
 
-   o Minor bugfixes:
 
-     - Relays no longer publish a new server descriptor if they change
 
-       their MaxAdvertisedBandwidth config option but it doesn't end up
 
-       changing their advertised bandwidth numbers. Bugfix on 0.2.0.28-rc;
 
-       fixes bug 1026. Patch from Sebastian.
 
-     - Avoid leaking memory every time we get a create cell but we have
 
-       so many already queued that we refuse it. Bugfix on 0.2.0.19-alpha;
 
-       fixes bug 1034. Reported by BarkerJr.
 
- Changes in version 0.2.1.18 - 2009-07-24
 
-   Tor 0.2.1.18 lays the foundations for performance improvements,
 
-   adds status events to help users diagnose bootstrap problems, adds
 
-   optional authentication/authorization for hidden services, fixes a
 
-   variety of potential anonymity problems, and includes a huge pile of
 
-   other features and bug fixes.
 
-   o Major features (clients):
 
-     - Start sending "bootstrap phase" status events to the controller,
 
-       so it can keep the user informed of progress fetching directory
 
-       information and establishing circuits. Also inform the controller
 
-       if we think we're stuck at a particular bootstrap phase. Implements
 
-       proposal 137.
 
-     - Clients replace entry guards that were chosen more than a few months
 
-       ago. This change should significantly improve client performance,
 
-       especially once more people upgrade, since relays that have been
 
-       a guard for a long time are currently overloaded.
 
-     - Network status consensus documents and votes now contain bandwidth
 
-       information for each relay. Clients use the bandwidth values
 
-       in the consensus, rather than the bandwidth values in each
 
-       relay descriptor. This approach opens the door to more accurate
 
-       bandwidth estimates once the directory authorities start doing
 
-       active measurements. Implements part of proposal 141.
 
-   o Major features (relays):
 
-     - Disable and refactor some debugging checks that forced a linear scan
 
-       over the whole server-side DNS cache. These accounted for over 50%
 
-       of CPU time on a relatively busy exit node's gprof profile. Also,
 
-       disable some debugging checks that appeared in exit node profile
 
-       data. Found by Jacob.
 
-     - New DirPortFrontPage option that takes an html file and publishes
 
-       it as "/" on the DirPort. Now relay operators can provide a
 
-       disclaimer without needing to set up a separate webserver. There's
 
-       a sample disclaimer in contrib/tor-exit-notice.html.
 
-   o Major features (hidden services):
 
-     - Make it possible to build hidden services that only certain clients
 
-       are allowed to connect to. This is enforced at several points,
 
-       so that unauthorized clients are unable to send INTRODUCE cells
 
-       to the service, or even (depending on the type of authentication)
 
-       to learn introduction points. This feature raises the bar for
 
-       certain kinds of active attacks against hidden services. Design
 
-       and code by Karsten Loesing. Implements proposal 121.
 
-     - Relays now store and serve v2 hidden service descriptors by default,
 
-       i.e., the new default value for HidServDirectoryV2 is 1. This is
 
-       the last step in proposal 114, which aims to make hidden service
 
-       lookups more reliable.
 
-   o Major features (path selection):
 
-     - ExitNodes and Exclude*Nodes config options now allow you to restrict
 
-       by country code ("{US}") or IP address or address pattern
 
-       ("255.128.0.0/16"). Patch from Robert Hogan. It still needs some
 
-       refinement to decide what config options should take priority if
 
-       you ask to both use a particular node and exclude it.
 
-   o Major features (misc):
 
-     - When building a consensus, do not include routers that are down.
 
-       This cuts down 30% to 40% on consensus size. Implements proposal
 
-       138.
 
-     - New TestingTorNetwork config option to allow adjustment of
 
-       previously constant values that could slow bootstrapping. Implements
 
-       proposal 135. Patch from Karsten.
 
-     - Convert many internal address representations to optionally hold
 
-       IPv6 addresses. Generate and accept IPv6 addresses in many protocol
 
-       elements. Make resolver code handle nameservers located at IPv6
 
-       addresses.
 
-     - More work on making our TLS handshake blend in: modify the list
 
-       of ciphers advertised by OpenSSL in client mode to even more
 
-       closely resemble a common web browser. We cheat a little so that
 
-       we can advertise ciphers that the locally installed OpenSSL doesn't
 
-       know about.
 
-     - Use the TLS1 hostname extension to more closely resemble browser
 
-       behavior.
 
-   o Security fixes (anonymity/entropy):
 
-     - Never use a connection with a mismatched address to extend a
 
-       circuit, unless that connection is canonical. A canonical
 
-       connection is one whose address is authenticated by the router's
 
-       identity key, either in a NETINFO cell or in a router descriptor.
 
-     - Implement most of proposal 110: The first K cells to be sent
 
-       along a circuit are marked as special "early" cells; only K "early"
 
-       cells will be allowed. Once this code is universal, we can block
 
-       certain kinds of denial-of-service attack by requiring that EXTEND
 
-       commands must be sent using an "early" cell.
 
-     - Resume using OpenSSL's RAND_poll() for better (and more portable)
 
-       cross-platform entropy collection again. We used to use it, then
 
-       stopped using it because of a bug that could crash systems that
 
-       called RAND_poll when they had a lot of fds open. It looks like the
 
-       bug got fixed in late 2006. Our new behavior is to call RAND_poll()
 
-       at startup, and to call RAND_poll() when we reseed later only if
 
-       we have a non-buggy OpenSSL version.
 
-     - When the client is choosing entry guards, now it selects at most
 
-       one guard from a given relay family. Otherwise we could end up with
 
-       all of our entry points into the network run by the same operator.
 
-       Suggested by Camilo Viecco. Fix on 0.1.1.11-alpha.
 
-     - Do not use or believe expired v3 authority certificates. Patch
 
-       from Karsten. Bugfix in 0.2.0.x. Fixes bug 851.
 
-     - Drop begin cells to a hidden service if they come from the middle
 
-       of a circuit. Patch from lark.
 
-     - When we erroneously receive two EXTEND cells for the same circuit
 
-       ID on the same connection, drop the second. Patch from lark.
 
-     - Authorities now vote for the Stable flag for any router whose
 
-       weighted MTBF is at least 5 days, regardless of the mean MTBF.
 
-     - Clients now never report any stream end reason except 'MISC'.
 
-       Implements proposal 148.
 
-   o Major bugfixes (crashes):
 
-     - Parse dates and IPv4 addresses in a locale- and libc-independent
 
-       manner, to avoid platform-dependent behavior on malformed input.
 
-     - Fix a crash that occurs on exit nodes when a nameserver request
 
-       timed out. Bugfix on 0.1.2.1-alpha; our CLEAR debugging code had
 
-       been suppressing the bug since 0.1.2.10-alpha. Partial fix for
 
-       bug 929.
 
-     - Do not assume that a stack-allocated character array will be
 
-       64-bit aligned on platforms that demand that uint64_t access is
 
-       aligned. Possible fix for bug 604.
 
-     - Resolve a very rare crash bug that could occur when the user forced
 
-       a nameserver reconfiguration during the middle of a nameserver
 
-       probe. Fixes bug 526. Bugfix on 0.1.2.1-alpha.
 
-     - Avoid a "0 divided by 0" calculation when calculating router uptime
 
-       at directory authorities. Bugfix on 0.2.0.8-alpha.
 
-     - Fix an assertion bug in parsing policy-related options; possible fix
 
-       for bug 811.
 
-     - Rate-limit too-many-sockets messages: when they happen, they happen
 
-       a lot and end up filling up the disk. Resolves bug 748.
 
-     - Fix a race condition that could cause crashes or memory corruption
 
-       when running as a server with a controller listening for log
 
-       messages.
 
-     - Avoid crashing when we have a policy specified in a DirPolicy or
 
-       SocksPolicy or ReachableAddresses option with ports set on it,
 
-       and we re-load the policy. May fix bug 996.
 
-     - Fix an assertion failure on 64-bit platforms when we allocated
 
-       memory right up to the end of a memarea, then realigned the memory
 
-       one step beyond the end. Fixes a possible cause of bug 930.
 
-     - Protect the count of open sockets with a mutex, so we can't
 
-       corrupt it when two threads are closing or opening sockets at once.
 
-       Fix for bug 939. Bugfix on 0.2.0.1-alpha.
 
-   o Major bugfixes (clients):
 
-     - Discard router descriptors as we load them if they are more than
 
-       five days old. Otherwise if Tor is off for a long time and then
 
-       starts with cached descriptors, it will try to use the onion keys
 
-       in those obsolete descriptors when building circuits. Fixes bug 887.
 
-     - When we choose to abandon a new entry guard because we think our
 
-       older ones might be better, close any circuits pending on that
 
-       new entry guard connection. This fix should make us recover much
 
-       faster when our network is down and then comes back. Bugfix on
 
-       0.1.2.8-beta; found by lodger.
 
-     - When Tor clients restart after 1-5 days, they discard all their
 
-       cached descriptors as too old, but they still use the cached
 
-       consensus document. This approach is good for robustness, but
 
-       bad for performance: since they don't know any bandwidths, they
 
-       end up choosing at random rather than weighting their choice by
 
-       speed. Fixed by the above feature of putting bandwidths in the
 
-       consensus.
 
-   o Major bugfixes (relays):
 
-     - Relays were falling out of the networkstatus consensus for
 
-       part of a day if they changed their local config but the
 
-       authorities discarded their new descriptor as "not sufficiently
 
-       different". Now directory authorities accept a descriptor as changed
 
-       if BandwidthRate or BandwidthBurst changed. Partial fix for bug 962;
 
-       patch by Sebastian.
 
-     - Ensure that two circuits can never exist on the same connection
 
-       with the same circuit ID, even if one is marked for close. This
 
-       is conceivably a bugfix for bug 779; fixes a bug on 0.1.0.4-rc.
 
-     - Directory authorities were neglecting to mark relays down in their
 
-       internal histories if the relays fall off the routerlist without
 
-       ever being found unreachable. So there were relays in the histories
 
-       that haven't been seen for eight months, and are listed as being
 
-       up for eight months. This wreaked havoc on the "median wfu" and
 
-       "median mtbf" calculations, in turn making Guard and Stable flags
 
-       wrong, hurting network performance. Fixes bugs 696 and 969. Bugfix
 
-       on 0.2.0.6-alpha.
 
-   o Major bugfixes (hidden services):
 
-     - When establishing a hidden service, introduction points that
 
-       originate from cannibalized circuits were completely ignored
 
-       and not included in rendezvous service descriptors. This might
 
-       have been another reason for delay in making a hidden service
 
-       available. Bugfix from long ago (0.0.9.x?)
 
-   o Major bugfixes (memory and resource management):
 
-     - Fixed some memory leaks -- some quite frequent, some almost
 
-       impossible to trigger -- based on results from Coverity.
 
-     - Speed up parsing and cut down on memory fragmentation by using
 
-       stack-style allocations for parsing directory objects. Previously,
 
-       this accounted for over 40% of allocations from within Tor's code
 
-       on a typical directory cache.
 
-     - Use a Bloom filter rather than a digest-based set to track which
 
-       descriptors we need to keep around when we're cleaning out old
 
-       router descriptors. This speeds up the computation significantly,
 
-       and may reduce fragmentation.
 
-   o New/changed config options:
 
-     - Now NodeFamily and MyFamily config options allow spaces in
 
-       identity fingerprints, so it's easier to paste them in.
 
-       Suggested by Lucky Green.
 
-     - Allow ports 465 and 587 in the default exit policy again. We had
 
-       rejected them in 0.1.0.15, because back in 2005 they were commonly
 
-       misconfigured and ended up as spam targets. We hear they are better
 
-       locked down these days.
 
-     - Make TrackHostExit mappings expire a while after their last use, not
 
-       after their creation. Patch from Robert Hogan.
 
-     - Add an ExcludeExitNodes option so users can list a set of nodes
 
-       that should be be excluded from the exit node position, but
 
-       allowed elsewhere. Implements proposal 151.
 
-     - New --hush command-line option similar to --quiet. While --quiet
 
-       disables all logging to the console on startup, --hush limits the
 
-       output to messages of warning and error severity.
 
-     - New configure/torrc options (--enable-geoip-stats,
 
-       DirRecordUsageByCountry) to record how many IPs we've served
 
-       directory info to in each country code, how many status documents
 
-       total we've sent to each country code, and what share of the total
 
-       directory requests we should expect to see.
 
-     - Make outbound DNS packets respect the OutboundBindAddress setting.
 
-       Fixes the bug part of bug 798. Bugfix on 0.1.2.2-alpha.
 
-     - Allow separate log levels to be configured for different logging
 
-       domains. For example, this allows one to log all notices, warnings,
 
-       or errors, plus all memory management messages of level debug or
 
-       higher, with: Log [MM] debug-err [*] notice-err file /var/log/tor.
 
-     - Update to the "June 3 2009" ip-to-country file.
 
-   o Minor features (relays):
 
-     - Raise the minimum rate limiting to be a relay from 20000 bytes
 
-       to 20480 bytes (aka 20KB/s), to match our documentation. Also
 
-       update directory authorities so they always assign the Fast flag
 
-       to relays with 20KB/s of capacity. Now people running relays won't
 
-       suddenly find themselves not seeing any use, if the network gets
 
-       faster on average.
 
-     - If we're a relay and we change our IP address, be more verbose
 
-       about the reason that made us change. Should help track down
 
-       further bugs for relays on dynamic IP addresses.
 
-     - Exit servers can now answer resolve requests for ip6.arpa addresses.
 
-     - Implement most of Proposal 152: allow specialized servers to permit
 
-       single-hop circuits, and clients to use those servers to build
 
-       single-hop circuits when using a specialized controller. Patch
 
-       from Josh Albrecht. Resolves feature request 768.
 
-     - When relays do their initial bandwidth measurement, don't limit
 
-       to just our entry guards for the test circuits. Otherwise we tend
 
-       to have multiple test circuits going through a single entry guard,
 
-       which makes our bandwidth test less accurate. Fixes part of bug 654;
 
-       patch contributed by Josh Albrecht.
 
-   o Minor features (directory authorities):
 
-     - Try not to open more than one descriptor-downloading connection
 
-       to an authority at once. This should reduce load on directory
 
-       authorities. Fixes bug 366.
 
-     - Add cross-certification to newly generated certificates, so that
 
-       a signing key is enough information to look up a certificate. Start
 
-       serving certificates by <identity digest, signing key digest>
 
-       pairs. Implements proposal 157.
 
-     - When a directory authority downloads a descriptor that it then
 
-       immediately rejects, do not retry downloading it right away. Should
 
-       save some bandwidth on authorities. Fix for bug 888. Patch by
 
-       Sebastian Hahn.
 
-     - Directory authorities now serve a /tor/dbg-stability.txt URL to
 
-       help debug WFU and MTBF calculations.
 
-     - In directory authorities' approved-routers files, allow
 
-       fingerprints with or without space.
 
-   o Minor features (directory mirrors):
 
-     - When a download gets us zero good descriptors, do not notify
 
-       Tor that new directory information has arrived.
 
-     - Servers support a new URL scheme for consensus downloads that
 
-       allows the client to specify which authorities are trusted.
 
-       The server then only sends the consensus if the client will trust
 
-       it. Otherwise a 404 error is sent back. Clients use this
 
-       new scheme when the server supports it (meaning it's running
 
-       0.2.1.1-alpha or later). Implements proposal 134.
 
-   o Minor features (bridges):
 
-     - If the bridge config line doesn't specify a port, assume 443.
 
-       This makes bridge lines a bit smaller and easier for users to
 
-       understand.
 
-     - If we're using bridges and our network goes away, be more willing
 
-       to forgive our bridges and try again when we get an application
 
-       request.
 
-   o Minor features (hidden services):
 
-     - When the client launches an introduction circuit, retry with a
 
-       new circuit after 30 seconds rather than 60 seconds.
 
-     - Launch a second client-side introduction circuit in parallel
 
-       after a delay of 15 seconds (based on work by Christian Wilms).
 
-     - Hidden services start out building five intro circuits rather
 
-       than three, and when the first three finish they publish a service
 
-       descriptor using those. Now we publish our service descriptor much
 
-       faster after restart.
 
-     - Drop the requirement to have an open dir port for storing and
 
-       serving v2 hidden service descriptors.
 
-   o Minor features (build and packaging):
 
-     - On Linux, use the prctl call to re-enable core dumps when the User
 
-       option is set.
 
-     - Try to make sure that the version of Libevent we're running with
 
-       is binary-compatible with the one we built with. May address bug
 
-       897 and others.
 
-     - Add a new --enable-local-appdata configuration switch to change
 
-       the default location of the datadir on win32 from APPDATA to
 
-       LOCAL_APPDATA. In the future, we should migrate to LOCAL_APPDATA
 
-       entirely. Patch from coderman.
 
-     - Build correctly against versions of OpenSSL 0.9.8 or later that
 
-       are built without support for deprecated functions.
 
-     - On platforms with a maximum syslog string length, truncate syslog
 
-       messages to that length ourselves, rather than relying on the
 
-       system to do it for us.
 
-     - Automatically detect MacOSX versions earlier than 10.4.0, and
 
-       disable kqueue from inside Tor when running with these versions.
 
-       We previously did this from the startup script, but that was no
 
-       help to people who didn't use the startup script. Resolves bug 863.
 
-     - Build correctly when configured to build outside the main source
 
-       path. Patch from Michael Gold.
 
-     - Disable GCC's strict alias optimization by default, to avoid the
 
-       likelihood of its introducing subtle bugs whenever our code violates
 
-       the letter of C99's alias rules.
 
-     - Change the contrib/tor.logrotate script so it makes the new
 
-       logs as "_tor:_tor" rather than the default, which is generally
 
-       "root:wheel". Fixes bug 676, reported by Serge Koksharov.
 
-     - Change our header file guard macros to be less likely to conflict
 
-       with system headers. Adam Langley noticed that we were conflicting
 
-       with log.h on Android.
 
-     - Add a couple of extra warnings to --enable-gcc-warnings for GCC 4.3,
 
-       and stop using a warning that had become unfixably verbose under
 
-       GCC 4.3.
 
-     - Use a lockfile to make sure that two Tor processes are not
 
-       simultaneously running with the same datadir.
 
-     - Allow OpenSSL to use dynamic locks if it wants.
 
-     - Add LIBS=-lrt to Makefile.am so the Tor RPMs use a static libevent.
 
-   o Minor features (controllers):
 
-     - When generating circuit events with verbose nicknames for
 
-       controllers, try harder to look up nicknames for routers on a
 
-       circuit. (Previously, we would look in the router descriptors we had
 
-       for nicknames, but not in the consensus.) Partial fix for bug 941.
 
-     - New controller event NEWCONSENSUS that lists the networkstatus
 
-       lines for every recommended relay. Now controllers like Torflow
 
-       can keep up-to-date on which relays they should be using.
 
-     - New controller event "clients_seen" to report a geoip-based summary
 
-       of which countries we've seen clients from recently. Now controllers
 
-       like Vidalia can show bridge operators that they're actually making
 
-       a difference.
 
-     - Add a 'getinfo status/clients-seen' controller command, in case
 
-       controllers want to hear clients_seen events but connect late.
 
-     - New CONSENSUS_ARRIVED event to note when a new consensus has
 
-       been fetched and validated.
 
-     - Add an internal-use-only __ReloadTorrcOnSIGHUP option for
 
-       controllers to prevent SIGHUP from reloading the configuration.
 
-       Fixes bug 856.
 
-     - Return circuit purposes in response to GETINFO circuit-status.
 
-       Fixes bug 858.
 
-     - Serve the latest v3 networkstatus consensus via the control
 
-       port. Use "getinfo dir/status-vote/current/consensus" to fetch it.
 
-     - Add a "GETINFO /status/bootstrap-phase" controller option, so the
 
-       controller can query our current bootstrap state in case it attaches
 
-       partway through and wants to catch up.
 
-     - Provide circuit purposes along with circuit events to the controller.
 
-   o Minor features (tools):
 
-     - Do not have tor-resolve automatically refuse all .onion addresses;
 
-       if AutomapHostsOnResolve is set in your torrc, this will work fine.
 
-     - Add a -p option to tor-resolve for specifying the SOCKS port: some
 
-       people find host:port too confusing.
 
-     - Print the SOCKS5 error message string as well as the error code
 
-       when a tor-resolve request fails. Patch from Jacob.
 
-   o Minor bugfixes (memory and resource management):
 
-     - Clients no longer cache certificates for authorities they do not
 
-       recognize. Bugfix on 0.2.0.9-alpha.
 
-     - Do not use C's stdio library for writing to log files. This will
 
-       improve logging performance by a minute amount, and will stop
 
-       leaking fds when our disk is full. Fixes bug 861.
 
-     - Stop erroneous use of O_APPEND in cases where we did not in fact
 
-       want to re-seek to the end of a file before every last write().
 
-     - Fix a small alignment and memory-wasting bug on buffer chunks.
 
-       Spotted by rovv.
 
-     - Add a malloc_good_size implementation to OpenBSD_malloc_linux.c,
 
-       to avoid unused RAM in buffer chunks and memory pools.
 
-     - Reduce the default smartlist size from 32 to 16; it turns out that
 
-       most smartlists hold around 8-12 elements tops.
 
-     - Make dumpstats() log the fullness and size of openssl-internal
 
-       buffers.
 
-     - If the user has applied the experimental SSL_MODE_RELEASE_BUFFERS
 
-       patch to their OpenSSL, turn it on to save memory on servers. This
 
-       patch will (with any luck) get included in a mainline distribution
 
-       before too long.
 
-     - Fix a memory leak when v3 directory authorities load their keys
 
-       and cert from disk. Bugfix on 0.2.0.1-alpha.
 
-     - Stop using malloc_usable_size() to use more area than we had
 
-       actually allocated: it was safe, but made valgrind really unhappy.
 
-     - Make the assert_circuit_ok() function work correctly on circuits that
 
-       have already been marked for close.
 
-     - Fix uninitialized size field for memory area allocation: may improve
 
-       memory performance during directory parsing.
 
-   o Minor bugfixes (clients):
 
-     - Stop reloading the router list from disk for no reason when we
 
-       run out of reachable directory mirrors. Once upon a time reloading
 
-       it would set the 'is_running' flag back to 1 for them. It hasn't
 
-       done that for a long time.
 
-     - When we had picked an exit node for a connection, but marked it as
 
-       "optional", and it turned out we had no onion key for the exit,
 
-       stop wanting that exit and try again. This situation may not
 
-       be possible now, but will probably become feasible with proposal
 
-       158. Spotted by rovv. Fixes another case of bug 752.
 
-     - Fix a bug in address parsing that was preventing bridges or hidden
 
-       service targets from being at IPv6 addresses.
 
-     - Do not remove routers as too old if we do not have any consensus
 
-       document. Bugfix on 0.2.0.7-alpha.
 
-     - When an exit relay resolves a stream address to a local IP address,
 
-       do not just keep retrying that same exit relay over and
 
-       over. Instead, just close the stream. Addresses bug 872. Bugfix
 
-       on 0.2.0.32. Patch from rovv.
 
-     - Made Tor a little less aggressive about deleting expired
 
-       certificates. Partial fix for bug 854.
 
-     - Treat duplicate certificate fetches as failures, so that we do
 
-       not try to re-fetch an expired certificate over and over and over.
 
-     - Do not say we're fetching a certificate when we'll in fact skip it
 
-       because of a pending download.
 
-     - If we have correct permissions on $datadir, we complain to stdout
 
-       and fail to start. But dangerous permissions on
 
-       $datadir/cached-status/ would cause us to open a log and complain
 
-       there. Now complain to stdout and fail to start in both cases. Fixes
 
-       bug 820, reported by seeess.
 
-   o Minor bugfixes (bridges):
 
-     - When we made bridge authorities stop serving bridge descriptors over
 
-       unencrypted links, we also broke DirPort reachability testing for
 
-       bridges. So bridges with a non-zero DirPort were printing spurious
 
-       warns to their logs. Bugfix on 0.2.0.16-alpha. Fixes bug 709.
 
-     - Don't allow a bridge to publish its router descriptor to a
 
-       non-bridge directory authority. Fixes part of bug 932.
 
-     - When we change to or from being a bridge, reset our counts of
 
-       client usage by country. Fixes bug 932.
 
-   o Minor bugfixes (relays):
 
-     - Log correct error messages for DNS-related network errors on
 
-       Windows.
 
-     - Actually return -1 in the error case for read_bandwidth_usage().
 
-       Harmless bug, since we currently don't care about the return value
 
-       anywhere. Bugfix on 0.2.0.9-alpha.
 
-     - Provide a more useful log message if bug 977 (related to buffer
 
-       freelists) ever reappears, and do not crash right away.
 
-     - We were already rejecting relay begin cells with destination port
 
-       of 0. Now also reject extend cells with destination port or address
 
-       of 0. Suggested by lark.
 
-     - When we can't transmit a DNS request due to a network error, retry
 
-       it after a while, and eventually transmit a failing response to
 
-       the RESOLVED cell. Bugfix on 0.1.2.5-alpha.
 
-     - Solve a bug that kept hardware crypto acceleration from getting
 
-       enabled when accounting was turned on. Fixes bug 907. Bugfix on
 
-       0.0.9pre6.
 
-     - When a canonical connection appears later in our internal list
 
-       than a noncanonical one for a given OR ID, always use the
 
-       canonical one. Bugfix on 0.2.0.12-alpha. Fixes bug 805.
 
-       Spotted by rovv.
 
-     - Avoid some nasty corner cases in the logic for marking connections
 
-       as too old or obsolete or noncanonical for circuits. Partial
 
-       bugfix on bug 891.
 
-     - Fix another interesting corner-case of bug 891 spotted by rovv:
 
-       Previously, if two hosts had different amounts of clock drift, and
 
-       one of them created a new connection with just the wrong timing,
 
-       the other might decide to deprecate the new connection erroneously.
 
-       Bugfix on 0.1.1.13-alpha.
 
-     - If one win32 nameserver fails to get added, continue adding the
 
-       rest, and don't automatically fail.
 
-     - Fix a bug where an unreachable relay would establish enough
 
-       reachability testing circuits to do a bandwidth test -- if
 
-       we already have a connection to the middle hop of the testing
 
-       circuit, then it could establish the last hop by using the existing
 
-       connection. Bugfix on 0.1.2.2-alpha, exposed when we made testing
 
-       circuits no longer use entry guards in 0.2.1.3-alpha.
 
-   o Minor bugfixes (directory authorities):
 
-     - Limit uploaded directory documents to be 16M rather than 500K.
 
-       The directory authorities were refusing v3 consensus votes from
 
-       other authorities, since the votes are now 504K. Fixes bug 959;
 
-       bugfix on 0.0.2pre17 (where we raised it from 50K to 500K ;).
 
-     - Directory authorities should never send a 503 "busy" response to
 
-       requests for votes or keys. Bugfix on 0.2.0.8-alpha; exposed by
 
-       bug 959.
 
-     - Fix code so authorities _actually_ send back X-Descriptor-Not-New
 
-       headers. Bugfix on 0.2.0.10-alpha.
 
-   o Minor bugfixes (hidden services):
 
-     - When we can't find an intro key for a v2 hidden service descriptor,
 
-       fall back to the v0 hidden service descriptor and log a bug message.
 
-       Workaround for bug 1024.
 
-     - In very rare situations new hidden service descriptors were
 
-       published earlier than 30 seconds after the last change to the
 
-       service. (We currently think that a hidden service descriptor
 
-       that's been stable for 30 seconds is worth publishing.)
 
-     - If a hidden service sends us an END cell, do not consider
 
-       retrying the connection; just close it. Patch from rovv.
 
-     - If we are not using BEGIN_DIR cells, don't attempt to contact hidden
 
-       service directories if they have no advertised dir port. Bugfix
 
-       on 0.2.0.10-alpha.
 
-   o Minor bugfixes (tools):
 
-     - In the torify(1) manpage, mention that tsocks will leak your
 
-       DNS requests.
 
-   o Minor bugfixes (controllers):
 
-     - If the controller claimed responsibility for a stream, but that
 
-       stream never finished making its connection, it would live
 
-       forever in circuit_wait state. Now we close it after SocksTimeout
 
-       seconds. Bugfix on 0.1.2.7-alpha; reported by Mike Perry.
 
-     - Make DNS resolved controller events into "CLOSED", not
 
-       "FAILED". Bugfix on 0.1.2.5-alpha. Fix by Robert Hogan. Resolves
 
-       bug 807.
 
-     - The control port would close the connection before flushing long
 
-       replies, such as the network consensus, if a QUIT command was issued
 
-       before the reply had completed. Now, the control port flushes all
 
-       pending replies before closing the connection. Also fix a spurious
 
-       warning when a QUIT command is issued after a malformed or rejected
 
-       AUTHENTICATE command, but before the connection was closed. Patch
 
-       by Marcus Griep. Fixes bugs 1015 and 1016.
 
-     - Fix a bug that made stream bandwidth get misreported to the
 
-       controller.
 
-   o Deprecated and removed features:
 
-     - The old "tor --version --version" command, which would print out
 
-       the subversion "Id" of most of the source files, is now removed. It
 
-       turned out to be less useful than we'd expected, and harder to
 
-       maintain.
 
-     - RedirectExits has been removed. It was deprecated since
 
-       0.2.0.3-alpha.
 
-     - Finally remove deprecated "EXTENDED_FORMAT" controller feature. It
 
-       has been called EXTENDED_EVENTS since 0.1.2.4-alpha.
 
-     - Cell pools are now always enabled; --disable-cell-pools is ignored.
 
-     - Directory mirrors no longer fetch the v1 directory or
 
-       running-routers files. They are obsolete, and nobody asks for them
 
-       anymore. This is the first step to making v1 authorities obsolete.
 
-     - Take out the TestVia config option, since it was a workaround for
 
-       a bug that was fixed in Tor 0.1.1.21.
 
-     - Mark RendNodes, RendExcludeNodes, HiddenServiceNodes, and
 
-       HiddenServiceExcludeNodes as obsolete: they never worked properly,
 
-       and nobody seems to be using them. Fixes bug 754. Bugfix on
 
-       0.1.0.1-rc. Patch from Christian Wilms.
 
-     - Remove all backward-compatibility code for relays running
 
-       versions of Tor so old that they no longer work at all on the
 
-       Tor network.
 
-   o Code simplifications and refactoring:
 
-     - Tool-assisted documentation cleanup. Nearly every function or
 
-       static variable in Tor should have its own documentation now.
 
-     - Rename the confusing or_is_obsolete field to the more appropriate
 
-       is_bad_for_new_circs, and move it to or_connection_t where it
 
-       belongs.
 
-     - Move edge-only flags from connection_t to edge_connection_t: not
 
-       only is this better coding, but on machines of plausible alignment,
 
-       it should save 4-8 bytes per connection_t. "Every little bit helps."
 
-     - Rename ServerDNSAllowBrokenResolvConf to ServerDNSAllowBrokenConfig
 
-       for consistency; keep old option working for backward compatibility.
 
-     - Simplify the code for finding connections to use for a circuit.
 
-     - Revise the connection_new functions so that a more typesafe variant
 
-       exists. This will work better with Coverity, and let us find any
 
-       actual mistakes we're making here.
 
-     - Refactor unit testing logic so that dmalloc can be used sensibly
 
-       with unit tests to check for memory leaks.
 
-     - Move all hidden-service related fields from connection and circuit
 
-       structure to substructures: this way they won't eat so much memory.
 
-     - Squeeze 2-5% out of client performance (according to oprofile) by
 
-       improving the implementation of some policy-manipulation functions.
 
-     - Change the implementation of ExcludeNodes and ExcludeExitNodes to
 
-       be more efficient. Formerly it was quadratic in the number of
 
-       servers; now it should be linear. Fixes bug 509.
 
-     - Save 16-22 bytes per open circuit by moving the n_addr, n_port,
 
-       and n_conn_id_digest fields into a separate structure that's
 
-       only needed when the circuit has not yet attached to an n_conn.
 
-     - Optimize out calls to time(NULL) that occur for every IO operation,
 
-       or for every cell. On systems like Windows where time() is a
 
-       slow syscall, this fix will be slightly helpful.
 
- Changes in version 0.2.0.35 - 2009-06-24
 
-   o Security fix:
 
-     - Avoid crashing in the presence of certain malformed descriptors.
 
-       Found by lark, and by automated fuzzing.
 
-     - Fix an edge case where a malicious exit relay could convince a
 
-       controller that the client's DNS question resolves to an internal IP
 
-       address. Bug found and fixed by "optimist"; bugfix on 0.1.2.8-beta.
 
-   o Major bugfixes:
 
-     - Finally fix the bug where dynamic-IP relays disappear when their
 
-       IP address changes: directory mirrors were mistakenly telling
 
-       them their old address if they asked via begin_dir, so they
 
-       never got an accurate answer about their new address, so they
 
-       just vanished after a day. For belt-and-suspenders, relays that
 
-       don't set Address in their config now avoid using begin_dir for
 
-       all direct connections. Should fix bugs 827, 883, and 900.
 
-     - Fix a timing-dependent, allocator-dependent, DNS-related crash bug
 
-       that would occur on some exit nodes when DNS failures and timeouts
 
-       occurred in certain patterns. Fix for bug 957.
 
-   o Minor bugfixes:
 
-     - When starting with a cache over a few days old, do not leak
 
-       memory for the obsolete router descriptors in it. Bugfix on
 
-       0.2.0.33; fixes bug 672.
 
-     - Hidden service clients didn't use a cached service descriptor that
 
-       was older than 15 minutes, but wouldn't fetch a new one either,
 
-       because there was already one in the cache. Now, fetch a v2
 
-       descriptor unless the same descriptor was added to the cache within
 
-       the last 15 minutes. Fixes bug 997; reported by Marcus Griep.
 
- Changes in version 0.2.0.34 - 2009-02-08
 
-   Tor 0.2.0.34 features several more security-related fixes. You should
 
-   upgrade, especially if you run an exit relay (remote crash) or a
 
-   directory authority (remote infinite loop), or you're on an older
 
-   (pre-XP) or not-recently-patched Windows (remote exploit).
 
-   This release marks end-of-life for Tor 0.1.2.x. Those Tor versions
 
-   have many known flaws, and nobody should be using them. You should
 
-   upgrade. If you're using a Linux or BSD and its packages are obsolete,
 
-   stop using those packages and upgrade anyway.
 
-   o Security fixes:
 
-     - Fix an infinite-loop bug on handling corrupt votes under certain
 
-       circumstances. Bugfix on 0.2.0.8-alpha.
 
-     - Fix a temporary DoS vulnerability that could be performed by
 
-       a directory mirror. Bugfix on 0.2.0.9-alpha; reported by lark.
 
-     - Avoid a potential crash on exit nodes when processing malformed
 
-       input. Remote DoS opportunity. Bugfix on 0.2.0.33.
 
-     - Do not accept incomplete ipv4 addresses (like 192.168.0) as valid.
 
-       Spec conformance issue. Bugfix on Tor 0.0.2pre27.
 
-   o Minor bugfixes:
 
-     - Fix compilation on systems where time_t is a 64-bit integer.
 
-       Patch from Matthias Drochner.
 
-     - Don't consider expiring already-closed client connections. Fixes
 
-       bug 893. Bugfix on 0.0.2pre20.
 
- Changes in version 0.2.0.33 - 2009-01-21
 
-   Tor 0.2.0.33 fixes a variety of bugs that were making relays less
 
-   useful to users. It also finally fixes a bug where a relay or client
 
-   that's been off for many days would take a long time to bootstrap.
 
-   This update also fixes an important security-related bug reported by
 
-   Ilja van Sprundel. You should upgrade. (We'll send out more details
 
-   about the bug once people have had some time to upgrade.)
 
-   o Security fixes:
 
-     - Fix a heap-corruption bug that may be remotely triggerable on
 
-       some platforms. Reported by Ilja van Sprundel.
 
-   o Major bugfixes:
 
-     - When a stream at an exit relay is in state "resolving" or
 
-       "connecting" and it receives an "end" relay cell, the exit relay
 
-       would silently ignore the end cell and not close the stream. If
 
-       the client never closes the circuit, then the exit relay never
 
-       closes the TCP connection. Bug introduced in Tor 0.1.2.1-alpha;
 
-       reported by "wood".
 
-     - When sending CREATED cells back for a given circuit, use a 64-bit
 
-       connection ID to find the right connection, rather than an addr:port
 
-       combination. Now that we can have multiple OR connections between
 
-       the same ORs, it is no longer possible to use addr:port to uniquely
 
-       identify a connection.
 
-     - Bridge relays that had DirPort set to 0 would stop fetching
 
-       descriptors shortly after startup, and then briefly resume
 
-       after a new bandwidth test and/or after publishing a new bridge
 
-       descriptor. Bridge users that try to bootstrap from them would
 
-       get a recent networkstatus but would get descriptors from up to
 
-       18 hours earlier, meaning most of the descriptors were obsolete
 
-       already. Reported by Tas; bugfix on 0.2.0.13-alpha.
 
-     - Prevent bridge relays from serving their 'extrainfo' document
 
-       to anybody who asks, now that extrainfo docs include potentially
 
-       sensitive aggregated client geoip summaries. Bugfix on
 
-       0.2.0.13-alpha.
 
-     - If the cached networkstatus consensus is more than five days old,
 
-       discard it rather than trying to use it. In theory it could be
 
-       useful because it lists alternate directory mirrors, but in practice
 
-       it just means we spend many minutes trying directory mirrors that
 
-       are long gone from the network. Also discard router descriptors as
 
-       we load them if they are more than five days old, since the onion
 
-       key is probably wrong by now. Bugfix on 0.2.0.x. Fixes bug 887.
 
-   o Minor bugfixes:
 
-     - Do not mark smartlist_bsearch_idx() function as ATTR_PURE. This bug
 
-       could make gcc generate non-functional binary search code. Bugfix
 
-       on 0.2.0.10-alpha.
 
-     - Build correctly on platforms without socklen_t.
 
-     - Compile without warnings on solaris.
 
-     - Avoid potential crash on internal error during signature collection.
 
-       Fixes bug 864. Patch from rovv.
 
-     - Correct handling of possible malformed authority signing key
 
-       certificates with internal signature types. Fixes bug 880.
 
-       Bugfix on 0.2.0.3-alpha.
 
-     - Fix a hard-to-trigger resource leak when logging credential status.
 
-       CID 349.
 
-     - When we can't initialize DNS because the network is down, do not
 
-       automatically stop Tor from starting. Instead, we retry failed
 
-       dns_init() every 10 minutes, and change the exit policy to reject
 
-       *:* until one succeeds. Fixes bug 691.
 
-     - Use 64 bits instead of 32 bits for connection identifiers used with
 
-       the controller protocol, to greatly reduce risk of identifier reuse.
 
-     - When we're choosing an exit node for a circuit, and we have
 
-       no pending streams, choose a good general exit rather than one that
 
-       supports "all the pending streams". Bugfix on 0.1.1.x. Fix by rovv.
 
-     - Fix another case of assuming, when a specific exit is requested,
 
-       that we know more than the user about what hosts it allows.
 
-       Fixes one case of bug 752. Patch from rovv.
 
-     - Clip the MaxCircuitDirtiness config option to a minimum of 10
 
-       seconds. Warn the user if lower values are given in the
 
-       configuration. Bugfix on 0.1.0.1-rc. Patch by Sebastian.
 
-     - Clip the CircuitBuildTimeout to a minimum of 30 seconds. Warn the
 
-       user if lower values are given in the configuration. Bugfix on
 
-       0.1.1.17-rc. Patch by Sebastian.
 
-     - Fix a memory leak when we decline to add a v2 rendezvous descriptor to
 
-       the cache because we already had a v0 descriptor with the same ID.
 
-       Bugfix on 0.2.0.18-alpha.
 
-     - Fix a race condition when freeing keys shared between main thread
 
-       and CPU workers that could result in a memory leak. Bugfix on
 
-       0.1.0.1-rc. Fixes bug 889.
 
-     - Send a valid END cell back when a client tries to connect to a
 
-       nonexistent hidden service port. Bugfix on 0.1.2.15. Fixes bug
 
-       840. Patch from rovv.
 
-     - Check which hops rendezvous stream cells are associated with to
 
-       prevent possible guess-the-streamid injection attacks from
 
-       intermediate hops. Fixes another case of bug 446. Based on patch
 
-       from rovv.
 
-     - If a broken client asks a non-exit router to connect somewhere,
 
-       do not even do the DNS lookup before rejecting the connection.
 
-       Fixes another case of bug 619. Patch from rovv.
 
-     - When a relay gets a create cell it can't decrypt (e.g. because it's
 
-       using the wrong onion key), we were dropping it and letting the
 
-       client time out. Now actually answer with a destroy cell. Fixes
 
-       bug 904. Bugfix on 0.0.2pre8.
 
-   o Minor bugfixes (hidden services):
 
-     - Do not throw away existing introduction points on SIGHUP. Bugfix on
 
-       0.0.6pre1. Patch by Karsten. Fixes bug 874.
 
-   o Minor features:
 
-     - Report the case where all signatures in a detached set are rejected
 
-       differently than the case where there is an error handling the
 
-       detached set.
 
-     - When we realize that another process has modified our cached
 
-       descriptors, print out a more useful error message rather than
 
-       triggering an assertion. Fixes bug 885. Patch from Karsten.
 
-     - Implement the 0x20 hack to better resist DNS poisoning: set the
 
-       case on outgoing DNS requests randomly, and reject responses that do
 
-       not match the case correctly. This logic can be disabled with the
 
-       ServerDNSRamdomizeCase setting, if you are using one of the 0.3%
 
-       of servers that do not reliably preserve case in replies. See
 
-       "Increased DNS Forgery Resistance through 0x20-Bit Encoding"
 
-       for more info.
 
-     - Check DNS replies for more matching fields to better resist DNS
 
-       poisoning.
 
-     - Never use OpenSSL compression: it wastes RAM and CPU trying to
 
-       compress cells, which are basically all encrypted, compressed, or
 
-       both.
 
- Changes in version 0.2.0.32 - 2008-11-20
 
-   Tor 0.2.0.32 fixes a major security problem in Debian and Ubuntu
 
-   packages (and maybe other packages) noticed by Theo de Raadt, fixes
 
-   a smaller security flaw that might allow an attacker to access local
 
-   services, further improves hidden service performance, and fixes a
 
-   variety of other issues.
 
-   o Security fixes:
 
-     - The "User" and "Group" config options did not clear the
 
-       supplementary group entries for the Tor process. The "User" option
 
-       is now more robust, and we now set the groups to the specified
 
-       user's primary group. The "Group" option is now ignored. For more
 
-       detailed logging on credential switching, set CREDENTIAL_LOG_LEVEL
 
-       in common/compat.c to LOG_NOTICE or higher. Patch by Jacob Appelbaum
 
-       and Steven Murdoch. Bugfix on 0.0.2pre14. Fixes bug 848 and 857.
 
-     - The "ClientDNSRejectInternalAddresses" config option wasn't being
 
-       consistently obeyed: if an exit relay refuses a stream because its
 
-       exit policy doesn't allow it, we would remember what IP address
 
-       the relay said the destination address resolves to, even if it's
 
-       an internal IP address. Bugfix on 0.2.0.7-alpha; patch by rovv.
 
-   o Major bugfixes:
 
-     - Fix a DOS opportunity during the voting signature collection process
 
-       at directory authorities. Spotted by rovv. Bugfix on 0.2.0.x.
 
-   o Major bugfixes (hidden services):
 
-     - When fetching v0 and v2 rendezvous service descriptors in parallel,
 
-       we were failing the whole hidden service request when the v0
 
-       descriptor fetch fails, even if the v2 fetch is still pending and
 
-       might succeed. Similarly, if the last v2 fetch fails, we were
 
-       failing the whole hidden service request even if a v0 fetch is
 
-       still pending. Fixes bug 814. Bugfix on 0.2.0.10-alpha.
 
-     - When extending a circuit to a hidden service directory to upload a
 
-       rendezvous descriptor using a BEGIN_DIR cell, almost 1/6 of all
 
-       requests failed, because the router descriptor has not been
 
-       downloaded yet. In these cases, do not attempt to upload the
 
-       rendezvous descriptor, but wait until the router descriptor is
 
-       downloaded and retry. Likewise, do not attempt to fetch a rendezvous
 
-       descriptor from a hidden service directory for which the router
 
-       descriptor has not yet been downloaded. Fixes bug 767. Bugfix
 
-       on 0.2.0.10-alpha.
 
-   o Minor bugfixes:
 
-     - Fix several infrequent memory leaks spotted by Coverity.
 
-     - When testing for libevent functions, set the LDFLAGS variable
 
-       correctly. Found by Riastradh.
 
-     - Avoid a bug where the FastFirstHopPK 0 option would keep Tor from
 
-       bootstrapping with tunneled directory connections. Bugfix on
 
-       0.1.2.5-alpha. Fixes bug 797. Found by Erwin Lam.
 
-     - When asked to connect to A.B.exit:80, if we don't know the IP for A
 
-       and we know that server B rejects most-but-not all connections to
 
-       port 80, we would previously reject the connection. Now, we assume
 
-       the user knows what they were asking for. Fixes bug 752. Bugfix
 
-       on 0.0.9rc5. Diagnosed by BarkerJr.
 
-     - If we overrun our per-second write limits a little, count this as
 
-       having used up our write allocation for the second, and choke
 
-       outgoing directory writes. Previously, we had only counted this when
 
-       we had met our limits precisely. Fixes bug 824. Patch from by rovv.
 
-       Bugfix on 0.2.0.x (??).
 
-     - Remove the old v2 directory authority 'lefkada' from the default
 
-       list. It has been gone for many months.
 
-     - Stop doing unaligned memory access that generated bus errors on
 
-       sparc64. Bugfix on 0.2.0.10-alpha. Fixes bug 862.
 
-     - Make USR2 log-level switch take effect immediately. Bugfix on
 
-       0.1.2.8-beta.
 
-   o Minor bugfixes (controller):
 
-     - Make DNS resolved events into "CLOSED", not "FAILED". Bugfix on
 
-       0.1.2.5-alpha. Fix by Robert Hogan. Resolves bug 807.
 
- Changes in version 0.2.0.31 - 2008-09-03
 
-   Tor 0.2.0.31 addresses two potential anonymity issues, starts to fix
 
-   a big bug we're seeing where in rare cases traffic from one Tor stream
 
-   gets mixed into another stream, and fixes a variety of smaller issues.
 
-   o Major bugfixes:
 
-     - Make sure that two circuits can never exist on the same connection
 
-       with the same circuit ID, even if one is marked for close. This
 
-       is conceivably a bugfix for bug 779. Bugfix on 0.1.0.4-rc.
 
-     - Relays now reject risky extend cells: if the extend cell includes
 
-       a digest of all zeroes, or asks to extend back to the relay that
 
-       sent the extend cell, tear down the circuit. Ideas suggested
 
-       by rovv.
 
-     - If not enough of our entry guards are available so we add a new
 
-       one, we might use the new one even if it overlapped with the
 
-       current circuit's exit relay (or its family). Anonymity bugfix
 
-       pointed out by rovv.
 
-   o Minor bugfixes:
 
-     - Recover 3-7 bytes that were wasted per memory chunk. Fixes bug
 
-       794; bug spotted by rovv. Bugfix on 0.2.0.1-alpha.
 
-     - Correctly detect the presence of the linux/netfilter_ipv4.h header
 
-       when building against recent kernels. Bugfix on 0.1.2.1-alpha.
 
-     - Pick size of default geoip filename string correctly on windows.
 
-       Fixes bug 806. Bugfix on 0.2.0.30.
 
-     - Make the autoconf script accept the obsolete --with-ssl-dir
 
-       option as an alias for the actually-working --with-openssl-dir
 
-       option. Fix the help documentation to recommend --with-openssl-dir.
 
-       Based on a patch by "Dave". Bugfix on 0.2.0.1-alpha.
 
-     - When using the TransPort option on OpenBSD, and using the User
 
-       option to change UID and drop privileges, make sure to open
 
-       /dev/pf before dropping privileges. Fixes bug 782. Patch from
 
-       Christopher Davis. Bugfix on 0.1.2.1-alpha.
 
-     - Try to attach connections immediately upon receiving a RENDEZVOUS2
 
-       or RENDEZVOUS_ESTABLISHED cell. This can save a second or two
 
-       on the client side when connecting to a hidden service. Bugfix
 
-       on 0.0.6pre1. Found and fixed by Christian Wilms; resolves bug 743.
 
-     - When closing an application-side connection because its circuit is
 
-       getting torn down, generate the stream event correctly. Bugfix on
 
-       0.1.2.x. Anonymous patch.
 
- Changes in version 0.2.0.30 - 2008-07-15
 
-   This new stable release switches to a more efficient directory
 
-   distribution design, adds features to make connections to the Tor
 
-   network harder to block, allows Tor to act as a DNS proxy, adds separate
 
-   rate limiting for relayed traffic to make it easier for clients to
 
-   become relays, fixes a variety of potential anonymity problems, and
 
-   includes the usual huge pile of other features and bug fixes.
 
-   o New v3 directory design:
 
-     - Tor now uses a new way to learn about and distribute information
 
-       about the network: the directory authorities vote on a common
 
-       network status document rather than each publishing their own
 
-       opinion. Now clients and caches download only one networkstatus
 
-       document to bootstrap, rather than downloading one for each
 
-       authority. Clients only download router descriptors listed in
 
-       the consensus. Implements proposal 101; see doc/spec/dir-spec.txt
 
-       for details.
 
-     - Set up moria1, tor26, and dizum as v3 directory authorities
 
-       in addition to being v2 authorities. Also add three new ones:
 
-       ides (run by Mike Perry), gabelmoo (run by Karsten Loesing), and
 
-       dannenberg (run by CCC).
 
-     - Switch to multi-level keys for directory authorities: now their
 
-       long-term identity key can be kept offline, and they periodically
 
-       generate a new signing key. Clients fetch the "key certificates"
 
-       to keep up to date on the right keys. Add a standalone tool
 
-       "tor-gencert" to generate key certificates. Implements proposal 103.
 
-     - Add a new V3AuthUseLegacyKey config option to make it easier for
 
-       v3 authorities to change their identity keys if another bug like
 
-       Debian's OpenSSL RNG flaw appears.
 
-     - Authorities and caches fetch the v2 networkstatus documents
 
-       less often, now that v3 is recommended.
 
-   o Make Tor connections stand out less on the wire:
 
-     - Use an improved TLS handshake designed by Steven Murdoch in proposal
 
-       124, as revised in proposal 130. The new handshake is meant to
 
-       be harder for censors to fingerprint, and it adds the ability
 
-       to detect certain kinds of man-in-the-middle traffic analysis
 
-       attacks. The new handshake format includes version negotiation for
 
-       OR connections as described in proposal 105, which will allow us
 
-       to improve Tor's link protocol more safely in the future.
 
-     - Enable encrypted directory connections by default for non-relays,
 
-       so censor tools that block Tor directory connections based on their
 
-       plaintext patterns will no longer work. This means Tor works in
 
-       certain censored countries by default again.
 
-     - Stop including recognizeable strings in the commonname part of
 
-       Tor's x509 certificates.
 
-   o Implement bridge relays:
 
-     - Bridge relays (or "bridges" for short) are Tor relays that aren't
 
-       listed in the main Tor directory. Since there is no complete public
 
-       list of them, even an ISP that is filtering connections to all the
 
-       known Tor relays probably won't be able to block all the bridges.
 
-       See doc/design-paper/blocking.pdf and proposal 125 for details.
 
-     - New config option BridgeRelay that specifies you want to be a
 
-       bridge relay rather than a normal relay. When BridgeRelay is set
 
-       to 1, then a) you cache dir info even if your DirPort ins't on,
 
-       and b) the default for PublishServerDescriptor is now "bridge"
 
-       rather than "v2,v3".
 
-     - New config option "UseBridges 1" for clients that want to use bridge
 
-       relays instead of ordinary entry guards. Clients then specify
 
-       bridge relays by adding "Bridge" lines to their config file. Users
 
-       can learn about a bridge relay either manually through word of
 
-       mouth, or by one of our rate-limited mechanisms for giving out
 
-       bridge addresses without letting an attacker easily enumerate them
 
-       all. See https://www.torproject.org/bridges for details.
 
-     - Bridge relays behave like clients with respect to time intervals
 
-       for downloading new v3 consensus documents -- otherwise they
 
-       stand out. Bridge users now wait until the end of the interval,
 
-       so their bridge relay will be sure to have a new consensus document.
 
-   o Implement bridge directory authorities:
 
-     - Bridge authorities are like normal directory authorities, except
 
-       they don't serve a list of known bridges. Therefore users that know
 
-       a bridge's fingerprint can fetch a relay descriptor for that bridge,
 
-       including fetching updates e.g. if the bridge changes IP address,
 
-       yet an attacker can't just fetch a list of all the bridges.
 
-     - Set up Tonga as the default bridge directory authority.
 
-     - Bridge authorities refuse to serve bridge descriptors or other
 
-       bridge information over unencrypted connections (that is, when
 
-       responding to direct DirPort requests rather than begin_dir cells.)
 
-     - Bridge directory authorities do reachability testing on the
 
-       bridges they know. They provide router status summaries to the
 
-       controller via "getinfo ns/purpose/bridge", and also dump summaries
 
-       to a file periodically, so we can keep internal stats about which
 
-       bridges are functioning.
 
-     - If bridge users set the UpdateBridgesFromAuthority config option,
 
-       but the digest they ask for is a 404 on the bridge authority,
 
-       they fall back to contacting the bridge directly.
 
-     - Bridges always use begin_dir to publish their server descriptor to
 
-       the bridge authority using an anonymous encrypted tunnel.
 
-     - Early work on a "bridge community" design: if bridge authorities set
 
-       the BridgePassword config option, they will serve a snapshot of
 
-       known bridge routerstatuses from their DirPort to anybody who
 
-       knows that password. Unset by default.
 
-     - Tor now includes an IP-to-country GeoIP file, so bridge relays can
 
-       report sanitized aggregated summaries in their extra-info documents
 
-       privately to the bridge authority, listing which countries are
 
-       able to reach them. We hope this mechanism will let us learn when
 
-       certain countries start trying to block bridges.
 
-     - Bridge authorities write bridge descriptors to disk, so they can
 
-       reload them after a reboot. They can also export the descriptors
 
-       to other programs, so we can distribute them to blocked users via
 
-       the BridgeDB interface, e.g. via https://bridges.torproject.org/
 
-       and bridges@torproject.org.
 
-   o Tor can be a DNS proxy:
 
-     - The new client-side DNS proxy feature replaces the need for
 
-       dns-proxy-tor: Just set "DNSPort 9999", and Tor will now listen
 
-       for DNS requests on port 9999, use the Tor network to resolve them
 
-       anonymously, and send the reply back like a regular DNS server.
 
-       The code still only implements a subset of DNS.
 
-     - Add a new AutomapHostsOnResolve option: when it is enabled, any
 
-       resolve request for hosts matching a given pattern causes Tor to
 
-       generate an internal virtual address mapping for that host. This
 
-       allows DNSPort to work sensibly with hidden service users. By
 
-       default, .exit and .onion addresses are remapped; the list of
 
-       patterns can be reconfigured with AutomapHostsSuffixes.
 
-     - Add an "-F" option to tor-resolve to force a resolve for a .onion
 
-       address. Thanks to the AutomapHostsOnResolve option, this is no
 
-       longer a completely silly thing to do.
 
-   o Major features (relay usability):
 
-     - New config options RelayBandwidthRate and RelayBandwidthBurst:
 
-       a separate set of token buckets for relayed traffic. Right now
 
-       relayed traffic is defined as answers to directory requests, and
 
-       OR connections that don't have any local circuits on them. See
 
-       proposal 111 for details.
 
-     - Create listener connections before we setuid to the configured
 
-       User and Group. Now non-Windows users can choose port values
 
-       under 1024, start Tor as root, and have Tor bind those ports
 
-       before it changes to another UID. (Windows users could already
 
-       pick these ports.)
 
-     - Added a new ConstrainedSockets config option to set SO_SNDBUF and
 
-       SO_RCVBUF on TCP sockets. Hopefully useful for Tor servers running
 
-       on "vserver" accounts. Patch from coderman.
 
-   o Major features (directory authorities):
 
-     - Directory authorities track weighted fractional uptime and weighted
 
-       mean-time-between failures for relays. WFU is suitable for deciding
 
-       whether a node is "usually up", while MTBF is suitable for deciding
 
-       whether a node is "likely to stay up." We need both, because
 
-       "usually up" is a good requirement for guards, while "likely to
 
-       stay up" is a good requirement for long-lived connections.
 
-     - Directory authorities use a new formula for selecting which relays
 
-       to advertise as Guards: they must be in the top 7/8 in terms of
 
-       how long we have known about them, and above the median of those
 
-       nodes in terms of weighted fractional uptime.
 
-     - Directory authorities use a new formula for selecting which relays
 
-       to advertise as Stable: when we have 4 or more days of data, use
 
-       median measured MTBF rather than median declared uptime. Implements
 
-       proposal 108.
 
-     - Directory authorities accept and serve "extra info" documents for
 
-       routers. Routers now publish their bandwidth-history lines in the
 
-       extra-info docs rather than the main descriptor. This step saves
 
-       60% (!) on compressed router descriptor downloads. Servers upload
 
-       extra-info docs to any authority that accepts them; directory
 
-       authorities now allow multiple router descriptors and/or extra
 
-       info documents to be uploaded in a single go. Authorities, and
 
-       caches that have been configured to download extra-info documents,
 
-       download them as needed. Implements proposal 104.
 
-     - Authorities now list relays who have the same nickname as
 
-       a different named relay, but list them with a new flag:
 
-       "Unnamed". Now we can make use of relays that happen to pick the
 
-       same nickname as a server that registered two years ago and then
 
-       disappeared. Implements proposal 122.
 
-     - Store routers in a file called cached-descriptors instead of in
 
-       cached-routers. Initialize cached-descriptors from cached-routers
 
-       if the old format is around. The new format allows us to store
 
-       annotations along with descriptors, to record the time we received
 
-       each descriptor, its source, and its purpose: currently one of
 
-       general, controller, or bridge.
 
-   o Major features (other):
 
-     - New config options WarnPlaintextPorts and RejectPlaintextPorts so
 
-       Tor can warn and/or refuse connections to ports commonly used with
 
-       vulnerable-plaintext protocols. Currently we warn on ports 23,
 
-       109, 110, and 143, but we don't reject any. Based on proposal 129
 
-       by Kevin Bauer and Damon McCoy.
 
-     - Integrate Karsten Loesing's Google Summer of Code project to publish
 
-       hidden service descriptors on a set of redundant relays that are a
 
-       function of the hidden service address. Now we don't have to rely
 
-       on three central hidden service authorities for publishing and
 
-       fetching every hidden service descriptor. Implements proposal 114.
 
-     - Allow tunnelled directory connections to ask for an encrypted
 
-       "begin_dir" connection or an anonymized "uses a full Tor circuit"
 
-       connection independently. Now we can make anonymized begin_dir
 
-       connections for (e.g.) more secure hidden service posting and
 
-       fetching.
 
-   o Major bugfixes (crashes and assert failures):
 
-     - Stop imposing an arbitrary maximum on the number of file descriptors
 
-       used for busy servers. Bug reported by Olaf Selke; patch from
 
-       Sebastian Hahn.
 
-     - Avoid possible failures when generating a directory with routers
 
-       with over-long versions strings, or too many flags set.
 
-     - Fix a rare assert error when we're closing one of our threads:
 
-       use a mutex to protect the list of logs, so we never write to the
 
-       list as it's being freed. Fixes the very rare bug 575, which is
 
-       kind of the revenge of bug 222.
 
-     - Avoid segfault in the case where a badly behaved v2 versioning
 
-       directory sends a signed networkstatus with missing client-versions.
 
-     - When we hit an EOF on a log (probably because we're shutting down),
 
-       don't try to remove the log from the list: just mark it as
 
-       unusable. (Bulletproofs against bug 222.)
 
-   o Major bugfixes (code security fixes):
 
-     - Detect size overflow in zlib code. Reported by Justin Ferguson and
 
-       Dan Kaminsky.
 
-     - Rewrite directory tokenization code to never run off the end of
 
-       a string. Fixes bug 455. Patch from croup.
 
-     - Be more paranoid about overwriting sensitive memory on free(),
 
-       as a defensive programming tactic to ensure forward secrecy.
 
-   o Major bugfixes (anonymity fixes):
 
-     - Reject requests for reverse-dns lookup of names that are in
 
-       a private address space. Patch from lodger.
 
-     - Never report that we've used more bandwidth than we're willing to
 
-       relay: it leaks how much non-relay traffic we're using. Resolves
 
-       bug 516.
 
-     - As a client, do not believe any server that tells us that an
 
-       address maps to an internal address space.
 
-     - Warn about unsafe ControlPort configurations.
 
-     - Directory authorities now call routers Fast if their bandwidth is
 
-       at least 100KB/s, and consider their bandwidth adequate to be a
 
-       Guard if it is at least 250KB/s, no matter the medians. This fix
 
-       complements proposal 107.
 
-     - Directory authorities now never mark more than 2 servers per IP as
 
-       Valid and Running (or 5 on addresses shared by authorities).
 
-       Implements proposal 109, by Kevin Bauer and Damon McCoy.
 
-     - If we're a relay, avoid picking ourselves as an introduction point,
 
-       a rendezvous point, or as the final hop for internal circuits. Bug
 
-       reported by taranis and lodger.
 
-     - Exit relays that are used as a client can now reach themselves
 
-       using the .exit notation, rather than just launching an infinite
 
-       pile of circuits. Fixes bug 641. Reported by Sebastian Hahn.
 
-     - Fix a bug where, when we were choosing the 'end stream reason' to
 
-       put in our relay end cell that we send to the exit relay, Tor
 
-       clients on Windows were sometimes sending the wrong 'reason'. The
 
-       anonymity problem is that exit relays may be able to guess whether
 
-       the client is running Windows, thus helping partition the anonymity
 
-       set. Down the road we should stop sending reasons to exit relays,
 
-       or otherwise prevent future versions of this bug.
 
-     - Only update guard status (usable / not usable) once we have
 
-       enough directory information. This was causing us to discard all our
 
-       guards on startup if we hadn't been running for a few weeks. Fixes
 
-       bug 448.
 
-     - When our directory information has been expired for a while, stop
 
-       being willing to build circuits using it. Fixes bug 401.
 
-   o Major bugfixes (peace of mind for relay operators)
 
-     - Non-exit relays no longer answer "resolve" relay cells, so they
 
-       can't be induced to do arbitrary DNS requests. (Tor clients already
 
-       avoid using non-exit relays for resolve cells, but now servers
 
-       enforce this too.) Fixes bug 619. Patch from lodger.
 
-     - When we setconf ClientOnly to 1, close any current OR and Dir
 
-       listeners. Reported by mwenge.
 
-   o Major bugfixes (other):
 
-     - If we only ever used Tor for hidden service lookups or posts, we
 
-       would stop building circuits and start refusing connections after
 
-       24 hours, since we falsely believed that Tor was dormant. Reported
 
-       by nwf.
 
-     - Add a new __HashedControlSessionPassword option for controllers
 
-       to use for one-off session password hashes that shouldn't get
 
-       saved to disk by SAVECONF --- Vidalia users were accumulating a
 
-       pile of HashedControlPassword lines in their torrc files, one for
 
-       each time they had restarted Tor and then clicked Save. Make Tor
 
-       automatically convert "HashedControlPassword" to this new option but
 
-       only when it's given on the command line. Partial fix for bug 586.
 
-     - Patch from "Andrew S. Lists" to catch when we contact a directory
 
-       mirror at IP address X and he says we look like we're coming from
 
-       IP address X. Otherwise this would screw up our address detection.
 
-     - Reject uploaded descriptors and extrainfo documents if they're
 
-       huge. Otherwise we'll cache them all over the network and it'll
 
-       clog everything up. Suggested by Aljosha Judmayer.
 
-     - When a hidden service was trying to establish an introduction point,
 
-       and Tor *did* manage to reuse one of the preemptively built
 
-       circuits, it didn't correctly remember which one it used,
 
-       so it asked for another one soon after, until there were no
 
-       more preemptive circuits, at which point it launched one from
 
-       scratch. Bugfix on 0.0.9.x.
 
-   o Rate limiting and load balancing improvements:
 
-     - When we add data to a write buffer in response to the data on that
 
-       write buffer getting low because of a flush, do not consider the
 
-       newly added data as a candidate for immediate flushing, but rather
 
-       make it wait until the next round of writing. Otherwise, we flush
 
-       and refill recursively, and a single greedy TLS connection can
 
-       eat all of our bandwidth.
 
-     - When counting the number of bytes written on a TLS connection,
 
-       look at the BIO actually used for writing to the network, not
 
-       at the BIO used (sometimes) to buffer data for the network.
 
-       Looking at different BIOs could result in write counts on the
 
-       order of ULONG_MAX. Fixes bug 614.
 
-     - If we change our MaxAdvertisedBandwidth and then reload torrc,
 
-       Tor won't realize it should publish a new relay descriptor. Fixes
 
-       bug 688, reported by mfr.
 
-     - Avoid using too little bandwidth when our clock skips a few seconds.
 
-     - Choose which bridge to use proportional to its advertised bandwidth,
 
-       rather than uniformly at random. This should speed up Tor for
 
-       bridge users. Also do this for people who set StrictEntryNodes.
 
-   o Bootstrapping faster and building circuits more intelligently:
 
-     - Fix bug 660 that was preventing us from knowing that we should
 
-       preemptively build circuits to handle expected directory requests.
 
-     - When we're checking if we have enough dir info for each relay
 
-       to begin establishing circuits, make sure that we actually have
 
-       the descriptor listed in the consensus, not just any descriptor.
 
-     - Correctly notify one-hop connections when a circuit build has
 
-       failed. Possible fix for bug 669. Found by lodger.
 
-     - Clients now hold circuitless TLS connections open for 1.5 times
 
-       MaxCircuitDirtiness (15 minutes), since it is likely that they'll
 
-       rebuild a new circuit over them within that timeframe. Previously,
 
-       they held them open only for KeepalivePeriod (5 minutes).
 
-   o Performance improvements (memory):
 
-     - Add OpenBSD malloc code from "phk" as an optional malloc
 
-       replacement on Linux: some glibc libraries do very poorly with
 
-       Tor's memory allocation patterns. Pass --enable-openbsd-malloc to
 
-       ./configure to get the replacement malloc code.
 
-     - Switch our old ring buffer implementation for one more like that
 
-       used by free Unix kernels. The wasted space in a buffer with 1mb
 
-       of data will now be more like 8k than 1mb. The new implementation
 
-       also avoids realloc();realloc(); patterns that can contribute to
 
-       memory fragmentation.
 
-     - Change the way that Tor buffers data that it is waiting to write.
 
-       Instead of queueing data cells in an enormous ring buffer for each
 
-       client->OR or OR->OR connection, we now queue cells on a separate
 
-       queue for each circuit. This lets us use less slack memory, and
 
-       will eventually let us be smarter about prioritizing different kinds
 
-       of traffic.
 
-     - Reference-count and share copies of address policy entries; only 5%
 
-       of them were actually distinct.
 
-     - Tune parameters for cell pool allocation to minimize amount of
 
-       RAM overhead used.
 
-     - Keep unused 4k and 16k buffers on free lists, rather than wasting 8k
 
-       for every single inactive connection_t. Free items from the
 
-       4k/16k-buffer free lists when they haven't been used for a while.
 
-     - Make memory debugging information describe more about history
 
-       of cell allocation, so we can help reduce our memory use.
 
-     - Be even more aggressive about releasing RAM from small
 
-       empty buffers. Thanks to our free-list code, this shouldn't be too
 
-       performance-intensive.
 
-     - Log malloc statistics from mallinfo() on platforms where it exists.
 
-     - Use memory pools to allocate cells with better speed and memory
 
-       efficiency, especially on platforms where malloc() is inefficient.
 
-     - Add a --with-tcmalloc option to the configure script to link
 
-       against tcmalloc (if present). Does not yet search for non-system
 
-       include paths.
 
-   o Performance improvements (socket management):
 
-     - Count the number of open sockets separately from the number of
 
-       active connection_t objects. This will let us avoid underusing
 
-       our allocated connection limit.
 
-     - We no longer use socket pairs to link an edge connection to an
 
-       anonymous directory connection or a DirPort test connection.
 
-       Instead, we track the link internally and transfer the data
 
-       in-process. This saves two sockets per "linked" connection (at the
 
-       client and at the server), and avoids the nasty Windows socketpair()
 
-       workaround.
 
-     - We were leaking a file descriptor if Tor started with a zero-length
 
-       cached-descriptors file. Patch by "freddy77".
 
-   o Performance improvements (CPU use):
 
-     - Never walk through the list of logs if we know that no log target
 
-       is interested in a given message.
 
-     - Call routerlist_remove_old_routers() much less often. This should
 
-       speed startup, especially on directory caches.
 
-     - Base64 decoding was actually showing up on our profile when parsing
 
-       the initial descriptor file; switch to an in-process all-at-once
 
-       implementation that's about 3.5x times faster than calling out to
 
-       OpenSSL.
 
-     - Use a slightly simpler string hashing algorithm (copying Python's
 
-       instead of Java's) and optimize our digest hashing algorithm to take
 
-       advantage of 64-bit platforms and to remove some possibly-costly
 
-       voodoo.
 
-     - When implementing AES counter mode, update only the portions of the
 
-       counter buffer that need to change, and don't keep separate
 
-       network-order and host-order counters on big-endian hosts (where
 
-       they are the same).
 
-     - Add an in-place version of aes_crypt() so that we can avoid doing a
 
-       needless memcpy() call on each cell payload.
 
-     - Use Critical Sections rather than Mutexes for synchronizing threads
 
-       on win32; Mutexes are heavier-weight, and designed for synchronizing
 
-       between processes.
 
-   o Performance improvements (bandwidth use):
 
-     - Don't try to launch new descriptor downloads quite so often when we
 
-       already have enough directory information to build circuits.
 
-     - Version 1 directories are no longer generated in full. Instead,
 
-       authorities generate and serve "stub" v1 directories that list
 
-       no servers. This will stop Tor versions 0.1.0.x and earlier from
 
-       working, but (for security reasons) nobody should be running those
 
-       versions anyway.
 
-     - Avoid going directly to the directory authorities even if you're a
 
-       relay, if you haven't found yourself reachable yet or if you've
 
-       decided not to advertise your dirport yet. Addresses bug 556.
 
-     - If we've gone 12 hours since our last bandwidth check, and we
 
-       estimate we have less than 50KB bandwidth capacity but we could
 
-       handle more, do another bandwidth test.
 
-     - Support "If-Modified-Since" when answering HTTP requests for
 
-       directories, running-routers documents, and v2 and v3 networkstatus
 
-       documents. (There's no need to support it for router descriptors,
 
-       since those are downloaded by descriptor digest.)
 
-     - Stop fetching directory info so aggressively if your DirPort is
 
-       on but your ORPort is off; stop fetching v2 dir info entirely.
 
-       You can override these choices with the new FetchDirInfoEarly
 
-       config option.
 
-   o Changed config option behavior (features):
 
-     - Configuration files now accept C-style strings as values. This
 
-       helps encode characters not allowed in the current configuration
 
-       file format, such as newline or #. Addresses bug 557.
 
-     - Add hidden services and DNSPorts to the list of things that make
 
-       Tor accept that it has running ports. Change starting Tor with no
 
-       ports from a fatal error to a warning; we might change it back if
 
-       this turns out to confuse anybody. Fixes bug 579.
 
-     - Make PublishServerDescriptor default to 1, so the default doesn't
 
-       have to change as we invent new directory protocol versions.
 
-     - Allow people to say PreferTunnelledDirConns rather than
 
-       PreferTunneledDirConns, for those alternate-spellers out there.
 
-     - Raise the default BandwidthRate/BandwidthBurst to 5MB/10MB, to
 
-       accommodate the growing number of servers that use the default
 
-       and are reaching it.
 
-     - Make it possible to enable HashedControlPassword and
 
-       CookieAuthentication at the same time.
 
-     - When a TrackHostExits-chosen exit fails too many times in a row,
 
-       stop using it. Fixes bug 437.
 
-   o Changed config option behavior (bugfixes):
 
-     - Do not read the configuration file when we've only been told to
 
-       generate a password hash. Fixes bug 643. Bugfix on 0.0.9pre5. Fix
 
-       based on patch from Sebastian Hahn.
 
-     - Actually validate the options passed to AuthDirReject,
 
-       AuthDirInvalid, AuthDirBadDir, and AuthDirBadExit.
 
-     - Make "ClientOnly 1" config option disable directory ports too.
 
-     - Don't stop fetching descriptors when FetchUselessDescriptors is
 
-       set, even if we stop asking for circuits. Bug reported by tup
 
-       and ioerror.
 
-     - Servers used to decline to publish their DirPort if their
 
-       BandwidthRate or MaxAdvertisedBandwidth were below a threshold. Now
 
-       they look only at BandwidthRate and RelayBandwidthRate.
 
-     - Treat "2gb" when given in torrc for a bandwidth as meaning 2gb,
 
-       minus 1 byte: the actual maximum declared bandwidth.
 
-     - Make "TrackHostExits ." actually work. Bugfix on 0.1.0.x.
 
-     - Make the NodeFamilies config option work. (Reported by
 
-       lodger -- it has never actually worked, even though we added it
 
-       in Oct 2004.)
 
-     - If Tor is invoked from something that isn't a shell (e.g. Vidalia),
 
-       now we expand "-f ~/.tor/torrc" correctly. Suggested by Matt Edman.
 
-   o New config options:
 
-     - New configuration options AuthDirMaxServersPerAddr and
 
-       AuthDirMaxServersperAuthAddr to override default maximum number
 
-       of servers allowed on a single IP address. This is important for
 
-       running a test network on a single host.
 
-     - Three new config options (AlternateDirAuthority,
 
-       AlternateBridgeAuthority, and AlternateHSAuthority) that let the
 
-       user selectively replace the default directory authorities by type,
 
-       rather than the all-or-nothing replacement that DirServer offers.
 
-     - New config options AuthDirBadDir and AuthDirListBadDirs for
 
-       authorities to mark certain relays as "bad directories" in the
 
-       networkstatus documents. Also supports the "!baddir" directive in
 
-       the approved-routers file.
 
-     - New config option V2AuthoritativeDirectory that all v2 directory
 
-       authorities must set. This lets v3 authorities choose not to serve
 
-       v2 directory information.
 
-   o Minor features (other):
 
-     - When we're not serving v2 directory information, there is no reason
 
-       to actually keep any around. Remove the obsolete files and directory
 
-       on startup if they are very old and we aren't going to serve them.
 
-     - When we negotiate a v2 link-layer connection (not yet implemented),
 
-       accept RELAY_EARLY cells and turn them into RELAY cells if we've
 
-       negotiated a v1 connection for their next step. Initial steps for
 
-       proposal 110.
 
-     - When we have no consensus, check FallbackNetworkstatusFile (defaults
 
-       to $PREFIX/share/tor/fallback-consensus) for a consensus. This way
 
-       we can start out knowing some directory caches. We don't ship with
 
-       a fallback consensus by default though, because it was making
 
-       bootstrapping take too long while we tried many down relays.
 
-     - Authorities send back an X-Descriptor-Not-New header in response to
 
-       an accepted-but-discarded descriptor upload. Partially implements
 
-       fix for bug 535.
 
-     - If we find a cached-routers file that's been sitting around for more
 
-       than 28 days unmodified, then most likely it's a leftover from
 
-       when we upgraded to 0.2.0.8-alpha. Remove it. It has no good
 
-       routers anyway.
 
-     - When we (as a cache) download a descriptor because it was listed
 
-       in a consensus, remember when the consensus was supposed to expire,
 
-       and don't expire the descriptor until then.
 
-     - Optionally (if built with -DEXPORTMALLINFO) export the output
 
-       of mallinfo via http, as tor/mallinfo.txt. Only accessible
 
-       from localhost.
 
-     - Tag every guard node in our state file with the version that
 
-       we believe added it, or with our own version if we add it. This way,
 
-       if a user temporarily runs an old version of Tor and then switches
 
-       back to a new one, she doesn't automatically lose her guards.
 
-     - When somebody requests a list of statuses or servers, and we have
 
-       none of those, return a 404 rather than an empty 200.
 
-     - Merge in some (as-yet-unused) IPv6 address manipulation code. (Patch
 
-       from croup.)
 
-     - Add an HSAuthorityRecordStats option that hidden service authorities
 
-       can use to track statistics of overall hidden service usage without
 
-       logging information that would be as useful to an attacker.
 
-     - Allow multiple HiddenServicePort directives with the same virtual
 
-       port; when they occur, the user is sent round-robin to one
 
-       of the target ports chosen at random.  Partially fixes bug 393 by
 
-       adding limited ad-hoc round-robining.
 
-     - Revamp file-writing logic so we don't need to have the entire
 
-       contents of a file in memory at once before we write to disk. Tor,
 
-       meet stdio.
 
-   o Minor bugfixes (other):
 
-     - Alter the code that tries to recover from unhandled write
 
-       errors, to not try to flush onto a socket that's given us
 
-       unhandled errors.
 
-     - Directory mirrors no longer include a guess at the client's IP
 
-       address if the connection appears to be coming from the same /24
 
-       network; it was producing too many wrong guesses.
 
-     - If we're trying to flush the last bytes on a connection (for
 
-       example, when answering a directory request), reset the
 
-       time-to-give-up timeout every time we manage to write something
 
-       on the socket.
 
-     - Reject router descriptors with out-of-range bandwidthcapacity or
 
-       bandwidthburst values.
 
-     - If we can't expand our list of entry guards (e.g. because we're
 
-       using bridges or we have StrictEntryNodes set), don't mark relays
 
-       down when they fail a directory request. Otherwise we're too quick
 
-       to mark all our entry points down.
 
-     - Authorities no longer send back "400 you're unreachable please fix
 
-       it" errors to Tor servers that aren't online all the time. We're
 
-       supposed to tolerate these servers now.
 
-     - Let directory authorities startup even when they can't generate
 
-       a descriptor immediately, e.g. because they don't know their
 
-       address.
 
-     - Correctly enforce that elements of directory objects do not appear
 
-       more often than they are allowed to appear.
 
-     - Stop allowing hibernating servers to be "stable" or "fast".
 
-     - On Windows, we were preventing other processes from reading
 
-       cached-routers while Tor was running. (Reported by janbar)
 
-     - Check return values from pthread_mutex functions.
 
-     - When opening /dev/null in finish_daemonize(), do not pass the
 
-       O_CREAT flag. Fortify was complaining, and correctly so. Fixes
 
-       bug 742; fix from Michael Scherer. Bugfix on 0.0.2pre19.
 
-   o Controller features:
 
-     - The GETCONF command now escapes and quotes configuration values
 
-       that don't otherwise fit into the torrc file.
 
-     - The SETCONF command now handles quoted values correctly.
 
-     - Add "GETINFO/desc-annotations/id/<OR digest>" so controllers can
 
-       ask about source, timestamp of arrival, purpose, etc. We need
 
-       something like this to help Vidalia not do GeoIP lookups on bridge
 
-       addresses.
 
-     - Allow multiple HashedControlPassword config lines, to support
 
-       multiple controller passwords.
 
-     - Accept LF instead of CRLF on controller, since some software has a
 
-       hard time generating real Internet newlines.
 
-     - Add GETINFO values for the server status events
 
-       "REACHABILITY_SUCCEEDED" and "GOOD_SERVER_DESCRIPTOR". Patch from
 
-       Robert Hogan.
 
-     - There is now an ugly, temporary "desc/all-recent-extrainfo-hack"
 
-       GETINFO for Torstat to use until it can switch to using extrainfos.
 
-     - New config option CookieAuthFile to choose a new location for the
 
-       cookie authentication file, and config option
 
-       CookieAuthFileGroupReadable to make it group-readable.
 
-     - Add a SOURCE_ADDR field to STREAM NEW events so that controllers can
 
-       match requests to applications. Patch from Robert Hogan.
 
-     - Add a RESOLVE command to launch hostname lookups. Original patch
 
-       from Robert Hogan.
 
-     - Add GETINFO status/enough-dir-info to let controllers tell whether
 
-       Tor has downloaded sufficient directory information. Patch from Tup.
 
-     - You can now use the ControlSocket option to tell Tor to listen for
 
-       controller connections on Unix domain sockets on systems that
 
-       support them. Patch from Peter Palfrader.
 
-     - New "GETINFO address-mappings/*" command to get address mappings
 
-       with expiry information. "addr-mappings/*" is now deprecated.
 
-       Patch from Tup.
 
-     - Add a new config option __DisablePredictedCircuits designed for
 
-       use by the controller, when we don't want Tor to build any circuits
 
-       preemptively.
 
-     - Let the controller specify HOP=%d as an argument to ATTACHSTREAM,
 
-       so we can exit from the middle of the circuit.
 
-     - Implement "getinfo status/circuit-established".
 
-     - Implement "getinfo status/version/..." so a controller can tell
 
-       whether the current version is recommended, and whether any versions
 
-       are good, and how many authorities agree. Patch from "shibz".
 
-     - Controllers should now specify cache=no or cache=yes when using
 
-       the +POSTDESCRIPTOR command.
 
-     - Add a "PURPOSE=" argument to "STREAM NEW" events, as suggested by
 
-       Robert Hogan. Fixes the first part of bug 681.
 
-     - When reporting clock skew, and we know that the clock is _at least
 
-       as skewed_ as some value, but we don't know the actual value,
 
-       report the value as a "minimum skew."
 
-   o Controller bugfixes:
 
-     - Generate "STATUS_SERVER" events rather than misspelled
 
-       "STATUS_SEVER" events. Caught by mwenge.
 
-     - Reject controller commands over 1MB in length, so rogue
 
-       processes can't run us out of memory.
 
-     - Change the behavior of "getinfo status/good-server-descriptor"
 
-       so it doesn't return failure when any authority disappears.
 
-     - Send NAMESERVER_STATUS messages for a single failed nameserver
 
-       correctly.
 
-     - When the DANGEROUS_VERSION controller status event told us we're
 
-       running an obsolete version, it used the string "OLD" to describe
 
-       it. Yet the "getinfo" interface used the string "OBSOLETE". Now use
 
-       "OBSOLETE" in both cases.
 
-     - Respond to INT and TERM SIGNAL commands before we execute the
 
-       signal, in case the signal shuts us down. We had a patch in
 
-       0.1.2.1-alpha that tried to do this by queueing the response on
 
-       the connection's buffer before shutting down, but that really
 
-       isn't the same thing at all. Bug located by Matt Edman.
 
-     - Provide DNS expiry times in GMT, not in local time. For backward
 
-       compatibility, ADDRMAP events only provide GMT expiry in an extended
 
-       field. "GETINFO address-mappings" always does the right thing.
 
-     - Use CRLF line endings properly in NS events.
 
-     - Make 'getinfo fingerprint' return a 551 error if we're not a
 
-       server, so we match what the control spec claims we do. Reported
 
-       by daejees.
 
-     - Fix a typo in an error message when extendcircuit fails that
 
-       caused us to not follow the \r\n-based delimiter protocol. Reported
 
-       by daejees.
 
-     - When tunneling an encrypted directory connection, and its first
 
-       circuit fails, do not leave it unattached and ask the controller
 
-       to deal. Fixes the second part of bug 681.
 
-     - Treat some 403 responses from directory servers as INFO rather than
 
-       WARN-severity events.
 
-   o Portability / building / compiling:
 
-     - When building with --enable-gcc-warnings, check for whether Apple's
 
-       warning "-Wshorten-64-to-32" is available.
 
-     - Support compilation to target iPhone; patch from cjacker huang.
 
-       To build for iPhone, pass the --enable-iphone option to configure.
 
-     - Port Tor to build and run correctly on Windows CE systems, using
 
-       the wcecompat library. Contributed by Valerio Lupi.
 
-     - Detect non-ASCII platforms (if any still exist) and refuse to
 
-       build there: some of our code assumes that 'A' is 65 and so on.
 
-     - Clear up some MIPSPro compiler warnings.
 
-     - Make autoconf search for libevent, openssl, and zlib consistently.
 
-     - Update deprecated macros in configure.in.
 
-     - When warning about missing headers, tell the user to let us
 
-       know if the compile succeeds anyway, so we can downgrade the
 
-       warning.
 
-     - Include the current subversion revision as part of the version
 
-       string: either fetch it directly if we're in an SVN checkout, do
 
-       some magic to guess it if we're in an SVK checkout, or use
 
-       the last-detected version if we're building from a .tar.gz.
 
-       Use this version consistently in log messages.
 
-     - Correctly report platform name on Windows 95 OSR2 and Windows 98 SE.
 
-     - Read resolv.conf files correctly on platforms where read() returns
 
-       partial results on small file reads.
 
-     - Build without verbose warnings even on gcc 4.2 and 4.3.
 
-     - On Windows, correctly detect errors when listing the contents of
 
-       a directory. Fix from lodger.
 
-     - Run 'make test' as part of 'make dist', so we stop releasing so
 
-       many development snapshots that fail their unit tests.
 
-     - Add support to detect Libevent versions in the 1.4.x series
 
-       on mingw.
 
-     - Add command-line arguments to unit-test executable so that we can
 
-       invoke any chosen test from the command line rather than having
 
-       to run the whole test suite at once; and so that we can turn on
 
-       logging for the unit tests.
 
-     - Do not automatically run configure from autogen.sh. This
 
-       non-standard behavior tended to annoy people who have built other
 
-       programs.
 
-     - Fix a macro/CPP interaction that was confusing some compilers:
 
-       some GCCs don't like #if/#endif pairs inside macro arguments.
 
-       Fixes bug 707.
 
-     - Fix macro collision between OpenSSL 0.9.8h and Windows headers.
 
-       Fixes bug 704; fix from Steven Murdoch.
 
-     - Correctly detect transparent proxy support on Linux hosts that
 
-       require in.h to be included before netfilter_ipv4.h.  Patch
 
-       from coderman.
 
-   o Logging improvements:
 
-     - When we haven't had any application requests lately, don't bother
 
-       logging that we have expired a bunch of descriptors.
 
-     - When attempting to open a logfile fails, tell us why.
 
-     - Only log guard node status when guard node status has changed.
 
-     - Downgrade the 3 most common "INFO" messages to "DEBUG". This will
 
-       make "INFO" 75% less verbose.
 
-     - When SafeLogging is disabled, log addresses along with all TLS
 
-       errors.
 
-     - Report TLS "zero return" case as a "clean close" and "IO error"
 
-       as a "close". Stop calling closes "unexpected closes": existing
 
-       Tors don't use SSL_close(), so having a connection close without
 
-       the TLS shutdown handshake is hardly unexpected.
 
-     - When we receive a consensus from the future, warn about skew.
 
-     - Make "not enough dir info yet" warnings describe *why* Tor feels
 
-       it doesn't have enough directory info yet.
 
-     - On the USR1 signal, when dmalloc is in use, log the top 10 memory
 
-       consumers. (We already do this on HUP.)
 
-     - Give more descriptive well-formedness errors for out-of-range
 
-       hidden service descriptor/protocol versions.
 
-     - Stop recommending that every server operator send mail to tor-ops.
 
-       Resolves bug 597. Bugfix on 0.1.2.x.
 
-     - Improve skew reporting: try to give the user a better log message
 
-       about how skewed they are, and how much this matters.
 
-     - New --quiet command-line option to suppress the default console log.
 
-       Good in combination with --hash-password.
 
-     - Don't complain that "your server has not managed to confirm that its
 
-       ports are reachable" if we haven't been able to build any circuits
 
-       yet.
 
-     - Detect the reason for failing to mmap a descriptor file we just
 
-       wrote, and give a more useful log message.  Fixes bug 533.
 
-     - Always prepend "Bug: " to any log message about a bug.
 
-     - When dumping memory usage, list bytes used in buffer memory
 
-       free-lists.
 
-     - When running with dmalloc, dump more stats on hup and on exit.
 
-     - Put a platform string (e.g. "Linux i686") in the startup log
 
-       message, so when people paste just their logs, we know if it's
 
-       OpenBSD or Windows or what.
 
-     - When logging memory usage, break down memory used in buffers by
 
-       buffer type.
 
-     - When we are reporting the DirServer line we just parsed, we were
 
-       logging the second stanza of the key fingerprint, not the first.
 
-     - Even though Windows is equally happy with / and \ as path separators,
 
-       try to use \ consistently on Windows and / consistently on Unix: it
 
-       makes the log messages nicer.
 
-      - On OSX, stop warning the user that kqueue support in libevent is
 
-       "experimental", since it seems to have worked fine for ages.
 
-   o Contributed scripts and tools:
 
-     - Update linux-tor-prio.sh script to allow QoS based on the uid of
 
-       the Tor process. Patch from Marco Bonetti with tweaks from Mike
 
-       Perry.
 
-     - Include the "tor-ctrl.sh" bash script by Stefan Behte to provide
 
-       Unix users an easy way to script their Tor process (e.g. by
 
-       adjusting bandwidth based on the time of the day).
 
-     - In the exitlist script, only consider the most recently published
 
-       server descriptor for each server. Also, when the user requests
 
-       a list of servers that _reject_ connections to a given address,
 
-       explicitly exclude the IPs that also have servers that accept
 
-       connections to that address. Resolves bug 405.
 
-     - Include a new contrib/tor-exit-notice.html file that exit relay
 
-       operators can put on their website to help reduce abuse queries.
 
-   o Newly deprecated features:
 
-     - The status/version/num-versioning and status/version/num-concurring
 
-       GETINFO controller options are no longer useful in the v3 directory
 
-       protocol: treat them as deprecated, and warn when they're used.
 
-     - The RedirectExits config option is now deprecated.
 
-   o Removed features:
 
-     - Drop the old code to choke directory connections when the
 
-       corresponding OR connections got full: thanks to the cell queue
 
-       feature, OR conns don't get full any more.
 
-     - Remove the old "dns worker" server DNS code: it hasn't been default
 
-       since 0.1.2.2-alpha, and all the servers are using the new
 
-       eventdns code.
 
-     - Remove the code to generate the oldest (v1) directory format.
 
-     - Remove support for the old bw_accounting file: we've been storing
 
-       bandwidth accounting information in the state file since
 
-       0.1.2.5-alpha. This may result in bandwidth accounting errors
 
-       if you try to upgrade from 0.1.1.x or earlier, or if you try to
 
-       downgrade to 0.1.1.x or earlier.
 
-     - Drop support for OpenSSL version 0.9.6. Just about nobody was using
 
-       it, it had no AES, and it hasn't seen any security patches since
 
-       2004.
 
-     - Stop overloading the circuit_t.onionskin field for both "onionskin
 
-       from a CREATE cell that we are waiting for a cpuworker to be
 
-       assigned" and "onionskin from an EXTEND cell that we are going to
 
-       send to an OR as soon as we are connected". Might help with bug 600.
 
-     - Remove the tor_strpartition() function: its logic was confused,
 
-       and it was only used for one thing that could be implemented far
 
-       more easily.
 
-     - Remove the contrib scripts ExerciseServer.py, PathDemo.py,
 
-       and TorControl.py, as they use the old v0 controller protocol,
 
-       and are obsoleted by TorFlow anyway.
 
-     - Drop support for v1 rendezvous descriptors, since we never used
 
-       them anyway, and the code has probably rotted by now. Based on
 
-       patch from Karsten Loesing.
 
-     - Stop allowing address masks that do not correspond to bit prefixes.
 
-       We have warned about these for a really long time; now it's time
 
-       to reject them. (Patch from croup.)
 
-     - Remove an optimization in the AES counter-mode code that assumed
 
-       that the counter never exceeded 2^68. When the counter can be set
 
-       arbitrarily as an IV (as it is by Karsten's new hidden services
 
-       code), this assumption no longer holds.
 
-     - Disable the SETROUTERPURPOSE controller command: it is now
 
-       obsolete.
 
- Changes in version 0.1.2.19 - 2008-01-17
 
-   Tor 0.1.2.19 fixes a huge memory leak on exit relays, makes the default
 
-   exit policy a little bit more conservative so it's safer to run an
 
-   exit relay on a home system, and fixes a variety of smaller issues.
 
-   o Security fixes:
 
-     - Exit policies now reject connections that are addressed to a
 
-       relay's public (external) IP address too, unless
 
-       ExitPolicyRejectPrivate is turned off. We do this because too
 
-       many relays are running nearby to services that trust them based
 
-       on network address.
 
-   o Major bugfixes:
 
-     - When the clock jumps forward a lot, do not allow the bandwidth
 
-       buckets to become negative. Fixes bug 544.
 
-     - Fix a memory leak on exit relays; we were leaking a cached_resolve_t
 
-       on every successful resolve. Reported by Mike Perry.
 
-     - Purge old entries from the "rephist" database and the hidden
 
-       service descriptor database even when DirPort is zero.
 
-     - Stop thinking that 0.1.2.x directory servers can handle "begin_dir"
 
-       requests. Should ease bugs 406 and 419 where 0.1.2.x relays are
 
-       crashing or mis-answering these requests.
 
-     - When we decide to send a 503 response to a request for servers, do
 
-       not then also send the server descriptors: this defeats the whole
 
-       purpose. Fixes bug 539.
 
-   o Minor bugfixes:
 
-     - Changing the ExitPolicyRejectPrivate setting should cause us to
 
-       rebuild our server descriptor.
 
-     - Fix handling of hex nicknames when answering controller requests for
 
-       networkstatus by name, or when deciding whether to warn about
 
-       unknown routers in a config option. (Patch from mwenge.)
 
-     - Fix a couple of hard-to-trigger autoconf problems that could result
 
-       in really weird results on platforms whose sys/types.h files define
 
-       nonstandard integer types.
 
-     - Don't try to create the datadir when running --verify-config or
 
-       --hash-password. Resolves bug 540.
 
-     - If we were having problems getting a particular descriptor from the
 
-       directory caches, and then we learned about a new descriptor for
 
-       that router, we weren't resetting our failure count. Reported
 
-       by lodger.
 
-     - Although we fixed bug 539 (where servers would send HTTP status 503
 
-       responses _and_ send a body too), there are still servers out there
 
-       that haven't upgraded. Therefore, make clients parse such bodies
 
-       when they receive them.
 
-     - Run correctly on systems where rlim_t is larger than unsigned long.
 
-       This includes some 64-bit systems.
 
-     - Run correctly on platforms (like some versions of OS X 10.5) where
 
-       the real limit for number of open files is OPEN_FILES, not rlim_max
 
-       from getrlimit(RLIMIT_NOFILES).
 
-     - Avoid a spurious free on base64 failure.
 
-     - Avoid segfaults on certain complex invocations of
 
-       router_get_by_hexdigest().
 
-     - Fix rare bug on REDIRECTSTREAM control command when called with no
 
-       port set: it could erroneously report an error when none had
 
-       happened.
 
- Changes in version 0.1.2.18 - 2007-10-28
 
-   Tor 0.1.2.18 fixes many problems including crash bugs, problems with
 
-   hidden service introduction that were causing huge delays, and a big
 
-   bug that was causing some servers to disappear from the network status
 
-   lists for a few hours each day.
 
-   o Major bugfixes (crashes):
 
-     - If a connection is shut down abruptly because of something that
 
-       happened inside connection_flushed_some(), do not call
 
-       connection_finished_flushing(). Should fix bug 451:
 
-       "connection_stop_writing: Assertion conn->write_event failed"
 
-       Bugfix on 0.1.2.7-alpha.
 
-     - Fix possible segfaults in functions called from
 
-       rend_process_relay_cell().
 
-   o Major bugfixes (hidden services):
 
-     - Hidden services were choosing introduction points uniquely by
 
-       hexdigest, but when constructing the hidden service descriptor
 
-       they merely wrote the (potentially ambiguous) nickname.
 
-     - Clients now use the v2 intro format for hidden service
 
-       connections: they specify their chosen rendezvous point by identity
 
-       digest rather than by (potentially ambiguous) nickname. These
 
-       changes could speed up hidden service connections dramatically.
 
-   o Major bugfixes (other):
 
-     - Stop publishing a new server descriptor just because we get a
 
-       HUP signal. This led (in a roundabout way) to some servers getting
 
-       dropped from the networkstatus lists for a few hours each day.
 
-     - When looking for a circuit to cannibalize, consider family as well
 
-       as identity. Fixes bug 438. Bugfix on 0.1.0.x (which introduced
 
-       circuit cannibalization).
 
-     - When a router wasn't listed in a new networkstatus, we were leaving
 
-       the flags for that router alone -- meaning it remained Named,
 
-       Running, etc -- even though absence from the networkstatus means
 
-       that it shouldn't be considered to exist at all anymore. Now we
 
-       clear all the flags for routers that fall out of the networkstatus
 
-       consensus. Fixes bug 529.
 
-   o Minor bugfixes:
 
-     - Don't try to access (or alter) the state file when running
 
-       --list-fingerprint or --verify-config or --hash-password. Resolves
 
-       bug 499.
 
-     - When generating information telling us how to extend to a given
 
-       router, do not try to include the nickname if it is
 
-       absent. Resolves bug 467.
 
-     - Fix a user-triggerable segfault in expand_filename(). (There isn't
 
-       a way to trigger this remotely.)
 
-     - When sending a status event to the controller telling it that an
 
-       OR address is reachable, set the port correctly. (Previously we
 
-       were reporting the dir port.)
 
-     - Fix a minor memory leak whenever a controller sends the PROTOCOLINFO
 
-       command. Bugfix on 0.1.2.17.
 
-     - When loading bandwidth history, do not believe any information in
 
-       the future. Fixes bug 434.
 
-     - When loading entry guard information, do not believe any information
 
-       in the future.
 
-     - When we have our clock set far in the future and generate an
 
-       onion key, then re-set our clock to be correct, we should not stop
 
-       the onion key from getting rotated.
 
-     - On some platforms, accept() can return a broken address. Detect
 
-       this more quietly, and deal accordingly. Fixes bug 483.
 
-     - It's not actually an error to find a non-pending entry in the DNS
 
-       cache when canceling a pending resolve. Don't log unless stuff
 
-       is fishy. Resolves bug 463.
 
-     - Don't reset trusted dir server list when we set a configuration
 
-       option. Patch from Robert Hogan.
 
- Changes in version 0.1.2.17 - 2007-08-30
 
-   Tor 0.1.2.17 features a new Vidalia version in the Windows and OS
 
-   X bundles. Vidalia 0.0.14 makes authentication required for the
 
-   ControlPort in the default configuration, which addresses important
 
-   security risks. Everybody who uses Vidalia (or another controller)
 
-   should upgrade.
 
-   In addition, this Tor update fixes major load balancing problems with
 
-   path selection, which should speed things up a lot once many people
 
-   have upgraded.
 
-   o Major bugfixes (security):
 
-     - We removed support for the old (v0) control protocol. It has been
 
-       deprecated since Tor 0.1.1.1-alpha, and keeping it secure has
 
-       become more of a headache than it's worth.
 
-   o Major bugfixes (load balancing):
 
-     - When choosing nodes for non-guard positions, weight guards
 
-       proportionally less, since they already have enough load. Patch
 
-       from Mike Perry.
 
-     - Raise the "max believable bandwidth" from 1.5MB/s to 10MB/s. This
 
-       will allow fast Tor servers to get more attention.
 
-     - When we're upgrading from an old Tor version, forget our current
 
-       guards and pick new ones according to the new weightings. These
 
-       three load balancing patches could raise effective network capacity
 
-       by a factor of four. Thanks to Mike Perry for measurements.
 
-   o Major bugfixes (stream expiration):
 
-     - Expire not-yet-successful application streams in all cases if
 
-       they've been around longer than SocksTimeout. Right now there are
 
-       some cases where the stream will live forever, demanding a new
 
-       circuit every 15 seconds. Fixes bug 454; reported by lodger.
 
-   o Minor features (controller):
 
-     - Add a PROTOCOLINFO controller command. Like AUTHENTICATE, it
 
-       is valid before any authentication has been received. It tells
 
-       a controller what kind of authentication is expected, and what
 
-       protocol is spoken. Implements proposal 119.
 
-   o Minor bugfixes (performance):
 
-     - Save on most routerlist_assert_ok() calls in routerlist.c, thus
 
-       greatly speeding up loading cached-routers from disk on startup.
 
-     - Disable sentinel-based debugging for buffer code: we squashed all
 
-       the bugs that this was supposed to detect a long time ago, and now
 
-       its only effect is to change our buffer sizes from nice powers of
 
-       two (which platform mallocs tend to like) to values slightly over
 
-       powers of two (which make some platform mallocs sad).
 
-   o Minor bugfixes (misc):
 
-     - If exit bandwidth ever exceeds one third of total bandwidth, then
 
-       use the correct formula to weight exit nodes when choosing paths.
 
-       Based on patch from Mike Perry.
 
-     - Choose perfectly fairly among routers when choosing by bandwidth and
 
-       weighting by fraction of bandwidth provided by exits. Previously, we
 
-       would choose with only approximate fairness, and correct ourselves
 
-       if we ran off the end of the list.
 
-     - If we require CookieAuthentication but we fail to write the
 
-       cookie file, we would warn but not exit, and end up in a state
 
-       where no controller could authenticate. Now we exit.
 
-     - If we require CookieAuthentication, stop generating a new cookie
 
-       every time we change any piece of our config.
 
-     - Refuse to start with certain directory authority keys, and
 
-       encourage people using them to stop.
 
-     - Terminate multi-line control events properly. Original patch
 
-       from tup.
 
-     - Fix a minor memory leak when we fail to find enough suitable
 
-       servers to choose a circuit.
 
-     - Stop leaking part of the descriptor when we run into a particularly
 
-       unparseable piece of it.
 
- Changes in version 0.1.2.16 - 2007-08-01
 
-   Tor 0.1.2.16 fixes a critical security vulnerability that allows a
 
-   remote attacker in certain situations to rewrite the user's torrc
 
-   configuration file. This can completely compromise anonymity of users
 
-   in most configurations, including those running the Vidalia bundles,
 
-   TorK, etc. Or worse.
 
-   o Major security fixes:
 
-     - Close immediately after missing authentication on control port;
 
-       do not allow multiple authentication attempts.
 
- Changes in version 0.1.2.15 - 2007-07-17
 
-   Tor 0.1.2.15 fixes several crash bugs, fixes some anonymity-related
 
-   problems, fixes compilation on BSD, and fixes a variety of other
 
-   bugs. Everybody should upgrade.
 
-   o Major bugfixes (compilation):
 
-     - Fix compile on FreeBSD/NetBSD/OpenBSD. Oops.
 
-   o Major bugfixes (crashes):
 
-     - Try even harder not to dereference the first character after
 
-       an mmap(). Reported by lodger.
 
-     - Fix a crash bug in directory authorities when we re-number the
 
-       routerlist while inserting a new router.
 
-     - When the cached-routers file is an even multiple of the page size,
 
-       don't run off the end and crash. (Fixes bug 455; based on idea
 
-       from croup.)
 
-     - Fix eventdns.c behavior on Solaris: It is critical to include
 
-       orconfig.h _before_ sys/types.h, so that we can get the expected
 
-       definition of _FILE_OFFSET_BITS.
 
-   o Major bugfixes (security):
 
-     - Fix a possible buffer overrun when using BSD natd support. Bug
 
-       found by croup.
 
-     - When sending destroy cells from a circuit's origin, don't include
 
-       the reason for tearing down the circuit. The spec says we didn't,
 
-       and now we actually don't. Reported by lodger.
 
-     - Keep streamids from different exits on a circuit separate. This
 
-       bug may have allowed other routers on a given circuit to inject
 
-       cells into streams. Reported by lodger; fixes bug 446.
 
-     - If there's a never-before-connected-to guard node in our list,
 
-       never choose any guards past it. This way we don't expand our
 
-       guard list unless we need to.
 
-   o Minor bugfixes (guard nodes):
 
-     - Weight guard selection by bandwidth, so that low-bandwidth nodes
 
-       don't get overused as guards.
 
-   o Minor bugfixes (directory):
 
-     - Correctly count the number of authorities that recommend each
 
-       version. Previously, we were under-counting by 1.
 
-     - Fix a potential crash bug when we load many server descriptors at
 
-       once and some of them make others of them obsolete. Fixes bug 458.
 
-   o Minor bugfixes (hidden services):
 
-     - Stop tearing down the whole circuit when the user asks for a
 
-       connection to a port that the hidden service didn't configure.
 
-       Resolves bug 444.
 
-   o Minor bugfixes (misc):
 
-     - On Windows, we were preventing other processes from reading
 
-       cached-routers while Tor was running. Reported by janbar.
 
-     - Fix a possible (but very unlikely) bug in picking routers by
 
-       bandwidth. Add a log message to confirm that it is in fact
 
-       unlikely. Patch from lodger.
 
-     - Backport a couple of memory leak fixes.
 
-     - Backport miscellaneous cosmetic bugfixes.
 
- Changes in version 0.1.2.14 - 2007-05-25
 
-   Tor 0.1.2.14 changes the addresses of two directory authorities (this
 
-   change especially affects those who serve or use hidden services),
 
-   and fixes several other crash- and security-related bugs.
 
-   o Directory authority changes:
 
-     - Two directory authorities (moria1 and moria2) just moved to new
 
-       IP addresses. This change will particularly affect those who serve
 
-       or use hidden services.
 
-   o Major bugfixes (crashes):
 
-     - If a directory server runs out of space in the connection table
 
-       as it's processing a begin_dir request, it will free the exit stream
 
-       but leave it attached to the circuit, leading to unpredictable
 
-       behavior. (Reported by seeess, fixes bug 425.)
 
-     - Fix a bug in dirserv_remove_invalid() that would cause authorities
 
-       to corrupt memory under some really unlikely scenarios.
 
-     - Tighten router parsing rules. (Bugs reported by Benedikt Boss.)
 
-     - Avoid segfaults when reading from mmaped descriptor file. (Reported
 
-       by lodger.)
 
-   o Major bugfixes (security):
 
-     - When choosing an entry guard for a circuit, avoid using guards
 
-       that are in the same family as the chosen exit -- not just guards
 
-       that are exactly the chosen exit. (Reported by lodger.)
 
-   o Major bugfixes (resource management):
 
-     - If a directory authority is down, skip it when deciding where to get
 
-       networkstatus objects or descriptors. Otherwise we keep asking
 
-       every 10 seconds forever. Fixes bug 384.
 
-     - Count it as a failure if we fetch a valid network-status but we
 
-       don't want to keep it. Otherwise we'll keep fetching it and keep
 
-       not wanting to keep it. Fixes part of bug 422.
 
-     - If all of our dirservers have given us bad or no networkstatuses
 
-       lately, then stop hammering them once per minute even when we
 
-       think they're failed. Fixes another part of bug 422.
 
-   o Minor bugfixes:
 
-     - Actually set the purpose correctly for descriptors inserted with
 
-       purpose=controller.
 
-     - When we have k non-v2 authorities in our DirServer config,
 
-       we ignored the last k authorities in the list when updating our
 
-       network-statuses.
 
-     - Correctly back-off from requesting router descriptors that we are
 
-       having a hard time downloading.
 
-     - Read resolv.conf files correctly on platforms where read() returns
 
-       partial results on small file reads.
 
-     - Don't rebuild the entire router store every time we get 32K of
 
-       routers: rebuild it when the journal gets very large, or when
 
-       the gaps in the store get very large.
 
-   o Minor features:
 
-     - When routers publish SVN revisions in their router descriptors,
 
-       authorities now include those versions correctly in networkstatus
 
-       documents.
 
-     - Warn when using a version of libevent before 1.3b to run a server on
 
-       OSX or BSD: these versions interact badly with userspace threads.
 
- Changes in version 0.1.2.13 - 2007-04-24
 
-   This release features some major anonymity fixes, such as safer path
 
-   selection; better client performance; faster bootstrapping, better
 
-   address detection, and better DNS support for servers; write limiting as
 
-   well as read limiting to make servers easier to run; and a huge pile of
 
-   other features and bug fixes. The bundles also ship with Vidalia 0.0.11.
 
-   Tor 0.1.2.13 is released in memory of Rob Levin (1955-2006), aka lilo
 
-   of the Freenode IRC network, remembering his patience and vision for
 
-   free speech on the Internet.
 
-   o Major features, client performance:
 
-     - Weight directory requests by advertised bandwidth. Now we can
 
-       let servers enable write limiting but still allow most clients to
 
-       succeed at their directory requests. (We still ignore weights when
 
-       choosing a directory authority; I hope this is a feature.)
 
-     - Stop overloading exit nodes -- avoid choosing them 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.
 
-     - Rather than waiting a fixed amount of time between retrying
 
-       application connections, we wait only 10 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.
 
-     - Sometimes we didn't bother sending a RELAY_END cell when an attempt
 
-       to open a stream fails; now we do in more cases. 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.
 
-   o Major features, client functionality:
 
-     - Implement BEGIN_DIR cells, so we can connect to a directory
 
-       server via TLS to do encrypted directory requests rather than
 
-       plaintext. Enable via the TunnelDirConns and PreferTunneledDirConns
 
-       config options if you like. For now, this feature only works if
 
-       you already have a descriptor for the destination dirserver.
 
-     - Add support for transparent application 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. (Based on patch from tup.)
 
-     - Add support for using natd; this allows FreeBSDs earlier than
 
-       5.1.2 to have ipfw send connections through Tor without using
 
-       SOCKS. (Patch from Zajcev Evgeny with tweaks from tup.)
 
-   o Major features, servers:
 
-     - Setting up a dyndns name for your server is now optional: servers
 
-       with no hostname or IP address will 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.
 
-     - Directory servers now spool server descriptors, v1 directories,
 
-       and v2 networkstatus objects to buffers as needed rather than en
 
-       masse. They also mmap the cached-routers files. These steps save
 
-       lots of memory.
 
-     - Stop requiring clients to have well-formed certificates, and stop
 
-       checking nicknames in certificates. (Clients have certificates so
 
-       that they can look like Tor servers, but in the future we might want
 
-       to allow them to look like regular TLS clients instead. Nicknames
 
-       in certificates serve no purpose other than making our protocol
 
-       easier to recognize on the wire.) Implements proposal 106.
 
-   o Improvements on DNS support:
 
-     - Add "eventdns" asynchronous dns library originally based on code
 
-       from Adam Langley. Now we can discard the old rickety dnsworker
 
-       concept, and support a wider variety of DNS functions. Allows
 
-       multithreaded builds on NetBSD and OpenBSD again.
 
-     - 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 if they don't support eventdns.
 
-     - 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.
 
-     - Servers now check for the case when common DNS requests are going to
 
-       wildcarded addresses (i.e. all getting the same answer), and change
 
-       their exit policy to reject *:* if it's happening.
 
-     - 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.
 
-     - Start passing "ipv4" hints to getaddrinfo(), so servers don't do
 
-       useless IPv6 DNS resolves.
 
-     - Specify and implement client-side SOCKS5 interface for reverse DNS
 
-       lookups (see doc/socks-extensions.txt). Also cache them.
 
-     - When we change nameservers or IP addresses, reset and re-launch
 
-       our tests for DNS hijacking.
 
-   o Improvements on reachability testing:
 
-     - Servers send out a burst of long-range padding cells once they've
 
-       established that they're reachable. Spread them over 4 circuits,
 
-       so hopefully a few will be fast. This exercises bandwidth and
 
-       bootstraps them into the directory more quickly.
 
-     - When we find our DirPort to be reachable, publish a new descriptor
 
-       so we'll tell the world (reported by pnx).
 
-     - Directory authorities now only decide that routers are reachable
 
-       if their identity keys are as expected.
 
-     - Do DirPort reachability tests less often, since a single test
 
-       chews through many circuits before giving up.
 
-     - Avoid some false positives during reachability testing: don't try
 
-       to test via a server that's on the same /24 network as us.
 
-     - 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.
 
-     - 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.
 
-   o Improvements on rate limiting:
 
-     - Enable write limiting as well as read limiting. Now we sacrifice
 
-       capacity if we're pushing out lots of directory traffic, rather
 
-       than overrunning the user's intended bandwidth limits.
 
-     - Include TLS overhead when counting bandwidth usage; previously, we
 
-       would count only the bytes sent over TLS, but not the bytes used
 
-       to send them.
 
-     - Servers decline directory requests much more aggressively when
 
-       they're low on bandwidth. Otherwise they end up queueing more and
 
-       more directory responses, which can't be good for latency.
 
-     - But never refuse directory requests from local addresses.
 
-     - Be willing to read or write on local connections (e.g. controller
 
-       connections) even when the global rate limiting buckets are empty.
 
-     - Flush local controller connection buffers periodically as we're
 
-       writing to them, so we avoid queueing 4+ megabytes of data before
 
-       trying to flush.
 
-     - Revise and clean up the torrc.sample that we ship with; add
 
-       a section for BandwidthRate and BandwidthBurst.
 
-   o Major features, NT services:
 
-     - Install as NT_AUTHORITY\LocalService rather than as SYSTEM; add a
 
-       command-line flag so that admins can override the default by saying
 
-       "tor --service install --user "SomeUser"". This will not affect
 
-       existing installed services. Also, warn the user that the service
 
-       will look for its configuration file in the service user's
 
-       %appdata% directory. (We can't do the "hardwire the user's appdata
 
-       directory" trick any more, since we may not have read access to that
 
-       directory.)
 
-     - Support running the Tor service with a torrc not in the same
 
-       directory as tor.exe and default to using the torrc located in
 
-       the %appdata%\Tor\ of the user who installed the service. Patch
 
-       from Matt Edman.
 
-     - Add an --ignore-missing-torrc command-line option so that we can
 
-       get the "use sensible defaults if the configuration file doesn't
 
-       exist" behavior even when specifying a torrc location on the
 
-       command line.
 
-     - When stopping an NT service, wait up to 10 sec for it to actually
 
-       stop. (Patch from Matt Edman; resolves bug 295.)
 
-   o Directory authority improvements:
 
-     - Stop letting hibernating or obsolete servers affect uptime and
 
-       bandwidth cutoffs.
 
-     - Stop listing hibernating servers in the v1 directory.
 
-     - Authorities no longer recommend exits as guards if this would shift
 
-       too much load to the exit nodes.
 
-     - Authorities now specify server versions in networkstatus. This adds
 
-       about 2% to the size of compressed networkstatus docs, and allows
 
-       clients to tell which servers support BEGIN_DIR and which don't.
 
-       The implementation is forward-compatible with a proposed future
 
-       protocol version scheme not tied to Tor versions.
 
-     - DirServer configuration lines now have an orport= option so
 
-       clients can open encrypted tunnels to the authorities without
 
-       having downloaded their descriptors yet. Enabled for moria1,
 
-       moria2, tor26, and lefkada now in the default configuration.
 
-     - Add a BadDirectory flag to network status docs so that authorities
 
-       can (eventually) tell clients about caches they believe to be
 
-       broken. Not used yet.
 
-     - Allow authorities to list nodes as bad exits in their
 
-       approved-routers file by fingerprint or by address. If most
 
-       authorities set a BadExit flag for a server, clients don't think
 
-       of it as a general-purpose exit. Clients only consider authorities
 
-       that advertise themselves as listing bad exits.
 
-     - Patch from Steve Hildrey: Generate network status correctly on
 
-       non-versioning dirservers.
 
-     - Have directory authorities allow larger amounts of drift in uptime
 
-       without replacing the server descriptor: previously, a server that
 
-       restarted every 30 minutes could have 48 "interesting" descriptors
 
-       per day.
 
-     - 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.
 
-   o Directory mirrors and clients:
 
-     - Discard any v1 directory info that's over 1 month old (for
 
-       directories) or over 1 week old (for running-routers lists).
 
-     - Clients track responses with status 503 from dirservers. After a
 
-       dirserver has given us a 503, we try not to use it until an hour has
 
-       gone by, or until we have no dirservers that haven't given us a 503.
 
-     - When we get a 503 from a directory, and we're not a server, we no
 
-       longer count the failure against the total number of failures
 
-       allowed for the object we're trying to download.
 
-     - Prepare for servers to publish descriptors 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.
 
-     - 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.)
 
-   o Major fixes, crashes:
 
-     - Stop crashing when the controller asks us to resetconf more than
 
-       one config option at once. (Vidalia 0.0.11 does this.)
 
-     - Fix a longstanding obscure crash bug that could occur when we run
 
-       out of DNS worker processes, if we're not using eventdns. (Resolves
 
-       bug 390.)
 
-     - Fix an assert that could trigger if a controller quickly set then
 
-       cleared EntryNodes. (Bug found by Udo van den Heuvel.)
 
-     - Avoid crash when telling controller about stream-status and a
 
-       stream is detached.
 
-     - Avoid sending junk to controllers or segfaulting when a controller
 
-       uses EVENT_NEW_DESC with verbose nicknames.
 
-     - Stop triggering asserts if the controller tries to extend hidden
 
-       service circuits (reported by mwenge).
 
-     - If we start a server with ClientOnly 1, then set ClientOnly to 0
 
-       and hup, stop triggering an assert based on an empty onion_key.
 
-     - Mask out all signals in sub-threads; only the libevent signal
 
-       handler should be processing them. This should prevent some crashes
 
-       on some machines using pthreads. (Patch from coderman.)
 
-     - Disable kqueue on OS X 10.3 and earlier, to fix bug 371.
 
-   o Major fixes, anonymity/security:
 
-     - Automatically avoid picking more than one node from the same
 
-       /16 network when constructing a circuit. Add an
 
-       "EnforceDistinctSubnets" option to let people disable it if they
 
-       want to operate private test networks on a single subnet.
 
-     - When generating bandwidth history, round down to the nearest
 
-       1k. When storing accounting data, round up to the nearest 1k.
 
-     - When we're running as a server, remember when we last rotated onion
 
-       keys, so that we will rotate keys once they're a week old even if
 
-       we never stay up for a week ourselves.
 
-     - 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.
 
-     - 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.
 
-     - Fix a potential race condition in the rpm installer. Found by
 
-       Stefan Nordhausen.
 
-     - Do not log IPs with TLS failures for incoming TLS
 
-       connections. (Fixes bug 382.)
 
-   o Major fixes, other:
 
-     - If our system clock jumps back in time, don't publish a negative
 
-       uptime in the descriptor.
 
-     - When we start during an accounting interval before it's time to wake
 
-       up, remember to wake up at the correct time. (May fix bug 342.)
 
-     - Previously, we would cache up to 16 old networkstatus documents
 
-       indefinitely, if they came from nontrusted authorities. Now we
 
-       discard them if they are more than 10 days old.
 
-     - 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.
 
-     - 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.
 
-     - 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 New config options or behaviors:
 
-     - When EntryNodes are configured, rebuild the guard list to contain,
 
-       in order: the EntryNodes that were guards before; the rest of the
 
-       EntryNodes; the nodes that were guards before.
 
-     - Do not warn when individual nodes in the configuration's EntryNodes,
 
-       ExitNodes, etc are down: warn only when all possible nodes
 
-       are down. (Fixes bug 348.)
 
-     - Put a lower-bound on MaxAdvertisedBandwidth.
 
-     - Start using the state file to store bandwidth accounting data:
 
-       the bw_accounting file is now obsolete. We'll keep generating it
 
-       for a while for people who are still using 0.1.2.4-alpha.
 
-     - Try to batch changes to the state file so that we do as few
 
-       disk writes as possible while still storing important things in
 
-       a timely fashion.
 
-     - The state file and the bw_accounting file get saved less often when
 
-       the AvoidDiskWrites config option is set.
 
-     - Make PIDFile work on Windows.
 
-     - Add internal descriptions for a bunch of configuration options:
 
-       accessible via controller interface and in comments in saved
 
-       options files.
 
-     - Reject *:563 (NNTPS) in the default exit policy. We already reject
 
-       NNTP by default, so this seems like a sensible addition.
 
-     - Clients now reject hostnames with invalid characters. This should
 
-       avoid some inadvertent info leaks. Add an option
 
-       AllowNonRFC953Hostnames to disable this behavior, in case somebody
 
-       is running a private network with hosts called @, !, and #.
 
-     - Check for addresses with invalid characters at the exit as well,
 
-       and warn less verbosely when they fail. You can override this by
 
-       setting ServerDNSAllowNonRFC953Addresses to 1.
 
-     - Remove some options that have been deprecated since at least
 
-       0.1.0.x: AccountingMaxKB, LogFile, DebugLogFile, LogLevel, and
 
-       SysLog. Use AccountingMax instead of AccountingMaxKB, and use Log
 
-       to set log options. Mark PathlenCoinWeight as obsolete.
 
-     - Stop accepting certain malformed ports in configured exit policies.
 
-     - When the user uses bad syntax in the Log config line, stop
 
-       suggesting other bad syntax as a replacement.
 
-     - Add new config option "ResolvConf" to let the server operator
 
-       choose an alternate resolve.conf file when using eventdns.
 
-     - 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).
 
-     - Make TrackExitHosts case-insensitive, and fix the behavior of
 
-       ".suffix" TrackExitHosts items to avoid matching in the middle of
 
-       an address.
 
-     - New DirPort behavior: if you have your dirport set, you download
 
-       descriptors aggressively like a directory mirror, whether or not
 
-       your ORPort is set.
 
-   o Docs:
 
-     - Create a new file ReleaseNotes which was the old ChangeLog. The
 
-       new ChangeLog file now includes the notes for all development
 
-       versions too.
 
-     - Add a new address-spec.txt document to describe our special-case
 
-       addresses: .exit, .onion, and .noconnnect.
 
-     - Fork the v1 directory protocol into its own spec document,
 
-       and mark dir-spec.txt as the currently correct (v2) spec.
 
-   o Packaging, porting, and contrib
 
-     - "tor --verify-config" now exits with -1(255) or 0 depending on
 
-       whether the config options are bad or good.
 
-     - The Debian package now uses --verify-config when (re)starting,
 
-       to distinguish configuration errors from other errors.
 
-     - Adapt a patch from goodell to let the contrib/exitlist script
 
-       take arguments rather than require direct editing.
 
-     - Prevent the contrib/exitlist script from printing the same
 
-       result more than once.
 
-     - Add support to tor-resolve tool for reverse lookups and SOCKS5.
 
-     - In the hidden service example in torrc.sample, stop recommending
 
-       esoteric and discouraged hidden service options.
 
-     - Patch from Michael Mohr to contrib/cross.sh, so it checks more
 
-       values before failing, and always enables eventdns.
 
-     - Try to detect Windows correctly when cross-compiling.
 
-     - Libevent-1.2 exports, but does not define in its headers, strlcpy.
 
-       Try to fix this in configure.in by checking for most functions
 
-       before we check for libevent.
 
-     - Update RPMs to require libevent 1.2.
 
-     - 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.)
 
-     - Build with recent (1.3+) libevents on platforms that do not
 
-       define the nonstandard types "u_int8_t" and friends.
 
-     - Remove architecture from OS X builds. The official builds are
 
-       now universal binaries.
 
-     - Run correctly on OS X platforms with case-sensitive filesystems.
 
-     - Correctly set maximum connection limit on Cygwin. (This time
 
-       for sure!)
 
-     - Start compiling on MinGW on Windows (patches from Mike Chiussi
 
-       and many others).
 
-     - Start compiling on MSVC6 on Windows (patches from Frediano Ziglio).
 
-     - 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.
 
-     - On architectures where sizeof(int)>4, still clamp declarable
 
-       bandwidth to INT32_MAX.
 
-   o Minor features, controller:
 
-     - Warn the user when an application uses the obsolete binary v0
 
-       control protocol. We're planning to remove support for it during
 
-       the next development series, so it's good to give people some
 
-       advance warning.
 
-     - Add STREAM_BW events to report per-entry-stream bandwidth
 
-       use. (Patch from Robert Hogan.)
 
-     - Rate-limit SIGNEWNYM signals in response to controllers that
 
-       impolitely generate them for every single stream. (Patch from
 
-       mwenge; closes bug 394.)
 
-     - Add a REMAP status to stream events to note that a stream's
 
-       address has changed because of a cached address or a MapAddress
 
-       directive.
 
-     - Make REMAP stream events have a SOURCE (cache or exit), and
 
-       make them generated in every case where we get a successful
 
-       connected or resolved cell.
 
-     - Track reasons for OR connection failure; make these reasons
 
-       available via the controller interface. (Patch from Mike Perry.)
 
-     - Add a SOCKS_BAD_HOSTNAME client status event so controllers
 
-       can learn when clients are sending malformed hostnames to Tor.
 
-     - Specify and implement some of the controller status events.
 
-     - Have GETINFO dir/status/* work on hosts with DirPort disabled.
 
-     - Reimplement GETINFO so that info/names stays in sync with the
 
-       actual keys.
 
-     - Implement "GETINFO fingerprint".
 
-     - Implement "SETEVENTS GUARD" so controllers can get updates on
 
-       entry guard status as it changes.
 
-     - Make all connections to addresses of the form ".noconnect"
 
-       immediately get closed. This lets application/controller combos
 
-       successfully test whether they're talking to the same Tor by
 
-       watching for STREAM events.
 
-     - 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 why a remote OR told us to close a circuit.
 
-     - Stream events also now have REASON and REMOTE_REASON fields,
 
-       working much like those for circuit events.
 
-     - There's now a GETINFO ns/... field so that controllers can ask Tor
 
-       about the current status of a router.
 
-     - A new event type "NS" to inform a controller when our opinion of
 
-       a router's status has changed.
 
-     - Add a GETINFO events/names and GETINFO features/names so controllers
 
-       can tell which events and features are supported.
 
-     - A new CLEARDNSCACHE signal to allow controllers to clear the
 
-       client-side DNS cache without expiring circuits.
 
-     - 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.
 
-     - Export the default exit policy via the control port, so controllers
 
-       don't need to guess what it is / will be later.
 
-   o Minor bugfixes, controller:
 
-     - When creating a circuit via the controller, send a 'launched'
 
-       event when we're done, so we follow the spec better.
 
-     - Correct the control spec to match how the code actually responds
 
-       to 'getinfo addr-mappings/*'. Reported by daejees.
 
-     - The control spec described a GUARDS event, but the code
 
-       implemented a GUARD event. Standardize on GUARD, but let people
 
-       ask for GUARDS too. Reported by daejees.
 
-     - Give the controller END_STREAM_REASON_DESTROY events _before_ we
 
-       clear the corresponding on_circuit variable, and remember later
 
-       that we don't need to send a redundant CLOSED event. (Resolves part
 
-       3 of bug 367.)
 
-     - Report events where a resolve succeeded or where we got a socks
 
-       protocol error correctly, rather than calling both of them
 
-       "INTERNAL".
 
-     - Change reported stream target addresses to IP consistently when
 
-       we finally get the IP from an exit node.
 
-     - Send log messages to the controller even if they happen to be very
 
-       long.
 
-     - Flush ERR-level controller status events just like we currently
 
-       flush ERR-level log events, so that a Tor shutdown doesn't prevent
 
-       the controller from learning about current events.
 
-     - Report the circuit number correctly in STREAM CLOSED events. Bug
 
-       reported by Mike Perry.
 
-     - Do not report bizarre values for results of accounting GETINFOs
 
-       when the last second's write or read exceeds the allotted bandwidth.
 
-     - Report "unrecognized key" rather than an empty string when the
 
-       controller tries to fetch a networkstatus that doesn't exist.
 
-     - When the controller does a "GETINFO network-status", tell it
 
-       about even those routers whose descriptors are very old, and use
 
-       long nicknames where appropriate.
 
-     - Fix handling of verbose nicknames with ORCONN controller events:
 
-       make them show up exactly when requested, rather than exactly when
 
-       not requested.
 
-     - Controller signals now work on non-Unix platforms that don't define
 
-       SIGUSR1 and SIGUSR2 the way we expect.
 
-     - Respond to SIGNAL command before we execute the signal, in case
 
-       the signal shuts us down. Suggested by Karsten Loesing.
 
-     - Handle reporting OR_CONN_EVENT_NEW events to the controller.
 
-   o Minor features, code performance:
 
-     - Major performance improvement on inserting descriptors: change
 
-       algorithm from O(n^2) to O(n).
 
-     - Do not rotate onion key immediately after setting it for the first
 
-       time.
 
-     - Call router_have_min_dir_info half as often. (This is showing up in
 
-       some profiles, but not others.)
 
-     - When using GCC, make log_debug never get called at all, and its
 
-       arguments never get evaluated, when no debug logs are configured.
 
-       (This is showing up in some profiles, but not others.)
 
-     - Statistics dumped by -USR2 now include a breakdown of public key
 
-       operations, for profiling.
 
-     - Make the common memory allocation path faster on machines where
 
-       malloc(0) returns a pointer.
 
-     - 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.
 
-     - Use OpenSSL's AES implementation on platforms where it's faster.
 
-       This could save us as much as 10% CPU usage.
 
-   o Minor features, descriptors and descriptor handling:
 
-     - Avoid duplicate entries on MyFamily line in server descriptor.
 
-     - When Tor receives a router descriptor that it asked for, but
 
-       no longer wants (because it has received fresh networkstatuses
 
-       in the meantime), do not warn the user. Cache the descriptor if
 
-       we're a cache; drop it if we aren't.
 
-     - Servers no longer ever list themselves in their "family" line,
 
-       even if configured to do so. This makes it easier to configure
 
-       family lists conveniently.
 
-   o Minor fixes, confusing/misleading log messages:
 
-     - Display correct results when reporting which versions are
 
-       recommended, and how recommended they are. (Resolves bug 383.)
 
-     - Inform the server operator when we decide not to advertise a
 
-       DirPort due to AccountingMax enabled or a low BandwidthRate.
 
-     - 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.
 
-     - Remove even more protocol-related warnings from Tor server logs,
 
-       such as bad TLS handshakes and malformed begin cells.
 
-     - Fix bug 314: Tor clients issued "unsafe socks" warnings even
 
-       when the IP address is mapped through MapAddress to a hostname.
 
-     - 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".
 
-   o Minor fixes, old/obsolete behavior:
 
-     - Start assuming we can use a create_fast cell if we don't know
 
-       what version a router is running.
 
-     - We no longer look for identity and onion keys in "identity.key" and
 
-       "onion.key" -- these were replaced by secret_id_key and
 
-       secret_onion_key in 0.0.8pre1.
 
-     - We no longer require unrecognized directory entries to be
 
-       preceded by "opt".
 
-     - Drop compatibility with obsolete Tors that permit create cells
 
-       to have the wrong circ_id_type.
 
-     - Remove code to special-case "-cvs" ending, since it has not
 
-       actually mattered since 0.0.9.
 
-     - Don't re-write the fingerprint file every restart, unless it has
 
-       changed.
 
-   o Minor fixes, misc client-side behavior:
 
-     - Always remove expired routers and networkstatus docs before checking
 
-       whether we have enough information to build circuits. (Fixes
 
-       bug 373.)
 
-     - When computing clock skew from directory HTTP headers, consider what
 
-       time it was when we finished asking for the directory, not what
 
-       time it is now.
 
-     - 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.
 
-     - Expire socks connections if they spend too long waiting for the
 
-       handshake to finish. Previously we would let them sit around for
 
-       days, if the connecting application didn't close them either.
 
-     - And if the socks handshake hasn't started, don't send a
 
-       "DNS resolve socks failed" handshake reply; just close it.
 
-     - If the user asks to use invalid exit nodes, be willing to use
 
-       unstable ones.
 
-     - 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.
 
-     - Claim a commonname of Tor, rather than TOR, in TLS handshakes.
 
-     - Fix a memory leak when we ask for "all" networkstatuses and we
 
-       get one we don't recognize.
 
- Changes in version 0.1.1.26 - 2006-12-14
 
-   o Security bugfixes:
 
-     - Stop sending the HttpProxyAuthenticator string to directory
 
-       servers when directory connections are tunnelled through Tor.
 
-     - Clients no longer store bandwidth history in the state file.
 
-     - Do not log introduction points for hidden services if SafeLogging
 
-       is set.
 
-   o Minor bugfixes:
 
-     - Fix an assert failure when a directory authority sets
 
-       AuthDirRejectUnlisted and then receives a descriptor from an
 
-       unlisted router (reported by seeess).
 
- Changes in version 0.1.1.25 - 2006-11-04
 
-   o Major bugfixes:
 
-     - When a client asks us to resolve (rather than connect to)
 
-       an address, and we have a cached answer, give them the cached
 
-       answer. Previously, we would give them no answer at all.
 
-     - We were building exactly the wrong circuits when we predict
 
-       hidden service requirements, meaning Tor would have to build all
 
-       its circuits on demand.
 
-     - If none of our live entry guards have a high uptime, but we
 
-       require a guard with a high uptime, try adding a new guard before
 
-       we give up on the requirement. This patch should make long-lived
 
-       connections more stable on average.
 
-     - 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 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:
 
-     - Avoid a memory corruption bug when creating a hash table for
 
-       the first time.
 
-     - Avoid possibility of controller-triggered crash when misusing
 
-       certain commands from a v0 controller on platforms that do not
 
-       handle printf("%s",NULL) gracefully.
 
-     - Avoid infinite loop on unexpected controller input.
 
-     - Don't log spurious warnings when we see a circuit close reason we
 
-       don't recognize; it's probably just from a newer version of Tor.
 
-     - Add Vidalia to the OS X uninstaller script, so when we uninstall
 
-       Tor/Privoxy we also uninstall Vidalia.
 
- 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
 
 
  |