Commit ab0c85ee authored by Nick Mathewson's avatar Nick Mathewson 🥔
Browse files

r14103@tombo: nickm | 2008-02-10 13:40:09 -0500

 Fix some XXX020s in command.c, and make it not-allowed to negotiate v1 using the v2 connection protocol: it is too hard to test, and pointless to support.


svn:r13460
parent b5c03f05
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -173,6 +173,10 @@ Proposal:

     The Data in the cell is a series of big-endian two-byte integers.

   * It is not allowed to negotiate V1 conections once the v2 protocol
     has been used.  If this happens, Tor instances should close the
     connection.

3. The rest of the "v2" protocol

   Once a v2 protocol has been negotiated, NETINFO cells are exchanged
+13 −3
Original line number Diff line number Diff line
@@ -446,7 +446,10 @@ command_process_destroy_cell(cell_t *cell, or_connection_t *conn)
}

/** Process a 'versions' cell.  The current link protocol version must be 0
 * to indicate that no version has yet been negotiated. DOCDOC say more. */
 * to indicate that no version has yet been negotiated.  We compare the versions
 * cell to the list of versions we support, and pick the highest version we
 * have in common.
 */
static void
command_process_versions_cell(var_cell_t *cell, or_connection_t *conn)
{
@@ -473,6 +476,12 @@ command_process_versions_cell(var_cell_t *cell, or_connection_t *conn)
           "list in the VERSIONS cell; closing connection.");
    connection_mark_for_close(TO_CONN(conn));
    return;
  } else if (highest_supported_version == 1) {
    log_fn(LOG_PROTOCOL_WARN, LD_OR,
           "Used version negotiation protocol to negotiate a v1 connection. "
           "That's crazily non-compliant. Closing connection.");
    connection_mark_for_close(TO_CONN(conn));
    return;
  }
  conn->link_proto = highest_supported_version;
  conn->handshake_state->received_versions = 1;
@@ -568,9 +577,10 @@ command_process_netinfo_cell(cell_t *cell, or_connection_t *conn)
  if (abs(apparent_skew) > NETINFO_NOTICE_SKEW &&
      router_get_by_digest(conn->identity_digest)) {
    char dbuf[64];
    /*XXXX020 not always warn!*/
    /*XXXX This should check the trustedness of the other side. */
    int severity = server_mode(get_options()) ? LOG_INFO : LOG_WARN;
    format_time_interval(dbuf, sizeof(dbuf), apparent_skew);
    log_fn(LOG_WARN, LD_HTTP, "Received NETINFO cell with skewed time from "
    log_fn(severity, LD_GENERAL, "Received NETINFO cell with skewed time from "
           "server at %s:%d.  It seems that our clock is %s by %s, or "
           "that theirs is %s. Tor requires an accurate clock to work: "
           "please check your time and date settings.",