12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921 |
- Changes in version 0.2.2.11-alpha - 2010-03-??
- o Minor features:
- - Experiment with a more aggressive approach to preventing clients
- from making one-hop exit streams. Exit relays who want to try it
- out can set "RefuseUnknownExits 1" in their torrc, and then look
- for "Attempt by %s to open a stream" log messages. Let us know
- how it goes!
- o Minor bugfixes:
- - When we cleaned up the contrib/tor-exit-notice.html file, we left
- out some key text. Fixes bug 1295.
- Changes in version 0.2.2.10-alpha - 2010-03-07
- Tor 0.2.2.10-alpha fixes a regression introduced in 0.2.2.9-alpha that
- could prevent relays from guessing their IP address correctly. It also
- starts the groundwork for another client-side performance boost, since
- currently we're not making efficient use of relays that have both the
- Guard flag and the Exit flag.
- 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.2.9-alpha; fixes bug 1269.
- o Major features (performance):
- - Directory authorities now compute consensus weightings that instruct
- clients how to weight relays flagged as Guard, Exit, Guard+Exit,
- and no flag. Clients that use these weightings will 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 Minor features (performance):
- - 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.
- o Minor features:
- - Allow disabling building of the manpages. Skipping the manpage
- speeds up the build considerably.
- o Minor bugfixes (on 0.2.2.x):
- - Fix a memleak in the EXTENDCIRCUIT logic. Spotted by coverity.
- Bugfix on 0.2.2.9-alpha.
- - Disallow values larger than INT32_MAX for PerConnBWRate|Burst
- config option. Bugfix on 0.2.2.7-alpha.
- - Ship the asciidoc-helper file in the tarball, so that people can
- build from source if they want to, and touching the .1.txt files
- doesn't break the build. Bugfix on 0.2.2.9-alpha.
- o Minor bugfixes (on 0.2.1.x or earlier):
- - 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.
- o Code simplifications and refactoring:
- - Fix some urls in the exit notice file and make it XHTML1.1 strict
- compliant. Based on a patch from Christian Kujau.
- - Don't use sed in asciidoc-helper anymore.
- - Make the build process fail if asciidoc cannot be found and
- building with asciidoc isn't disabled.
- Changes in version 0.2.2.9-alpha - 2010-02-22
- Tor 0.2.2.9-alpha makes Tor work again on the latest OS X, updates the
- location of a directory authority, and cleans up a bunch of small bugs.
- o Directory authority changes:
- - Change IP address for dannenberg (v3 directory authority), and
- remove moria2 (obsolete v1, v2 directory authority and v0 hidden
- service directory authority) from the list.
- 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.
- - 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.
- - 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 static compilation by listing the openssl libraries in the right
- order. Bugfix on Tor 0.2.2.8-alpha; fixes bug 1237.
- - Resume handling .exit hostnames in a special way: originally we
- stripped the .exit part and used the requested exit relay. In
- 0.2.2.1-alpha we stopped treating them in any special way, meaning
- if you use a .exit address then Tor will pass it on to the exit
- relay. Now we reject the .exit stream outright, since that behavior
- might be more expected by the user. Found and diagnosed by Scott
- Bennett and Downie on or-talk.
- - 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.)
- - Avoid a bogus overlapped memcpy in tor_addr_copy(). Reported by
- "memcpyfail".
- - Make the DNSPort option work with libevent 2.x. Don't alter the
- behaviour for libevent 1.x. Fixes bug 1143. Found by SwissTorExit.
- - Emit a GUARD DROPPED controller event for a case we missed.
- - Make more fields in the controller protocol case-insensitive, since
- control-spec.txt said they were.
- - Refactor resolve_my_address() to not use gethostbyname() anymore.
- Fixes bug 1244; bugfix on 0.0.2pre25. Reported by Mike Mestnik.
- - 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.
- o Code simplifications and refactoring:
- - Generate our manpage and HTML documentation using Asciidoc. This
- change should make it easier to maintain the documentation, and
- produce nicer HTML.
- - Remove the
- Bonetti, Tor builds fine without any special tweaking on recent
- iPhone SDK versions.
- - 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.
- - Enabled various circuit build timeout constants to be controlled
- by consensus parameters. Also set better defaults for these
- parameters based on experimentation on broadband and simulated
- high latency links.
- o Minor features:
- - 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.
- - Future-proof the controller protocol a bit by ignoring keyword
- arguments we do not recognize.
- - Expand homedirs passed to tor-checkkey. This should silence a
- coverity complaint about passing a user-supplied string into
- open() without checking it.
- Changes in version 0.2.1.25 - 2010-03-??
- 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 Directory authority changes:
- - Change IP address for dannenberg (v3 directory authority), and
- remove moria2 (obsolete v1, v2 directory authority and v0 hidden
- service directory authority) from the list.
- 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.2.8-alpha - 2010-01-26
- Tor 0.2.2.8-alpha fixes a crash bug in 0.2.2.7-alpha that has been
- causing bridge relays to disappear. If you're running a bridge,
- please upgrade.
- o Major bugfixes:
- - Fix a memory corruption bug on bridges that occured during the
- inclusion of stats data in extra-info descriptors. Also fix the
- interface for geoip_get_bridge_stats* to prevent similar bugs in
- the future. Diagnosis by Tas, patch by Karsten and Sebastian.
- Fixes bug 1208; bugfix on 0.2.2.7-alpha.
- o Minor bugfixes:
- - 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.
- Changes in version 0.2.2.7-alpha - 2010-01-19
- Tor 0.2.2.7-alpha fixes a huge client-side performance bug, as well
- as laying the groundwork for further relay-side performance fixes. It
- also starts cleaning up client behavior with respect to the EntryNodes,
- ExitNodes, and StrictNodes config options.
- This release also rotates two directory authority keys, due to a
- security breach of some of the Torproject servers.
- o Directory authority changes:
- - Rotate keys (both v3 identity and relay identity) for moria1
- and gabelmoo.
- o Major features (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.
- - When choosing which cells to relay first, relays can 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. You can override
- this default by using the new "CircuitPriorityHalflife" config
- option. Design and code by Ian Goldberg, Can Tang, and Chris
- Alexander.
- - 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 (relay selection options):
- - Switch to a StrictNodes config option, rather than the previous
- "StrictEntryNodes" / "StrictExitNodes" separation that was missing a
- "StrictExcludeNodes" option.
- - 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.
- - If EntryNodes or ExitNodes are set, be more willing to use an
- unsuitable (e.g. slow or unstable) circuit. The user asked for it,
- they get it.
- - 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
- the network changes.
- 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.
- o Minor features:
- - 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.
- - 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 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.
- - New options for SafeLogging to allow scrubbing only log messages
- generated while acting as a relay.
- - Ship the bridges spec file in the tarball too.
- - 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.
- o Minor bugfixes (compiling):
- - Fix compilation on OS X 10.3, which has a stub mlockall() but
- hides it. Bugfix on 0.2.2.6-alpha.
- - Fix compilation on Solaris by removing support for the
- DisableAllSwap config option. Solaris doesn't have an rlimit for
- mlockall, so we cannot use it safely. Fixes bug 1198; bugfix on
- 0.2.2.6-alpha.
- o Minor bugfixes (crashes):
- - Do not segfault when writing buffer stats when we haven't observed
- a single circuit to report about. Found by Fabian Lanze. Bugfix on
- 0.2.2.1-alpha.
- - 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 an impossible-to-actually-trigger buffer overflow in relay
- descriptor generation. Bugfix on 0.1.0.15.
- o Minor bugfixes (privacy):
- - 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.
- - 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.
- o Minor bugfixes (other):
- - Resolve an edge case in path weighting that could make us misweight
- our relay selection. Fixes bug 1203; bugfix on 0.0.8rc1.
- - Fix statistics on client numbers by country as seen by bridges that
- were broken in 0.2.2.1-alpha. Also switch to reporting full 24-hour
- intervals instead of variable 12-to-48-hour intervals.
- - 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.
- - Update our OpenSSL 0.9.8l fix so that it works with OpenSSL 0.9.8m
- too.
- o Removed features:
- - Remove the HSAuthorityRecordStats option that version 0 hidden
- service authorities could have used to track statistics of overall
- hidden service usage.
- Changes in version 0.2.1.22 - 2010-01-19
- Tor 0.2.1.22 fixes a critical privacy problem in bridge directory
- authorities
- 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.2.6-alpha - 2009-11-19
- Tor 0.2.2.6-alpha lays the groundwork for many upcoming features:
- support for the new lower-footprint "microdescriptor" directory design,
- future-proofing our consensus format against new hash functions or
- other changes, and an Android port. It also makes Tor compatible with
- the upcoming OpenSSL 0.9.8l release, and fixes a variety of bugs.
- o Major features:
- - Directory authorities can 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 can now agree on and publish small summaries
- of router information that clients can use in place of regular
- server descriptors. This transition will eventually allow 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.
- - 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.
- - Numerous changes, bugfixes, and workarounds from Nathan Freitas
- to help Tor build correctly for Android phones.
- 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, but OpenSSL 0.9.8l
- won't work unless we say we are.
- o Minor bugfixes:
- - Fix a crash bug when trying to initialize the evdns module in
- Libevent 2. Bugfix on 0.2.1.16-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.
- - 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 numerous small code-flaws found by Coverity Scan Rung 3.
- - 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.
- - 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.
- - Bridges now use "reject *:*" as their default exit policy. Bugfix
- on 0.2.0.3-alpha; fixes bug 1113.
- - Fix a memory leak on directory authorities during voting that was
- introduced in 0.2.2.1-alpha. Found via valgrind.
- 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
- 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.2.5-alpha - 2009-10-11
- Tor 0.2.2.5-alpha fixes a few compile problems in 0.2.2.4-alpha.
- o Major bugfixes:
- - Make the tarball compile again. Oops. Bugfix on 0.2.2.4-alpha.
- o New directory authorities:
- - Move dizum to an alternate IP address.
- Changes in version 0.2.2.4-alpha - 2009-10-10
- Tor 0.2.2.4-alpha fixes more crash bugs in 0.2.2.2-alpha. It also
- introduces a new unit test framework, shifts directry authority
- addresses around to reduce the impact from recent blocking events,
- and fixes a few smaller bugs.
- o Major bugfixes:
- - Fix several more asserts in the circuit_build_times code, for
- example one that causes Tor to fail to start once we have
- accumulated 5000 build times in the state file. Bugfixes on
- 0.2.2.2-alpha; fixes bug 1108.
- o New directory authorities:
- - Move moria1 and Tonga to alternate IP addresses.
- o Minor features:
- - Log SSL state transitions at debug level during handshake, and
- include SSL states in error messages. This may help debug future
- SSL handshake issues.
- - Add a new "Handshake" log domain for activities that happen
- during the TLS handshake.
- - Revert to the "June 3 2009" ip-to-country file. The September one
- seems to have removed most US IP addresses.
- - Directory authorities now reject Tor relays with versions less than
- 0.1.2.14. This step cuts out four relays from the current network,
- none of which are very big.
- o Minor bugfixes:
- - Fix a couple of smaller issues with gathering statistics. Bugfixes
- on 0.2.2.1-alpha.
- - Fix two memory leaks in the error case of
- circuit_build_times_parse_state(). Bugfix on 0.2.2.2-alpha.
- - Don't count one-hop circuits when we're estimating how long it
- takes circuits to build on average. Otherwise we'll set our circuit
- build timeout lower than we should. Bugfix on 0.2.2.2-alpha.
- - 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 Code simplifications and refactoring:
- - 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.
- Changes in version 0.2.2.3-alpha - 2009-09-23
- Tor 0.2.2.3-alpha fixes a few crash bugs in 0.2.2.2-alpha.
- o Major bugfixes:
- - Fix an overzealous assert in our new circuit build timeout code.
- Bugfix on 0.2.2.2-alpha; fixes bug 1103.
- o Minor bugfixes:
- - If the networkstatus consensus tells us that we should use a
- negative circuit package window, ignore it. Otherwise we'll
- believe it and then trigger an assert. Bugfix on 0.2.2.2-alpha.
- Changes in version 0.2.2.2-alpha - 2009-09-21
- Tor 0.2.2.2-alpha introduces our latest performance improvement for
- clients: Tor tracks the average time it takes to build a circuit, and
- avoids using circuits that take too long to build. For fast connections,
- this feature can cut your expected latency in half. For slow or flaky
- connections, it could ruin your Tor experience. Let us know if it does!
- o Major features:
- - 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.
- We are especially looking for reports (good and bad) from users with
- both EDGE and broadband connections that can move from broadband
- to EDGE and find out if the build-time data in the .tor/state gets
- reset without loss of Tor usability. You should also see a notice
- log message telling you that Tor has reset its timeout.
- - 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.
- - 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 Major bugfixes:
- - 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.
- o Minor bugfixes:
- - 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 parsing for memory or time units given without a space between
- the number and the unit. Bugfix on 0.2.2.1-alpha; fixes bug 1076.
- - A networkstatus vote must contain exactly one signature. Spec
- conformance issue. Bugfix on 0.2.0.3-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, but more problems
- remain. 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.
- - 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.
- 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.
- - Update to the "September 4 2009" ip-to-country file.
- Changes in version 0.2.2.1-alpha - 2009-08-26
- Tor 0.2.2.1-alpha disables ".exit" address notation by default, allows
- Tor clients to bootstrap on networks where only port 80 is reachable,
- makes it more straightforward to support hardware crypto accelerators,
- and starts the groundwork for gathering stats safely at relays.
- o Security fixes:
- - 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.
- o New directory authorities:
- - Set up urras (run by Jacob Appelbaum) as the seventh v3 directory
- authority.
- o Major features:
- - New AccelName and AccelDir options add support for dynamic OpenSSL
- hardware crypto acceleration engines.
- - 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 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
- before the release of Tor 0.0.0. This is the new winner of the
- oldest-bug prize.
- o New options for gathering stats safely:
- - Directories that set "DirReqStatistics 1" write statistics on
- directory request to disk every 24 hours. As compared to the
-
- 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.
- o Minor features:
- - New
- source files Tor was built with.
- - The "torify" script now uses torsocks where available.
- - 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.
- - 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.
- - 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.
- - Instead of adding the svn revision to the Tor version string, report
- the git commit (when we're building from a git checkout).
- o Minor bugfixes:
- - If any 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".
- - If the cached cert file is unparseable, warn but don't exit.
- - Fix possible segmentation fault on directory authorities. Bugfix on
- 0.2.1.14-rc.
- - When Tor fails to parse a descriptor of any kind, dump it to disk.
- Might help diagnosing bug 1051.
- o Deprecated and removed features:
- - The controller no longer accepts the old obsolete "addr-mappings/"
- or "unregistered-servers-" GETINFO values.
- - 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.
- - The EXTENDED_EVENTS and VERBOSE_NAMES controller features are now
- always on; using them is necessary for correct forward-compatible
- controllers.
- - Remove support for .noconnect style addresses. Nobody was using
- them, and they provided another avenue for detecting Tor users
- via application-level web tricks.
- o Packaging changes:
- - Upgrade Vidalia from 0.1.15 to 0.2.3 in the Windows and OS X
- installer bundles. See
- https://trac.vidalia-project.net/browser/vidalia/tags/vidalia-0.2.3/CHANGELOG
- for details of what's new in Vidalia 0.2.3.
- - Windows Vidalia Bundle: update Privoxy from 3.0.6 to 3.0.14-beta.
- - OS X Vidalia Bundle: move to Polipo 1.0.4 with Tor specific
- configuration file, rather than the old Privoxy.
- - OS X Vidalia Bundle: Vidalia, Tor, and Polipo are compiled as
- x86-only for better compatibility with OS X 10.6, aka Snow Leopard.
- - OS X Tor Expert Bundle: Tor is compiled as x86-only for
- better compatibility with OS X 10.6, aka Snow Leopard.
- - OS X Vidalia Bundle: The multi-package installer is now replaced
- by a simple drag and drop to the /Applications folder. This change
- occurred with the upgrade to Vidalia 0.2.3.
- 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 on Tor 0.2.1.3-alpha through 0.2.1.18.
- 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 Build fixes:
- - Add LIBS=-lrt to Makefile.am so the Tor RPMs use a static libevent.
- Changes in version 0.2.1.17-rc - 2009-07-07
- Tor 0.2.1.17-rc marks the fourth -- and hopefully last -- release
- candidate for the 0.2.1.x series. It lays the groundwork for further
- client performance improvements, and also fixes a big bug with directory
- authorities that were causing them to assign Guard and Stable flags
- poorly.
- The Windows bundles also finally include the geoip database that we
- thought we'd been shipping since 0.2.0.x (oops), and the OS X bundles
- should actually install Torbutton rather than giving you a cryptic
- failure message (oops).
- o Major features:
- - Clients now 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 more of
- proposal 141.
- o Major bugfixes:
- - 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. Bugfix on 0.2.0.x.
- - 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 very wrong, hurting network performance. Fixes bugs 696 and
- 969. Bugfix on 0.2.0.6-alpha.
- o Minor bugfixes:
- - Serve the DirPortFrontPage page even when we have been approaching
- our quotas recently. Fixes bug 1013; bugfix on 0.2.1.8-alpha.
- - 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 fixed 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. Bugfix on 0.2.0.x; fixes bugs 1015 and 1016.
- - 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.
- - Fix a log message that did not respect the SafeLogging option.
- Resolves bug 1027.
- o Minor features:
- - 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.
- 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.1.16-rc - 2009-06-20
- Tor 0.2.1.16-rc speeds up performance for fast exit relays, and fixes
- a bunch of minor bugs.
- o Security fixes:
- - 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 performance improvements (on 0.2.0.x):
- - 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. Found
- by Jacob.
- - Disable some debugging checks that appeared in exit node profile
- data.
- o Minor features:
- - Update to the "June 3 2009" ip-to-country file.
- - Do not have tor-resolve automatically refuse all .onion addresses;
- if AutomapHostsOnResolve is set in your torrc, this will work fine.
- o Minor bugfixes (on 0.2.0.x):
- - Log correct error messages for DNS-related network errors on
- Windows.
- - 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.
- - 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.
- o Minor bugfixes (on 0.2.1.x):
- - Don't warn users about low port and hibernation mix when they
- provide a *ListenAddress directive to fix that. Bugfix on
- 0.2.1.15-rc.
- - When switching back and forth between bridge mode, do not start
- gathering GeoIP data until two hours have passed.
- - Do not complain that the user has requested an excluded node as
- an exit when the node is not really an exit. This could happen
- because the circuit was for testing, or an introduction point.
- Fix for bug 984.
- Changes in version 0.2.1.15-rc - 2009-05-25
- Tor 0.2.1.15-rc marks the second release candidate for the 0.2.1.x
- series. It fixes a major bug on fast exit relays, as well as a variety
- of more minor bugs.
- o Major bugfixes (on 0.2.0.x):
- - 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 (on 0.2.0.x):
- - 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.
- - 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.
- - 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.
- - Fix a bug that made stream bandwidth get misreported to the
- controller.
- - Stop using malloc_usable_size() to use more area than we had
- actually allocated: it was safe, but made valgrind really unhappy.
- - Fix a memory leak when v3 directory authorities load their keys
- and cert from disk. Bugfix on 0.2.0.1-alpha.
- o Minor bugfixes (on 0.2.1.x):
- - Fix use of freed memory when deciding to mark a non-addable
- descriptor as never-downloadable. Bugfix on 0.2.1.9-alpha.
- Changes in version 0.2.1.14-rc - 2009-04-12
- Tor 0.2.1.14-rc marks the first release candidate for the 0.2.1.x
- series. It begins fixing some major performance problems, and also
- finally addresses the bug that was causing relays on dynamic IP
- addresses to fall out of the directory.
- o Major features:
- - 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.
- o Major bugfixes (on 0.2.0):
- - 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.
- - 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.
- - Avoid crashing in the presence of certain malformed descriptors.
- Found by lark, and by automated fuzzing.
- o Minor features:
- - 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.
- - 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.
- - Raise the minimum bandwidth 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.
- - Update to the "April 3 2009" ip-to-country file.
- o Minor bugfixes:
- - Avoid trying to print raw memory to the logs when we decide to
- give up on downloading a given relay descriptor. Bugfix on
- 0.2.1.9-alpha.
- - In tor-resolve, when the Tor client to use is specified by
- <hostname>:<port>, actually use the specified port rather than
- defaulting to 9050. Bugfix on 0.2.1.6-alpha.
- - Make directory usage recording work again. Bugfix on 0.2.1.6-alpha.
- - 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.
- - Avoid double-free on list of successfully uploaded hidden
- service discriptors. Fix for bug 948. Bugfix on 0.2.1.6-alpha.
- - Change memarea_strndup() implementation to work even when
- duplicating a string at the end of a page. This bug was
- harmless for now, but could have meant crashes later. Fix by
- lark. Bugfix on 0.2.1.1-alpha.
- - 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.
- Changes in version 0.2.1.13-alpha - 2009-03-09
- Tor 0.2.1.13-alpha includes another big pile of minor bugfixes and
- cleanups. We're finally getting close to a release candidate.
- o Major bugfixes:
- - Correctly update the list of which countries we exclude as
- exits, when the GeoIP file is loaded or reloaded. Diagnosed by
- lark. Bugfix on 0.2.1.6-alpha.
- o Minor bugfixes (on 0.2.0.x and earlier):
- - 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.
- - 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.
- - Clients no longer cache certificates for authorities they do not
- recognize. Bugfix on 0.2.0.9-alpha.
- - 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.
- - 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.
- - 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.
- - 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.
- - Parse dates and IPv4 addresses in a locale- and libc-independent
- manner, to avoid platform-dependent behavior on malformed input.
- - Build correctly when configured to build outside the main source
- path. Patch from Michael Gold.
- - 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.
- o Minor bugfixes (on 0.2.1.x):
- - Don't re-extend introduction circuits if we ran out of RELAY_EARLY
- cells. Bugfix on 0.2.1.3-alpha. Fixes more of bug 878.
- - If we're an exit node, scrub the IP address to which we are exiting
- in the logs. Bugfix on 0.2.1.8-alpha.
- o Minor features:
- - On Linux, use the prctl call to re-enable core dumps when the user
- is option is set.
- - 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.
- - Update to the "February 26 2009" ip-to-country file.
- 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.1.12-alpha - 2009-02-08
- Tor 0.2.1.12-alpha 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). It also
- includes a big pile of minor bugfixes and cleanups.
- 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.1.7-alpha.
- o Minor bugfixes:
- - Let controllers actually ask for the "clients_seen" event for
- getting usage summaries on bridge relays. Bugfix on 0.2.1.10-alpha;
- reported by Matt Edman.
- - Fix a compile warning on OSX Panther. Fixes bug 913; bugfix against
- 0.2.1.11-alpha.
- - Fix a bug in address parsing that was preventing bridges or hidden
- service targets from being at IPv6 addresses.
- - Solve a bug that kept hardware crypto acceleration from getting
- enabled when accounting was turned on. Fixes bug 907. Bugfix on
- 0.0.9pre6.
- - Remove a bash-ism from configure.in to build properly on non-Linux
- platforms. Bugfix on 0.2.1.1-alpha.
- - Fix code so authorities _actually_ send back X-Descriptor-Not-New
- headers. Bugfix on 0.2.0.10-alpha.
- - Don't consider expiring already-closed client connections. Fixes
- bug 893. Bugfix on 0.0.2pre20.
- - 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.
- - 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.
- - Support changing value of ServerDNSRandomizeCase during SIGHUP.
- Bugfix on 0.2.1.7-alpha.
- - 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. Bugfix on 0.2.0.x.
- o Minor features:
- - Support platforms where time_t is 64 bits long. (Congratulations,
- NetBSD!) Patch from Matthias Drochner.
- - Add a 'getinfo status/clients-seen' controller command, in case
- controllers want to hear clients_seen events but connect late.
- o Build changes:
- - 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.
- 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.1.11-alpha - 2009-01-20
- Tor 0.2.1.11-alpha finishes fixing the "if your Tor is off for a
- week it will take a long time to bootstrap again" bug. It 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:
- - 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. Bugfix
- on 0.2.0.x. Fixes bug 887.
- o Minor features:
- - 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.
- - Make setting ServerDNSRandomizeCase to 0 actually work. Bugfix
- for bug 905. Bugfix on 0.2.1.7-alpha.
- - 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.
- o Minor bugfixes:
- - Make outbound DNS packets respect the OutboundBindAddress setting.
- Fixes the bug part of bug 798. Bugfix on 0.1.2.2-alpha.
- - When our circuit fails at the first hop (e.g. we get a destroy
- cell back), avoid using that OR connection anymore, and also
- tell all the one-hop directory requests waiting for it that they
- should fail. Bugfix on 0.2.1.3-alpha.
- - In the torify(1) manpage, mention that tsocks will leak your
- DNS requests.
- Changes in version 0.2.1.10-alpha - 2009-01-06
- Tor 0.2.1.10-alpha fixes two major bugs in bridge relays (one that
- would make the bridge relay not so useful if it had DirPort set to 0,
- and one that could let an attacker learn a little bit of information
- about the bridge's users), and a bug that would cause your Tor relay
- to ignore a circuit create request it can't decrypt (rather than reply
- with an error). It also fixes a wide variety of other bugs.
- o Major bugfixes:
- - 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. Helps bug 887 a bit;
- bugfix on 0.2.0.x.
- - 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.
- o Minor features:
- - 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.
- - Build correctly against versions of OpenSSL 0.9.8 or later built
- without support for deprecated functions.
- - Update to the "December 19 2008" ip-to-country file.
- o Minor bugfixes (on 0.2.0.x):
- - Authorities now vote for the Stable flag for any router whose
- weighted MTBF is at least 5 days, regardless of the mean MTBF.
- - Do not remove routers as too old if we do not have any consensus
- document. Bugfix on 0.2.0.7-alpha.
- - Do not accept incomplete ipv4 addresses (like 192.168.0) as valid.
- Spec conformance issue. Bugfix on Tor 0.0.2pre27.
- - 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.
- - If a hidden service sends us an END cell, do not consider
- retrying the connection; just close it. Patch from rovv.
- - 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.
- - 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.
- - Squeeze 2-5% out of client performance (according to oprofile) by
- improving the implementation of some policy-manipulation functions.
- o Minor bugfixes (on 0.2.1.x):
- - Make get_interface_address() function work properly again; stop
- guessing the wrong parts of our address as our address.
- - Do not cannibalize a circuit if we're out of RELAY_EARLY cells to
- send on that circuit. Otherwise we might violate the proposal-110
- limit. Bugfix on 0.2.1.3-alpha. Partial fix for bug 878. Diagnosis
- thanks to Karsten.
- - When we're sending non-EXTEND cells to the first hop in a circuit,
- for example to use an encrypted directory connection, we don't need
- to use RELAY_EARLY cells: the first hop knows what kind of cell
- it is, and nobody else can even see the cell type. Conserving
- RELAY_EARLY cells makes it easier to cannibalize circuits like
- this later.
- - Stop logging nameserver addresses in reverse order.
- - If we are retrying a directory download slowly over and over, do
- not automatically give up after the 254th failure. Bugfix on
- 0.2.1.9-alpha.
- - Resume reporting accurate "stream end" reasons to the local control
- port. They were lost in the changes for Proposal 148. Bugfix on
- 0.2.1.9-alpha.
- 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.
- o Code simplifications and refactoring:
- - 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.
- - Tool-assisted documentation cleanup. Nearly every function or
- static variable in Tor should have its own documentation now.
- Changes in version 0.2.1.9-alpha - 2008-12-25
- Tor 0.2.1.9-alpha fixes many more bugs, some of them security-related.
- o New directory authorities:
- - gabelmoo (the authority run by Karsten Loesing) now has a new
- IP address.
- o Security fixes:
- - 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.
- - Avoid a possible memory corruption bug when receiving hidden service
- descriptors. Bugfix on 0.2.1.6-alpha.
- o Major bugfixes:
- - Fix a logic error that would automatically reject all but the first
- configured DNS server. Bugfix on 0.2.1.5-alpha. Possible fix for
- part of bug 813/868. Bug spotted by coderman.
- - 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 0.1.2.1-alpha;
- reported by "wood".
- - When we can't initialize DNS because the network is down, do not
- automatically stop Tor from starting. Instead, retry failed
- dns_init() every 10 minutes, and change the exit policy to reject
- *:* until one succeeds. Fixes bug 691.
- o Minor features:
- - Give a better error message when an overzealous init script says
- "sudo -u username tor --user username". Makes Bug 882 easier for
- users to diagnose.
- - When a directory authority gives us a new guess for our IP address,
- log which authority we used. Hopefully this will help us debug
- the recent complaints about bad IP address guesses.
- - Detect svn revision properly when we're using git-svn.
- - 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.
- Partial implementation of proposal 157.
- - Start serving certificates by <identity digest, signing key digest>
- pairs. Partial implementation of proposal 157.
- - Clients now never report any stream end reason except 'MISC'.
- Implements proposal 148.
- - 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.
- - Optimize out calls to time(NULL) that occur for every IO operation,
- or for every cell. On systems where time() is a slow syscall,
- this fix will be slightly helpful.
- - Exit servers can now answer resolve requests for ip6.arpa addresses.
- - When we download a descriptor that we then immediately (as
- a directory authority) reject, do not retry downloading it right
- away. Should save some bandwidth on authorities. Fix for bug
- 888. Patch by Sebastian Hahn.
- - When a download gets us zero good descriptors, do not notify
- Tor that new directory information has arrived.
- - 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.
- o Minor features (controller):
- - New CONSENSUS_ARRIVED event to note when a new consensus has
- been fetched and validated.
- - When we realize that another process has modified our cached
- descriptors file, print out a more useful error message rather
- than triggering an assertion. Fixes bug 885. Patch from Karsten.
- - Add an internal-use-only __ReloadTorrcOnSIGHUP option for
- controllers to prevent SIGHUP from reloading the
- configuration. Fixes bug 856.
- o Minor bugfixes:
- - Resume using the correct "REASON=" stream when telling the
- controller why we closed a stream. Bugfix in 0.2.1.1-alpha.
- - 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.
- - 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 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.
- o Minor bugfixes (hidden services):
- - Do not throw away existing introduction points on SIGHUP (bugfix on
- 0.0.6pre1); also, do not stall hidden services because we're
- throwing away introduction points; bugfix on 0.2.1.7-alpha. Spotted
- by John Brooks. Patch by Karsten. Fixes bug 874.
- - 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.
- o Deprecated and removed features:
- - 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;
- o Code simplifications and refactoring:
- - 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.
- Changes in version 0.2.1.8-alpha - 2008-12-08
- Tor 0.2.1.8-alpha fixes some crash bugs in earlier alpha releases,
- builds better on unusual platforms like Solaris and old OS X, and
- fixes a variety of other issues.
- o Major features:
- - 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 Security fixes:
- - 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.
- 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.
- - Fix a possible segfault when establishing an exit connection. Bugfix
- on 0.2.1.5-alpha.
- o Minor bugfixes:
- - Get file locking working on win32. Bugfix on 0.2.1.6-alpha. Fixes
- bug 859.
- - Made Tor a little less aggressive about deleting expired
- certificates. Partial fix for bug 854.
- - Stop doing unaligned memory access that generated bus errors on
- sparc64. Bugfix on 0.2.0.10-alpha. Fix for bug 862.
- - Fix a crash bug when changing EntryNodes from the controller. Bugfix
- on 0.2.1.6-alpha. Fix for bug 867. Patched by Sebastian.
- - Make USR2 log-level switch take effect immediately. Bugfix on
- 0.1.2.8-beta.
- - If one win32 nameserver fails to get added, continue adding the
- rest, and don't automatically fail.
- - Use fcntl() for locking when flock() is not available. Should fix
- compilation on Solaris. Should fix Bug 873. Bugfix on 0.2.1.6-alpha.
- - 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.
- - Avoid potential crash on internal error during signature collection.
- Fixes bug 864. Patch from rovv.
- - 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().
- - 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.
- o Minor features:
- - 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.
- o Minor features (controller):
- - Return circuit purposes in response to GETINFO circuit-status. Fixes
- bug 858.
- 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.1.7-alpha - 2008-11-08
- Tor 0.2.1.7-alpha 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, adds better defense against DNS poisoning attacks on exit
- relays, further improves hidden service performance, and fixes a
- variety of other issues.
- o Security fixes:
- - 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.
- - 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.
- - Do not use or believe expired v3 authority certificates. Patch
- from Karsten. Bugfix in 0.2.0.x. Fixes bug 851.
- o Minor features:
- - Now NodeFamily and MyFamily config options allow spaces in
- identity fingerprints, so it's easier to paste them in.
- Suggested by Lucky Green.
- - 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
- ServerDNSRandomizeCase 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.
- - Preserve case in replies to DNSPort requests in order to support
- the 0x20 hack for resisting DNS poisoning attacks.
- o Hidden service performance improvements:
- - 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.
- o Minor bugfixes:
- - Minor fix in the warning messages when you're having problems
- bootstrapping; also, be more forgiving of bootstrap problems when
- we're still making incremental progress on a given bootstrap phase.
- - 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.
- - 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.
- - 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.
- - Fix another case of assuming, when a specific exit is requested,
- that we know more than the user about what hosts it allows.
- Fixes another case of bug 752. 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.
- - Avoid using a negative right-shift when comparing 32-bit
- addresses. Possible fix for bug 845 and bug 811.
- - Make the assert_circuit_ok() function work correctly on circuits that
- have already been marked for close.
- - Fix read-off-the-end-of-string error in unit tests when decoding
- introduction points.
- - Fix uninitialized size field for memory area allocation: may improve
- memory performance during directory parsing.
- - 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.
- Changes in version 0.2.1.6-alpha - 2008-09-30
- Tor 0.2.1.6-alpha further improves performance and robustness of
- hidden services, starts work on supporting per-country relay selection,
- and fixes a variety of smaller issues.
- o Major features:
- - Implement proposal 121: 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. Code by Karsten Loesing.
- - 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.
- - Start work to allow node restrictions to include country codes. The
- syntax to exclude nodes in a country with country code XX is
- "ExcludeNodes {XX}". 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.
- - Allow ExitNodes list to include IP ranges and country codes, just
- like the Exclude*Nodes lists. Patch from Robert Hogan.
- o Major bugfixes:
- - Fix a bug when parsing ports in tor_addr_port_parse() that caused
- Tor to fail to start if you had it configured to use a bridge
- relay. Fixes bug 809. Bugfix on 0.2.1.5-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 had not been
- downloaded yet. In these cases, we now wait until the router
- descriptor is downloaded, and then retry. Likewise, clients
- now skip over a hidden service directory if they don't yet have
- its router descriptor, rather than futilely requesting it and
- putting mysterious complaints in the logs. Fixes bug 767. Bugfix
- on 0.2.0.10-alpha.
- - 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.
- - DNS replies need to have names matching their requests, but
- these names should be in the questions section, not necessarily
- in the answers section. Fixes bug 823. Bugfix on 0.2.1.5-alpha.
- o Minor features:
- - Update to the "September 1 2008" ip-to-country file.
- - 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.
- - Use a lockfile to make sure that two Tor processes are not
- simultaneously running with the same datadir.
- - Serve the latest v3 networkstatus consensus via the control
- port. Use "getinfo dir/status-vote/current/consensus" to fetch it.
- - Better logging about stability/reliability calculations on directory
- servers.
- - Drop the requirement to have an open dir port for storing and
- serving v2 hidden service descriptors.
- - Directory authorities now serve a /tor/dbg-stability.txt URL to
- help debug WFU and MTBF calculations.
- - 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.
- - Add a -p option to tor-resolve for specifying the SOCKS port: some
- people find host:port too confusing.
- - Make TrackHostExit mappings expire a while after their last use, not
- after their creation. Patch from Robert Hogan.
- - Provide circuit purposes along with circuit events to the controller.
- o Minor bugfixes:
- - Fix compile on OpenBSD 4.4-current. Bugfix on 0.2.1.5-alpha.
- Reported by Tas.
- - Fixed some memory leaks -- some quite frequent, some almost
- impossible to trigger -- based on results from Coverity.
- - When testing for libevent functions, set the LDFLAGS variable
- correctly. Found by Riastradh.
- - Fix an assertion bug in parsing policy-related options; possible fix
- for bug 811.
- - Catch and report a few more bootstrapping failure cases when Tor
- fails to establish a TCP connection. Cleanup on 0.2.1.x.
- - 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 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.
- - 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 by rovv.
- Bugfix on 0.2.0.x (??).
- - Avoid a "0 divided by 0" calculation when calculating router uptime
- at directory authorities. Bugfix on 0.2.0.8-alpha.
- - Make DNS resolved controller events into "CLOSED", not
- "FAILED". Bugfix on 0.1.2.5-alpha. Fix by Robert Hogan. Resolves
- bug 807.
- - 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.
- - 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.
- - Remove the old v2 directory authority 'lefkada' from the default
- list. It has been gone for many months.
- o Code simplifications and refactoring:
- - 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.
- 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.1.5-alpha - 2008-08-31
- Tor 0.2.1.5-alpha moves us closer to handling IPv6 destinations, puts
- in a lot of the infrastructure for adding authorization to hidden
- services, lays the groundwork for having clients read their load
- balancing information out of the networkstatus consensus rather than
- the individual router descriptors, addresses two potential anonymity
- issues, and fixes a variety of smaller issues.
- o Major features:
- - 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.
- - Begin implementation of proposal 121 ("Client authorization for
- hidden services"): configure hidden services with client
- authorization, publish descriptors for them, and configure
- authorization data for hidden services at clients. The next
- step is to actually access hidden services that perform client
- authorization.
- - More progress toward proposal 141: Network status consensus
- documents and votes now contain bandwidth information for each
- router and a summary of that router's exit policy. Eventually this
- will be used by clients so that they do not have to download every
- known descriptor before building circuits.
- o Major bugfixes (on 0.2.0.x and before):
- - 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.
- - 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.
- - 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.
- - Correctly detect the presence of the linux/netfilter_ipv4.h header
- when building against recent kernels. Bugfix on 0.1.2.1-alpha.
- - Add a missing safe_str() call for a debug log message.
- - Use 64 bits instead of 32 bits for connection identifiers used with
- the controller protocol, to greatly reduce risk of identifier reuse.
- - 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.
- o Minor features:
- - Rate-limit too-many-sockets messages: when they happen, they happen
- a lot. Resolves bug 748.
- - Resist DNS poisoning a little better by making sure that names in
- answer sections match.
- - Print the SOCKS5 error message string as well as the error code
- when a tor-resolve request fails. Patch from Jacob.
- Changes in version 0.2.1.4-alpha - 2008-08-04
- Tor 0.2.1.4-alpha fixes a pair of crash bugs in 0.2.1.3-alpha.
- o Major bugfixes:
- - The address part of exit policies was not correctly written
- to router descriptors. This generated router descriptors that failed
- their self-checks. Noticed by phobos, fixed by Karsten. Bugfix
- on 0.2.1.3-alpha.
- - Tor triggered a false assert when extending a circuit to a relay
- but we already have a connection open to that relay. Noticed by
- phobos, fixed by Karsten. Bugfix on 0.2.1.3-alpha.
- o Minor bugfixes:
- - Fix a hidden service logging bug: in some edge cases, the router
- descriptor of a previously picked introduction point becomes
- obsolete and we need to give up on it rather than continually
- complaining that it has become obsolete. Observed by xiando. Bugfix
- on 0.2.1.3-alpha.
- o Removed features:
- - Take out the TestVia config option, since it was a workaround for
- a bug that was fixed in Tor 0.1.1.21.
- Changes in version 0.2.1.3-alpha - 2008-08-03
- Tor 0.2.1.3-alpha implements most of the pieces to prevent
- infinite-length circuit attacks (see proposal 110); fixes a bug that
- might cause exit relays to corrupt streams they send back; allows
- address patterns (e.g. 255.128.0.0/16) to appear in ExcludeNodes and
- ExcludeExitNodes config options; and fixes a big pile of bugs.
- o Bootstrapping bugfixes (on 0.2.1.x-alpha):
- - Send a bootstrap problem "warn" event on the first problem if the
- reason is NO_ROUTE (that is, our network is down).
- o Major features:
- - 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 DOS attack by requiring that EXTEND commands must
- be sent using an "early" cell.
- o Major bugfixes:
- - 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.
- - 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.
- o Minor features:
- - 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.
- - 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.
- - Allow address patterns (e.g., 255.128.0.0/16) to appear in
- ExcludeNodes and ExcludeExitNodes lists.
- - 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.
- o Minor bugfixes:
- - 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.
- - Stop using __attribute__((nonnull)) with GCC: it can give us useful
- warnings (occasionally), but it can also cause the compiler to
- eliminate error-checking code. Suggested by Peter Gutmann.
- - When a hidden service is giving up on an introduction point candidate
- that was not included in the last published rendezvous descriptor,
- don't reschedule publication of the next descriptor. Fixes bug 763.
- Bugfix on 0.0.9.3.
- - Mark RendNodes, RendExcludeNodes, HiddenServiceNodes, and
- HiddenServiceExcludeNodes as obsolete: they never worked properly,
- and nobody claims to be using them. Fixes bug 754. Bugfix on
- 0.1.0.1-rc. Patch from Christian Wilms.
- - Fix a small alignment and memory-wasting bug on buffer chunks.
- Spotted by rovv.
- o Minor bugfixes (controller):
- - 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.
- o Removed features:
- - Remove all backward-compatibility code to support relays running
- versions of Tor so old that they no longer work at all on the
- Tor network.
- Changes in version 0.2.0.30 - 2008-07-15
- o Minor bugfixes:
- - Stop using __attribute__((nonnull)) with GCC: it can give us useful
- warnings (occasionally), but it can also cause the compiler to
- eliminate error-checking code. Suggested by Peter Gutmann.
- Changes in version 0.2.0.29-rc - 2008-07-08
- Tor 0.2.0.29-rc fixes two big bugs with using bridges, fixes more
- hidden-service performance bugs, and fixes a bunch of smaller bugs.
- o Major bugfixes:
- - If you have more than one bridge but don't know their keys,
- you would only launch a request for the descriptor of the first one
- on your list. (Tor considered launching requests for the others, but
- found that it already had a connection on the way for $0000...0000
- so it didn't open another.) Bugfix on 0.2.0.x.
- - If you have more than one bridge but don't know their keys, and the
- connection to one of the bridges failed, you would cancel all
- pending bridge connections. (After all, they all have the same
- digest.) Bugfix on 0.2.0.x.
- - When a hidden service was trying to establish an introduction point,
- and Tor had built circuits preemptively for such purposes, we
- were ignoring all the preemptive circuits and launching a new one
- instead. Bugfix on 0.2.0.14-alpha.
- - 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.
- - Make directory servers include the X-Your-Address-Is: http header in
- their responses even for begin_dir conns. Now clients who only
- ever use begin_dir connections still have a way to learn their IP
- address. Fixes bug 737; bugfix on 0.2.0.22-rc. Reported by goldy.
- o Minor bugfixes:
- - Fix a macro/CPP interaction that was confusing some compilers:
- some GCCs don't like
- Fixes bug 707.
- - Fix macro collision between OpenSSL 0.9.8h and Windows headers.
- Fixes bug 704; fix from Steven Murdoch.
- - 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.
- - Correctly detect transparent proxy support on Linux hosts that
- require in.h to be included before netfilter_ipv4.h. Patch
- from coderman.
- - Disallow session resumption attempts during the renegotiation
- stage of the v2 handshake protocol. Clients should never be trying
- session resumption at this point, but apparently some did, in
- ways that caused the handshake to fail. Bugfix on 0.2.0.20-rc. Bug
- found by Geoff Goodell.
- Changes in version 0.2.1.2-alpha - 2008-06-20
- Tor 0.2.1.2-alpha includes a new "TestingTorNetwork" config option to
- make it easier to set up your own private Tor network; fixes several
- big bugs with using more than one bridge relay; fixes a big bug with
- offering hidden services quickly after Tor starts; and uses a better
- API for reporting potential bootstrapping problems to the controller.
- o Major features:
- - New TestingTorNetwork config option to allow adjustment of
- previously constant values that, while reasonable, could slow
- bootstrapping. Implements proposal 135. Patch from Karsten.
- o Major bugfixes:
- - If you have more than one bridge but don't know their digests,
- you would only learn a request for the descriptor of the first one
- on your list. (Tor considered launching requests for the others, but
- found that it already had a connection on the way for $0000...0000
- so it didn't open another.) Bugfix on 0.2.0.x.
- - If you have more than one bridge but don't know their digests,
- and the connection to one of the bridges failed, you would cancel
- all pending bridge connections. (After all, they all have the
- same digest.) Bugfix on 0.2.0.x.
- - When establishing a hidden service, introduction points that
- originate from cannibalized circuits are completely ignored and not
- included in rendezvous service descriptors. This might be another
- reason for delay in making a hidden service available. Bugfix
- from long ago (0.0.9.x?)
- o Minor features:
- - Allow OpenSSL to use dynamic locks if it wants.
- - When building a consensus, do not include routers that are down.
- This will cut down 30% to 40% on consensus size. Implements
- proposal 138.
- - In directory authorities' approved-routers files, allow
- fingerprints with or without space.
- - 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.
- - Send an initial "Starting" bootstrap status event, so we have a
- state to start out in.
- o Minor bugfixes:
- - Asking for a conditional consensus at .../consensus/<fingerprints>
- would crash a dirserver if it did not already have a
- consensus. Bugfix on 0.2.1.1-alpha.
- - Clean up some macro/CPP interactions: some GCC versions don't like
- #if/#endif pairs inside macro arguments. Fixes bug 707. Bugfix on
- 0.2.0.x.
- o Bootstrapping bugfixes (on 0.2.1.1-alpha):
- - Directory authorities shouldn't complain about bootstrapping
- problems just because they do a lot of reachability testing and
- some of the connection attempts fail.
- - Start sending "count" and "recommendation" key/value pairs in
- bootstrap problem status events, so the controller can hear about
- problems even before Tor decides they're worth reporting for sure.
- - If you're using bridges, generate "bootstrap problem" warnings
- as soon as you run out of working bridges, rather than waiting
- for ten failures
- ten bridges.
- - If we close our OR connection because there's been a circuit
- pending on it for too long, we were telling our bootstrap status
- events "REASON=NONE". Now tell them "REASON=TIMEOUT".
- Changes in version 0.2.1.1-alpha - 2008-06-13
- Tor 0.2.1.1-alpha fixes a lot of memory fragmentation problems that
- were making the Tor process bloat especially on Linux; makes our TLS
- handshake blend in better; sends "bootstrap phase" status events to
- the controller, so it can keep the user informed of progress (and
- problems) fetching directory information and establishing circuits;
- and adds a variety of smaller features.
- o Major features:
- - 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.
- - 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.
- - 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.
- o Major bugfixes:
- - 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.
- o Memory fixes and improvements:
- - Add a malloc_good_size implementation to OpenBSD_malloc_linux.c,
- to avoid unused RAM in buffer chunks and memory pools.
- - 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.
- - 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.
- - Never use OpenSSL compression: it wastes RAM and CPU trying to
- compress cells, which are basically all encrypted, compressed,
- or both.
- o Minor bugfixes:
- - 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.
- - 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.)
- o Minor features:
- - 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.
- - 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.
- - 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.
- - 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.
- - New configure/torrc options (
- 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.
- - Use the TLS1 hostname extension to more closely resemble browser
- behavior.
- - Lots of new unit tests.
- - Add a macro to implement the common pattern of iterating through
- two parallel lists in lockstep.
- Changes in version 0.2.0.28-rc - 2008-06-13
- Tor 0.2.0.28-rc fixes an anonymity-related bug, fixes a hidden-service
- performance bug, and fixes a bunch of smaller bugs.
- o Anonymity fixes:
- - 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.
- o Major bugfixes:
- - While setting up a hidden service, some valid introduction circuits
- were overlooked and abandoned. This might be the reason for
- the long delay in making a hidden service available. Bugfix on
- 0.2.0.14-alpha.
- o Minor features:
- - Update to the "June 9 2008" ip-to-country file.
- - Run 'make test' as part of 'make dist', so we stop releasing so
- many development snapshots that fail their unit tests.
- o Minor bugfixes:
- - 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.
- Bugfix on 0.1.2.x.
- - Bridge relays no longer print "xx=0" in their extrainfo document
- for every single country code in the geoip db. Bugfix on
- 0.2.0.27-rc.
- - Only warn when we fail to load the geoip file if we were planning to
- include geoip stats in our extrainfo document. Bugfix on 0.2.0.27-rc.
- - 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. Bugfix on 0.1.2.x.
- - When we haven't had any application requests lately, don't bother
- logging that we have expired a bunch of descriptors. Bugfix
- on 0.1.2.x.
- - Make relay cells written on a connection count as non-padding when
- tracking how long a connection has been in use. Bugfix on
- 0.2.0.1-alpha. Spotted by lodger.
- - Fix unit tests in 0.2.0.27-rc.
- - Fix compile on Windows.
- Changes in version 0.2.0.27-rc - 2008-06-03
- Tor 0.2.0.27-rc adds a few features we left out of the earlier
- release candidates. In particular, we now include an IP-to-country
- GeoIP database, so controllers can easily look up what country a
- given relay is in, and so bridge relays can give us some sanitized
- summaries about which countries are making use of bridges. (See proposal
- 126-geoip-fetching.txt for details.)
- o Major features:
- - Include an IP-to-country GeoIP file in the tarball, so bridge
- relays can report sanitized summaries of the usage they're seeing.
- o Minor features:
- - Add a "PURPOSE=" argument to "STREAM NEW" events, as suggested by
- Robert Hogan. Fixes the first part of bug 681.
- - Make bridge authorities never serve extrainfo docs.
- - Add support to detect Libevent versions in the 1.4.x series
- on mingw.
- - Fix build on gcc 4.3 with --enable-gcc-warnings set.
- - Include a new contrib/tor-exit-notice.html file that exit relay
- operators can put on their website to help reduce abuse queries.
- o Minor bugfixes:
- - 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.
- - Make bridge authorities correctly expire old extrainfo documents
- from time to time.
- Changes in version 0.2.0.26-rc - 2008-05-13
- Tor 0.2.0.26-rc fixes a major security vulnerability caused by a bug
- in Debian's OpenSSL packages. All users running any 0.2.0.x version
- should upgrade, whether they're running Debian or not.
- o Major security fixes:
- - Use new V3 directory authority keys on the tor26, gabelmoo, and
- moria1 V3 directory authorities. The old keys were generated with
- a vulnerable version of Debian's OpenSSL package, and must be
- considered compromised. Other authorities' keys were not generated
- with an affected version of OpenSSL.
- o Major bugfixes:
- - List authority signatures as "unrecognized" based on DirServer
- lines, not on cert cache. Bugfix on 0.2.0.x.
- o Minor features:
- - Add a new V3AuthUseLegacyKey option to make it easier for
- authorities to change their identity keys if they have to.
- Changes in version 0.2.0.25-rc - 2008-04-23
- Tor 0.2.0.25-rc makes Tor work again on OS X and certain BSDs.
- o Major bugfixes:
- - Remember to initialize threading before initializing logging.
- Otherwise, many BSD-family implementations will crash hard on
- startup. Fixes bug 671. Bugfix on 0.2.0.24-rc.
- o Minor bugfixes:
- - Authorities correctly free policies on bad servers on
- exit. Fixes bug 672. Bugfix on 0.2.0.x.
- Changes in version 0.2.0.24-rc - 2008-04-22
- Tor 0.2.0.24-rc adds dizum (run by Alex de Joode) as the new sixth
- v3 directory authority, makes relays with dynamic IP addresses and no
- DirPort notice more quickly when their IP address changes, fixes a few
- rare crashes and memory leaks, and fixes a few other miscellaneous bugs.
- o New directory authorities:
- - Take lefkada out of the list of v3 directory authorities, since
- it has been down for months.
- - Set up dizum (run by Alex de Joode) as the new sixth v3 directory
- authority.
- o Major bugfixes:
- - Detect address changes more quickly on non-directory mirror
- relays. Bugfix on 0.2.0.18-alpha; fixes bug 652.
- o Minor features (security):
- - Reject requests for reverse-dns lookup of names that are in
- a private address space. Patch from lodger.
- - Non-exit relays no longer allow DNS requests. Fixes bug 619. Patch
- from lodger.
- o Minor bugfixes (crashes):
- - Avoid a rare assert that can trigger when Tor doesn't have much
- directory information yet and it tries to fetch a v2 hidden
- service descriptor. Fixes bug 651, reported by nwf.
- - Initialize log mutex before initializing dmalloc. Otherwise,
- running with dmalloc would crash. Bugfix on 0.2.0.x-alpha.
- - Use recursive pthread mutexes in order to avoid deadlock when
- logging debug-level messages to a controller. Bug spotted by nwf,
- bugfix on 0.2.0.16-alpha.
- o Minor bugfixes (resource management):
- - Keep address policies from leaking memory: start their refcount
- at 1, not 2. Bugfix on 0.2.0.16-alpha.
- - Free authority certificates on exit, so they don't look like memory
- leaks. Bugfix on 0.2.0.19-alpha.
- - Free static hashtables for policy maps and for TLS connections on
- shutdown, so they don't look like memory leaks. Bugfix on 0.2.0.x.
- - Avoid allocating extra space when computing consensuses on 64-bit
- platforms. Bug spotted by aakova.
- o Minor bugfixes (misc):
- - 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.
- - 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.
- - When attempting to open a logfile fails, tell us why.
- - Fix a dumb bug that was preventing us from knowing that we should
- preemptively build circuits to handle expected directory requests.
- Fixes bug 660. Bugfix on 0.1.2.x.
- - Warn less verbosely about clock skew from netinfo cells from
- untrusted sources. Fixes bug 663.
- - Make controller stream events for DNS requests more consistent,
- by adding "new stream" events for DNS requests, and removing
- spurious "stream closed" events" for cached reverse resolves.
- Patch from mwenge. Fixes bug 646.
- - Correctly notify one-hop connections when a circuit build has
- failed. Possible fix for bug 669. Found by lodger.
- Changes in version 0.2.0.23-rc - 2008-03-24
- Tor 0.2.0.23-rc is the fourth release candidate for the 0.2.0 series. It
- makes bootstrapping faster if the first directory mirror you contact
- is down. The bundles also include the new Vidalia 0.1.2 release.
- o Major bugfixes:
- - When a tunneled directory request is made to a directory server
- that's down, notice after 30 seconds rather than 120 seconds. Also,
- fail any begindir streams that are pending on it, so they can
- retry elsewhere. This was causing multi-minute delays on bootstrap.
- Changes in version 0.2.0.22-rc - 2008-03-18
- Tor 0.2.0.22-rc is the third release candidate for the 0.2.0 series. It
- enables encrypted directory connections by default for non-relays, fixes
- some broken TLS behavior we added in 0.2.0.20-rc, and resolves many
- other bugs. The bundles also include Vidalia 0.1.1 and Torbutton 1.1.17.
- o Major features:
- - 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.
- o Major bugfixes:
- - Make sure servers always request certificates from clients during
- TLS renegotiation. Reported by lodger; bugfix on 0.2.0.20-rc.
- - Do not enter a CPU-eating loop when a connection is closed in
- the middle of client-side TLS renegotiation. Fixes bug 622. Bug
- diagnosed by lodger; bugfix on 0.2.0.20-rc.
- - Fix assertion failure that could occur when a blocked circuit
- became unblocked, and it had pending client DNS requests. Bugfix
- on 0.2.0.1-alpha. Fixes bug 632.
- o Minor bugfixes (on 0.1.2.x):
- - Generate "STATUS_SERVER" events rather than misspelled
- "STATUS_SEVER" events. Caught by mwenge.
- - 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.
- - On Windows, correctly detect errors when listing the contents of
- a directory. Fix from lodger.
- o Minor bugfixes (on 0.2.0.x):
- - Downgrade "sslv3 alert handshake failure" message to INFO.
- - If we set RelayBandwidthRate and RelayBandwidthBurst very high but
- left BandwidthRate and BandwidthBurst at the default, we would be
- silently limited by those defaults. Now raise them to match the
- RelayBandwidth* values.
- - Fix the SVK version detection logic to work correctly on a branch.
- - Make
- CPUs. Fixes bug 625.
- - Logging functions now check that the passed severity is sane.
- - Use proper log levels in the testsuite call of
- get_interface_address6().
- - When using a nonstandard malloc, do not use the platform values for
- HAVE_MALLOC_GOOD_SIZE or HAVE_MALLOC_USABLE_SIZE.
- - Make the openbsd malloc code use 8k pages on alpha CPUs and
- 16k pages on ia64.
- - Detect mismatched page sizes when using
- - Avoid double-marked-for-close warning when certain kinds of invalid
- .in-addr.arpa addresses are passed to the DNSPort. Part of a fix
- for bug 617. Bugfix on 0.2.0.1-alpha.
- - Make sure that the "NULL-means-reject *:*" convention is followed by
- all the policy manipulation functions, avoiding some possible crash
- bugs. Bug found by lodger. Bugfix on 0.2.0.16-alpha.
- - Fix the implementation of ClientDNSRejectInternalAddresses so that it
- actually works, and doesn't warn about every single reverse lookup.
- Fixes the other part of bug 617. Bugfix on 0.2.0.1-alpha.
- o Minor features:
- - 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.
- Changes in version 0.2.0.21-rc - 2008-03-02
- Tor 0.2.0.21-rc is the second release candidate for the 0.2.0 series. It
- makes Tor work well with Vidalia again, fixes a rare assert bug,
- and fixes a pair of more minor bugs. The bundles also include Vidalia
- 0.1.0 and Torbutton 1.1.16.
- o Major bugfixes:
- - The control port should declare that it requires password auth
- when HashedControlSessionPassword is set too. Patch from Matt Edman;
- bugfix on 0.2.0.20-rc. Fixes bug 615.
- - Downgrade assert in connection_buckets_decrement() to a log message.
- This may help us solve bug 614, and in any case will make its
- symptoms less severe. Bugfix on 0.2.0.20-rc. Reported by fredzupy.
- - We were sometimes miscounting the number of bytes read from the
- network, causing our rate limiting to not be followed exactly.
- Bugfix on 0.2.0.16-alpha. Reported by lodger.
- o Minor bugfixes:
- - Fix compilation with OpenSSL 0.9.8 and 0.9.8a. All other supported
- OpenSSL versions should have been working fine. Diagnosis and patch
- from lodger, Karsten Loesing, and Sebastian Hahn. Fixes bug 616.
- Bugfix on 0.2.0.20-rc.
- Changes in version 0.2.0.20-rc - 2008-02-24
- Tor 0.2.0.20-rc is the first release candidate for the 0.2.0 series. It
- makes more progress towards normalizing Tor's TLS handshake, makes
- hidden services work better again, helps relays bootstrap if they don't
- know their IP address, adds optional support for linking in openbsd's
- allocator or tcmalloc, allows really fast relays to scale past 15000
- sockets, and fixes a bunch of minor bugs reported by Veracode.
- o Major features:
- - Enable the revised TLS handshake based on the one designed by
- Steven Murdoch in proposal 124, as revised in proposal 130. It
- includes version negotiation for OR connections as described in
- proposal 105. 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 version negotiation
- feature will allow us to improve Tor's link protocol more safely
- in the future.
- - 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.
- - When a TrackHostExits-chosen exit fails too many times in a row,
- stop using it. Bugfix on 0.1.2.x; fixes bug 437.
- o Major bugfixes:
- - Resolved problems with (re-)fetching hidden service descriptors.
- Patch from Karsten Loesing; fixes problems with 0.2.0.18-alpha
- and 0.2.0.19-alpha.
- - 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; bugfix on 0.1.2.x.
- - Servers that don't know their own IP address should go to the
- authorities for their first directory fetch, even if their DirPort
- is off or if they don't know they're reachable yet. This will help
- them bootstrap better. Bugfix on 0.2.0.18-alpha; fixes bug 609.
- - When counting the number of open sockets, count not only the number
- of sockets we have received from the socket() call, but also
- the number we've gotten from accept() and socketpair(). This bug
- made us fail to count all sockets that we were using for incoming
- connections. Bugfix on 0.2.0.x.
- - Fix code used to find strings within buffers, when those strings
- are not in the first chunk of the buffer. Bugfix on 0.2.0.x.
- - Fix potential segfault when parsing HTTP headers. Bugfix on 0.2.0.x.
- - Add a new __HashedControlSessionPassword option for controllers
- to use for one-off session password hashes that shouldn't get
- saved to disk by SAVECONF
- 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.
- o Minor features (performance):
- - Tune parameters for cell pool allocation to minimize amount of
- RAM overhead used.
- - 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
-
- - Add a
- against tcmalloc (if present). Does not yet search for
- non-system include paths.
- - Stop imposing an arbitrary maximum on the number of file descriptors
- used for busy servers. Bug reported by Olaf Selke; patch from
- Sebastian Hahn.
- o Minor features (other):
- - When SafeLogging is disabled, log addresses along with all TLS
- errors.
- - When building with
- warning "-Wshorten-64-to-32" is available.
- - Add a
- scriptability.
- o Minor bugfixes (memory leaks and code problems):
- - We were leaking a file descriptor if Tor started with a zero-length
- cached-descriptors file. Patch by freddy77; bugfix on 0.1.2.
- - Detect size overflow in zlib code. Reported by Justin Ferguson and
- Dan Kaminsky.
- - We were comparing the raw BridgePassword entry with a base64'ed
- version of it, when handling a "/tor/networkstatus-bridges"
- directory request. Now compare correctly. Noticed by Veracode.
- - Recover from bad tracked-since value in MTBF-history file.
- Should fix bug 537.
- - 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. Bugfix on 0.1.2.x.
- - Make Unix controlsockets work correctly on OpenBSD. Patch from
- tup. Bugfix on 0.2.0.3-alpha.
- o Minor bugfixes (other):
- - If we have an extra-info document for our server, always make
- it available on the control port, even if we haven't gotten
- a copy of it from an authority yet. Patch from mwenge.
- - Log the correct memory chunk sizes for empty RAM chunks in mempool.c.
- - 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.
- - Make the new hidden service code respect the SafeLogging setting.
- Bugfix on 0.2.0.x. Patch from Karsten.
- - When starting as an authority, do not overwrite all certificates
- cached from other authorities. Bugfix on 0.2.0.x. Fixes bug 606.
- - 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. Bugfix on 0.1.2.x.
- - Change the behavior of "getinfo status/good-server-descriptor"
- so it doesn't return failure when any authority disappears.
- - Even though the man page said that "TrackHostExits ." should
- work, nobody had ever implemented it. Bugfix on 0.1.0.x.
- - 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.
- - Send NAMESERVER_STATUS messages for a single failed nameserver
- correctly.
- o Code simplifications and refactoring:
- - Remove the tor_strpartition function: its logic was confused,
- and it was only used for one thing that could be implemented far
- more easily.
- Changes in version 0.2.0.19-alpha - 2008-02-09
- Tor 0.2.0.19-alpha makes more progress towards normalizing Tor's TLS
- handshake, makes path selection for relays more secure and IP address
- guessing more robust, and generally fixes a lot of bugs in preparation
- for calling the 0.2.0 branch stable.
- o Major features:
- - Do not include recognizeable strings in the commonname part of
- Tor's x509 certificates.
- o Major bugfixes:
- - 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. Bugfix on 0.1.2.x.
- - 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. Bugfix on 0.1.2.x.
- o Minor features (security):
- - Be more paranoid about overwriting sensitive memory on free(),
- as a defensive programming tactic to ensure forward secrecy.
- o Minor features (directory authority):
- - Actually validate the options passed to AuthDirReject,
- AuthDirInvalid, AuthDirBadDir, and AuthDirBadExit.
- - Reject router descriptors with out-of-range bandwidthcapacity or
- bandwidthburst values.
- o Minor features (controller):
- - Reject controller commands over 1MB in length. This keeps rogue
- processes from running us out of memory.
- o Minor features (misc):
- - Give more descriptive well-formedness errors for out-of-range
- hidden service descriptor/protocol versions.
- - Make memory debugging information describe more about history
- of cell allocation, so we can help reduce our memory use.
- o Deprecated features (controller):
- - The status/version/num-versioning and status/version/num-concurring
- GETINFO options are no longer useful in the v3 directory protocol:
- treat them as deprecated, and warn when they're used.
- o Minor bugfixes:
- - When our consensus networkstatus has been expired for a while, stop
- being willing to build circuits using it. Fixes bug 401. Bugfix
- on 0.1.2.x.
- - Directory caches now fetch certificates from all authorities
- listed in a networkstatus consensus, even when they do not
- recognize them. Fixes bug 571. Bugfix on 0.2.0.x.
- - When connecting to a bridge without specifying its key, insert
- the connection into the identity-to-connection map as soon as
- a key is learned. Fixes bug 574. Bugfix on 0.2.0.x.
- - Detect versions of OS X where malloc_good_size() is present in the
- library but never actually declared. Resolves bug 587. Bugfix
- on 0.2.0.x.
- - Stop incorrectly truncating zlib responses to directory authority
- signature download requests. Fixes bug 593. Bugfix on 0.2.0.x.
- - Stop recommending that every server operator send mail to tor-ops.
- Resolves bug 597. Bugfix on 0.1.2.x.
- - Don't trigger an assert if we start a directory authority with a
- private IP address (like 127.0.0.1).
- - Avoid possible failures when generating a directory with routers
- with over-long versions strings, or too many flags set. Bugfix
- on 0.1.2.x.
- - If an attempt to launch a DNS resolve request over the control
- port fails because we have overrun the limit on the number of
- connections, tell the controller that the request has failed.
- - Avoid using too little bandwidth when our clock skips a few
- seconds. Bugfix on 0.1.2.x.
- - Fix shell error when warning about missing packages in configure
- script, on Fedora or Red Hat machines. Bugfix on 0.2.0.x.
- - Do not become confused when receiving a spurious VERSIONS-like
- cell from a confused v1 client. Bugfix on 0.2.0.x.
- - Re-fetch v2 (as well as v0) rendezvous descriptors when all
- introduction points for a hidden service have failed. Patch from
- Karsten Loesing. Bugfix on 0.2.0.x.
- o Code simplifications and refactoring:
- - Remove some needless generality from cpuworker code, for improved
- type-safety.
- - 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.
- - Add an in-place version of aes_crypt() so that we can avoid doing a
- needless memcpy() call on each cell payload.
- Changes in version 0.2.0.18-alpha - 2008-01-25
- Tor 0.2.0.18-alpha adds a sixth v3 directory authority run by CCC,
- fixes a big memory leak in 0.2.0.17-alpha, and adds new config options
- that can warn or reject connections to ports generally associated with
- vulnerable-plaintext protocols.
- o New directory authorities:
- - Set up dannenberg (run by CCC) as the sixth v3 directory
- authority.
- o Major bugfixes:
- - Fix a major memory leak when attempting to use the v2 TLS
- handshake code. Bugfix on 0.2.0.x; fixes bug 589.
- - We accidentally enabled the under-development v2 TLS handshake
- code, which was causing log entries like "TLS error while
- renegotiating handshake". Disable it again. Resolves bug 590.
- - We were computing the wrong Content-Length: header for directory
- responses that need to be compressed on the fly, causing clients
- asking for those items to always fail. Bugfix on 0.2.0.x; partially
- fixes bug 593.
- o Major features:
- - 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.
- - 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.
- o Minor bugfixes:
- - When we setconf ClientOnly to 1, close any current OR and Dir
- listeners. Reported by mwenge.
- - When we get a consensus that's been signed by more people than
- we expect, don't log about it; it's not a big deal. Reported
- by Kyle Williams.
- o Minor features:
- - Don't answer "/tor/networkstatus-bridges" directory requests if
- the request isn't encrypted.
- - Make "ClientOnly 1" config option disable directory ports too.
- - Patches from Karsten Loesing to make v2 hidden services more
- robust: work even when there aren't enough HSDir relays available;
- retry when a v2 rend desc fetch fails; but don't retry if we
- already have a usable v0 rend desc.
- Changes in version 0.2.0.17-alpha - 2008-01-17
- Tor 0.2.0.17-alpha makes the tarball build cleanly again (whoops).
- o Compile fixes:
- - Make the tor-gencert man page get included correctly in the tarball.
- Changes in version 0.2.0.16-alpha - 2008-01-17
- Tor 0.2.0.16-alpha adds a fifth v3 directory authority run by Karsten
- Loesing, and generally cleans up a lot of features and minor bugs.
- o New directory authorities:
- - Set up gabelmoo (run by Karsten Loesing) as the fifth v3 directory
- authority.
- o Major performance improvements:
- - 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.
- o Minor 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
- - 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.
- - 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.
- o Minor performance improvements:
- - Reference-count and share copies of address policy entries; only 5%
- of them were actually distinct.
- - Never walk through the list of logs if we know that no log is
- interested in a given message.
- o Minor bugfixes:
- - When an authority has not signed a consensus, do not try to
- download a nonexistent "certificate with key 00000000". Bugfix
- on 0.2.0.x. Fixes bug 569.
- - 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. Bugfix on 0.1.2.x. Fixes the very rare
- bug 575, which is kind of the revenge of bug 222.
- - Patch from Karsten Loesing to complain less at both the client
- and the relay when a relay used to have the HSDir flag but doesn't
- anymore, and we try to upload a hidden service descriptor.
- - Stop leaking one cert per TLS context. Fixes bug 582. Bugfix on
- 0.2.0.15-alpha.
- - Do not try to download missing certificates until we have tried
- to check our fallback consensus. Fixes bug 583.
- - Make bridges round reported GeoIP stats info up to the nearest
- estimate, not down. Now we can distinguish between "0 people from
- this country" and "1 person from this country".
- - Avoid a spurious free on base64 failure. Bugfix on 0.1.2.
- - Avoid possible segfault if key generation fails in
- crypto_pk_hybrid_encrypt. Bugfix on 0.2.0.
- - Avoid segfault in the case where a badly behaved v2 versioning
- directory sends a signed networkstatus with missing client-versions.
- Bugfix on 0.1.2.
- - Avoid segfaults on certain complex invocations of
- router_get_by_hexdigest(). Bugfix on 0.1.2.
- - Correct bad index on array access in parse_http_time(). Bugfix
- on 0.2.0.
- - Fix possible bug in vote generation when server versions are present
- but client versions are not.
- - Fix rare bug on REDIRECTSTREAM control command when called with no
- port set: it could erroneously report an error when none had
- happened.
- - Avoid bogus crash-prone, leak-prone tor_realloc when we're
- compressing large objects and find ourselves with more than 4k
- left over. Bugfix on 0.2.0.
- - Fix a small memory leak when setting up a hidden service.
- - Fix a few memory leaks that could in theory happen under bizarre
- error conditions.
- - Fix an assert if we post a general-purpose descriptor via the
- control port but that descriptor isn't mentioned in our current
- network consensus. Bug reported by Jon McLachlan; bugfix on
- 0.2.0.9-alpha.
- o Minor features (controller):
- - Get NS events working again. Patch from tup.
- - 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.
- o Minor features (directory authorities):
- - New configuration options 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.
- - Actually implement the -s option to tor-gencert.
- - Add a manual page for tor-gencert.
- o Minor features (bridges):
- - Bridge authorities no longer serve bridge descriptors over
- unencrypted connections.
- o Minor features (other):
- - 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.
- 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
-
- - 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.2.0.15-alpha - 2007-12-25
- Tor 0.2.0.14-alpha and 0.2.0.15-alpha fix a bunch of bugs with the
- features added in 0.2.0.13-alpha.
- o Major bugfixes:
- - Fix several remotely triggerable asserts based on DirPort requests
- for a v2 or v3 networkstatus object before we were prepared. This
- was particularly bad for 0.2.0.13 and later bridge relays, who
- would never have a v2 networkstatus and would thus always crash
- when used. Bugfixes on 0.2.0.x.
- - Estimate the v3 networkstatus size more accurately, rather than
- estimating it at zero bytes and giving it artificially high priority
- compared to other directory requests. Bugfix on 0.2.0.x.
- o Minor bugfixes:
- - Fix configure.in logic for cross-compilation.
- - When we load a bridge descriptor from the cache, and it was
- previously unreachable, mark it as retriable so we won't just
- ignore it. Also, try fetching a new copy immediately. Bugfixes
- on 0.2.0.13-alpha.
- - The bridge GeoIP stats were counting other relays, for example
- self-reachability and authority-reachability tests.
- o Minor features:
- - Support compilation to target iPhone; patch from cjacker huang.
- To build for iPhone, pass the --enable-iphone option to configure.
- Changes in version 0.2.0.14-alpha - 2007-12-23
- o Major bugfixes:
- - Fix a crash on startup if you install Tor 0.2.0.13-alpha fresh
- without a datadirectory from a previous Tor install. Reported
- by Zax.
- - Fix a crash when we fetch a descriptor that turns out to be
- unexpected (it used to be in our networkstatus when we started
- fetching it, but it isn't in our current networkstatus), and we
- aren't using bridges. Bugfix on 0.2.0.x.
- - Fix a crash when accessing hidden services: it would work the first
- time you use a given introduction point for your service, but
- on subsequent requests we'd be using garbage memory. Fixed by
- Karsten Loesing. Bugfix on 0.2.0.13-alpha.
- - Fix a crash when we load a bridge descriptor from disk but we don't
- currently have a Bridge line for it in our torrc. Bugfix on
- 0.2.0.13-alpha.
- o Major features:
- - If bridge authorities set BridgePassword, they will serve a
- snapshot of known bridge routerstatuses from their DirPort to
- anybody who knows that password. Unset by default.
- o Minor bugfixes:
- - Make the unit tests build again.
- - Make "GETINFO/desc-annotations/id/<OR digest>" actually work.
- - Make PublishServerDescriptor default to 1, so the default doesn't
- have to change as we invent new directory protocol versions.
- - Fix test for rlim_t on OSX 10.3: sys/resource.h doesn't want to
- be included unless sys/time.h is already included. Fixes
- bug 553. Bugfix on 0.2.0.x.
- - If we receive a general-purpose descriptor and then receive an
- identical bridge-purpose descriptor soon after, don't discard
- the next one as a duplicate.
- o Minor features:
- - If BridgeRelay is set to 1, then the default for
- PublishServerDescriptor is now "bridge" rather than "v2,v3".
- - If the user sets RelayBandwidthRate but doesn't set
- RelayBandwidthBurst, then make them equal rather than erroring out.
- Changes in version 0.2.0.13-alpha - 2007-12-21
- Tor 0.2.0.13-alpha adds a fourth v3 directory authority run by Geoff
- Goodell, fixes many more bugs, and adds a lot of infrastructure for
- upcoming features.
- o New directory authorities:
- - Set up lefkada (run by Geoff Goodell) as the fourth v3 directory
- authority.
- o Major bugfixes:
- - Only update guard status (usable / not usable) once we have
- enough directory information. This was causing us to always pick
- two new guards on startup (bugfix on 0.2.0.9-alpha), and it was
- causing us to discard all our guards on startup if we hadn't been
- running for a few weeks (bugfix on 0.1.2.x). Fixes bug 448.
- - Purge old entries from the "rephist" database and the hidden
- service descriptor databases even when DirPort is zero. Bugfix
- on 0.1.2.x.
- - We were ignoring our RelayBandwidthRate for the first 30 seconds
- after opening a circuit
- 0.2.0.3-alpha.
- - 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 types of requests.
- - Relays were publishing their server descriptor to v1 and v2
- directory authorities, but they didn't try publishing to v3-only
- authorities. Fix this; and also stop publishing to v1 authorities.
- Bugfix on 0.2.0.x.
- - When we were reading router descriptors from cache, we were ignoring
- the annotations -- so for example we were reading in bridge-purpose
- descriptors as general-purpose descriptors. Bugfix on 0.2.0.8-alpha.
- - When we decided to send a 503 response to a request for servers, we
- were then also sending the server descriptors: this defeats the
- whole purpose. Fixes bug 539; bugfix on 0.1.2.x.
- o Major features:
- - Bridge relays now behave like clients with respect to time
- intervals for downloading new 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.
- - 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.
- - Tor can now be configured to read a GeoIP file from disk in one
- of two formats. This can be used by controllers to map IP addresses
- to countries. Eventually, it may support exit-by-country.
- - When possible, bridge relays remember which countries users
- are coming from, and report aggregate information in their
- extra-info documents, so that the bridge authorities can learn
- where Tor is blocked.
- - Bridge directory authorities now 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.
- - 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 Minor bugfixes:
- - The fix in 0.2.0.12-alpha cleared the "hsdir" flag in v3 network
- consensus documents when there are too many relays at a single
- IP address. Now clear it in v2 network status documents too, and
- also clear it in routerinfo_t when the relay is no longer listed
- in the relevant networkstatus document.
- - Don't crash if we get an unexpected value for the
- PublishServerDescriptor config option. Reported by Matt Edman;
- bugfix on 0.2.0.9-alpha.
- - Our new v2 hidden service descriptor format allows descriptors
- that have no introduction points. But Tor crashed when we tried
- to build a descriptor with no intro points (and it would have
- crashed if we had tried to parse one). Bugfix on 0.2.0.x; patch
- by Karsten Loesing.
- - Fix building with dmalloc 5.5.2 with glibc.
- - 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. Reported by Aljosha Judmayer.
- - Check for presence of s6_addr16 and s6_addr32 fields in in6_addr
- via autoconf. Should fix compile on solaris. Bugfix on 0.2.0.x.
- - 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. Bugfix on 0.1.2.x.
- - 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. Bugfix on 0.1.2.x.
- - 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. Bugfix on 0.1.2.x. (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. Bugfix on 0.1.2.x.
- - Fix compilation with
- - Don't crash on name lookup when we have no current consensus. Fixes
- bug 538; bugfix on 0.2.0.x.
- - Only Tors that want to mirror the v2 directory info should
- create the "cached-status" directory in their datadir. (All Tors
- used to create it.) Bugfix on 0.2.0.9-alpha.
- - Directory authorities should only automatically download Extra Info
- documents if they're v1, v2, or v3 authorities. Bugfix on 0.1.2.x.
- o Minor features:
- - On the USR1 signal, when dmalloc is in use, log the top 10 memory
- consumers. (We already do this on HUP.)
- - Authorities and caches fetch the v2 networkstatus documents
- less often, now that v3 is encouraged.
- - Add a new config option BridgeRelay that specifies you want to
- be a bridge relay. Right now the only difference is that it makes
- you answer begin_dir requests, and it makes you cache dir info,
- even if your DirPort isn't on.
- - 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.
- - Authorities now decide whether they're authoritative for a given
- router based on the router's purpose.
- - 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.
- Changes in version 0.2.0.12-alpha - 2007-11-16
- This twelfth development snapshot fixes some more build problems as
- well as a few minor bugs.
- o Compile fixes:
- - Make it build on OpenBSD again. Patch from tup.
- - Substitute BINDIR and LOCALSTATEDIR in scripts. Fixes
- package-building for Red Hat, OS X, etc.
- o Minor bugfixes (on 0.1.2.x):
- - Changing the ExitPolicyRejectPrivate setting should cause us to
- rebuild our server descriptor.
- o Minor bugfixes (on 0.2.0.x):
- - When we're lacking a consensus, don't try to perform rendezvous
- operations. Reported by Karsten Loesing.
- - Fix a small memory leak whenever we decide against using a
- newly picked entry guard. Reported by Mike Perry.
- - When authorities detected more than two relays running on the same
- IP address, they were clearing all the status flags but forgetting
- to clear the "hsdir" flag. So clients were being told that a
- given relay was the right choice for a v2 hsdir lookup, yet they
- never had its descriptor because it was marked as 'not running'
- in the consensus.
- - If we're trying to fetch a bridge descriptor and there's no way
- the bridge authority could help us (for example, we don't know
- a digest, or there is no bridge authority), don't be so eager to
- fall back to asking the bridge authority.
- - If we're using bridges or have strictentrynodes set, and our
- chosen exit is in the same family as all our bridges/entry guards,
- then be flexible about families.
- o Minor features:
- - 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 code for
- proposal 110.
- Changes in version 0.2.0.11-alpha - 2007-11-12
- This eleventh development snapshot fixes some build problems with
- the previous snapshot. It also includes a more secure-by-default exit
- policy for relays, fixes an enormous memory leak for exit relays, and
- fixes another bug where servers were falling out of the directory list.
- 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. Bugfix on 0.1.2.x.
- o Major bugfixes:
- - Fix a memory leak on exit relays; we were leaking a cached_resolve_t
- on every successful resolve. Reported by Mike Perry; bugfix
- on 0.1.2.x.
- - On authorities, never downgrade to old router descriptors simply
- because they're listed in the consensus. This created a catch-22
- where we wouldn't list a new descriptor because there was an
- old one in the consensus, and we couldn't get the new one in the
- consensus because we wouldn't list it. Possible fix for bug 548.
- Also, this might cause bug 543 to appear on authorities; if so,
- we'll need a band-aid for that. Bugfix on 0.2.0.9-alpha.
- o Packaging fixes on 0.2.0.10-alpha:
- - We were including instructions about what to do with the
- src/config/fallback-consensus file, but we weren't actually
- including it in the tarball. Disable all of that for now.
- o Minor features:
- - Allow people to say PreferTunnelledDirConns rather than
- PreferTunneledDirConns, for those alternate-spellers out there.
- o Minor bugfixes:
- - Don't reevaluate all the information from our consensus document
- just because we've downloaded a v2 networkstatus that we intend
- to cache. Fixes bug 545; bugfix on 0.2.0.x.
- Changes in version 0.2.0.10-alpha - 2007-11-10
- This tenth development snapshot adds a third v3 directory authority
- run by Mike Perry, adds most of Karsten Loesing's new hidden service
- descriptor format, fixes a bad crash bug and new bridge bugs introduced
- in 0.2.0.9-alpha, fixes many bugs with the v3 directory implementation,
- fixes some minor memory leaks in previous 0.2.0.x snapshots, and
- addresses many more minor issues.
- o New directory authorities:
- - Set up ides (run by Mike Perry) as the third v3 directory authority.
- o Major features:
- - 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.
- - More progress on proposal 114: code from Karsten Loesing to
- implement new hidden service descriptor format.
- - Raise the default BandwidthRate/BandwidthBurst to 5MB/10MB, to
- accommodate the growing number of servers that use the default
- and are reaching it.
- - Directory authorities use a new formula for selecting which nodes
- 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.
- - Make "not enough dir info yet" warnings describe *why* Tor feels
- it doesn't have enough directory info yet.
- o Major bugfixes:
- - Stop servers from crashing if they set a Family option (or
- maybe in other situations too). Bugfix on 0.2.0.9-alpha; reported
- by Fabian Keil.
- - Make bridge users work again -- the move to v3 directories in
- 0.2.0.9-alpha had introduced a number of bugs that made bridges
- no longer work for clients.
- - When the clock jumps forward a lot, do not allow the bandwidth
- buckets to become negative. Bugfix on 0.1.2.x; fixes bug 544.
- o Major bugfixes (v3 dir, bugfixes on 0.2.0.9-alpha):
- - When the consensus lists a router descriptor that we previously were
- mirroring, but that we considered non-canonical, reload the
- descriptor as canonical. This fixes bug 543 where Tor servers
- would start complaining after a few days that they don't have
- enough directory information to build a circuit.
- - Consider replacing the current consensus when certificates arrive
- that make the pending consensus valid. Previously, we were only
- considering replacement when the new certs _didn't_ help.
- - Fix an assert error on startup if we didn't already have the
- consensus and certs cached in our datadirectory: we were caching
- the consensus in consensus_waiting_for_certs but then free'ing it
- right after.
- - Avoid sending a request for "keys/fp" (for which we'll get a 400 Bad
- Request) if we need more v3 certs but we've already got pending
- requests for all of them.
- - Correctly back off from failing certificate downloads. Fixes
- bug 546.
- - Authorities don't vote on the Running flag if they have been running
- for less than 30 minutes themselves. Fixes bug 547, where a newly
- started authority would vote that everyone was down.
- o New requirements:
- - 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.
- o Minor features:
- - 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).
- - Use "If-Modified-Since" to avoid retrieving consensus
- networkstatuses that we already have.
- - When we have no consensus, check FallbackNetworkstatusFile (defaults
- to $PREFIX/share/tor/fallback-consensus) for a consensus. This way
- we start knowing some directory caches.
- - When we receive a consensus from the future, warn about skew.
- - Improve skew reporting: try to give the user a better log message
- about how skewed they are, and how much this matters.
- - When we have a certificate for an authority, believe that
- certificate's claims about the authority's IP address.
- - New
- Good in combination with
- - Authorities send back an X-Descriptor-Not-New header in response to
- an accepted-but-discarded descriptor upload. Partially implements
- fix for bug 535.
- - Make the log message for "tls error. breaking." more useful.
- - Better log messages about certificate downloads, to attempt to
- track down the second incarnation of bug 546.
- o Minor features (bridges):
- - If bridge users set UpdateBridgesFromAuthority, but the digest
- they ask for is a 404 from the bridge authority, they now fall
- back to trying the bridge directly.
- - Bridges now use begin_dir to publish their server descriptor to
- the bridge authority, even when they haven't set TunnelDirConns.
- o Minor features (controller):
- - 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 Utilities:
- - 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.
- o Minor bugfixes:
- - Refuse to start if both ORPort and UseBridges are set. Bugfix
- on 0.2.0.x, suggested by Matt Edman.
- - Don't stop fetching descriptors when FetchUselessDescriptors is
- set, even if we stop asking for circuits. Bugfix on 0.1.2.x;
- reported by tup and ioerror.
- - Better log message on vote from unknown authority.
- - Don't log "Launching 0 request for 0 router" message.
- o Minor bugfixes (memory leaks):
- - Stop leaking memory every time we parse a v3 certificate. Bugfix
- on 0.2.0.1-alpha.
- - Stop leaking memory every time we load a v3 certificate. Bugfix
- on 0.2.0.1-alpha. Fixes bug 536.
- - Stop leaking a cached networkstatus on exit. Bugfix on
- 0.2.0.3-alpha.
- - Stop leaking voter information every time we free a consensus.
- Bugfix on 0.2.0.3-alpha.
- - Stop leaking signed data every time we check a voter signature.
- Bugfix on 0.2.0.3-alpha.
- - Stop leaking a signature every time we fail to parse a consensus or
- a vote. Bugfix on 0.2.0.3-alpha.
- - Stop leaking v2_download_status_map on shutdown. Bugfix on
- 0.2.0.9-alpha.
- - Stop leaking conn->nickname every time we make a connection to a
- Tor relay without knowing its expected identity digest (e.g. when
- using bridges). Bugfix on 0.2.0.3-alpha.
- - Minor bugfixes (portability):
- - Run correctly on platforms where rlim_t is larger than unsigned
- long, and/or where the real limit for number of open files is
- OPEN_FILES, not rlim_max from getrlimit(RLIMIT_NOFILES). In
- particular, these may be needed for OS X 10.5.
- 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.
- - Don't try to create the datadir when running
-
- Changes in version 0.2.0.9-alpha - 2007-10-24
- This ninth development snapshot switches clients to the new v3 directory
- system; allows servers to be listed in the network status even when they
- have the same nickname as a registered server; and fixes many other
- bugs including a big one that was causing some servers to disappear
- from the network status lists for a few hours each day.
- o Major features (directory system):
- - Clients now download v3 consensus networkstatus documents instead
- of v2 networkstatus documents. Clients and caches now base their
- opinions about routers on these consensus documents. Clients only
- download router descriptors listed in the consensus.
- - Authorities now list servers who have the same nickname as
- a different named server, but list them with a new flag,
- "Unnamed". Now we can list servers that happen to pick the same
- nickname as a server that registered two years ago and then
- disappeared. Partially implements proposal 122.
- - If the consensus lists a router as "Unnamed", the name is assigned
- to a different router: do not identify the router by that name.
- Partially implements proposal 122.
- - Authorities can now come to a consensus on which method to use to
- compute the consensus. This gives us forward compatibility.
- o Major bugfixes:
- - Stop publishing a new server descriptor just because we HUP or
- when we find our DirPort to be reachable but won't actually publish
- it. New descriptors without any real changes are dropped by the
- authorities, and can screw up our "publish every 18 hours" schedule.
- Bugfix on 0.1.2.x.
- - When a router wasn't listed in a new networkstatus, we were leaving
- the flags for that router alone
- Running, etc
- 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; bugfix on 0.1.2.x.
- - Fix awful behavior in DownloadExtraInfo option where we'd fetch
- extrainfo documents and then discard them immediately for not
- matching the latest router. Bugfix on 0.2.0.1-alpha.
- o Minor features (v3 directory protocol):
- - Allow tor-gencert to generate a new certificate without replacing
- the signing key.
- - Allow certificates to include an address.
- - When we change our directory-cache settings, reschedule all voting
- and download operations.
- - Reattempt certificate downloads immediately on failure, as long as
- we haven't failed a threshold number of times yet.
- - Delay retrying consensus downloads while we're downloading
- certificates to verify the one we just got. Also, count getting a
- consensus that we already have (or one that isn't valid) as a failure,
- and count failing to get the certificates after 20 minutes as a
- failure.
- - Build circuits and download descriptors even if our consensus is a
- little expired. (This feature will go away once authorities are
- more reliable.)
- o Minor features (router descriptor cache):
- - 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.
- o Minor features (performance):
- - Call routerlist_remove_old_routers() much less often. This should
- speed startup, especially on directory caches.
- - Don't try to launch new descriptor downloads quite so often when we
- already have enough directory information to build circuits.
- - 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.
- o Minor features (compilation):
- - 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.
- o Minor bugfixes (v3 directory authorities, bugfixes on 0.2.0.x):
- - Make the "next period" votes into "current period" votes immediately
- after publishing the consensus; avoid a heisenbug that made them
- stick around indefinitely.
- - When we discard a vote as a duplicate, do not report this as
- an error.
- - Treat missing v3 keys or certificates as an error when running as a
- v3 directory authority.
- - When we're configured to be a v3 authority, but we're only listed
- as a non-v3 authority in our DirServer line for ourself, correct
- the listing.
- - If an authority doesn't have a qualified hostname, just put
- its address in the vote. This fixes the problem where we referred to
- "moria on moria:9031."
- - Distinguish between detached signatures for the wrong period, and
- detached signatures for a divergent vote.
- - Fix a small memory leak when computing a consensus.
- - When there's no concensus, we were forming a vote every 30
- minutes, but writing the "valid-after" line in our vote based
- on our configured V3AuthVotingInterval: so unless the intervals
- matched up, we immediately rejected our own vote because it didn't
- start at the voting interval that caused us to construct a vote.
- o Minor bugfixes (v3 directory protocol, bugfixes on 0.2.0.x):
- - Delete unverified-consensus when the real consensus is set.
- - Consider retrying a consensus networkstatus fetch immediately
- after one fails: don't wait 60 seconds to notice.
- - When fetching a consensus as a cache, wait until a newer consensus
- should exist before trying to replace the current one.
- - Use a more forgiving schedule for retrying failed consensus
- downloads than for other types.
- o Minor bugfixes (other directory issues):
- - Correct the implementation of "download votes by digest." Bugfix on
- 0.2.0.8-alpha.
- - 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. Bugfix on 0.1.2.x.
- o Minor bugfixes (controller):
- - Don't reset trusted dir server list when we set a configuration
- option. Patch from Robert Hogan; bugfix on 0.1.2.x.
- - 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.
- o Minor bugfixes (misc):
- - Correctly check for bad options to the "PublishServerDescriptor"
- config option. Bugfix on 0.2.0.1-alpha; reported by Matt Edman.
- - Stop leaking memory on failing case of base32_decode, and make
- it accept upper-case letters. Bugfixes on 0.2.0.7-alpha.
- - Don't try to download extrainfo documents when we're trying to
- fetch enough directory info to build a circuit: having enough
- info should get priority. Bugfix on 0.2.0.x.
- - 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. Bug found by spending four hours without a v3 consensus. Bugfix
- on 0.1.2.x.
- - Detect the reason for failing to mmap a descriptor file we just
- wrote, and give a more useful log message. Fixes bug 533. Bugfix
- on 0.1.2.x.
- o Code simplifications and refactoring:
- - 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.
- - New convenience code to locate a file within the DataDirectory.
- - Move non-authority functionality out of dirvote.c.
- - Refactor the arguments for router_pick_{directory_|trusteddir}server
- so that they all take the same named flags.
- o Utilities
- - 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).
- Changes in version 0.2.0.8-alpha - 2007-10-12
- This eighth development snapshot fixes a crash bug that's been bothering
- us since February 2007, lets bridge authorities store a list of bridge
- descriptors they've seen, gets v3 directory voting closer to working,
- starts caching v3 directory consensus documents on directory mirrors,
- and fixes a variety of smaller issues including some minor memory leaks.
- o Major features (router descriptor cache):
- - 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.
- - Use annotations to record the time we received each descriptor, its
- source, and its purpose.
- - Disable the SETROUTERPURPOSE controller command: it is now
- obsolete.
- - Controllers should now specify cache=no or cache=yes when using
- the +POSTDESCRIPTOR command.
- - Bridge authorities now write bridge descriptors to disk, meaning
- we can export them to other programs and begin distributing them
- to blocked users.
- o Major features (directory authorities):
- - When a v3 authority is missing votes or signatures, it now tries
- to fetch them.
- - Directory authorities track weighted fractional uptime as well as
- weighted mean-time-between failures. 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.
- o Major features (v3 directory system):
- - Caches now download v3 network status documents as needed,
- and download the descriptors listed in them.
- - All hosts now attempt to download and keep fresh v3 authority
- certificates, and re-attempt after failures.
- - More internal-consistency checks for vote parsing.
- 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. Bugfix on
- 0.1.2.7-alpha.
- o Major bugfixes (performance):
- - Fix really bad O(n^2) performance when parsing a long list of
- routers: Instead of searching the entire list for an "extra-info "
- string which usually wasn't there, once for every routerinfo
- we read, just scan lines forward until we find one we like.
- Bugfix on 0.2.0.1.
- - 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. Bugfix on 0.1.2.7-alpha.
- o Minor features (v3 authority system):
- - Add more ways for tools to download the votes that lead to the
- current consensus.
- - Send a 503 when low on bandwidth and a vote, consensus, or
- certificate is requested.
- - If-modified-since is now implemented properly for all kinds of
- certificate requests.
- o Minor bugfixes (network statuses):
- - Tweak the implementation of proposal 109 slightly: allow at most
- two Tor servers on the same IP address, except if it's the location
- of a directory authority, in which case allow five. Bugfix on
- 0.2.0.3-alpha.
- o Minor bugfixes (controller):
- - 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.) Bugfix on 0.1.2.x.
- o Minor bugfixes (v3 directory system):
- - Fix logic to look up a cert by its signing key digest. Bugfix on
- 0.2.0.7-alpha.
- - Only change the reply to a vote to "OK" if it's not already
- set. This gets rid of annoying "400 OK" log messages, which may
- have been masking some deeper issue. Bugfix on 0.2.0.7-alpha.
- - When we get a valid consensus, recompute the voting schedule.
- - Base the valid-after time of a vote on the consensus voting
- schedule, not on our preferred schedule.
- - Make the return values and messages from signature uploads and
- downloads more sensible.
- - Fix a memory leak when serving votes and consensus documents, and
- another when serving certificates.
- o Minor bugfixes (performance):
- - 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.
- - Fix a minor memory leak whenever we parse guards from our state
- file. Bugfix on 0.2.0.7-alpha.
- - Fix a minor memory leak whenever we write out a file. Bugfix on
- 0.2.0.7-alpha.
- - Fix a minor memory leak whenever a controller sends the PROTOCOLINFO
- command. Bugfix on 0.2.0.5-alpha.
- o Minor bugfixes (portability):
- - On some platforms, accept() can return a broken address. Detect
- this more quietly, and deal accordingly. Fixes bug 483.
- - Stop calling tor_strlower() on uninitialized memory in some cases.
- Bugfix in 0.2.0.7-alpha.
- o Minor bugfixes (usability):
- - Treat some 403 responses from directory servers as INFO rather than
- WARN-severity events.
- - 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.
- o Minor bugfixes (anonymity):
- - 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.
- - 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).
- o Code simplifications and refactoring:
- - Make a bunch of functions static. Remove some dead code.
- - Pull out about a third of the really big routerlist.c; put it in a
- new module, networkstatus.c.
- - Merge the extra fields in local_routerstatus_t back into
- routerstatus_t: we used to need one routerstatus_t for each
- authority's opinion, plus a local_routerstatus_t for the locally
- computed consensus opinion. To save space, we put the locally
- modified fields into local_routerstatus_t, and only the common
- stuff into routerstatus_t. But once v3 directories are in use,
- clients and caches will no longer need to hold authority opinions;
- thus, the rationale for keeping the types separate is now gone.
- - Make the code used to reschedule and reattempt downloads more
- uniform.
- - Turn all 'Are we a directory server/mirror?' logic into a call to
- dirserver_mode().
- - Remove the code to generate the oldest (v1) directory format.
- The code has been disabled since 0.2.0.5-alpha.
- Changes in version 0.2.0.7-alpha - 2007-09-21
- This seventh development snapshot makes bridges work again, makes bridge
- authorities work for the first time, fixes two huge performance flaws
- in hidden services, and fixes a variety of minor issues.
- o New directory authorities:
- - Set up moria1 and tor26 as the first v3 directory authorities. See
- doc/spec/dir-spec.txt for details on the new directory design.
- o Major bugfixes (crashes):
- - Fix possible segfaults in functions called from
- rend_process_relay_cell(). Bugfix on 0.1.2.x.
- o Major bugfixes (bridges):
- - Fix a bug that made servers send a "404 Not found" in response to
- attempts to fetch their server descriptor. This caused Tor servers
- to take many minutes to establish reachability for their DirPort,
- and it totally crippled bridges. Bugfix on 0.2.0.5-alpha.
- - Make "UpdateBridgesFromAuthority" torrc option work: when bridge
- users configure that and specify a bridge with an identity
- fingerprint, now they will lookup the bridge descriptor at the
- default bridge authority via a one-hop tunnel, but once circuits
- are established they will switch to a three-hop tunnel for later
- connections to the bridge authority. Bugfix in 0.2.0.3-alpha.
- 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. Both
- are bugfixes on 0.1.2.x, and they could speed up hidden service
- connections dramatically. Thanks to Karsten Loesing.
- o Minor features (security):
- - As a client, do not believe any server that tells us that an
- address maps to an internal address space.
- - Make it possible to enable HashedControlPassword and
- CookieAuthentication at the same time.
- o Minor features (guard nodes):
- - 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.
- o Minor features (speed):
- - 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 when they are the same (i.e.,
- on big-endian hosts.)
- o Minor features (controller):
- - 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.
- o Removed features:
- - Routers no longer include bandwidth-history lines in their
- descriptors; this information is already available in extra-info
- documents, and including it in router descriptors took up 60%
- (!) of compressed router descriptor downloads. Completes
- implementation of proposal 104.
- - 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.
- - On OSX, stop warning the user that kqueue support in libevent is
- "experimental", since it seems to have worked fine for ages.
- o Minor bugfixes:
- - When generating information telling us how to extend to a given
- router, do not try to include the nickname if it is absent. Fixes
- bug 467. Bugfix on 0.2.0.3-alpha.
- - Fix a user-triggerable (but not remotely-triggerable) segfault
- in expand_filename(). Bugfix on 0.1.2.x.
- - Fix a memory leak when freeing incomplete requests from DNSPort.
- Found by Niels Provos with valgrind. Bugfix on 0.2.0.1-alpha.
- - Don't try to access (or alter) the state file when running
-
- bug 499.) Bugfix on 0.1.2.x.
- - Servers used to decline to publish their DirPort if their
- BandwidthRate, RelayBandwidthRate, or MaxAdvertisedBandwidth
- were below a threshold. Now they only look at BandwidthRate and
- RelayBandwidthRate. Bugfix on 0.1.2.x.
- - 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. Bugfix on 0.1.2.x.
- - Resume listing "AUTHORITY" flag for authorities in network status.
- Bugfix on 0.2.0.3-alpha; reported by Alex de Joode.
- o Code simplifications and refactoring:
- - 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.
- - Turn "descriptor store" into a full-fledged type.
- - Move all NT services code into a separate source file.
- - Unify all code that computes medians, percentile elements, etc.
- - Get rid of a needless malloc when parsing address policies.
- 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.2.0.6-alpha - 2007-08-26
- This sixth development snapshot 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.
- In addition, this snapshot fixes major load balancing problems
- with path selection, which should speed things up a lot once many
- people have upgraded. The directory authorities also use a new
- mean-time-between-failure approach to tracking which servers are stable,
- rather than just looking at the most recent uptime.
- o New directory authorities:
- - Set up Tonga as the default bridge directory authority.
- o Major features:
- - Directory authorities now track servers by weighted
- mean-times-between-failures. When we have 4 or more days of data,
- use measured MTBF rather than declared uptime to decide whether
- to call a router Stable. Implements proposal 108.
- 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 (descriptor parsing):
- - Handle unexpected whitespace better in malformed descriptors. Bug
- found using Benedikt Boss's new Tor fuzzer! Bugfix on 0.2.0.x.
- o Minor features:
- - There is now an ugly, temporary "desc/all-recent-extrainfo-hack"
- GETINFO for Torstat to use until it can switch to using extrainfos.
- - Optionally (if built with -DEXPORTMALLINFO) export the output
- of mallinfo via http, as tor/mallinfo.txt. Only accessible
- from localhost.
- o Minor bugfixes:
- - Do not intermix bridge routers with controller-added
- routers. (Bugfix on 0.2.0.x)
- - Do not fail with an assert when accept() returns an unexpected
- address family. Addresses but does not wholly fix bug 483. (Bugfix
- on 0.2.0.x)
- - Let directory authorities startup even when they can't generate
- a descriptor immediately, e.g. because they don't know their
- address.
- - Stop putting the authentication cookie in a file called "0"
- in your working directory if you don't specify anything for the
- new CookieAuthFile option. Reported by Matt Edman.
- - Make it possible to read the PROTOCOLINFO response in a way that
- conforms to our control-spec. Reported by Matt Edman.
- - Fix a minor memory leak when we fail to find enough suitable
- servers to choose a circuit. Bugfix on 0.1.2.x.
- - Stop leaking part of the descriptor when we run into a particularly
- unparseable piece of it. Bugfix on 0.1.2.x.
- - Unmap the extrainfo cache file on exit.
- Changes in version 0.2.0.5-alpha - 2007-08-19
- This fifth development snapshot fixes compilation on Windows again;
- fixes an obnoxious client-side bug that slowed things down and put
- extra load on the network; gets us closer to using the v3 directory
- voting scheme; makes it easier for Tor controllers to use cookie-based
- authentication; and fixes a variety of other bugs.
- o Removed features:
- - 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.
- o Major bugfixes (compilation, 0.2.0.x):
- - Try to fix Win32 compilation again: improve checking for IPv6 types.
- - Try to fix MSVC compilation: build correctly on platforms that do
- not define s6_addr16 or s6_addr32.
- - Fix compile on platforms without getaddrinfo: bug found by Li-Hui
- Zhou.
- 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. Bugfix on 0.1.2.7-alpha; fixes bug 454;
- reported by lodger.
- o Minor features (directory servers):
- - When somebody requests a list of statuses or servers, and we have
- none of those, return a 404 rather than an empty 200.
- o Minor features (directory voting):
- - Store v3 consensus status consensuses on disk, and reload them
- on startup.
- o Minor features (security):
- - Warn about unsafe ControlPort configurations.
- - Refuse to start with certain directory authority keys, and
- encourage people using them to stop.
- 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.
- - New config option CookieAuthFile to choose a new location for the
- cookie authentication file, and config option
- CookieAuthFileGroupReadable to make it group-readable.
- o Minor features (unit testing):
- - 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.
- o Minor bugfixes (on 0.1.2.x):
- - 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.
- - 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.
- - Clean up torrc sample config file.
- - Do not automatically run configure from autogen.sh. This
- non-standard behavior tended to annoy people who have built other
- programs.
- o Minor bugfixes (on 0.2.0.x):
- - Fix a bug with AutomapHostsOnResolve that would always cause
- the second request to fail. Bug reported by Kate. Bugfix on
- 0.2.0.3-alpha.
- - Fix a bug in ADDRMAP controller replies that would sometimes
- try to print a NULL. Patch from tup.
- - Read v3 directory authority keys from the right location.
- - Numerous bugfixes to directory voting code.
- 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.2.0.4-alpha - 2007-08-01
- This fourth development snapshot fixes a critical security vulnerability
- for most users, specifically those running Vidalia, TorK, etc. Everybody
- should upgrade to either 0.1.2.16 or 0.2.0.4-alpha.
- o Major security fixes:
- - Close immediately after missing authentication on control port;
- do not allow multiple authentication attempts.
- o Major bugfixes (compilation):
- - Fix win32 compilation: apparently IN_ADDR and IN6_ADDR are already
- defined there.
- o Minor features (performance):
- - Be even more aggressive about releasing RAM from small
- empty buffers. Thanks to our free-list code, this shouldn't be too
- performance-intensive.
- - 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).
- - Log malloc statistics from mallinfo() on platforms where it
- exists.
- Changes in version 0.2.0.3-alpha - 2007-07-29
- This third development snapshot introduces new experimental
- blocking-resistance features and a preliminary version of the v3
- directory voting design, and includes many other smaller features
- and bugfixes.
- o Major features:
- - The first pieces of our "bridge" design for blocking-resistance
- are implemented. People can run bridge directory authorities;
- people can run bridges; and people can configure their Tor clients
- with a set of bridges to use as the first hop into the Tor network.
- See http://archives.seul.org/or/talk/Jul-2007/msg00249.html 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.)
- - Be even more aggressive about separating local traffic from relayed
- traffic when RelayBandwidthRate is set. (Refines proposal 111.)
- o Major features (experimental):
- - First cut of code for "v3 dir voting": directory authorities will
- vote on a common network status document rather than each publishing
- their own opinion. This code needs more testing and more corner-case
- handling before it's ready for use.
- o Security fixes:
- - 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. [Bugfix on 0.1.2.x]
- - Directory authorities now never mark more than 3 servers per IP as
- Valid and Running. (Implements proposal 109, by Kevin Bauer and
- Damon McCoy.)
- - Minor change to organizationName and commonName generation
- procedures in TLS certificates during Tor handshakes, to invalidate
- some earlier censorware approaches. This is not a long-term
- solution, but applying it will give us a bit of time to look into
- the epidemiology of countermeasures as they spread.
- o Major bugfixes (directory):
- - Rewrite directory tokenization code to never run off the end of
- a string. Fixes bug 455. Patch from croup. [Bugfix on 0.1.2.x]
- o Minor features (controller):
- - Add a SOURCE_ADDR field to STREAM NEW events so that controllers can
- match requests to applications. (Patch from Robert Hogan.)
- - Report address and port correctly on connections to DNSPort. (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.)
- - STREAM NEW events are generated for DNSPort requests and for
- tunneled directory connections. (Patch from Robert Hogan.)
- - New "GETINFO address-mappings/*" command to get address mappings
- with expiry information. "addr-mappings/*" is now deprecated.
- (Patch from Tup.)
- o Minor features (misc):
- - Merge in some (as-yet-unused) IPv6 address manipulation code. (Patch
- from croup.)
- - The tor-gencert tool for v3 directory authorities now creates all
- files as readable to the file creator only, and write-protects
- the authority identity key.
- - When dumping memory usage, list bytes used in buffer memory
- free-lists.
- - When running with dmalloc, dump more stats on hup and on exit.
- - Directory authorities now fail quickly and (relatively) harmlessly
- if they generate a network status document that is somehow
- malformed.
- o Traffic load balancing improvements:
- - 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. [Bugfix on 0.1.2.x]
- o Performance improvements:
- - Be more aggressive with freeing buffer RAM or putting it on the
- memory free lists.
- - Use Critical Sections rather than Mutexes for synchronizing threads
- on win32; Mutexes are heavier-weight, and designed for synchronizing
- between processes.
- o Deprecated and removed features:
- - RedirectExits is now deprecated.
- - 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.)
- o Minor bugfixes (directory):
- - Fix another crash bug related to extra-info caching. (Bug found by
- Peter Palfrader.) [Bugfix on 0.2.0.2-alpha]
- - Directories no longer return a "304 not modified" when they don't
- have the networkstatus the client asked for. Also fix a memory
- leak when returning 304 not modified. [Bugfixes on 0.2.0.2-alpha]
- - We had accidentally labelled 0.1.2.x directory servers as not
- suitable for begin_dir requests, and had labelled no directory
- servers as suitable for uploading extra-info documents. [Bugfix
- on 0.2.0.1-alpha]
- o Minor bugfixes (dns):
- - Fix a crash when DNSPort is set more than once. (Patch from Robert
- Hogan.) [Bugfix on 0.2.0.2-alpha]
- - Add DNSPort connections to the global connection list, so that we
- can time them out correctly. (Bug found by Robert Hogan.) [Bugfix
- on 0.2.0.2-alpha]
- - Fix a dangling reference that could lead to a crash when DNSPort is
- changed or closed (Patch from Robert Hogan.) [Bugfix on
- 0.2.0.2-alpha]
- o Minor bugfixes (controller):
- - 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.
- - Terminate multi-line control events properly. (Original patch
- from tup.) [Bugfix on 0.1.2.x-alpha]
- - Do not include spaces in SOURCE_ADDR fields in STREAM
- events. Resolves bug 472. [Bugfix on 0.2.0.x-alpha]
- 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.2.0.2-alpha - 2007-06-02
- o Major bugfixes on 0.2.0.1-alpha:
- - Fix an assertion failure related to servers without extra-info digests.
- Resolves bugs 441 and 442.
- o Minor features (directory):
- - Support "If-Modified-Since" when answering HTTP requests for
- directories, running-routers documents, and network-status documents.
- (There's no need to support it for router descriptors, since those
- are downloaded by descriptor digest.)
- o Minor build issues:
- - Clear up some MIPSPro compiler warnings.
- - When building from a tarball on a machine that happens to have SVK
- installed, report the micro-revision as whatever version existed
- in the tarball, not as "x".
- Changes in version 0.2.0.1-alpha - 2007-06-01
- This early development snapshot provides new features for people running
- Tor as both a client and a server (check out the new RelayBandwidth
- config options); lets Tor run as a DNS proxy; and generally moves us
- forward on a lot of fronts.
- o Major features, server 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.
- o Major features, client usability:
- - A client-side DNS proxy feature to replace 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.
- - Make PreferTunneledDirConns and TunnelDirConns work even when
- we have no cached directory info. This means Tor clients can now
- do all of their connections protected by TLS.
- o Major features, performance and efficiency:
- - Directory authorities accept and serve "extra info" documents for
- routers. These documents contain fields from router descriptors
- that aren't usually needed, and that use a lot of excess
- bandwidth. Once these fields are removed from router descriptors,
- the bandwidth savings should be about 60%. [Partially implements
- proposal 104.]
- - Servers upload extra-info documents to any authority that accepts
- them. Authorities (and caches that have been configured to download
- extra-info documents) download them as needed. [Partially implements
- proposal 104.]
- - 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.
- - Use memory pools to allocate cells with better speed and memory
- efficiency, especially on platforms where malloc() is inefficient.
- - Stop reading on edge connections when their corresponding circuit
- buffers are full; start again as the circuits empty out.
- o Major features, other:
- - Add an HSAuthorityRecordStats option that hidden service authorities
- can use to track statistics of overall hidden service usage without
- logging information that would be very useful to an attacker.
- - Start work implementing multi-level keys for directory authorities:
- Add a standalone tool to generate key certificates. (Proposal 103.)
- o Security fixes:
- - Directory authorities now call routers Stable if they have an
- uptime of at least 30 days, even if that's not the median uptime
- in the network. Implements proposal 107, suggested by Kevin Bauer
- and Damon McCoy.
- o Minor fixes (resource 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.
- - 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.
- o Minor features (build):
- - 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.
- o Minor features (logging):
- - Always prepend "Bug: " to any log message about a bug.
- - 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.
- o Minor features (directory system):
- - New config option V2AuthoritativeDirectory that all directory
- authorities should set. This will let future authorities choose
- not to serve V2 directory information.
- - Directory authorities allow multiple router descriptors and/or extra
- info documents to be uploaded in a single go. This will make
- implementing proposal 104 simpler.
- o Minor features (controller):
- - 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.)
- o Minor features (hidden services):
- - 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.
- o Minor features (other):
- - More unit tests.
- - 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.
- - 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.
- - Treat "2gb" when given in torrc for a bandwidth as meaning 2gb,
- minus 1 byte: the actual maximum declared bandwidth.
- o Removed features:
- - Removed support for the old binary "version 0" controller protocol.
- This has been deprecated since 0.1.1, and warnings have been issued
- since 0.1.2. When we encounter a v0 control message, we now send
- back an error and close the connection.
- - Remove the old "dns worker" server DNS code: it hasn't been default
- since 0.1.2.2-alpha, and all the servers seem to be using the new
- eventdns code.
- o Minor bugfixes (portability):
- - 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.
- - 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.
- o Minor bugfixes (directory):
- - Correctly enforce that elements of directory objects do not appear
- more often than they are allowed to appear.
- - When we are reporting the DirServer line we just parsed, we were
- logging the second stanza of the key fingerprint, not the first.
- o Minor bugfixes (logging):
- - 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 Minor bugfixes (other):
- - 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.)
- - 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)
- - Make the NodeFamilies config option work. (Reported by
- lodger -- it has never actually worked, even though we added it
- in Oct 2004.)
- - Check return values from pthread_mutex functions.
- - Don't save non-general-purpose router descriptors to the disk cache,
- because we have no way of remembering what their purpose was when
- we restart.
- - Add even more asserts to hunt down bug 417.
- - Build without verbose warnings even on (not-yet-released) gcc 4.2.
- - Fix a possible (but very unlikely) bug in picking routers by bandwidth.
- Add a log message to confirm that it is in fact unlikely.
- o Minor bugfixes (controller):
- - 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.
- o Code simplifications and refactoring:
- - Stop passing around circuit_t and crypt_path_t pointers that are
- implicit in other procedure arguments.
- - 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.
- - Make dns_resolve() handle attaching connections to circuits
- properly, so the caller doesn't have to.
- - Rename wants_to_read and wants_to_write to read/write_blocked_on_bw.
- - Keep the connection array as a dynamic smartlist_t, rather than as
- a fixed-sized array. This is important, as the number of connections
- is becoming increasingly decoupled from the number of sockets.
- 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
- 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 Minor fixes:
- - Fix a memory leak when we ask for "all" networkstatuses and we
- get one we don't recognize.
- - Add more asserts to hunt down bug 417.
- - Disable kqueue on OS X 10.3 and earlier, to fix bug 371.
- Changes in version 0.1.2.12-rc - 2007-03-16
- o Major bugfixes:
- - Fix an infinite loop introduced in 0.1.2.7-alpha when we serve
- directory information requested inside Tor connections (i.e. via
- begin_dir cells). It only triggered when the same connection was
- serving other data at the same time. Reported by seeess.
- o Minor bugfixes:
- - When creating a circuit via the controller, send a 'launched'
- event when we're done, so we follow the spec better.
- Changes in version 0.1.2.11-rc - 2007-03-15
- o Minor bugfixes (controller), reported by daejees:
- - Correct the control spec to match how the code actually responds
- to 'getinfo addr-mappings/*'.
- - The control spec described a GUARDS event, but the code
- implemented a GUARD event. Standardize on GUARD, but let people
- ask for GUARDS too.
- Changes in version 0.1.2.10-rc - 2007-03-07
- o Major bugfixes (Windows):
- - Do not load the NT services library functions (which may not exist)
- just to detect if we're a service trying to shut down. Now we run
- on Win98 and friends again.
- o Minor bugfixes (other):
- - Clarify a couple of log messages.
- - Fix a misleading socks5 error number.
- Changes in version 0.1.2.9-rc - 2007-03-02
- o Major bugfixes (Windows):
- - On MinGW, use "%I64u" to printf/scanf 64-bit integers, instead
- of the usual GCC "%llu". This prevents a bug when saving 64-bit
- int configuration values: the high-order 32 bits would get
- truncated. In particular, we were being bitten by the default
- MaxAdvertisedBandwidth of 128 TB turning into 0. (Fixes bug 400
- and maybe also bug 397.)
- o Minor bugfixes (performance):
- - Use OpenSSL's AES implementation on platforms where it's faster.
- This could save us as much as 10% CPU usage.
- o Minor bugfixes (server):
- - Do not rotate onion key immediately after setting it for the first
- time.
- o Minor bugfixes (directory authorities):
- - Stop calling servers that have been hibernating for a long time
- "stable". Also, stop letting hibernating or obsolete servers affect
- uptime and bandwidth cutoffs.
- - Stop listing hibernating servers in the v1 directory.
- o Minor bugfixes (hidden services):
- - Upload hidden service descriptors slightly less often, to reduce
- load on authorities.
- o Minor bugfixes (other):
- - Fix an assert that could trigger if a controller quickly set then
- cleared EntryNodes. (Bug found by Udo van den Heuvel.)
- - On architectures where sizeof(int)>4, still clamp declarable bandwidth
- to INT32_MAX.
- - Fix a potential race condition in the rpm installer. Found by
- Stefan Nordhausen.
- - Try to fix eventdns warnings once and for all: do not treat a dns rcode
- of 2 as indicating that the server is completely bad; it sometimes
- means that the server is just bad for the request in question. (may fix
- the last of bug 326.)
- - Disable encrypted directory connections when we don't have a server
- descriptor for the destination. We'll get this working again in
- the 0.2.0 branch.
- Changes in version 0.1.2.8-beta - 2007-02-26
- o Major bugfixes (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 crash that happened on Win98 when we're given command-line
- arguments: don't try to load NT service functions from advapi32.dll
- except when we need them. (Bug introduced in 0.1.2.7-alpha;
- resolves bug 389.)
- - Fix a longstanding obscure crash bug that could occur when
- we run out of DNS worker processes. (Resolves bug 390.)
- o Major bugfixes (hidden services):
- - Correctly detect whether hidden service descriptor downloads are
- in-progress. (Suggested by Karsten Loesing; fixes bug 399.)
- o Major bugfixes (accounting):
- - 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.)
- o Minor bugfixes (controller):
- - 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.
- o Minor bugfixes (other):
- - Display correct results when reporting which versions are
- recommended, and how recommended they are. (Resolves bug 383.)
- - Improve our estimates for directory bandwidth to be less random:
- guess that an unrecognized directory will have the average bandwidth
- from all known directories, not that it will have the average
- bandwidth from those directories earlier than it on the list.
- - 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.
- - On platforms with no working mmap() equivalent, don't warn the
- user when cached-routers doesn't exist.
- - Warn the user when mmap() [or its equivalent] fails for some reason
- other than file-not-found.
- - Don't warn the user when cached-routers.new doesn't exist: that's
- perfectly fine when starting up for the first time.
- - 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.
- - 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.)
- - Fix switched arguments on memset in the implementation of
- tor_munmap() for systems with no mmap() call.
- - 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.
- - Make earlier entry guards _really_ get retried when the network
- comes back online.
- - On a malformed DNS reply, always give an error to the corresponding
- DNS request.
- - Build with recent libevents on platforms that do not define the
- nonstandard types "u_int8_t" and friends.
- 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.)
- - 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.
- o Minor bugfixes (performance):
- - 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.)
- o Minor features:
- - Remove some never-implemented options. Mark PathlenCoinWeight as
- obsolete.
- - Implement proposal 106: Stop requiring clients to have well-formed
- certificates; 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.)
- - Revise messages on handshake failure again to be even more clear about
- which are incoming connections and which are outgoing.
- - Discard any v1 directory info that's over 1 month old (for
- directories) or over 1 week old (for running-routers lists).
- - 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.)
- - Always remove expired routers and networkstatus docs before checking
- whether we have enough information to build circuits. (Fixes
- bug 373.)
- - Put a lower-bound on MaxAdvertisedBandwidth.
- Changes in version 0.1.2.7-alpha - 2007-02-06
- o Major bugfixes (rate limiting):
- - 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.
- - Fix a memory leak when sending a 503 response for a networkstatus
- request.
- - Be willing to read or write on local connections (e.g. controller
- connections) even when the global rate limiting buckets are empty.
- - If our system clock jumps back in time, don't publish a negative
- uptime in the descriptor. Also, don't let the global rate limiting
- buckets go absurdly negative.
- - Flush local controller connection buffers periodically as we're
- writing to them, so we avoid queueing 4+ megabytes of data before
- trying to flush.
- o Major bugfixes (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.)
- o Major bugfixes (other):
- - 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.
- - Fix a crash bug in the presence of DNS hijacking (reported by Andrew
- Del Vecchio).
- - Detect and reject malformed DNS responses containing circular
- pointer loops.
- - If exits are rare enough that we're not marking exits as guards,
- ignore exit bandwidth when we're deciding the required bandwidth
- to become a guard.
- - When we're handling a directory connection tunneled over Tor,
- don't fill up internal memory buffers with all the data we want
- to tunnel; instead, only add it if the OR connection that will
- eventually receive it has some room for it. (This can lead to
- slowdowns in tunneled dir connections; a better solution will have
- to wait for 0.2.0.)
- o Minor bugfixes (dns):
- - Add some defensive programming to eventdns.c in an attempt to catch
- possible memory-stomping bugs.
- - Detect and reject DNS replies containing IPv4 or IPv6 records with
- an incorrect number of bytes. (Previously, we would ignore the
- extra bytes.)
- - Fix as-yet-unused reverse IPv6 lookup code so it sends nybbles
- in the correct order, and doesn't crash.
- - Free memory held in recently-completed DNS lookup attempts on exit.
- This was not a memory leak, but may have been hiding memory leaks.
- - Handle TTL values correctly on reverse DNS lookups.
- - Treat failure to parse resolv.conf as an error.
- o Minor bugfixes (other):
- - Fix crash with "tor --list-fingerprint" (reported by seeess).
- - 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.
- - 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.
- - Stop using C functions that OpenBSD's linker doesn't like.
- - Don't launch requests for descriptors unless we have networkstatuses
- from at least half of the authorities. This delays the first
- download slightly under pathological circumstances, but can prevent
- us from downloading a bunch of descriptors we don't need.
- - Do not log IPs with TLS failures for incoming TLS
- connections. (Fixes bug 382.)
- - If the user asks to use invalid exit nodes, be willing to use
- unstable ones.
- - Stop using the reserved ac_cv namespace in our configure script.
- - Call stat() slightly less often; use fstat() when possible.
- - Refactor the way we handle pending circuits when an OR connection
- completes or fails, in an attempt to fix a rare crash bug.
- - Only rewrite a conn's address based on X-Forwarded-For: headers
- if it's a parseable public IP address; and stop adding extra quotes
- to the resulting address.
- o Major features:
- - 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.)
- o Minor features:
- - Create a new file ReleaseNotes which was the old ChangeLog. The
- new ChangeLog file now includes the summaries for all development
- versions too.
- - Check for addresses with invalid characters at the exit as well
- as at the client, and warn less verbosely when they fail. You can
- override this by setting ServerDNSAllowNonRFC953Addresses to 1.
- - Adapt a patch from goodell to let the contrib/exitlist script
- take arguments rather than require direct editing.
- - Inform the server operator when we decide not to advertise a
- DirPort due to AccountingMax enabled or a low BandwidthRate. It
- was confusing Zax, so now we're hopefully more helpful.
- - Bring us one step closer to being able to establish an encrypted
- directory tunnel without knowing a descriptor first. Still not
- ready yet. As part of the change, now assume we can use a
- create_fast cell if we don't know anything about a router.
- - Allow exit nodes to use nameservers running on ports other than 53.
- - Servers now cache reverse DNS replies.
- - Add an
- get the "use sensible defaults if the configuration file doesn't
- exist" behavior even when specifying a torrc location on the command
- line.
- o Minor features (controller):
- - 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.
- - Clean up documentation for controller status events.
- - 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.
- Changes in version 0.1.2.6-alpha - 2007-01-09
- o Major bugfixes:
- - Fix an assert error introduced in 0.1.2.5-alpha: if a single TLS
- connection handles more than 4 gigs in either direction, we crash.
- - Fix an assert error introduced in 0.1.2.5-alpha: if we're an
- advertised exit node, somebody might try to exit from us when
- we're bootstrapping and before we've built our descriptor yet.
- Refuse the connection rather than crashing.
- o Minor bugfixes:
- - Warn if we (as a server) find that we've resolved an address that we
- weren't planning to resolve.
- - Warn that using select() on any libevent version before 1.1 will be
- unnecessarily slow (even for select()).
- - 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.
- o Minor features (more controller status events):
- - Implement EXTERNAL_ADDRESS server status event so controllers can
- learn when our address changes.
- - Implement BAD_SERVER_DESCRIPTOR server status event so controllers
- can learn when directories reject our descriptor.
- - Implement SOCKS_UNKNOWN_PROTOCOL client status event so controllers
- can learn when a client application is speaking a non-socks protocol
- to our SocksPort.
- - Implement DANGEROUS_SOCKS client status event so controllers
- can learn when a client application is leaking DNS addresses.
- - Implement BUG general status event so controllers can learn when
- Tor is unhappy about its internal invariants.
- - Implement CLOCK_SKEW general status event so controllers can learn
- when Tor thinks the system clock is set incorrectly.
- - Implement GOOD_SERVER_DESCRIPTOR and ACCEPTED_SERVER_DESCRIPTOR
- server status events so controllers can learn when their descriptors
- are accepted by a directory.
- - Implement CHECKING_REACHABILITY and REACHABILITY_{SUCCEEDED|FAILED}
- server status events so controllers can learn about Tor's progress in
- deciding whether it's reachable from the outside.
- - Implement BAD_LIBEVENT general status event so controllers can learn
- when we have a version/method combination in libevent that needs to
- be changed.
- - Implement NAMESERVER_STATUS, NAMESERVER_ALL_DOWN, DNS_HIJACKED,
- and DNS_USELESS server status events so controllers can learn
- about changes to DNS server status.
- o Minor features (directory):
- - Authorities no longer recommend exits as guards if this would shift
- too much load to the exit nodes.
- Changes in version 0.1.2.5-alpha - 2007-01-06
- o Major features:
- - 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.
- - 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.
- - 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.
- - Implement BEGIN_DIR cells, so we can connect to the directory
- server via TLS to do encrypted directory requests rather than
- plaintext. Enable via the TunnelDirConns and PreferTunneledDirConns
- config options if you like.
- o Minor features (config and docs):
- - 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 (untested).
- - 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 #.
- - Add a maintainer script to tell us which options are missing
- documentation: "make check-docs".
- - Add a new address-spec.txt document to describe our special-case
- addresses: .exit, .onion, and .noconnnect.
- o Minor features (DNS):
- - Ongoing work on eventdns infrastructure: now it has dns server
- and ipv6 support. One day Tor will make use of it.
- - Add client-side caching for reverse DNS lookups.
- - Add support to tor-resolve tool for reverse lookups and SOCKS5.
- - When we change nameservers or IP addresses, reset and re-launch
- our tests for DNS hijacking.
- o Minor features (directory):
- - 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.
- - Directory servers are more willing to send a 503 "busy" if they
- are near their write limit, especially for v1 directory requests.
- Now they can use their limited bandwidth for actual Tor traffic.
- - 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 don't
- count the failure against the total number of failures allowed
- for the thing we're trying to download.
- - Report X-Your-Address-Is correctly from tunneled directory
- connections; don't report X-Your-Address-Is when it's an internal
- address; and never believe reported remote addresses when they're
- internal.
- - Protect against an unlikely DoS attack on directory servers.
- - Add a BadDirectory flag to network status docs so that authorities
- can (eventually) tell clients about caches they believe to be
- broken.
- o Minor features (controller):
- - Have GETINFO dir/status
|