aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Osipov <michaelo@FreeBSD.org>2025-12-26 17:27:12 +0000
committerMichael Osipov <michaelo@FreeBSD.org>2026-01-31 20:48:56 +0000
commitfe81e3944c085e765c83c4f78941d7529ceb556e (patch)
treefe6afb93ab753d9c9f4928d9c00e8cf164e49053
parentd195b3783fa4de5c1a95f6d95eb9444abce6778b (diff)
sockstat: Surround explicit IPv6 addresses with brackets
PR: 254611 Approved by: otis, tuexen, des MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D54375
-rw-r--r--usr.bin/sockstat/main.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/usr.bin/sockstat/main.c b/usr.bin/sockstat/main.c
index 32b1ac1a8d20..ea4449300866 100644
--- a/usr.bin/sockstat/main.c
+++ b/usr.bin/sockstat/main.c
@@ -928,6 +928,7 @@ formataddr(struct sockaddr_storage *ss, char *buf, size_t bufsize)
struct sockaddr_un *sun;
int error, off, port = 0;
char addrstr[NI_MAXHOST] = "";
+ bool needs_ipv6_brackets = false;
switch (ss->ss_family) {
case AF_INET:
@@ -938,6 +939,8 @@ formataddr(struct sockaddr_storage *ss, char *buf, size_t bufsize)
case AF_INET6:
if (IN6_IS_ADDR_UNSPECIFIED(&sstosin6(ss)->sin6_addr))
addrstr[0] = '*';
+ else
+ needs_ipv6_brackets = true;
port = ntohs(sstosin6(ss)->sin6_port);
break;
case AF_UNIX:
@@ -946,7 +949,7 @@ formataddr(struct sockaddr_storage *ss, char *buf, size_t bufsize)
if (is_xo_style_encoding) {
xo_emit("{:path/%.*s}", sun->sun_len - off,
sun->sun_path);
- return 0;
+ return (0);
}
return snprintf(buf, bufsize, "%.*s",
sun->sun_len - off, sun->sun_path);
@@ -962,6 +965,11 @@ formataddr(struct sockaddr_storage *ss, char *buf, size_t bufsize)
xo_emit("{:port/%d}", port);
return (0);
}
+ if (needs_ipv6_brackets) {
+ if (port == 0)
+ return (snprintf(buf, bufsize, "[%s]:*", addrstr));
+ return (snprintf(buf, bufsize, "[%s]:%d", addrstr, port));
+ }
if (port == 0)
return (snprintf(buf, bufsize, "%s:*", addrstr));
return (snprintf(buf, bufsize, "%s:%d", addrstr, port));