Commit 61d5bcc1 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Merge remote-tracking branch 'tor-github/pr/268'

parents b7ed6116 5f2e0024
Loading
Loading
Loading
Loading

changes/bug27034

0 → 100644
+6 −0
Original line number Diff line number Diff line
  o Minor bugfixes (controller):
    - Consider all routerinfo errors other than "not a server"
      to be transient for the purpose of "GETINFO exit-policy/*"
      controller request. Print stacktrace in the unlikely case
      of failing to recompute routerinfo digest. Fixes bug 27034;
      bugfix on 0.3.4.1-alpha.
+8 −18
Original line number Diff line number Diff line
@@ -164,22 +164,12 @@ routerinfo_err_to_string(int err)
int
routerinfo_err_is_transient(int err)
{
  switch (err) {
    case TOR_ROUTERINFO_ERROR_NO_EXT_ADDR:
      return 1;
    case TOR_ROUTERINFO_ERROR_CANNOT_PARSE:
      return 1;
    case TOR_ROUTERINFO_ERROR_NOT_A_SERVER:
      return 0;
    case TOR_ROUTERINFO_ERROR_DIGEST_FAILED:
      return 0; // XXX: bug?
    case TOR_ROUTERINFO_ERROR_CANNOT_GENERATE:
      return 1;
    case TOR_ROUTERINFO_ERROR_DESC_REBUILDING:
      return 1;
  }

  return 0;
  /**
   * For simplicity, we consider all errors other than
   * "not a server" transient - see discussion on
   * https://trac.torproject.org/projects/tor/ticket/27034
   */
  return err != TOR_ROUTERINFO_ERROR_NOT_A_SERVER;
}

/** Replace the current onion key with <b>k</b>.  Does not affect
@@ -2360,8 +2350,8 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e)
  }

  ri->identity_pkey = crypto_pk_dup_key(get_server_identity_key());
  if (crypto_pk_get_digest(ri->identity_pkey,
                           ri->cache_info.identity_digest)<0) {
  if (BUG(crypto_pk_get_digest(ri->identity_pkey,
                           ri->cache_info.identity_digest) < 0)) {
    routerinfo_free(ri);
    return TOR_ROUTERINFO_ERROR_DIGEST_FAILED;
  }
+1 −1
Original line number Diff line number Diff line
@@ -1706,7 +1706,7 @@ test_policies_getinfo_helper_policies(void *arg)
  rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer,
                               &errmsg);

  tt_int_op(rv, OP_EQ, 0);
  tt_int_op(rv, OP_EQ, -1);
  tt_ptr_op(answer, OP_EQ, NULL);
  tt_ptr_op(errmsg, OP_NE, NULL);
  tt_str_op(errmsg, OP_EQ, "Key digest failed");