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.
This commit is contained in:
David Fifield 2012-10-06 21:03:24 -07:00 committed by Nick Mathewson
parent 41328c7009
commit 5cbf0f2106

View File

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