Browse Source

Use fmt_and_decorate_addr in TransportProxy statefile entry.

state_transport_line_is_valid calls tor_addr_port_lookup, which expects
brackets around an IPv6 address. Without this, cached transport
addresses can't be parsed later:

[warn] state: Could not parse addrport.
[warn] state: State file seems to be broken.

See #7011.
David Fifield 11 years ago
parent
commit
5cbf0f2106
1 changed files with 4 additions and 3 deletions
  1. 4 3
      src/or/statefile.c

+ 4 - 3
src/or/statefile.c

@@ -553,7 +553,8 @@ save_transport_to_state(const char *transport,
   if (transport_line) { /* if transport already exists in state... */
     const char *prev_bindaddr = /* get its addrport... */
       get_transport_bindaddr(transport_line->value, transport);
-    tor_asprintf(&transport_addrport, "%s:%d", fmt_addr(addr), (int)port);
+    tor_asprintf(&transport_addrport, "%s:%d", fmt_and_decorate_addr(addr),
+                 (int)port);
 
     /* if transport in state has the same address as this one, life is good */
     if (!strcmp(prev_bindaddr, transport_addrport)) {
@@ -566,7 +567,7 @@ save_transport_to_state(const char *transport,
                "address:port");
       tor_free(transport_line->value); /* free the old line */
       tor_asprintf(&transport_line->value, "%s %s:%d", transport,
-                   fmt_addr(addr),
+                   fmt_and_decorate_addr(addr),
                    (int) port); /* replace old addrport line with new line */
     }
   } else { /* never seen this one before; save it in state for next time */
@@ -585,7 +586,7 @@ save_transport_to_state(const char *transport,
     *next = line = tor_malloc_zero(sizeof(config_line_t));
     line->key = tor_strdup("TransportProxy");
     tor_asprintf(&line->value, "%s %s:%d", transport,
-                 fmt_addr(addr), (int) port);
+                 fmt_and_decorate_addr(addr), (int) port);
 
     next = &(line->next);
   }