From: Florian Obser Subject: Re: enclose IPv6 address in bracket To: Tobias Heider Cc: YASUOKA Masahiko , tech@openbsd.org Date: Mon, 01 Jul 2024 14:00:16 +0200 On 2024-07-01 13:29 +02, Tobias Heider wrote: > 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. > to be clear: same for me. Heck, I don't even use iked ;) >> >> > 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. >> > >> > >> > -- In my defence, I have been left unsupervised.