Commit 8f893fbc authored by Nick Mathewson's avatar Nick Mathewson 🥔
Browse files

Merge remote-tracking branch 'public/bug20974'

parents 2db858ef 9d37449f
Loading
Loading
Loading
Loading

changes/bug20974

0 → 100644
+5 −0
Original line number Diff line number Diff line
  o Minor bugfixes (guards, bootstrapping):
    - When connecting to a directory guard during bootstrap, do not
      mark the guard as successful until we receive a good-looking
      directory response from it. Fixes bug 20974; bugfix on 0.3.0.1-alpha.
+15 −15
Original line number Diff line number Diff line
@@ -1967,6 +1967,21 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
            escaped(reason),
            conn->base_.purpose);

  if (conn->guard_state) {
    /* we count the connection as successful once we can read from it.  We do
     * not, however, delay use of the circuit here, since it's just for a
     * one-hop directory request. */
    /* XXXXprop271 note that this will not do the right thing for other
     * waiting circuits that would be triggered by this circuit becoming
     * complete/usable. But that's ok, I think.
     */
    /* XXXXprop271 should we count this as only a partial success somehow?
    */
    entry_guard_succeeded(&conn->guard_state);
    circuit_guard_state_free(conn->guard_state);
    conn->guard_state = NULL;
  }

  /* now check if it's got any hints for us about our IP address. */
  if (conn->dirconn_direct) {
    char *guess = http_get_header(headers, X_ADDRESS_HEADER);
@@ -2578,21 +2593,6 @@ connection_dir_process_inbuf(dir_connection_t *conn)
  tor_assert(conn);
  tor_assert(conn->base_.type == CONN_TYPE_DIR);

  if (conn->guard_state) {
    /* we count the connection as successful once we can read from it.  We do
     * not, however, delay use of the circuit here, since it's just for a
     * one-hop directory request. */
    /* XXXXprop271 note that this will not do the right thing for other
     * waiting circuits that would be triggered by this circuit becoming
     * complete/usable. But that's ok, I think.
     */
    /* XXXXprop271 should we count this as only a partial success somehow?
    */
    entry_guard_succeeded(&conn->guard_state);
    circuit_guard_state_free(conn->guard_state);
    conn->guard_state = NULL;
  }

  /* Directory clients write, then read data until they receive EOF;
   * directory servers read data until they get an HTTP command, then
   * write their response (when it's finished flushing, they mark for