Commit 474c85a9 authored by David Goulet's avatar David Goulet 🐼
Browse files

Merge branch 'maint-0.4.5' into maint-0.4.6

parents 82b7939d a53c949d
Loading
Loading
Loading
Loading

changes/ticket40434

0 → 100644
+6 −0
Original line number Diff line number Diff line
  o Minor bugfix (onion service):
    - Do not flag an HSDir as non-running in case the descriptor upload or
      fetch fails. An onion service closes pending directory connections
      before uploading a new descriptor which can thus lead to wrongly
      flagging many relays and thus affecting circuit building path selection.
      Fixes bug 40434; bugfix on 0.2.0.13-alpha.
+16 −1
Original line number Diff line number Diff line
@@ -709,7 +709,22 @@ connection_dir_client_request_failed(dir_connection_t *conn)
    entry_guard_failed(&conn->guard_state);
  }
  if (!entry_list_is_constrained(get_options()))
    router_set_status(conn->identity_digest, 0); /* don't try this one again */
    /* We must not set a directory to non-running for HS purposes else we end
     * up flagging nodes from the hashring has unusable. It doesn't have direct
     * effect on the HS subsystem because the nodes are selected regardless of
     * their status but still, we shouldn't flag them as non running.
     *
     * One example where this can go bad is if a tor instance gets added a lot
     * of ephemeral services and with a network with problem then many nodes in
     * the consenus ends up unusable.
     *
     * Furthermore, a service does close any pending directory connections
     * before uploading a descriptor and thus we can end up here in a natural
     * way since closing a pending directory connection leads to this code
     * path. */
    if (!DIR_PURPOSE_IS_HS(TO_CONN(conn)->purpose)) {
      router_set_status(conn->identity_digest, 0);
    }
  if (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
             conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
    log_info(LD_DIR, "Giving up on serverdesc/extrainfo fetch from "
+6 −0
Original line number Diff line number Diff line
@@ -80,6 +80,12 @@ const dir_connection_t *CONST_TO_DIR_CONN(const connection_t *c);
   (p)==DIR_PURPOSE_UPLOAD_SIGNATURES ||        \
   (p)==DIR_PURPOSE_UPLOAD_HSDESC)

/** True iff p is a purpose corresponding to onion service that is either
 * uploading or fetching actions. */
#define DIR_PURPOSE_IS_HS(p)          \
  ((p) == DIR_PURPOSE_FETCH_HSDESC || \
   (p) == DIR_PURPOSE_UPLOAD_HSDESC)

enum compress_method_t;
int parse_http_response(const char *headers, int *code, time_t *date,
                        enum compress_method_t *compression, char **response);