Commit 448bd220 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Merge remote-tracking branch 'public/bug14261_025' into maint-0.2.5

parents 62631904 ceb6dee4
Loading
Loading
Loading
Loading

changes/bug14261

0 → 100644
+5 −0
Original line number Diff line number Diff line
  O Minor bugfixes (directory authority):
    - Allow directory authorities to fetch more data from one
      another if they find themselves missing lots of votes.
      Previously, they had been bumping against the 10 MB queued
      data limit. Fixes bug 14261. Bugfix on 0.1.2.5-alpha.
+8 −1
Original line number Diff line number Diff line
@@ -2183,12 +2183,15 @@ connection_dir_reached_eof(dir_connection_t *conn)
 */
#define MAX_DIRECTORY_OBJECT_SIZE (10*(1<<20))

#define MAX_VOTE_DL_SIZE (MAX_DIRECTORY_OBJECT_SIZE * 5)

/** Read handler for directory connections.  (That's connections <em>to</em>
 * directory servers and connections <em>at</em> directory servers.)
 */
int
connection_dir_process_inbuf(dir_connection_t *conn)
{
  size_t max_size;
  tor_assert(conn);
  tor_assert(conn->base_.type == CONN_TYPE_DIR);

@@ -2207,7 +2210,11 @@ connection_dir_process_inbuf(dir_connection_t *conn)
    return 0;
  }

  if (connection_get_inbuf_len(TO_CONN(conn)) > MAX_DIRECTORY_OBJECT_SIZE) {
  max_size =
    (TO_CONN(conn)->purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) ?
    MAX_VOTE_DL_SIZE : MAX_DIRECTORY_OBJECT_SIZE;

  if (connection_get_inbuf_len(TO_CONN(conn)) > max_size) {
    log_warn(LD_HTTP, "Too much data received from directory connection: "
             "denial of service attempt, or you need to upgrade?");
    connection_mark_for_close(TO_CONN(conn));