summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-08-11 10:04:04 -0400
committerNick Mathewson <nickm@torproject.org>2018-08-11 10:04:04 -0400
commit61d5bcc1a251002d726e66461ec576d9b71cebd1 (patch)
tree990dfaf04fea2269ac4227b42cdfa75d0f7d1035
parentb7ed61167fb3ed9d3b623d008bf3360a3ffa95c4 (diff)
parent5f2e00241a35f7658bde4f9afb0a758588217e40 (diff)
downloadtor-61d5bcc1a251002d726e66461ec576d9b71cebd1.tar.gz
tor-61d5bcc1a251002d726e66461ec576d9b71cebd1.zip
Merge remote-tracking branch 'tor-github/pr/268'
-rw-r--r--changes/bug270346
-rw-r--r--src/feature/relay/router.c26
-rw-r--r--src/test/test_policy.c2
3 files changed, 15 insertions, 19 deletions
diff --git a/changes/bug27034 b/changes/bug27034
new file mode 100644
index 0000000000..bdb7d29c11
--- /dev/null
+++ b/changes/bug27034
@@ -0,0 +1,6 @@
+ 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.
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index 0cc4887232..e4ec01af24 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -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;
}
diff --git a/src/test/test_policy.c b/src/test/test_policy.c
index 4b1adc91f0..6a07e5b1f8 100644
--- a/src/test/test_policy.c
+++ b/src/test/test_policy.c
@@ -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");