diff options
author | George Kadianakis <desnacked@riseup.net> | 2020-07-03 16:08:34 +0300 |
---|---|---|
committer | George Kadianakis <desnacked@riseup.net> | 2020-07-09 10:40:56 +0300 |
commit | c1598be1e01cdadda56f9fd41909ee8e9b7b4ecf (patch) | |
tree | e62af2d0a5841be6d455202757c7a479d6add82d /src/feature/hs | |
parent | e0da64fd27a8c1a34668dfa337877c0aeb398022 (diff) | |
download | tor-c1598be1e01cdadda56f9fd41909ee8e9b7b4ecf.tar.gz tor-c1598be1e01cdadda56f9fd41909ee8e9b7b4ecf.zip |
Refactor setup_intro_circ_auth_key() to make it simpler.
It now uses the 'goto err' pattern, instead of the fatal_unreached()
pattern. The latter pattern is usually used when there is a loop, but there is
no loop in this function so it can be simplified easily.
Diffstat (limited to 'src/feature/hs')
-rw-r--r-- | src/feature/hs/hs_client.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c index a49999d7d1..7f4d5385e9 100644 --- a/src/feature/hs/hs_client.c +++ b/src/feature/hs/hs_client.c @@ -722,29 +722,28 @@ setup_intro_circ_auth_key(origin_circuit_t *circ) * and the client descriptor cache that gets purged (NEWNYM) or the * cleaned up because it expired. Mark the circuit for close so a new * descriptor fetch can occur. */ - circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); - goto end; + goto err; } /* We will go over every intro point and try to find which one is linked to * that circuit. Those lists are small so it's not that expensive. */ ip = find_desc_intro_point_by_legacy_id( circ->build_state->chosen_exit->identity_digest, desc); - if (ip) { - /* We got it, copy its authentication key to the identifier. */ - ed25519_pubkey_copy(&circ->hs_ident->intro_auth_pk, - &ip->auth_key_cert->signed_key); - goto end; + if (!ip) { + /* Reaching this point means we didn't find any intro point for this + * circuit which is not supposed to happen. */ + log_info(LD_REND,"Could not match opened intro circuit with intro point."); + goto err; } - /* Reaching this point means we didn't find any intro point for this circuit - * which is not supposed to happen. */ + /* We got it, copy its authentication key to the identifier. */ + ed25519_pubkey_copy(&circ->hs_ident->intro_auth_pk, + &ip->auth_key_cert->signed_key); + return 0; + + err: circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); - log_info(LD_REND, "Could not match opened intro circuit with intro point."); return -1; - - end: - return 0; } /** Called when an introduction circuit has opened. */ |