From 3b73727e39205c85612878a01c77a129da1992f7 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sat, 26 Nov 2022 21:27:10 -0800 Subject: [PATCH] cmd/tailscale: de-punycode hostnames in status display Still show original, but show de-punycode version in parens, similar to how we show DNS-less hostnames. Change-Id: I7e57da5e4029c5b49e8cd3014c350eddd2b3c338 Signed-off-by: Brad Fitzpatrick --- cmd/tailscale/cli/status.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmd/tailscale/cli/status.go b/cmd/tailscale/cli/status.go index 8bc325847..1c28a62e6 100644 --- a/cmd/tailscale/cli/status.go +++ b/cmd/tailscale/cli/status.go @@ -19,6 +19,7 @@ import ( "github.com/peterbourgon/ff/v3/ffcli" "github.com/toqueteos/webbrowser" + "golang.org/x/net/idna" "tailscale.com/ipn" "tailscale.com/ipn/ipnstate" "tailscale.com/net/interfaces" @@ -248,6 +249,11 @@ func isRunningOrStarting(st *ipnstate.Status) (description string, ok bool) { func dnsOrQuoteHostname(st *ipnstate.Status, ps *ipnstate.PeerStatus) string { baseName := dnsname.TrimSuffix(ps.DNSName, st.MagicDNSSuffix) if baseName != "" { + if strings.HasPrefix(baseName, "xn-") { + if u, err := idna.ToUnicode(baseName); err == nil { + return fmt.Sprintf("%s (%s)", baseName, u) + } + } return baseName } return fmt.Sprintf("(%q)", dnsname.SanitizeHostname(ps.HostName))