On Wed, Jul 24, 2024 at 11:50:17PM +0200, Stefano Brivio wrote: > Even though we don't use : as delimiter for the port, making square > brackets unneeded, RFC 3986, section 3.2.2, mandates them for IPv6 > literals. We want IPv6 addresses there, but some users might still > specify them out of habit. > > Same for IPv4 addresses: RFC 3986 doesn't specify square brackets for > IPv4 literals, but I had reports of users actually trying to use them > (they're accepted by many tools). > > Allow square brackets for both IPv4 and IPv6 addresses, correct or > not, they're harmless anyway. > > Signed-off-by: Stefano Brivio Reviewed-by: David Gibson > --- > conf.c | 24 +++++++++++++++++------- > 1 file changed, 17 insertions(+), 7 deletions(-) > > diff --git a/conf.c b/conf.c > index 3cf9ed8..338742e 100644 > --- a/conf.c > +++ b/conf.c > @@ -209,14 +209,24 @@ static void conf_ports(const struct ctx *c, char optname, const char *optarg, > > } > > - if (ifname == buf + 1) /* Interface without address */ > + if (ifname == buf + 1) { /* Interface without address */ > addr = NULL; > - else if (inet_pton(AF_INET, buf, addr)) > - af = AF_INET; > - else if (inet_pton(AF_INET6, buf, addr)) > - af = AF_INET6; > - else > - goto bad; > + } else { > + p = buf; > + > + /* Allow square brackets for IPv4 too for convenience */ > + if (*p == '[' && p[strlen(p) - 1] == ']') { > + p[strlen(p) - 1] = 0; Nit: I think = '\0' would make the intention here clearer. > + p++; > + } > + > + if (inet_pton(AF_INET, p, addr)) > + af = AF_INET; > + else if (inet_pton(AF_INET6, p, addr)) > + af = AF_INET6; > + else > + goto bad; > + } > } else { > spec = buf; > -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson