From: Tobias Heider Subject: Re: enclose IPv6 address in bracket To: YASUOKA Masahiko Cc: florian@openbsd.org, tech@openbsd.org Date: Mon, 1 Jul 2024 13:29:46 +0200 On Mon, Jul 01, 2024 at 05:41:26PM +0900, YASUOKA Masahiko wrote: > On Mon, 01 Jul 2024 09:55:14 +0200 > Florian Obser wrote: > > Reads correct to me, OK florian > > Thanks, > > > Would it make sense to always surround an IPv6 address with [], even if > > port == 0? > > I'm not sure. When the IPv6 address is used without a port, I feel > surrounding it with [] is not necessary and usually don't do that. ok with me either way. > > > On 2024-07-01 14:55 +09, YASUOKA Masahiko wrote: > >> Hi, > >> > >> When iked(8) represents an IPv6 address with a port number, the port > >> part might be interpreted as a last 2 octets of the address. > >> > >> I'd like to enclose the address in bracket. > >> > >> ok? > >> > >> Index: sbin/iked/util.c > >> =================================================================== > >> RCS file: /cvs/src/sbin/iked/util.c,v > >> diff -u -p -r1.44 util.c > >> --- sbin/iked/util.c 3 Feb 2024 00:38:08 -0000 1.44 > >> +++ sbin/iked/util.c 1 Jul 2024 05:39:58 -0000 > >> @@ -644,16 +644,16 @@ prefixlen2mask6(uint8_t prefixlen, uint3 > >> const char * > >> print_addr(void *addr) > >> { > >> - static char sbuf[IKED_CYCLE_BUFFERS][NI_MAXHOST + 7]; > >> + static char sbuf[IKED_CYCLE_BUFFERS][NI_MAXHOST + 9]; > >> static int idx; > >> struct sockaddr *sa = addr; > >> - char *buf; > >> - size_t len; > >> + char *buf, *hbuf; > >> + size_t len, hlen; > >> char pbuf[7]; > >> in_port_t port; > >> > >> - buf = sbuf[idx]; > >> - len = sizeof(sbuf[idx]); > >> + hbuf = buf = sbuf[idx]; > >> + hlen = len = sizeof(sbuf[idx]); > >> if (++idx >= IKED_CYCLE_BUFFERS) > >> idx = 0; > >> > >> @@ -662,13 +662,21 @@ print_addr(void *addr) > >> return (buf); > >> } > >> > >> + if ((port = socket_getport(sa)) != 0 && sa->sa_family == AF_INET6) { > >> + /* surround [] */ > >> + *(hbuf++) = '['; > >> + hlen--; > >> + } > >> + > >> if (getnameinfo(sa, sa->sa_len, > >> - buf, len, NULL, 0, NI_NUMERICHOST) != 0) { > >> + hbuf, hlen, NULL, 0, NI_NUMERICHOST) != 0) { > >> strlcpy(buf, "unknown", len); > >> return (buf); > >> } > >> > >> - if ((port = socket_getport(sa)) != 0) { > >> + if (port != 0) { > >> + if (sa->sa_family == AF_INET6) > >> + (void)strlcat(buf, "]", len); > >> snprintf(pbuf, sizeof(pbuf), ":%d", port); > >> (void)strlcat(buf, pbuf, len); > >> } > >> > > > > -- > > In my defence, I have been left unsupervised. > > > > >