diff --git a/ChangeLog b/ChangeLog index 96d1b6cc83..5c69ad8a84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -35,6 +35,10 @@ Changes in version 0.1.2.19 - 2008-01-?? 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. Changes in version 0.1.2.18 - 2007-10-28 diff --git a/src/or/directory.c b/src/or/directory.c index 792a847c22..d447925c7e 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -932,7 +932,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) } (void) skewed; /* skewed isn't used yet. */ - if (status_code == 503) { + if (status_code == 503 && body_len < 16) { local_routerstatus_t *rs; trusted_dir_server_t *ds; time_t now = time(NULL); @@ -947,6 +947,12 @@ connection_dir_client_reached_eof(dir_connection_t *conn) tor_free(body); tor_free(headers); tor_free(reason); return -1; + } else if (status_code == 503) { + /* XXXX022 Remove this once every server with bug 539 is obsolete. */ + log_info(LD_DIR, "Server at '%s:%d' sent us a 503 response, but included " + "a body anyway. We'll pretend it gave us a 200.", + conn->_base.address, conn->_base.port); + status_code = 200; } plausible = body_is_plausible(body, body_len, conn->_base.purpose);