// figures out if your hostname is valid // then checks if your DNS is setup correctly package linuxstatus import ( "strings" "go.wit.com/log" "go.wit.com/shell" // will try to get this hosts FQDN "github.com/Showmax/go-fqdn" ) func (ls *LinuxStatus) GetDomainName() string { if ! me.Ready() {return ""} return me.domainname.Get() } func (ls *LinuxStatus) setDomainName() { if ! me.Ready() {return} dn := run("domainname") if (me.domainname.Get() != dn) { log.Log(CHANGE, "domainname has changed from", me.GetDomainName(), "to", dn) me.domainname.Set(dn) me.changed = true } } func (ls *LinuxStatus) GetHostname() string { if ! me.Ready() {return ""} return me.hostname.Get() } func (ls *LinuxStatus) ValidHostname() bool { if ! me.Ready() {return false} if me.hostnameStatus.Get() == "VALID" { return true } return false } func (ls *LinuxStatus) setHostname(newname string) { if ! me.Ready() {return} if newname == me.hostname.Get() { return } log.Log(CHANGE, "hostname has changed from", me.GetHostname(), "to", newname) me.hostname.Set(newname) me.changed = true } func (ls *LinuxStatus) GetHostShort() string { if ! me.Ready() {return ""} return me.hostshort.Get() } func (ls *LinuxStatus) setHostShort() { if ! me.Ready() {return} hshort := run("hostname -s") if (me.hostshort.Get() != hshort) { log.Log(CHANGE, "hostname -s has changed from", me.hostshort.Get(), "to", hshort) me.hostshort.Set(hshort) me.changed = true } } func (ls *LinuxStatus) GetIPv6() []string { if ! me.Ready() {return nil} tmp := me.workingIPv6.Get() return strings.Split(tmp, "\n") } func lookupHostname() { if ! me.Ready() {return} var err error var hostfqdn string = "broken" hostfqdn, err = fqdn.FqdnHostname() if (err != nil) { log.Error(err, "FQDN hostname error") return } log.Log(NET, "full hostname should be: ", hostfqdn) me.setDomainName() me.setHostShort() // these are authoritative // if they work wrong, your linux configuration is wrong. // Do not complain. // Fix your distro if your box is otherwise not working this way hshort := me.GetHostShort() // from `hostname -s` dn := me.GetDomainName() // from `domanname` hostname := me.GetHostname() // from `hostname -f` if hostfqdn != hostname { log.Log(WARN, "hostname", hostname, "does not equal fqdn.FqdnHostname()", hostfqdn) // TODO: figure out what is wrong } var test string test = hshort + "." + dn me.setHostname(test) if (hostname != test) { log.Log(CHANGE, "hostname", hostname, "does not equal", test) if (me.hostnameStatus.Get() != "BROKEN") { log.Log(CHANGE, "hostname", hostname, "does not equal", test) me.changed = true me.hostnameStatus.Set("BROKEN") } } else { if (me.hostnameStatus.Get() != "VALID") { log.Log(CHANGE, "hostname", hostname, "is valid") me.hostnameStatus.Set("VALID") me.changed = true } } } // returns true if the hostname is good // check that all the OS settings are correct here // On Linux, /etc/hosts, /etc/hostname // and domainname and hostname func goodHostname() bool { hostname := shell.Chomp(shell.Cat("/etc/hostname")) log.Log(NOW, "hostname =", hostname) hs := run("hostname -s") dn := run("domainname") log.Log(NOW, "hostname short =", hs, "domainname =", dn) tmp := hs + "." + dn if (hostname == tmp) { log.Log(NOW, "hostname seems to be good", hostname) return true } return false }