[tor-commits] [tor/master] router: Move extrainfo signing into its own function
asn at torproject.org
asn at torproject.org
Tue Mar 26 13:37:54 UTC 2019
commit a1f8558628881216917814989d293a028f9e48d7
Author: teor <teor at torproject.org>
Date: Thu Jan 10 20:39:10 2019 +1000
router: Move extrainfo signing into its own function
This refactoring improves the structure of router_build_fresh_descriptor().
Preparation for testing 29017 and 20918.
---
src/feature/relay/router.c | 57 +++++++++++++++++++++++++++++++---------------
1 file changed, 39 insertions(+), 18 deletions(-)
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index 03af9aacd..0e872663f 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -2158,6 +2158,40 @@ router_update_extrainfo_descriptor_body(extrainfo_t *ei)
return 0;
}
+/** Allocate and return a fresh, signed extrainfo for this OR, based on the
+ * routerinfo ri.
+ *
+ * If ri is NULL, logs a BUG() warning and returns NULL.
+ * Caller is responsible for freeing the generated extrainfo.
+ */
+static extrainfo_t *
+router_build_signed_extrainfo(const routerinfo_t *ri)
+{
+ int result = -1;
+ extrainfo_t *ei = NULL;
+
+ if (BUG(!ri))
+ return NULL;
+
+ ei = router_build_fresh_extrainfo(ri);
+ /* router_build_fresh_extrainfo() should not fail. */
+ if (BUG(!ei))
+ goto err;
+
+ result = router_update_extrainfo_descriptor_body(ei);
+ if (result < 0)
+ goto err;
+
+ goto done;
+
+ err:
+ extrainfo_free(ei);
+ return NULL;
+
+ done:
+ return ei;
+}
+
/** Set the fields in ri that depend on ei.
*
* If ei is NULL, logs a BUG() warning and zeroes the relevant fields.
@@ -2268,26 +2302,13 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e)
goto err;
}
- ei = router_build_fresh_extrainfo(ri);
- /* Failing to create an ei is not an error, but at this stage,
- * router_build_fresh_extrainfo() should not fail. */
- if (BUG(!ei))
- goto skip_ei;
-
- result = router_update_extrainfo_descriptor_body(ei);
- if (result < 0)
- goto skip_ei;
-
- router_update_routerinfo_from_extrainfo(ri, ei);
+ ei = router_build_signed_extrainfo(ri);
- /* TODO: disentangle these GOTOs, or split into another function. */
- goto ei_ok;
-
- skip_ei:
- extrainfo_free(ei);
- ei = NULL;
+ /* Failing to create an ei is not an error. */
+ if (ei) {
+ router_update_routerinfo_from_extrainfo(ri, ei);
+ }
- ei_ok:
result = router_update_routerinfo_descriptor_body(ri);
if (result < 0)
goto err;
More information about the tor-commits
mailing list