diff options
| author | Michael Osipov <michaelo@FreeBSD.org> | 2025-12-26 17:27:12 +0000 |
|---|---|---|
| committer | Michael Osipov <michaelo@FreeBSD.org> | 2026-01-31 20:48:56 +0000 |
| commit | fe81e3944c085e765c83c4f78941d7529ceb556e (patch) | |
| tree | fe6afb93ab753d9c9f4928d9c00e8cf164e49053 | |
| parent | d195b3783fa4de5c1a95f6d95eb9444abce6778b (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.c | 10 |
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)); |
