Browse Source

r17495@catbus: nickm | 2008-01-07 12:48:56 -0500
Consequence of fix for 539: when a client gets a 503 response with a nontrivial body, pretend it got a 200 response. This lets clients use information erroneously sent to them by old buggy servers.


svn:r13054

Nick Mathewson 16 years ago
parent
commit
a63eb68fe1
2 changed files with 11 additions and 1 deletions
  1. 4 0
      ChangeLog
  2. 7 1
      src/or/directory.c

+ 4 - 0
ChangeLog

@@ -10,6 +10,10 @@ Changes in version 0.2.0.16-alpha - 2008-01-??
     - Configuration files now accept C-style strings as values.  This
       helps encode characters not allowed in the current configuration
       file format, such as newline or #.  Addresses bug 557.
+    - 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.
 
   o Minor performance improvements:
     - Reference-count and share copies of address policy entries; only

+ 7 - 1
src/or/directory.c

@@ -1280,7 +1280,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) {
     routerstatus_t *rs;
     trusted_dir_server_t *ds;
     log_info(LD_DIR,"Received http status code %d (%s) from server "
@@ -1294,6 +1294,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);