summaryrefslogtreecommitdiff
path: root/hostname.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-03-22 05:22:04 -0500
committerJeff Carr <[email protected]>2025-03-22 05:22:04 -0500
commitb2ed4102763421924b29ab4bb6be1a1e5b4b9647 (patch)
tree679db085b742c1eb5b0f3fb75aac54507e993620 /hostname.go
parent68127e4356d00604b454bfee002a7fda233fb773 (diff)
work on setting the hostname in the patchset
Diffstat (limited to 'hostname.go')
-rw-r--r--hostname.go53
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)
+}
+