diff options
Diffstat (limited to 'hostname.go')
| -rw-r--r-- | hostname.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/hostname.go b/hostname.go new file mode 100644 index 0000000..85d61c6 --- /dev/null +++ b/hostname.go @@ -0,0 +1,53 @@ +// +build linux + +package main + +import ( + "fmt" + "os" + "syscall" +) + +// scutil --get ComputerName + +// getDomainName fetches the domain name using the getdomainname syscall. +func getDomainName() (string, error) { + var buf [256]byte + err := syscall.Getdomainname(buf[:]) + if err != nil { + return "", fmt.Errorf("failed to get domain name: %w", err) + } + // Trim null bytes + n := 0 + for ; n < len(buf); n++ { + if buf[n] == 0 { + break + } + } + return string(buf[:n]), nil +} + +// GetFullHostname returns the hostname + domain name (if set). +func GetFullHostname() (string, error) { + host, err := os.Hostname() + if err != nil { + return "", fmt.Errorf("failed to get hostname: %w", err) + } + + domain, err := getDomainName() + if err != nil || domain == "" { + return host, nil // fallback to short hostname + } + + return fmt.Sprintf("%s.%s", host, domain), nil +} + +func main() { + fqdn, err := GetFullHostname() + if err != nil { + fmt.Println("Error:", err) + return + } + fmt.Println("Hostname + Domain:", fqdn) +} + |
