summaryrefslogtreecommitdiff
path: root/src/or/hs_common.c
diff options
context:
space:
mode:
authorGeorge Kadianakis <desnacked@riseup.net>2017-08-04 12:21:14 +0300
committerNick Mathewson <nickm@torproject.org>2017-08-08 20:29:34 -0400
commitb89d2fa1db2379bffd2e2b4c851c3facc57b6ed8 (patch)
tree6f4769adc1ddfd5d4c82958eba03ce5575bd113c /src/or/hs_common.c
parent440eaa9b22573cdb0d38bf5c13200cc1077a453f (diff)
downloadtor-b89d2fa1db2379bffd2e2b4c851c3facc57b6ed8.tar.gz
tor-b89d2fa1db2379bffd2e2b4c851c3facc57b6ed8.zip
Don't set HSDir index if we don't have a live consensus.
We also had to alter the SRV functions to take a consensus as optional input, since we might be setting our HSDir index using a consensus that is currently being processed and won't be returned by the networkstatus_get_live_consensus() function. This change has two results: a) It makes sure we are using a fresh consensus with the right SRV value when we are calculating the HSDir hash ring. b) It ensures that we will not use the sr_get_current/previous() functions when we don't have a consensus which would have falsely triggered the disaster SRV logic.
Diffstat (limited to 'src/or/hs_common.c')
-rw-r--r--src/or/hs_common.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/or/hs_common.c b/src/or/hs_common.c
index 570c1132c3..2894d0a286 100644
--- a/src/or/hs_common.c
+++ b/src/or/hs_common.c
@@ -1058,12 +1058,13 @@ hs_build_hsdir_index(const ed25519_public_key_t *identity_pk,
/* Return a newly allocated buffer containing the current shared random value
* or if not present, a disaster value is computed using the given time period
- * number. This function can't fail. */
+ * number. If a consensus is provided in <b>ns</b>, use it to get the SRV
+ * value. This function can't fail. */
uint8_t *
-hs_get_current_srv(uint64_t time_period_num)
+hs_get_current_srv(uint64_t time_period_num, const networkstatus_t *ns)
{
uint8_t *sr_value = tor_malloc_zero(DIGEST256_LEN);
- const sr_srv_t *current_srv = sr_get_current();
+ const sr_srv_t *current_srv = sr_get_current(ns);
if (current_srv) {
memcpy(sr_value, current_srv->value, sizeof(current_srv->value));
@@ -1078,10 +1079,10 @@ hs_get_current_srv(uint64_t time_period_num)
* value or if not present, a disaster value is computed using the given time
* period number. This function can't fail. */
uint8_t *
-hs_get_previous_srv(uint64_t time_period_num)
+hs_get_previous_srv(uint64_t time_period_num, const networkstatus_t *ns)
{
uint8_t *sr_value = tor_malloc_zero(DIGEST256_LEN);
- const sr_srv_t *previous_srv = sr_get_previous();
+ const sr_srv_t *previous_srv = sr_get_previous(ns);
if (previous_srv) {
memcpy(sr_value, previous_srv->value, sizeof(previous_srv->value));