[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