| 1 |
Changes in version 0.1.1.23 - 2006-07-30 |
|---|
| 2 |
o Major bugfixes: |
|---|
| 3 |
- Fast Tor servers, especially exit nodes, were triggering asserts |
|---|
| 4 |
due to a bug in handling the list of pending DNS resolves. Some |
|---|
| 5 |
bugs still remain here; we're hunting them. |
|---|
| 6 |
- Entry guards could crash clients by sending unexpected input. |
|---|
| 7 |
- More fixes on reachability testing: if you find yourself reachable, |
|---|
| 8 |
then don't ever make any client requests (so you stop predicting |
|---|
| 9 |
circuits), then hup or have your clock jump, then later your IP |
|---|
| 10 |
changes, you won't think circuits are working, so you won't try to |
|---|
| 11 |
test reachability, so you won't publish. |
|---|
| 12 |
|
|---|
| 13 |
o Minor bugfixes: |
|---|
| 14 |
- Avoid a crash if the controller does a resetconf firewallports |
|---|
| 15 |
and then a setconf fascistfirewall=1. |
|---|
| 16 |
- Avoid an integer underflow when the dir authority decides whether |
|---|
| 17 |
a router is stable: we might wrongly label it stable, and compute |
|---|
| 18 |
a slightly wrong median stability, when a descriptor is published |
|---|
| 19 |
later than now. |
|---|
| 20 |
- Fix a place where we might trigger an assert if we can't build our |
|---|
| 21 |
own server descriptor yet. |
|---|
| 22 |
|
|---|
| 23 |
|
|---|
| 24 |
Changes in version 0.1.1.22 - 2006-07-05 |
|---|
| 25 |
o Major bugfixes: |
|---|
| 26 |
- Fix a big bug that was causing servers to not find themselves |
|---|
| 27 |
reachable if they changed IP addresses. Since only 0.1.1.22+ |
|---|
| 28 |
servers can do reachability testing correctly, now we automatically |
|---|
| 29 |
make sure to test via one of these. |
|---|
| 30 |
- Fix to allow clients and mirrors to learn directory info from |
|---|
| 31 |
descriptor downloads that get cut off partway through. |
|---|
| 32 |
- Directory authorities had a bug in deciding if a newly published |
|---|
| 33 |
descriptor was novel enough to make everybody want a copy -- a few |
|---|
| 34 |
servers seem to be publishing new descriptors many times a minute. |
|---|
| 35 |
o Minor bugfixes: |
|---|
| 36 |
- Fix a rare bug that was causing some servers to complain about |
|---|
| 37 |
"closing wedged cpuworkers" and skip some circuit create requests. |
|---|
| 38 |
- Make the Exit flag in directory status documents actually work. |
|---|
| 39 |
- Add a preliminary OSX binary un-installer, and fix permissions. |
|---|
| 40 |
|
|---|
| 41 |
|
|---|
| 42 |
Changes in version 0.1.1.21 - 2006-06-10 |
|---|
| 43 |
o Crash and assert fixes from 0.1.1.20: |
|---|
| 44 |
- Fix a rare crash on Tor servers that have enabled hibernation. |
|---|
| 45 |
- Fix a seg fault on startup for Tor networks that use only one |
|---|
| 46 |
directory authority. |
|---|
| 47 |
- Fix an assert from a race condition that occurs on Tor servers |
|---|
| 48 |
while exiting, where various threads are trying to log that they're |
|---|
| 49 |
exiting, and delete the logs, at the same time. |
|---|
| 50 |
- Make our unit tests pass again on certain obscure platforms. |
|---|
| 51 |
|
|---|
| 52 |
o Other fixes: |
|---|
| 53 |
- Add support for building SUSE RPM packages. |
|---|
| 54 |
- Speed up initial bootstrapping for clients: if we are making our |
|---|
| 55 |
first ever connection to any entry guard, then don't mark it down |
|---|
| 56 |
right after that. |
|---|
| 57 |
- When only one Tor server in the network is labelled as a guard, |
|---|
| 58 |
and we've already picked him, we would cycle endlessly picking him |
|---|
| 59 |
again, being unhappy about it, etc. Now we specifically exclude |
|---|
| 60 |
current guards when picking a new guard. |
|---|
| 61 |
- Servers send create cells more reliably after the TLS connection |
|---|
| 62 |
is established: we were sometimes forgetting to send half of them |
|---|
| 63 |
when we had more than one pending. |
|---|
| 64 |
- If we get a create cell that asks us to extend somewhere, but the |
|---|
| 65 |
Tor server there doesn't match the expected digest, we now send |
|---|
| 66 |
a destroy cell back, rather than silently doing nothing. |
|---|
| 67 |
- Make options->RedirectExit work again. |
|---|
| 68 |
- Make cookie authentication for the controller work again. |
|---|
| 69 |
- Stop being picky about unusual characters in the arguments to |
|---|
| 70 |
mapaddress. It's none of our business. |
|---|
| 71 |
- Add a new config option "TestVia" that lets you specify preferred |
|---|
| 72 |
middle hops to use for test circuits. Perhaps this will let me |
|---|
| 73 |
debug the reachability problems better. |
|---|
| 74 |
|
|---|
| 75 |
o Log / documentation fixes: |
|---|
| 76 |
- If we're a server and some peer has a broken TLS certificate, don't |
|---|
| 77 |
log about it unless ProtocolWarnings is set, i.e., we want to hear |
|---|
| 78 |
about protocol violations by others. |
|---|
| 79 |
- Fix spelling of VirtualAddrNetwork in man page. |
|---|
| 80 |
- Add a better explanation at the top of the autogenerated torrc file |
|---|
| 81 |
about what happened to our old torrc. |
|---|
| 82 |
|
|---|
| 83 |
|
|---|
| 84 |
Changes in version 0.1.1.20 - 2006-05-23 |
|---|
| 85 |
o Crash and assert fixes from 0.1.0.17: |
|---|
| 86 |
- Fix assert bug in close_logs() on exit: when we close and delete |
|---|
| 87 |
logs, remove them all from the global "logfiles" list. |
|---|
| 88 |
- Fix an assert error when we're out of space in the connection_list |
|---|
| 89 |
and we try to post a hidden service descriptor (reported by Peter |
|---|
| 90 |
Palfrader). |
|---|
| 91 |
- Fix a rare assert error when we've tried all intro points for |
|---|
| 92 |
a hidden service and we try fetching the service descriptor again: |
|---|
| 93 |
"Assertion conn->state != AP_CONN_STATE_RENDDESC_WAIT failed". |
|---|
| 94 |
- Setconf SocksListenAddress kills Tor if it fails to bind. Now back |
|---|
| 95 |
out and refuse the setconf if it would fail. |
|---|
| 96 |
- If you specify a relative torrc path and you set RunAsDaemon in |
|---|
| 97 |
your torrc, then it chdir()'s to the new directory. If you then |
|---|
| 98 |
HUP, it tries to load the new torrc location, fails, and exits. |
|---|
| 99 |
The fix: no longer allow a relative path to torrc when using -f. |
|---|
| 100 |
- Check for integer overflows in more places, when adding elements |
|---|
| 101 |
to smartlists. This could possibly prevent a buffer overflow |
|---|
| 102 |
on malicious huge inputs. |
|---|
| 103 |
|
|---|
| 104 |
o Security fixes, major: |
|---|
| 105 |
- When we're printing strings from the network, don't try to print |
|---|
| 106 |
non-printable characters. Now we're safer against shell escape |
|---|
| 107 |
sequence exploits, and also against attacks to fool users into |
|---|
| 108 |
misreading their logs. |
|---|
| 109 |
- Implement entry guards: automatically choose a handful of entry |
|---|
| 110 |
nodes and stick with them for all circuits. Only pick new guards |
|---|
| 111 |
when the ones you have are unsuitable, and if the old guards |
|---|
| 112 |
become suitable again, switch back. This will increase security |
|---|
| 113 |
dramatically against certain end-point attacks. The EntryNodes |
|---|
| 114 |
config option now provides some hints about which entry guards you |
|---|
| 115 |
want to use most; and StrictEntryNodes means to only use those. |
|---|
| 116 |
Fixes CVE-2006-0414. |
|---|
| 117 |
- Implement exit enclaves: if we know an IP address for the |
|---|
| 118 |
destination, and there's a running Tor server at that address |
|---|
| 119 |
which allows exit to the destination, then extend the circuit to |
|---|
| 120 |
that exit first. This provides end-to-end encryption and end-to-end |
|---|
| 121 |
authentication. Also, if the user wants a .exit address or enclave, |
|---|
| 122 |
use 4 hops rather than 3, and cannibalize a general circ for it |
|---|
| 123 |
if you can. |
|---|
| 124 |
- Obey our firewall options more faithfully: |
|---|
| 125 |
. If we can't get to a dirserver directly, try going via Tor. |
|---|
| 126 |
. Don't ever try to connect (as a client) to a place our |
|---|
| 127 |
firewall options forbid. |
|---|
| 128 |
. If we specify a proxy and also firewall options, obey the |
|---|
| 129 |
firewall options even when we're using the proxy: some proxies |
|---|
| 130 |
can only proxy to certain destinations. |
|---|
| 131 |
- Make clients regenerate their keys when their IP address changes. |
|---|
| 132 |
- For the OS X package's modified privoxy config file, comment |
|---|
| 133 |
out the "logfile" line so we don't log everything passed |
|---|
| 134 |
through privoxy. |
|---|
| 135 |
- Our TLS handshakes were generating a single public/private |
|---|
| 136 |
keypair for the TLS context, rather than making a new one for |
|---|
| 137 |
each new connection. Oops. (But we were still rotating them |
|---|
| 138 |
periodically, so it's not so bad.) |
|---|
| 139 |
- When we were cannibalizing a circuit with a particular exit |
|---|
| 140 |
node in mind, we weren't checking to see if that exit node was |
|---|
| 141 |
already present earlier in the circuit. Now we are. |
|---|
| 142 |
- Require server descriptors to list IPv4 addresses -- hostnames |
|---|
| 143 |
are no longer allowed. This also fixes potential vulnerabilities |
|---|
| 144 |
to servers providing hostnames as their address and then |
|---|
| 145 |
preferentially resolving them so they can partition users. |
|---|
| 146 |
- Our logic to decide if the OR we connected to was the right guy |
|---|
| 147 |
was brittle and maybe open to a mitm for invalid routers. |
|---|
| 148 |
|
|---|
| 149 |
o Security fixes, minor: |
|---|
| 150 |
- Adjust tor-spec.txt to parameterize cell and key lengths. Now |
|---|
| 151 |
Ian Goldberg can prove things about our handshake protocol more |
|---|
| 152 |
easily. |
|---|
| 153 |
- Make directory authorities generate a separate "guard" flag to |
|---|
| 154 |
mean "would make a good entry guard". Clients now honor the |
|---|
| 155 |
is_guard flag rather than looking at is_fast or is_stable. |
|---|
| 156 |
- Try to list MyFamily elements by key, not by nickname, and warn |
|---|
| 157 |
if we've not heard of a server. |
|---|
| 158 |
- Start using RAND_bytes rather than RAND_pseudo_bytes from |
|---|
| 159 |
OpenSSL. Also, reseed our entropy every hour, not just at |
|---|
| 160 |
startup. And add entropy in 512-bit chunks, not 160-bit chunks. |
|---|
| 161 |
- Refuse server descriptors where the fingerprint line doesn't match |
|---|
| 162 |
the included identity key. Tor doesn't care, but other apps (and |
|---|
| 163 |
humans) might actually be trusting the fingerprint line. |
|---|
| 164 |
- We used to kill the circuit when we receive a relay command we |
|---|
| 165 |
don't recognize. Now we just drop that cell. |
|---|
| 166 |
- Fix a bug found by Lasse Overlier: when we were making internal |
|---|
| 167 |
circuits (intended to be cannibalized later for rendezvous and |
|---|
| 168 |
introduction circuits), we were picking them so that they had |
|---|
| 169 |
useful exit nodes. There was no need for this, and it actually |
|---|
| 170 |
aids some statistical attacks. |
|---|
| 171 |
- Start treating internal circuits and exit circuits separately. |
|---|
| 172 |
It's important to keep them separate because internal circuits |
|---|
| 173 |
have their last hops picked like middle hops, rather than like |
|---|
| 174 |
exit hops. So exiting on them will break the user's expectations. |
|---|
| 175 |
- Fix a possible way to DoS dirservers. |
|---|
| 176 |
- When the client asked for a rendezvous port that the hidden |
|---|
| 177 |
service didn't want to provide, we were sending an IP address |
|---|
| 178 |
back along with the end cell. Fortunately, it was zero. But stop |
|---|
| 179 |
that anyway. |
|---|
| 180 |
|
|---|
| 181 |
o Packaging improvements: |
|---|
| 182 |
- Implement --with-libevent-dir option to ./configure. Improve |
|---|
| 183 |
search techniques to find libevent, and use those for openssl too. |
|---|
| 184 |
- Fix a couple of bugs in OpenSSL detection. Deal better when |
|---|
| 185 |
there are multiple SSLs installed with different versions. |
|---|
| 186 |
- Avoid warnings about machine/limits.h on Debian GNU/kFreeBSD. |
|---|
| 187 |
- On non-gcc compilers (e.g. Solaris's cc), use "-g -O" instead of |
|---|
| 188 |
"-Wall -g -O2". |
|---|
| 189 |
- Make unit tests (and other invocations that aren't the real Tor) |
|---|
| 190 |
run without launching listeners, creating subdirectories, and so on. |
|---|
| 191 |
- The OS X installer was adding a symlink for tor_resolve but |
|---|
| 192 |
the binary was called tor-resolve (reported by Thomas Hardly). |
|---|
| 193 |
- Now we can target arch and OS in rpm builds (contributed by |
|---|
| 194 |
Phobos). Also make the resulting dist-rpm filename match the |
|---|
| 195 |
target arch. |
|---|
| 196 |
- Apply Matt Ghali's --with-syslog-facility patch to ./configure |
|---|
| 197 |
if you log to syslog and want something other than LOG_DAEMON. |
|---|
| 198 |
- Fix the torify (tsocks) config file to not use Tor for localhost |
|---|
| 199 |
connections. |
|---|
| 200 |
- Start shipping socks-extensions.txt, tor-doc-unix.html, |
|---|
| 201 |
tor-doc-server.html, and stylesheet.css in the tarball. |
|---|
| 202 |
- Stop shipping tor-doc.html, INSTALL, and README in the tarball. |
|---|
| 203 |
They are useless now. |
|---|
| 204 |
- Add Peter Palfrader's contributed check-tor script. It lets you |
|---|
| 205 |
easily check whether a given server (referenced by nickname) |
|---|
| 206 |
is reachable by you. |
|---|
| 207 |
- Add BSD-style contributed startup script "rc.subr" from Peter |
|---|
| 208 |
Thoenen. |
|---|
| 209 |
|
|---|
| 210 |
o Directory improvements -- new directory protocol: |
|---|
| 211 |
- See tor/doc/dir-spec.txt for all the juicy details. Key points: |
|---|
| 212 |
- Authorities and caches publish individual descriptors (by |
|---|
| 213 |
digest, by fingerprint, by "all", and by "tell me yours"). |
|---|
| 214 |
- Clients don't download or use the old directory anymore. Now they |
|---|
| 215 |
download network-statuses from the directory authorities, and |
|---|
| 216 |
fetch individual server descriptors as needed from mirrors. |
|---|
| 217 |
- Clients don't download descriptors of non-running servers. |
|---|
| 218 |
- Download descriptors by digest, not by fingerprint. Caches try to |
|---|
| 219 |
download all listed digests from authorities; clients try to |
|---|
| 220 |
download "best" digests from caches. This avoids partitioning |
|---|
| 221 |
and isolating attacks better. |
|---|
| 222 |
- Only upload a new server descriptor when options change, 18 |
|---|
| 223 |
hours have passed, uptime is reset, or bandwidth changes a lot. |
|---|
| 224 |
- Directory authorities silently throw away new descriptors that |
|---|
| 225 |
haven't changed much if the timestamps are similar. We do this to |
|---|
| 226 |
tolerate older Tor servers that upload a new descriptor every 15 |
|---|
| 227 |
minutes. (It seemed like a good idea at the time.) |
|---|
| 228 |
- Clients choose directory servers from the network status lists, |
|---|
| 229 |
not from their internal list of router descriptors. Now they can |
|---|
| 230 |
go to caches directly rather than needing to go to authorities |
|---|
| 231 |
to bootstrap the first set of descriptors. |
|---|
| 232 |
- When picking a random directory, prefer non-authorities if any |
|---|
| 233 |
are known. |
|---|
| 234 |
- Add a new flag to network-status indicating whether the server |
|---|
| 235 |
can answer v2 directory requests too. |
|---|
| 236 |
- Directory mirrors now cache up to 16 unrecognized network-status |
|---|
| 237 |
docs, so new directory authorities will be cached too. |
|---|
| 238 |
- Stop parsing, storing, or using running-routers output (but |
|---|
| 239 |
mirrors still cache and serve it). |
|---|
| 240 |
- Clients consider a threshold of "versioning" directory authorities |
|---|
| 241 |
before deciding whether to warn the user that he's obsolete. |
|---|
| 242 |
- Authorities publish separate sorted lists of recommended versions |
|---|
| 243 |
for clients and for servers. |
|---|
| 244 |
- Change DirServers config line to note which dirs are v1 authorities. |
|---|
| 245 |
- Put nicknames on the DirServer line, so we can refer to them |
|---|
| 246 |
without requiring all our users to memorize their IP addresses. |
|---|
| 247 |
- Remove option when getting directory cache to see whether they |
|---|
| 248 |
support running-routers; they all do now. Replace it with one |
|---|
| 249 |
to see whether caches support v2 stuff. |
|---|
| 250 |
- Stop listing down or invalid nodes in the v1 directory. This |
|---|
| 251 |
reduces its bulk by about 1/3, and reduces load on mirrors. |
|---|
| 252 |
- Mirrors no longer cache the v1 directory as often. |
|---|
| 253 |
- If we as a directory mirror don't know of any v1 directory |
|---|
| 254 |
authorities, then don't try to cache any v1 directories. |
|---|
| 255 |
|
|---|
| 256 |
o Other directory improvements: |
|---|
| 257 |
- Add lefkada.eecs.harvard.edu and tor.dizum.com as fourth and |
|---|
| 258 |
fifth authoritative directory servers. |
|---|
| 259 |
- Directory authorities no longer require an open connection from |
|---|
| 260 |
a server to consider him "reachable". We need this change because |
|---|
| 261 |
when we add new directory authorities, old servers won't know not |
|---|
| 262 |
to hang up on them. |
|---|
| 263 |
- Dir authorities now do their own external reachability testing |
|---|
| 264 |
of each server, and only list as running the ones they found to |
|---|
| 265 |
be reachable. We also send back warnings to the server's logs if |
|---|
| 266 |
it uploads a descriptor that we already believe is unreachable. |
|---|
| 267 |
- Spread the directory authorities' reachability testing over the |
|---|
| 268 |
entire testing interval, so we don't try to do 500 TLS's at once |
|---|
| 269 |
every 20 minutes. |
|---|
| 270 |
- Make the "stable" router flag in network-status be the median of |
|---|
| 271 |
the uptimes of running valid servers, and make clients pay |
|---|
| 272 |
attention to the network-status flags. Thus the cutoff adapts |
|---|
| 273 |
to the stability of the network as a whole, making IRC, IM, etc |
|---|
| 274 |
connections more reliable. |
|---|
| 275 |
- Make the v2 dir's "Fast" flag based on relative capacity, just |
|---|
| 276 |
like "Stable" is based on median uptime. Name everything in the |
|---|
| 277 |
top 7/8 Fast, and only the top 1/2 gets to be a Guard. |
|---|
| 278 |
- Retry directory requests if we fail to get an answer we like |
|---|
| 279 |
from a given dirserver (we were retrying before, but only if |
|---|
| 280 |
we fail to connect). |
|---|
| 281 |
- Return a robots.txt on our dirport to discourage google indexing. |
|---|
| 282 |
|
|---|
| 283 |
o Controller protocol improvements: |
|---|
| 284 |
- Revised controller protocol (version 1) that uses ascii rather |
|---|
| 285 |
than binary: tor/doc/control-spec.txt. Add supporting libraries |
|---|
| 286 |
in python and java and c# so you can use the controller from your |
|---|
| 287 |
applications without caring how our protocol works. |
|---|
| 288 |
- Allow the DEBUG controller event to work again. Mark certain log |
|---|
| 289 |
entries as "don't tell this to controllers", so we avoid cycles. |
|---|
| 290 |
- New controller function "getinfo accounting", to ask how |
|---|
| 291 |
many bytes we've used in this time period. |
|---|
| 292 |
- Add a "resetconf" command so you can set config options like |
|---|
| 293 |
AllowUnverifiedNodes and LongLivedPorts to "". Also, if you give |
|---|
| 294 |
a config option in the torrc with no value, then it clears it |
|---|
| 295 |
entirely (rather than setting it to its default). |
|---|
| 296 |
- Add a "getinfo config-file" to tell us where torrc is. Also |
|---|
| 297 |
expose guard nodes, config options/names. |
|---|
| 298 |
- Add a "quit" command (when when using the controller manually). |
|---|
| 299 |
- Add a new signal "newnym" to "change pseudonyms" -- that is, to |
|---|
| 300 |
stop using any currently-dirty circuits for new streams, so we |
|---|
| 301 |
don't link new actions to old actions. This also occurs on HUP |
|---|
| 302 |
or "signal reload". |
|---|
| 303 |
- If we would close a stream early (e.g. it asks for a .exit that |
|---|
| 304 |
we know would refuse it) but the LeaveStreamsUnattached config |
|---|
| 305 |
option is set by the controller, then don't close it. |
|---|
| 306 |
- Add a new controller event type "authdir_newdescs" that allows |
|---|
| 307 |
controllers to get all server descriptors that were uploaded to |
|---|
| 308 |
a router in its role as directory authority. |
|---|
| 309 |
- New controller option "getinfo desc/all-recent" to fetch the |
|---|
| 310 |
latest server descriptor for every router that Tor knows about. |
|---|
| 311 |
- Fix the controller's "attachstream 0" command to treat conn like |
|---|
| 312 |
it just connected, doing address remapping, handling .exit and |
|---|
| 313 |
.onion idioms, and so on. Now we're more uniform in making sure |
|---|
| 314 |
that the controller hears about new and closing connections. |
|---|
| 315 |
- Permit transitioning from ORPort==0 to ORPort!=0, and back, from |
|---|
| 316 |
the controller. Also, rotate dns and cpu workers if the controller |
|---|
| 317 |
changes options that will affect them; and initialize the dns |
|---|
| 318 |
worker cache tree whether or not we start out as a server. |
|---|
| 319 |
- Add a new circuit purpose 'controller' to let the controller ask |
|---|
| 320 |
for a circuit that Tor won't try to use. Extend the "extendcircuit" |
|---|
| 321 |
controller command to let you specify the purpose if you're starting |
|---|
| 322 |
a new circuit. Add a new "setcircuitpurpose" controller command to |
|---|
| 323 |
let you change a circuit's purpose after it's been created. |
|---|
| 324 |
- Let the controller ask for "getinfo dir/server/foo" so it can ask |
|---|
| 325 |
directly rather than connecting to the dir port. "getinfo |
|---|
| 326 |
dir/status/foo" also works, but currently only if your DirPort |
|---|
| 327 |
is enabled. |
|---|
| 328 |
- Let the controller tell us about certain router descriptors |
|---|
| 329 |
that it doesn't want Tor to use in circuits. Implement |
|---|
| 330 |
"setrouterpurpose" and modify "+postdescriptor" to do this. |
|---|
| 331 |
- If the controller's *setconf commands fail, collect an error |
|---|
| 332 |
message in a string and hand it back to the controller -- don't |
|---|
| 333 |
just tell them to go read their logs. |
|---|
| 334 |
|
|---|
| 335 |
o Scalability, resource management, and performance: |
|---|
| 336 |
- Fix a major load balance bug: we were round-robin reading in 16 KB |
|---|
| 337 |
chunks, and servers with bandwidthrate of 20 KB, while downloading |
|---|
| 338 |
a 600 KB directory, would starve their other connections. Now we |
|---|
| 339 |
try to be a bit more fair. |
|---|
| 340 |
- Be more conservative about whether to advertise our DirPort. |
|---|
| 341 |
The main change is to not advertise if we're running at capacity |
|---|
| 342 |
and either a) we could hibernate ever or b) our capacity is low |
|---|
| 343 |
and we're using a default DirPort. |
|---|
| 344 |
- We weren't cannibalizing circuits correctly for |
|---|
| 345 |
CIRCUIT_PURPOSE_C_ESTABLISH_REND and |
|---|
| 346 |
CIRCUIT_PURPOSE_S_ESTABLISH_INTRO, so we were being forced to |
|---|
| 347 |
build those from scratch. This should make hidden services faster. |
|---|
| 348 |
- Predict required circuits better, with an eye toward making hidden |
|---|
| 349 |
services faster on the service end. |
|---|
| 350 |
- Compress exit policies even more: look for duplicate lines and |
|---|
| 351 |
remove them. |
|---|
| 352 |
- Generate 18.0.0.0/8 address policy format in descs when we can; |
|---|
| 353 |
warn when the mask is not reducible to a bit-prefix. |
|---|
| 354 |
- There used to be two ways to specify your listening ports in a |
|---|
| 355 |
server descriptor: on the "router" line and with a separate "ports" |
|---|
| 356 |
line. Remove support for the "ports" line. |
|---|
| 357 |
- Reduce memory requirements in our structs by changing the order |
|---|
| 358 |
of fields. Replace balanced trees with hash tables. Inline |
|---|
| 359 |
bottleneck smartlist functions. Add a "Map from digest to void*" |
|---|
| 360 |
abstraction so we can do less hex encoding/decoding, and use it |
|---|
| 361 |
in router_get_by_digest(). Many other CPU and memory improvements. |
|---|
| 362 |
- Allow tor_gzip_uncompress to extract as much as possible from |
|---|
| 363 |
truncated compressed data. Try to extract as many |
|---|
| 364 |
descriptors as possible from truncated http responses (when |
|---|
| 365 |
purpose is DIR_PURPOSE_FETCH_ROUTERDESC). |
|---|
| 366 |
- Make circ->onionskin a pointer, not a static array. moria2 was using |
|---|
| 367 |
125000 circuit_t's after it had been up for a few weeks, which |
|---|
| 368 |
translates to 20+ megs of wasted space. |
|---|
| 369 |
- The private half of our EDH handshake keys are now chosen out |
|---|
| 370 |
of 320 bits, not 1024 bits. (Suggested by Ian Goldberg.) |
|---|
| 371 |
- Stop doing the complex voodoo overkill checking for insecure |
|---|
| 372 |
Diffie-Hellman keys. Just check if it's in [2,p-2] and be happy. |
|---|
| 373 |
- Do round-robin writes for TLS of at most 16 kB per write. This |
|---|
| 374 |
might be more fair on loaded Tor servers. |
|---|
| 375 |
- Do not use unaligned memory access on alpha, mips, or mipsel. |
|---|
| 376 |
It *works*, but is very slow, so we treat them as if it doesn't. |
|---|
| 377 |
|
|---|
| 378 |
o Other bugfixes and improvements: |
|---|
| 379 |
- Start storing useful information to $DATADIR/state, so we can |
|---|
| 380 |
remember things across invocations of Tor. Retain unrecognized |
|---|
| 381 |
lines so we can be forward-compatible, and write a TorVersion line |
|---|
| 382 |
so we can be backward-compatible. |
|---|
| 383 |
- If ORPort is set, Address is not explicitly set, and our hostname |
|---|
| 384 |
resolves to a private IP address, try to use an interface address |
|---|
| 385 |
if it has a public address. Now Windows machines that think of |
|---|
| 386 |
themselves as localhost can guess their address. |
|---|
| 387 |
- Regenerate our local descriptor if it's dirty and we try to use |
|---|
| 388 |
it locally (e.g. if it changes during reachability detection). |
|---|
| 389 |
This was causing some Tor servers to keep publishing the same |
|---|
| 390 |
initial descriptor forever. |
|---|
| 391 |
- Tor servers with dynamic IP addresses were needing to wait 18 |
|---|
| 392 |
hours before they could start doing reachability testing using |
|---|
| 393 |
the new IP address and ports. This is because they were using |
|---|
| 394 |
the internal descriptor to learn what to test, yet they were only |
|---|
| 395 |
rebuilding the descriptor once they decided they were reachable. |
|---|
| 396 |
- It turns out we couldn't bootstrap a network since we added |
|---|
| 397 |
reachability detection in 0.1.0.1-rc. Good thing the Tor network |
|---|
| 398 |
has never gone down. Add an AssumeReachable config option to let |
|---|
| 399 |
servers and authorities bootstrap. When we're trying to build a |
|---|
| 400 |
high-uptime or high-bandwidth circuit but there aren't enough |
|---|
| 401 |
suitable servers, try being less picky rather than simply failing. |
|---|
| 402 |
- Newly bootstrapped Tor networks couldn't establish hidden service |
|---|
| 403 |
circuits until they had nodes with high uptime. Be more tolerant. |
|---|
| 404 |
- Really busy servers were keeping enough circuits open on stable |
|---|
| 405 |
connections that they were wrapping around the circuit_id |
|---|
| 406 |
space. (It's only two bytes.) This exposed a bug where we would |
|---|
| 407 |
feel free to reuse a circuit_id even if it still exists but has |
|---|
| 408 |
been marked for close. Try to fix this bug. Some bug remains. |
|---|
| 409 |
- When we fail to bind or listen on an incoming or outgoing |
|---|
| 410 |
socket, we now close it before refusing, rather than just |
|---|
| 411 |
leaking it. (Thanks to Peter Palfrader for finding.) |
|---|
| 412 |
- Fix a file descriptor leak in start_daemon(). |
|---|
| 413 |
- On Windows, you can't always reopen a port right after you've |
|---|
| 414 |
closed it. So change retry_listeners() to only close and re-open |
|---|
| 415 |
ports that have changed. |
|---|
| 416 |
- Workaround a problem with some http proxies that refuse GET |
|---|
| 417 |
requests that specify "Content-Length: 0". Reported by Adrian. |
|---|
| 418 |
- Recover better from TCP connections to Tor servers that are |
|---|
| 419 |
broken but don't tell you (it happens!); and rotate TLS |
|---|
| 420 |
connections once a week. |
|---|
| 421 |
- Fix a scary-looking but apparently harmless bug where circuits |
|---|
| 422 |
would sometimes start out in state CIRCUIT_STATE_OR_WAIT at |
|---|
| 423 |
servers, and never switch to state CIRCUIT_STATE_OPEN. |
|---|
| 424 |
- Check for even more Windows version flags when writing the platform |
|---|
| 425 |
string in server descriptors, and note any we don't recognize. |
|---|
| 426 |
- Add reasons to DESTROY and RELAY_TRUNCATED cells, so clients can |
|---|
| 427 |
get a better idea of why their circuits failed. Not used yet. |
|---|
| 428 |
- Add TTLs to RESOLVED, CONNECTED, and END_REASON_EXITPOLICY cells. |
|---|
| 429 |
We don't use them yet, but maybe one day our DNS resolver will be |
|---|
| 430 |
able to discover them. |
|---|
| 431 |
- Let people type "tor --install" as well as "tor -install" when they |
|---|
| 432 |
want to make it an NT service. |
|---|
| 433 |
- Looks like we were never delivering deflated (i.e. compressed) |
|---|
| 434 |
running-routers lists, even when asked. Oops. |
|---|
| 435 |
- We were leaking some memory every time the client changed IPs. |
|---|
| 436 |
- Clean up more of the OpenSSL memory when exiting, so we can detect |
|---|
| 437 |
memory leaks better. |
|---|
| 438 |
- Never call free() on tor_malloc()d memory. This will help us |
|---|
| 439 |
use dmalloc to detect memory leaks. |
|---|
| 440 |
- Some Tor servers process billions of cells per day. These |
|---|
| 441 |
statistics are now uint64_t's. |
|---|
| 442 |
- Check [X-]Forwarded-For headers in HTTP requests when generating |
|---|
| 443 |
log messages. This lets people run dirservers (and caches) behind |
|---|
| 444 |
Apache but still know which IP addresses are causing warnings. |
|---|
| 445 |
- Fix minor integer overflow in calculating when we expect to use up |
|---|
| 446 |
our bandwidth allocation before hibernating. |
|---|
| 447 |
- Lower the minimum required number of file descriptors to 1000, |
|---|
| 448 |
so we can have some overhead for Valgrind on Linux, where the |
|---|
| 449 |
default ulimit -n is 1024. |
|---|
| 450 |
- Stop writing the "router.desc" file, ever. Nothing uses it anymore, |
|---|
| 451 |
and its existence is confusing some users. |
|---|
| 452 |
|
|---|
| 453 |
o Config option fixes: |
|---|
| 454 |
- Add a new config option ExitPolicyRejectPrivate which defaults |
|---|
| 455 |
to on. Now all exit policies will begin with rejecting private |
|---|
| 456 |
addresses, unless the server operator explicitly turns it off. |
|---|
| 457 |
- Bump the default bandwidthrate to 3 MB, and burst to 6 MB. |
|---|
| 458 |
- Add new ReachableORAddresses and ReachableDirAddresses options |
|---|
| 459 |
that understand address policies. FascistFirewall is now a synonym |
|---|
| 460 |
for "ReachableORAddresses *:443", "ReachableDirAddresses *:80". |
|---|
| 461 |
- Start calling it FooListenAddress rather than FooBindAddress, |
|---|
| 462 |
since few of our users know what it means to bind an address |
|---|
| 463 |
or port. |
|---|
| 464 |
- If the user gave Tor an odd number of command-line arguments, |
|---|
| 465 |
we were silently ignoring the last one. Now we complain and fail. |
|---|
| 466 |
This wins the oldest-bug prize -- this bug has been present since |
|---|
| 467 |
November 2002, as released in Tor 0.0.0. |
|---|
| 468 |
- If you write "HiddenServicePort 6667 127.0.0.1 6668" in your |
|---|
| 469 |
torrc rather than "HiddenServicePort 6667 127.0.0.1:6668", |
|---|
| 470 |
it would silently ignore the 6668. |
|---|
| 471 |
- If we get a linelist or linelist_s config option from the torrc, |
|---|
| 472 |
e.g. ExitPolicy, and it has no value, warn and skip rather than |
|---|
| 473 |
silently resetting it to its default. |
|---|
| 474 |
- Setconf was appending items to linelists, not clearing them. |
|---|
| 475 |
- Add MyFamily to torrc.sample in the server section, so operators |
|---|
| 476 |
will be more likely to learn that it exists. |
|---|
| 477 |
- Make ContactInfo mandatory for authoritative directory servers. |
|---|
| 478 |
- MaxConn has been obsolete for a while now. Document the ConnLimit |
|---|
| 479 |
config option, which is a *minimum* number of file descriptors |
|---|
| 480 |
that must be available else Tor refuses to start. |
|---|
| 481 |
- Get rid of IgnoreVersion undocumented config option, and make us |
|---|
| 482 |
only warn, never exit, when we're running an obsolete version. |
|---|
| 483 |
- Make MonthlyAccountingStart config option truly obsolete now. |
|---|
| 484 |
- Correct the man page entry on TrackHostExitsExpire. |
|---|
| 485 |
- Let directory authorities start even if they don't specify an |
|---|
| 486 |
Address config option. |
|---|
| 487 |
- Change "AllowUnverifiedNodes" to "AllowInvalidNodes", to |
|---|
| 488 |
reflect the updated flags in our v2 dir protocol. |
|---|
| 489 |
|
|---|
| 490 |
o Config option features: |
|---|
| 491 |
- Add a new config option FastFirstHopPK (on by default) so clients |
|---|
| 492 |
do a trivial crypto handshake for their first hop, since TLS has |
|---|
| 493 |
already taken care of confidentiality and authentication. |
|---|
| 494 |
- Let the user set ControlListenAddress in the torrc. This can be |
|---|
| 495 |
dangerous, but there are some cases (like a secured LAN) where it |
|---|
| 496 |
makes sense. |
|---|
| 497 |
- New config options to help controllers: FetchServerDescriptors |
|---|
| 498 |
and FetchHidServDescriptors for whether to fetch server |
|---|
| 499 |
info and hidserv info or let the controller do it, and |
|---|
| 500 |
PublishServerDescriptor and PublishHidServDescriptors. |
|---|
| 501 |
- Also let the controller set the __AllDirActionsPrivate config |
|---|
| 502 |
option if you want all directory fetches/publishes to happen via |
|---|
| 503 |
Tor (it assumes your controller bootstraps your circuits). |
|---|
| 504 |
- Add "HardwareAccel" config option: support for crypto hardware |
|---|
| 505 |
accelerators via OpenSSL. Off by default, until we find somebody |
|---|
| 506 |
smart who can test it for us. (It appears to produce seg faults |
|---|
| 507 |
in at least some cases.) |
|---|
| 508 |
- New config option "AuthDirRejectUnlisted" for directory authorities |
|---|
| 509 |
as a panic button: if we get flooded with unusable servers we can |
|---|
| 510 |
revert to only listing servers in the approved-routers file. |
|---|
| 511 |
- Directory authorities can now reject/invalidate by key and IP, |
|---|
| 512 |
with the config options "AuthDirInvalid" and "AuthDirReject", or |
|---|
| 513 |
by marking a fingerprint as "!reject" or "!invalid" (as its |
|---|
| 514 |
nickname) in the approved-routers file. This is useful since |
|---|
| 515 |
currently we automatically list servers as running and usable |
|---|
| 516 |
even if we know they're jerks. |
|---|
| 517 |
- Add a new config option TestSocks so people can see whether their |
|---|
| 518 |
applications are using socks4, socks4a, socks5-with-ip, or |
|---|
| 519 |
socks5-with-fqdn. This way they don't have to keep mucking |
|---|
| 520 |
with tcpdump and wondering if something got cached somewhere. |
|---|
| 521 |
- Add "private:*" as an alias in configuration for policies. Now |
|---|
| 522 |
you can simplify your exit policy rather than needing to list |
|---|
| 523 |
every single internal or nonroutable network space. |
|---|
| 524 |
- Accept "private:*" in routerdesc exit policies; not generated yet |
|---|
| 525 |
because older Tors do not understand it. |
|---|
| 526 |
- Add configuration option "V1AuthoritativeDirectory 1" which |
|---|
| 527 |
moria1, moria2, and tor26 have set. |
|---|
| 528 |
- Implement an option, VirtualAddrMask, to set which addresses |
|---|
| 529 |
get handed out in response to mapaddress requests. This works |
|---|
| 530 |
around a bug in tsocks where 127.0.0.0/8 is never socksified. |
|---|
| 531 |
- Add a new config option FetchUselessDescriptors, off by default, |
|---|
| 532 |
for when you plan to run "exitlist" on your client and you want |
|---|
| 533 |
to know about even the non-running descriptors. |
|---|
| 534 |
- SocksTimeout: How long do we let a socks connection wait |
|---|
| 535 |
unattached before we fail it? |
|---|
| 536 |
- CircuitBuildTimeout: Cull non-open circuits that were born |
|---|
| 537 |
at least this many seconds ago. |
|---|
| 538 |
- CircuitIdleTimeout: Cull open clean circuits that were born |
|---|
| 539 |
at least this many seconds ago. |
|---|
| 540 |
- New config option SafeSocks to reject all application connections |
|---|
| 541 |
using unsafe socks protocols. Defaults to off. |
|---|
| 542 |
|
|---|
| 543 |
o Improved and clearer log messages: |
|---|
| 544 |
- Reduce clutter in server logs. We're going to try to make |
|---|
| 545 |
them actually usable now. New config option ProtocolWarnings that |
|---|
| 546 |
lets you hear about how _other Tors_ are breaking the protocol. Off |
|---|
| 547 |
by default. |
|---|
| 548 |
- Divide log messages into logging domains. Once we put some sort |
|---|
| 549 |
of interface on this, it will let people looking at more verbose |
|---|
| 550 |
log levels specify the topics they want to hear more about. |
|---|
| 551 |
- Log server fingerprint on startup, so new server operators don't |
|---|
| 552 |
have to go hunting around their filesystem for it. |
|---|
| 553 |
- Provide dire warnings to any users who set DirServer manually; |
|---|
| 554 |
move it out of torrc.sample and into torrc.complete. |
|---|
| 555 |
- Make the log message less scary when all the dirservers are |
|---|
| 556 |
temporarily unreachable. |
|---|
| 557 |
- When tor_socketpair() fails in Windows, give a reasonable |
|---|
| 558 |
Windows-style errno back. |
|---|
| 559 |
- Improve tor_gettimeofday() granularity on windows. |
|---|
| 560 |
- We were printing the number of idle dns workers incorrectly when |
|---|
| 561 |
culling them. |
|---|
| 562 |
- Handle duplicate lines in approved-routers files without warning. |
|---|
| 563 |
- We were whining about using socks4 or socks5-with-local-lookup |
|---|
| 564 |
even when it's an IP address in the "virtual" range we designed |
|---|
| 565 |
exactly for this case. |
|---|
| 566 |
- Check for named servers when looking them up by nickname; |
|---|
| 567 |
warn when we're calling a non-named server by its nickname; |
|---|
| 568 |
don't warn twice about the same name. |
|---|
| 569 |
- Downgrade the dirserver log messages when whining about |
|---|
| 570 |
unreachability. |
|---|
| 571 |
- Correct "your server is reachable" log entries to indicate that |
|---|
| 572 |
it was self-testing that told us so. |
|---|
| 573 |
- If we're trying to be a Tor server and running Windows 95/98/ME |
|---|
| 574 |
as a server, explain that we'll likely crash. |
|---|
| 575 |
- Provide a more useful warn message when our onion queue gets full: |
|---|
| 576 |
the CPU is too slow or the exit policy is too liberal. |
|---|
| 577 |
- Don't warn when we receive a 503 from a dirserver/cache -- this |
|---|
| 578 |
will pave the way for them being able to refuse if they're busy. |
|---|
| 579 |
- When we fail to bind a listener, try to provide a more useful |
|---|
| 580 |
log message: e.g., "Is Tor already running?" |
|---|
| 581 |
- Only start testing reachability once we've established a |
|---|
| 582 |
circuit. This will make startup on dir authorities less noisy. |
|---|
| 583 |
- Don't try to upload hidden service descriptors until we have |
|---|
| 584 |
established a circuit. |
|---|
| 585 |
- Tor didn't warn when it failed to open a log file. |
|---|
| 586 |
- Warn when listening on a public address for socks. We suspect a |
|---|
| 587 |
lot of people are setting themselves up as open socks proxies, |
|---|
| 588 |
and they have no idea that jerks on the Internet are using them, |
|---|
| 589 |
since they simply proxy the traffic into the Tor network. |
|---|
| 590 |
- Give a useful message when people run Tor as the wrong user, |
|---|
| 591 |
rather than telling them to start chowning random directories. |
|---|
| 592 |
- Fix a harmless bug that was causing Tor servers to log |
|---|
| 593 |
"Got an end because of misc error, but we're not an AP. Closing." |
|---|
| 594 |
- Fix wrong log message when you add a "HiddenServiceNodes" config |
|---|
| 595 |
line without any HiddenServiceDir line (reported by Chris Thomas). |
|---|
| 596 |
- Directory authorities now stop whining so loudly about bad |
|---|
| 597 |
descriptors that they fetch from other dirservers. So when there's |
|---|
| 598 |
a log complaint, it's for sure from a freshly uploaded descriptor. |
|---|
| 599 |
- When logging via syslog, include the pid whenever we provide |
|---|
| 600 |
a log entry. Suggested by Todd Fries. |
|---|
| 601 |
- When we're shutting down and we do something like try to post a |
|---|
| 602 |
server descriptor or rendezvous descriptor, don't complain that |
|---|
| 603 |
we seem to be unreachable. Of course we are, we're shutting down. |
|---|
| 604 |
- Change log line for unreachability to explicitly suggest /etc/hosts |
|---|
| 605 |
as the culprit. Also make it clearer what IP address and ports we're |
|---|
| 606 |
testing for reachability. |
|---|
| 607 |
- Put quotes around user-supplied strings when logging so users are |
|---|
| 608 |
more likely to realize if they add bad characters (like quotes) |
|---|
| 609 |
to the torrc. |
|---|
| 610 |
- NT service patch from Matt Edman to improve error messages on Win32. |
|---|
| 611 |
|
|---|
| 612 |
|
|---|
| 613 |
Changes in version 0.1.0.17 - 2006-02-17 |
|---|
| 614 |
o Crash bugfixes on 0.1.0.x: |
|---|
| 615 |
- When servers with a non-zero DirPort came out of hibernation, |
|---|
| 616 |
sometimes they would trigger an assert. |
|---|
| 617 |
|
|---|
| 618 |
o Other important bugfixes: |
|---|
| 619 |
- On platforms that don't have getrlimit (like Windows), we were |
|---|
| 620 |
artificially constraining ourselves to a max of 1024 |
|---|
| 621 |
connections. Now just assume that we can handle as many as 15000 |
|---|
| 622 |
connections. Hopefully this won't cause other problems. |
|---|
| 623 |
|
|---|
| 624 |
o Backported features: |
|---|
| 625 |
- When we're a server, a client asks for an old-style directory, |
|---|
| 626 |
and our write bucket is empty, don't give it to him. This way |
|---|
| 627 |
small servers can continue to serve the directory *sometimes*, |
|---|
| 628 |
without getting overloaded. |
|---|
| 629 |
- Whenever you get a 503 in response to a directory fetch, try |
|---|
| 630 |
once more. This will become important once servers start sending |
|---|
| 631 |
503's whenever they feel busy. |
|---|
| 632 |
- Fetch a new directory every 120 minutes, not every 40 minutes. |
|---|
| 633 |
Now that we have hundreds of thousands of users running the old |
|---|
| 634 |
directory algorithm, it's starting to hurt a lot. |
|---|
| 635 |
- Bump up the period for forcing a hidden service descriptor upload |
|---|
| 636 |
from 20 minutes to 1 hour. |
|---|
| 637 |
|
|---|
| 638 |
|
|---|
| 639 |
Changes in version 0.1.0.16 - 2006-01-02 |
|---|
| 640 |
o Crash bugfixes on 0.1.0.x: |
|---|
| 641 |
- On Windows, build with a libevent patch from "I-M Weasel" to avoid |
|---|
| 642 |
corrupting the heap, losing FDs, or crashing when we need to resize |
|---|
| 643 |
the fd_sets. (This affects the Win32 binaries, not Tor's sources.) |
|---|
| 644 |
- It turns out sparc64 platforms crash on unaligned memory access |
|---|
| 645 |
too -- so detect and avoid this. |
|---|
| 646 |
- Handle truncated compressed data correctly (by detecting it and |
|---|
| 647 |
giving an error). |
|---|
| 648 |
- Fix possible-but-unlikely free(NULL) in control.c. |
|---|
| 649 |
- When we were closing connections, there was a rare case that |
|---|
| 650 |
stomped on memory, triggering seg faults and asserts. |
|---|
| 651 |
- Avoid potential infinite recursion when building a descriptor. (We |
|---|
| 652 |
don't know that it ever happened, but better to fix it anyway.) |
|---|
| 653 |
- We were neglecting to unlink marked circuits from soon-to-close OR |
|---|
| 654 |
connections, which caused some rare scribbling on freed memory. |
|---|
| 655 |
- Fix a memory stomping race bug when closing the joining point of two |
|---|
| 656 |
rendezvous circuits. |
|---|
| 657 |
- Fix an assert in time parsing found by Steven Murdoch. |
|---|
| 658 |
|
|---|
| 659 |
o Other bugfixes on 0.1.0.x: |
|---|
| 660 |
- When we're doing reachability testing, provide more useful log |
|---|
| 661 |
messages so the operator knows what to expect. |
|---|
| 662 |
- Do not check whether DirPort is reachable when we are suppressing |
|---|
| 663 |
advertising it because of hibernation. |
|---|
| 664 |
- When building with -static or on Solaris, we sometimes needed -ldl. |
|---|
| 665 |
- One of the dirservers (tor26) changed its IP address. |
|---|
| 666 |
- When we're deciding whether a stream has enough circuits around |
|---|
| 667 |
that can handle it, count the freshly dirty ones and not the ones |
|---|
| 668 |
that are so dirty they won't be able to handle it. |
|---|
| 669 |
- When we're expiring old circuits, we had a logic error that caused |
|---|
| 670 |
us to close new rendezvous circuits rather than old ones. |
|---|
| 671 |
- Give a more helpful log message when you try to change ORPort via |
|---|
| 672 |
the controller: you should upgrade Tor if you want that to work. |
|---|
| 673 |
- We were failing to parse Tor versions that start with "Tor ". |
|---|
| 674 |
- Tolerate faulty streams better: when a stream fails for reason |
|---|
| 675 |
exitpolicy, stop assuming that the router is lying about his exit |
|---|
| 676 |
policy. When a stream fails for reason misc, allow it to retry just |
|---|
| 677 |
as if it was resolvefailed. When a stream has failed three times, |
|---|
| 678 |
reset its failure count so we can try again and get all three tries. |
|---|
| 679 |
|
|---|
| 680 |
|
|---|
| 681 |
Changes in version 0.1.0.15 - 2005-09-23 |
|---|
| 682 |
o Bugfixes on 0.1.0.x: |
|---|
| 683 |
- Reject ports 465 and 587 (spam targets) in default exit policy. |
|---|
| 684 |
- Don't crash when we don't have any spare file descriptors and we |
|---|
| 685 |
try to spawn a dns or cpu worker. |
|---|
| 686 |
- Get rid of IgnoreVersion undocumented config option, and make us |
|---|
| 687 |
only warn, never exit, when we're running an obsolete version. |
|---|
| 688 |
- Don't try to print a null string when your server finds itself to |
|---|
| 689 |
be unreachable and the Address config option is empty. |
|---|
| 690 |
- Make the numbers in read-history and write-history into uint64s, |
|---|
| 691 |
so they don't overflow and publish negatives in the descriptor. |
|---|
| 692 |
- Fix a minor memory leak in smartlist_string_remove(). |
|---|
| 693 |
- We were only allowing ourselves to upload a server descriptor at |
|---|
| 694 |
most every 20 minutes, even if it changed earlier than that. |
|---|
| 695 |
- Clean up log entries that pointed to old URLs. |
|---|
| 696 |
|
|---|
| 697 |
|
|---|
| 698 |
Changes in version 0.1.0.14 - 2005-08-08 |
|---|
| 699 |
o Bugfixes on 0.1.0.x: |
|---|
| 700 |
- Fix the other half of the bug with crypto handshakes |
|---|
| 701 |
(CVE-2005-2643). |
|---|
| 702 |
- Fix an assert trigger if you send a 'signal term' via the |
|---|
| 703 |
controller when it's listening for 'event info' messages. |
|---|
| 704 |
|
|---|
| 705 |
|
|---|
| 706 |
Changes in version 0.1.0.13 - 2005-08-04 |
|---|
| 707 |
o Bugfixes on 0.1.0.x: |
|---|
| 708 |
- Fix a critical bug in the security of our crypto handshakes. |
|---|
| 709 |
- Fix a size_t underflow in smartlist_join_strings2() that made |
|---|
| 710 |
it do bad things when you hand it an empty smartlist. |
|---|
| 711 |
- Fix Windows installer to ship Tor license (thanks to Aphex for |
|---|
| 712 |
pointing out this oversight) and put a link to the doc directory |
|---|
| 713 |
in the start menu. |
|---|
| 714 |
- Explicitly set no-unaligned-access for sparc: it turns out the |
|---|
| 715 |
new gcc's let you compile broken code, but that doesn't make it |
|---|
| 716 |
not-broken. |
|---|
| 717 |
|
|---|
| 718 |
|
|---|
| 719 |
Changes in version 0.1.0.12 - 2005-07-18 |
|---|
| 720 |
o New directory servers: |
|---|
| 721 |
- tor26 has changed IP address. |
|---|
| 722 |
|
|---|
| 723 |
o Bugfixes on 0.1.0.x: |
|---|
| 724 |
- Fix a possible double-free in tor_gzip_uncompress(). |
|---|
| 725 |
- When --disable-threads is set, do not search for or link against |
|---|
| 726 |
pthreads libraries. |
|---|
| 727 |
- Don't trigger an assert if an authoritative directory server |
|---|
| 728 |
claims its dirport is 0. |
|---|
| 729 |
- Fix bug with removing Tor as an NT service: some people were |
|---|
| 730 |
getting "The service did not return an error." Thanks to Matt |
|---|
| 731 |
Edman for the fix. |
|---|
| 732 |
|
|---|
| 733 |
|
|---|
| 734 |
Changes in version 0.1.0.11 - 2005-06-30 |
|---|
| 735 |
o Bugfixes on 0.1.0.x: |
|---|
| 736 |
- Fix major security bug: servers were disregarding their |
|---|
| 737 |
exit policies if clients behaved unexpectedly. |
|---|
| 738 |
- Make OS X init script check for missing argument, so we don't |
|---|
| 739 |
confuse users who invoke it incorrectly. |
|---|
| 740 |
- Fix a seg fault in "tor --hash-password foo". |
|---|
| 741 |
- The MAPADDRESS control command was broken. |
|---|
| 742 |
|
|---|
| 743 |
|
|---|
| 744 |
Changes in version 0.1.0.10 - 2005-06-14 |
|---|
| 745 |
o Fixes on Win32: |
|---|
| 746 |
- Make NT services work and start on startup on Win32 (based on |
|---|
| 747 |
patch by Matt Edman). See the FAQ entry for details. |
|---|
| 748 |
- Make 'platform' string in descriptor more accurate for Win32 |
|---|
| 749 |
servers, so it's not just "unknown platform". |
|---|
| 750 |
- REUSEADDR on normal platforms means you can rebind to the port |
|---|
| 751 |
right after somebody else has let it go. But REUSEADDR on Win32 |
|---|
| 752 |
means you can bind to the port _even when somebody else already |
|---|
| 753 |
has it bound_! So, don't do that on Win32. |
|---|
| 754 |
- Clean up the log messages when starting on Win32 with no config |
|---|
| 755 |
file. |
|---|
| 756 |
- Allow seeding the RNG on Win32 even when you're not running as |
|---|
| 757 |
Administrator. If seeding the RNG on Win32 fails, quit. |
|---|
| 758 |
|
|---|
| 759 |
o Assert / crash bugs: |
|---|
| 760 |
- Refuse relay cells that claim to have a length larger than the |
|---|
| 761 |
maximum allowed. This prevents a potential attack that could read |
|---|
| 762 |
arbitrary memory (e.g. keys) from an exit server's process |
|---|
| 763 |
(CVE-2005-2050). |
|---|
| 764 |
- If unofficial Tor clients connect and send weird TLS certs, our |
|---|
| 765 |
Tor server triggers an assert. Stop asserting, and start handling |
|---|
| 766 |
TLS errors better in other situations too. |
|---|
| 767 |
- Fix a race condition that can trigger an assert when we have a |
|---|
| 768 |
pending create cell and an OR connection attempt fails. |
|---|
| 769 |
|
|---|
| 770 |
o Resource leaks: |
|---|
| 771 |
- Use pthreads for worker processes rather than forking. This was |
|---|
| 772 |
forced because when we forked, we ended up wasting a lot of |
|---|
| 773 |
duplicate ram over time. |
|---|
| 774 |
- Also switch to foo_r versions of some library calls to allow |
|---|
| 775 |
reentry and threadsafeness. |
|---|
| 776 |
- Implement --disable-threads configure option. Disable threads on |
|---|
| 777 |
netbsd and openbsd by default, because they have no reentrant |
|---|
| 778 |
resolver functions (!), and on solaris since it has other |
|---|
| 779 |
threading issues. |
|---|
| 780 |
- Fix possible bug on threading platforms (e.g. win32) which was |
|---|
| 781 |
leaking a file descriptor whenever a cpuworker or dnsworker died. |
|---|
| 782 |
- Fix a minor memory leak when somebody establishes an introduction |
|---|
| 783 |
point at your Tor server. |
|---|
| 784 |
- Fix possible memory leak in tor_lookup_hostname(). (Thanks to |
|---|
| 785 |
Adam Langley.) |
|---|
| 786 |
- Add ./configure --with-dmalloc option, to track memory leaks. |
|---|
| 787 |
- And try to free all memory on closing, so we can detect what |
|---|
| 788 |
we're leaking. |
|---|
| 789 |
|
|---|
| 790 |
o Protocol correctness: |
|---|
| 791 |
- When we've connected to an OR and handshaked but didn't like |
|---|
| 792 |
the result, we were closing the conn without sending destroy |
|---|
| 793 |
cells back for pending circuits. Now send those destroys. |
|---|
| 794 |
- Start sending 'truncated' cells back rather than destroy cells |
|---|
| 795 |
if the circuit closes in front of you. This means we won't have |
|---|
| 796 |
to abandon partially built circuits. |
|---|
| 797 |
- Handle changed router status correctly when dirserver reloads |
|---|
| 798 |
fingerprint file. We used to be dropping all unverified descriptors |
|---|
| 799 |
right then. The bug was hidden because we would immediately |
|---|
| 800 |
fetch a directory from another dirserver, which would include the |
|---|
| 801 |
descriptors we just dropped. |
|---|
| 802 |
- Revise tor-spec to add more/better stream end reasons. |
|---|
| 803 |
- Revise all calls to connection_edge_end to avoid sending 'misc', |
|---|
| 804 |
and to take errno into account where possible. |
|---|
| 805 |
- Client now retries when streams end early for 'hibernating' or |
|---|
| 806 |
'resource limit' reasons, rather than failing them. |
|---|
| 807 |
- Try to be more zealous about calling connection_edge_end when |
|---|
| 808 |
things go bad with edge conns in connection.c. |
|---|
| 809 |
|
|---|
| 810 |
o Robustness improvements: |
|---|
| 811 |
- Better handling for heterogeneous / unreliable nodes: |
|---|
| 812 |
- Annotate circuits with whether they aim to contain high uptime |
|---|
| 813 |
nodes and/or high capacity nodes. When building circuits, choose |
|---|
| 814 |
appropriate nodes. |
|---|
| 815 |
- This means that every single node in an intro rend circuit, |
|---|
| 816 |
not just the last one, will have a minimum uptime. |
|---|
| 817 |
- New config option LongLivedPorts to indicate application streams |
|---|
| 818 |
that will want high uptime circuits. |
|---|
| 819 |
- Servers reset uptime when a dir fetch entirely fails. This |
|---|
| 820 |
hopefully reflects stability of the server's network connectivity. |
|---|
| 821 |
- If somebody starts his tor server in Jan 2004 and then fixes his |
|---|
| 822 |
clock, don't make his published uptime be a year. |
|---|
| 823 |
- Reset published uptime when we wake up from hibernation. |
|---|
| 824 |
- Introduce a notion of 'internal' circs, which are chosen without |
|---|
| 825 |
regard to the exit policy of the last hop. Intro and rendezvous |
|---|
| 826 |
circs must be internal circs, to avoid leaking information. Resolve |
|---|
| 827 |
and connect streams can use internal circs if they want. |
|---|
| 828 |
- New circuit pooling algorithm: keep track of what destination ports |
|---|
| 829 |
we've used recently (start out assuming we'll want to use 80), and |
|---|
| 830 |
make sure to have enough circs around to satisfy these ports. Also |
|---|
| 831 |
make sure to have 2 internal circs around if we've required internal |
|---|
| 832 |
circs lately (and with high uptime if we've seen that lately too). |
|---|
| 833 |
- Turn addr_policy_compare from a tristate to a quadstate; this should |
|---|
| 834 |
help address our "Ah, you allow 1.2.3.4:80. You are a good choice |
|---|
| 835 |
for google.com" problem. |
|---|
| 836 |
- When a client asks us for a dir mirror and we don't have one, |
|---|
| 837 |
launch an attempt to get a fresh one. |
|---|
| 838 |
- First cut at support for "create-fast" cells. Clients can use |
|---|
| 839 |
these when extending to their first hop, since the TLS already |
|---|
| 840 |
provides forward secrecy and authentication. Not enabled on |
|---|
| 841 |
clients yet. |
|---|
| 842 |
|
|---|
| 843 |
o Reachability testing. |
|---|
| 844 |
- Your Tor server will automatically try to see if its ORPort and |
|---|
| 845 |
DirPort are reachable from the outside, and it won't upload its |
|---|
| 846 |
descriptor until it decides at least ORPort is reachable (when |
|---|
| 847 |
DirPort is not yet found reachable, publish it as zero). |
|---|
| 848 |
- When building testing circs for ORPort testing, use only |
|---|
| 849 |
high-bandwidth nodes, so fewer circuits fail. |
|---|
| 850 |
- Notice when our IP changes, and reset stats/uptime/reachability. |
|---|
| 851 |
- Authdirservers don't do ORPort reachability detection, since |
|---|
| 852 |
they're in clique mode, so it will be rare to find a server not |
|---|
| 853 |
already connected to them. |
|---|
| 854 |
- Authdirservers now automatically approve nodes running 0.1.0.2-rc |
|---|
| 855 |
or later. |
|---|
| 856 |
|
|---|
| 857 |
o Dirserver fixes: |
|---|
| 858 |
- Now we allow two unverified servers with the same nickname |
|---|
| 859 |
but different keys. But if a nickname is verified, only that |
|---|
| 860 |
nickname+key are allowed. |
|---|
| 861 |
- If you're an authdirserver connecting to an address:port, |
|---|
| 862 |
and it's not the OR you were expecting, forget about that |
|---|
| 863 |
descriptor. If he *was* the one you were expecting, then forget |
|---|
| 864 |
about all other descriptors for that address:port. |
|---|
| 865 |
- Allow servers to publish descriptors from 12 hours in the future. |
|---|
| 866 |
Corollary: only whine about clock skew from the dirserver if |
|---|
| 867 |
he's a trusted dirserver (since now even verified servers could |
|---|
| 868 |
have quite wrong clocks). |
|---|
| 869 |
- Require servers that use the default dirservers to have public IP |
|---|
| 870 |
addresses. We have too many servers that are configured with private |
|---|
| 871 |
IPs and their admins never notice the log entries complaining that |
|---|
| 872 |
their descriptors are being rejected. |
|---|
| 873 |
|
|---|
| 874 |
o Efficiency improvements: |
|---|
| 875 |
- Use libevent. Now we can use faster async cores (like epoll, kpoll, |
|---|
| 876 |
and /dev/poll), and hopefully work better on Windows too. |
|---|
| 877 |
- Apple's OS X 10.4.0 ships with a broken kqueue API, and using |
|---|
| 878 |
kqueue on 10.3.9 causes kernel panics. Don't use kqueue on OS X. |
|---|
| 879 |
- Find libevent even if it's hiding in /usr/local/ and your |
|---|
| 880 |
CFLAGS and LDFLAGS don't tell you to look there. |
|---|
| 881 |
- Be able to link with libevent as a shared library (the default |
|---|
| 882 |
after 1.0d), even if it's hiding in /usr/local/lib and even |
|---|
| 883 |
if you haven't added /usr/local/lib to your /etc/ld.so.conf, |
|---|
| 884 |
assuming you're running gcc. Otherwise fail and give a useful |
|---|
| 885 |
error message. |
|---|
| 886 |
- Switch to a new buffer management algorithm, which tries to avoid |
|---|
| 887 |
reallocing and copying quite as much. In first tests it looks like |
|---|
| 888 |
it uses *more* memory on average, but less cpu. |
|---|
| 889 |
- Switch our internal buffers implementation to use a ring buffer, |
|---|
| 890 |
to hopefully improve performance for fast servers a lot. |
|---|
| 891 |
- Reenable the part of the code that tries to flush as soon as an |
|---|
| 892 |
OR outbuf has a full TLS record available. Perhaps this will make |
|---|
| 893 |
OR outbufs not grow as huge except in rare cases, thus saving lots |
|---|
| 894 |
of CPU time plus memory. |
|---|
| 895 |
- Improve performance for dirservers: stop re-parsing the whole |
|---|
| 896 |
directory every time you regenerate it. |
|---|
| 897 |
- Keep a big splay tree of (circid,orconn)->circuit mappings to make |
|---|
| 898 |
it much faster to look up a circuit for each relay cell. |
|---|
| 899 |
- Remove most calls to assert_all_pending_dns_resolves_ok(), |
|---|
| 900 |
since they're eating our cpu on exit nodes. |
|---|
| 901 |
- Stop wasting time doing a case insensitive comparison for every |
|---|
| 902 |
dns name every time we do any lookup. Canonicalize the names to |
|---|
| 903 |
lowercase when you first see them. |
|---|
| 904 |
|
|---|
| 905 |
o Hidden services: |
|---|
| 906 |
- Handle unavailable hidden services better. Handle slow or busy |
|---|
| 907 |
hidden services better. |
|---|
| 908 |
- Cannibalize GENERAL circs to be C_REND, C_INTRO, S_INTRO, and S_REND |
|---|
| 909 |
circ as necessary, if there are any completed ones lying around |
|---|
| 910 |
when we try to launch one. |
|---|
| 911 |
- Make hidden services try to establish a rendezvous for 30 seconds |
|---|
| 912 |
after fetching the descriptor, rather than for n (where n=3) |
|---|
| 913 |
attempts to build a circuit. |
|---|
| 914 |
- Adjust maximum skew and age for rendezvous descriptors: let skew |
|---|
| 915 |
be 48 hours rather than 90 minutes. |
|---|
| 916 |
- Reject malformed .onion addresses rather then passing them on as |
|---|
| 917 |
normal web requests. |
|---|
| 918 |
|
|---|
| 919 |
o Controller: |
|---|
| 920 |
- More Tor controller support. See |
|---|
| 921 |
http://tor.eff.org/doc/control-spec.txt for all the new features, |
|---|
| 922 |
including signals to emulate unix signals from any platform; |
|---|
| 923 |
redirectstream; extendcircuit; mapaddress; getinfo; postdescriptor; |
|---|
| 924 |
closestream; closecircuit; etc. |
|---|
| 925 |
- Encode hashed controller passwords in hex instead of base64, |
|---|
| 926 |
to make it easier to write controllers. |
|---|
| 927 |
- Revise control spec and implementation to allow all log messages to |
|---|
| 928 |
be sent to controller with their severities intact (suggested by |
|---|
| 929 |
Matt Edman). Disable debug-level logs while delivering a debug-level |
|---|
| 930 |
log to the controller, to prevent loop. Update TorControl to handle |
|---|
| 931 |
new log event types. |
|---|
| 932 |
|
|---|
| 933 |
o New config options/defaults: |
|---|
| 934 |
- Begin scrubbing sensitive strings from logs by default. Turn off |
|---|
| 935 |
the config option SafeLogging if you need to do debugging. |
|---|
| 936 |
- New exit policy: accept most low-numbered ports, rather than |
|---|
| 937 |
rejecting most low-numbered ports. |
|---|
| 938 |
- Put a note in the torrc about abuse potential with the default |
|---|
| 939 |
exit policy. |
|---|
| 940 |
- Add support for CONNECTing through https proxies, with "HttpsProxy" |
|---|
| 941 |
config option. |
|---|
| 942 |
- Add HttpProxyAuthenticator and HttpsProxyAuthenticator support |
|---|
| 943 |
based on patch from Adam Langley (basic auth only). |
|---|
| 944 |
- Bump the default BandwidthRate from 1 MB to 2 MB, to accommodate |
|---|
| 945 |
the fast servers that have been joining lately. (Clients are now |
|---|
| 946 |
willing to load balance over up to 2 MB of advertised bandwidth |
|---|
| 947 |
capacity too.) |
|---|
| 948 |
- New config option MaxAdvertisedBandwidth which lets you advertise |
|---|
| 949 |
a low bandwidthrate (to not attract as many circuits) while still |
|---|
| 950 |
allowing a higher bandwidthrate in reality. |
|---|
| 951 |
- Require BandwidthRate to be at least 20kB/s for servers. |
|---|
| 952 |
- Add a NoPublish config option, so you can be a server (e.g. for |
|---|
| 953 |
testing running Tor servers in other Tor networks) without |
|---|
| 954 |
publishing your descriptor to the primary dirservers. |
|---|
| 955 |
- Add a new AddressMap config directive to rewrite incoming socks |
|---|
| 956 |
addresses. This lets you, for example, declare an implicit |
|---|
| 957 |
required exit node for certain sites. |
|---|
| 958 |
- Add a new TrackHostExits config directive to trigger addressmaps |
|---|
| 959 |
for certain incoming socks addresses -- for sites that break when |
|---|
| 960 |
your exit keeps changing (based on patch from Mike Perry). |
|---|
| 961 |
- Split NewCircuitPeriod option into NewCircuitPeriod (30 secs), |
|---|
| 962 |
which describes how often we retry making new circuits if current |
|---|
| 963 |
ones are dirty, and MaxCircuitDirtiness (10 mins), which describes |
|---|
| 964 |
how long we're willing to make use of an already-dirty circuit. |
|---|
| 965 |
- Change compiled-in SHUTDOWN_WAIT_LENGTH from a fixed 30 secs to |
|---|
| 966 |
a config option "ShutdownWaitLength" (when using kill -INT on |
|---|
| 967 |
servers). |
|---|
| 968 |
- Fix an edge case in parsing config options: if they say "--" |
|---|
| 969 |
on the commandline, it's not a config option (thanks weasel). |
|---|
| 970 |
- New config option DirAllowPrivateAddresses for authdirservers. |
|---|
| 971 |
  |
|---|