aboutsummaryrefslogtreecommitdiff
path: root/src/feature
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2021-01-19 12:02:28 -0500
committerNick Mathewson <nickm@torproject.org>2021-01-19 12:02:28 -0500
commit4961645254a7cb1bc0a64947995a3ec2d77bffb0 (patch)
tree32209c2abf3edb56481dd05dbb0e43fcc48ecd60 /src/feature
parent85c4087de9b80c2174e47359a5a97f5fac5c0c10 (diff)
parentf79a31f6d50b6b44e0bef091f3e6df0d473141bd (diff)
downloadtor-4961645254a7cb1bc0a64947995a3ec2d77bffb0.tar.gz
tor-4961645254a7cb1bc0a64947995a3ec2d77bffb0.zip
Merge branch 'maint-0.4.5'
Diffstat (limited to 'src/feature')
-rw-r--r--src/feature/relay/relay_find_addr.c10
-rw-r--r--src/feature/relay/relay_periodic.c2
-rw-r--r--src/feature/relay/router.c18
-rw-r--r--src/feature/relay/router.h2
4 files changed, 18 insertions, 14 deletions
diff --git a/src/feature/relay/relay_find_addr.c b/src/feature/relay/relay_find_addr.c
index 9c2c8b281c..2da2328b14 100644
--- a/src/feature/relay/relay_find_addr.c
+++ b/src/feature/relay/relay_find_addr.c
@@ -198,9 +198,13 @@ relay_addr_learn_from_dirauth(void)
return;
}
const node_t *node = node_get_by_id(rs->identity_digest);
- if (BUG(!node)) {
- /* If there is a routerstatus_t, there is a node_t thus this should
- * never fail. */
+ if (!node) {
+ /* This can happen if we are still in the early starting stage where no
+ * descriptors we actually fetched and thus we have the routerstatus_t
+ * for the authority but not its descriptor which is needed to build a
+ * circuit and thus learn our address. */
+ log_info(LD_GENERAL, "Can't build a circuit to an authority. Unable to "
+ "learn for now our address from them.");
return;
}
extend_info_t *ei = extend_info_from_node(node, 1);
diff --git a/src/feature/relay/relay_periodic.c b/src/feature/relay/relay_periodic.c
index a857ea8d92..a917d90f1a 100644
--- a/src/feature/relay/relay_periodic.c
+++ b/src/feature/relay/relay_periodic.c
@@ -104,7 +104,7 @@ rotate_onion_key_callback(time_t now, const or_options_t *options)
log_info(LD_GENERAL,"Rotating onion key.");
rotate_onion_key();
cpuworkers_rotate_keyinfo();
- if (router_rebuild_descriptor(1)<0) {
+ if (!router_rebuild_descriptor(1)) {
log_info(LD_CONFIG, "Couldn't rebuild router descriptor");
}
if (advertised_server_mode() && !net_is_disabled())
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index a18921eddd..781388294b 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -1450,10 +1450,9 @@ consider_publishable_server(int force)
return;
rebuilt = router_rebuild_descriptor(0);
- if (decide_if_publishable_server()) {
+ if (rebuilt && decide_if_publishable_server()) {
set_server_advertised(1);
- if (rebuilt == 0)
- router_upload_dir_desc_to_dirservers(force);
+ router_upload_dir_desc_to_dirservers(force);
} else {
set_server_advertised(0);
}
@@ -1840,7 +1839,7 @@ router_get_my_extrainfo(void)
{
if (!server_mode(get_options()))
return NULL;
- if (router_rebuild_descriptor(0))
+ if (!router_rebuild_descriptor(0))
return NULL;
return desc_extrainfo;
}
@@ -2437,9 +2436,10 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e)
/** If <b>force</b> is true, or our descriptor is out-of-date, rebuild a fresh
* routerinfo, signed server descriptor, and extra-info document for this OR.
- * Return 0 on success, -1 on temporary error.
+ *
+ * Return true on success, else false on temporary error.
*/
-int
+bool
router_rebuild_descriptor(int force)
{
int err = 0;
@@ -2447,13 +2447,13 @@ router_rebuild_descriptor(int force)
extrainfo_t *ei;
if (desc_clean_since && !force)
- return 0;
+ return true;
log_info(LD_OR, "Rebuilding relay descriptor%s", force ? " (forced)" : "");
err = router_build_fresh_descriptor(&ri, &ei);
if (err < 0) {
- return err;
+ return false;
}
routerinfo_free(desc_routerinfo);
@@ -2469,7 +2469,7 @@ router_rebuild_descriptor(int force)
}
desc_dirty_reason = NULL;
control_event_my_descriptor_changed();
- return 0;
+ return true;
}
/** Called when we have a new set of consensus parameters. */
diff --git a/src/feature/relay/router.h b/src/feature/relay/router.h
index 93239a7484..9556a66e68 100644
--- a/src/feature/relay/router.h
+++ b/src/feature/relay/router.h
@@ -102,7 +102,7 @@ int router_extrainfo_digest_is_me(const char *digest);
int router_is_me(const routerinfo_t *router);
bool router_addr_is_my_published_addr(const tor_addr_t *addr);
int router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e);
-int router_rebuild_descriptor(int force);
+bool router_rebuild_descriptor(int force);
char *router_dump_router_to_string(routerinfo_t *router,
const crypto_pk_t *ident_key,
const crypto_pk_t *tap_key,