From 244ba1be03f6967600762b0df48a675c62697e94 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Fri, 5 Jan 2024 23:00:30 -0600 Subject: [PATCH] fixed dns-https Signed-off-by: Jeff Carr --- args.go | 16 +++++- dns-https.go | 32 +++++------- dnsLookupStatus.go | 78 +++++++++++++++++----------- gui.go | 118 ++++++++++++++++++++---------------------- hostname.go | 44 ++++------------ hostnameStatus.go | 125 ++++++++++++++++++++++++++++----------------- nsupdate.go | 2 +- structs.go | 10 ++-- 8 files changed, 226 insertions(+), 199 deletions(-) diff --git a/args.go b/args.go index ba6ee85..6527c5b 100644 --- a/args.go +++ b/args.go @@ -18,11 +18,13 @@ var args struct { VerboseDNS bool `arg:"--verbose-dns" help:"debug your dns settings"` } -var NET log.LogFlag var NOW log.LogFlag +var NET log.LogFlag +var DNS log.LogFlag var PROC log.LogFlag var SPEW log.LogFlag var CHANGE log.LogFlag +var STATUS log.LogFlag func init() { arg.MustParse(&args) @@ -40,6 +42,12 @@ func init() { NET.Desc = "Network logging" NET.Register() + DNS.B = false + DNS.Name = "DNS" + DNS.Subsystem = "cpdns" + DNS.Desc = "dnsStatus.update()" + DNS.Register() + PROC.B = false PROC.Name = "PROC" PROC.Subsystem = "cpdns" @@ -58,6 +66,12 @@ func init() { CHANGE.Desc = "show droplet state changes" CHANGE.Register() + STATUS.B = false + STATUS.Name = "STATUS" + STATUS.Subsystem = "cpdns" + STATUS.Desc = "updateStatus()" + STATUS.Register() + if debugger.ArgDebug() { log.Log(true, "INIT() gui debug == true") } else { diff --git a/dns-https.go b/dns-https.go index 6579903..c684835 100644 --- a/dns-https.go +++ b/dns-https.go @@ -8,30 +8,18 @@ import ( "net/http" ) -/* -func getAAAArecords() { - hostname := "go.wit.com" - ipv6Addresses, err := dnsLookupDoH(hostname) - if err != nil { - log.Error(err, "getAAAArecords") - return - } - - fmt.Printf("IPv6 Addresses for %s:\n", hostname) - for _, addr := range ipv6Addresses { - log.Println(addr) - } -} -*/ - // dnsLookupDoH performs a DNS lookup for AAAA records over HTTPS. -func dnsAAAAlookupDoH(domain string) ([]string, error) { +func dnsAAAAlookupDoH(hostname string) ([]string, error) { var ipv6Addresses []string // Construct the URL for a DNS query with Google's DNS-over-HTTPS API - url := fmt.Sprintf("https://dns.google/resolve?name=%s&type=AAAA", domain) + url := fmt.Sprintf("https://dns.google/resolve?name=%s&type=AAAA", hostname) - log.Println("curl", url) + log.Log(DNS, "dnsAAAAlookupDoH()", url) + if hostname == "" { + log.Warn("dnsAAAAlookupDoH() was sent a empty hostname") + return nil, fmt.Errorf("hostname blank") + } // Perform the HTTP GET request resp, err := http.Get(url) @@ -71,7 +59,11 @@ func lookupDoH(hostname string, rrType string) []string { // Construct the URL for a DNS query with Google's DNS-over-HTTPS API url := fmt.Sprintf("https://dns.google/resolve?name=%s&type=%s", hostname, rrType) - log.Println("curl", url) + log.Log(DNS, "lookupDoH()", url) + if hostname == "" { + log.Warn("lookupDoH() was sent a empty hostname") + return nil + } // Perform the HTTP GET request resp, err := http.Get(url) diff --git a/dnsLookupStatus.go b/dnsLookupStatus.go index 6488635..e06971b 100644 --- a/dnsLookupStatus.go +++ b/dnsLookupStatus.go @@ -16,6 +16,7 @@ import ( "os" "fmt" "time" + "strings" "strconv" "reflect" "errors" @@ -171,18 +172,28 @@ func (ds *digStatus) IPv6() bool { return false } -func (ds *digStatus) setIPv4(s string) { +func (ds *digStatus) setIPv4status(s string) { ds.statusIPv4 = s if ! ds.Ready() {return} me.digStatus.set(ds.status, s) } -func (ds *digStatus) setIPv6(s string) { +func (ds *digStatus) setIPv6status(s string) { ds.statusIPv6 = s if ! ds.Ready() {return} me.digStatus.set(ds.statusAAAA, s) } +func (ds *digStatus) SetIPv6(s string) { + if ! ds.Ready() {return} + log.Warn("Should SetIPv6() here to", s) + log.Warn("Should SetIPv6() here to", s) + log.Warn("Should SetIPv6() here to", s) + log.Warn("Should SetIPv6() here to", s) + me.DnsAAAA.Set(s) + // me.digStatus.set(ds.httpGoWitCom, addr) +} + func (ds *digStatus) set(a any, s string) { if ! ds.Ready() {return} if ds.hidden { @@ -227,39 +238,43 @@ func (ds *digStatus) updateDnsStatus() { ipv4, ipv6 = ds.dsCloudflare.update() ipv4, ipv6 = ds.dsGoogle.update() - if ds.checkLookupDoH("go.wit.com") { - log.Println("updateDnsStatus() HTTP DNS lookups working") - me.digStatus.set(ds.statusHTTP, "WORKING") + if me.status.ValidHostname() { + if ds.checkLookupDoH(me.status.GetHostname()) { + log.Log(DNS, "updateDnsStatus() HTTP DNS lookups working") + me.digStatus.set(ds.statusHTTP, "WORKING") + } else { + log.Log(DNS, "updateDnsStatus() HTTP DNS lookups not working") + log.Log(DNS, "updateDnsStatus() It's really unlikely you are on the internet") + me.digStatus.set(ds.statusHTTP, "BROKEN") + } } else { - log.Println("updateDnsStatus() HTTP DNS lookups not working") - log.Println("updateDnsStatus() It's really unlikely you are on the internet") - me.digStatus.set(ds.statusHTTP, "BROKEN") + me.digStatus.set(ds.statusHTTP, "INVALID HOSTNAME") } if (ipv4) { - log.Println("updateDnsStatus() IPv4 A lookups working") - ds.setIPv4("OK") + log.Log(DNS, "updateDnsStatus() IPv4 A lookups working") + ds.setIPv4status("OK") } else { - log.Println("updateDnsStatus() IPv4 A lookups not working. No internet?") - ds.setIPv4("No Internet?") + log.Log(DNS, "updateDnsStatus() IPv4 A lookups not working. No internet?") + ds.setIPv4status("No Internet?") } if (ipv6) { - log.Println("updateDnsStatus() IPv6 AAAA lookups working") - ds.setIPv4("GOOD") - ds.setIPv6("GOOD") + log.Log(DNS, "updateDnsStatus() IPv6 AAAA lookups working") + ds.setIPv4status("GOOD") + ds.setIPv6status("GOOD") } else { - log.Println("updateDnsStatus() IPv6 AAAA lookups are not working") - ds.setIPv6("Need VPN") + log.Log(DNS, "updateDnsStatus() IPv6 AAAA lookups are not working") + ds.setIPv6status("Need VPN") } cmd = "dig +noall +answer www.wit.com A" out = shell.Run(cmd) - log.Println("makeDnsStatusGrid() dig", out) + log.Log(DNS, "makeDnsStatusGrid() dig", out) me.digStatus.set(ds.DnsDigUDP, out) cmd = "dig +noall +answer www.wit.com AAAA" out = shell.Run(cmd) - log.Println("makeDnsStatusGrid() dig", out) + log.Log(DNS, "makeDnsStatusGrid() dig", out) me.digStatus.set(ds.DnsDigTCP, out) } @@ -307,9 +322,9 @@ func (ds *dnsStatus) update() (bool, bool) { var a bool = false var aaaa bool = false - log.Println("dnsStatus.update() For server", ds.server, "on", ds.hostname) + log.Log(DNS, "dnsStatus.update() For server", ds.server, "on", ds.hostname) results, _ = dnsUdpLookup(ds.server, ds.hostname, dns.TypeA) - log.Println("dnsStatus.update() UDP type A =", results) + log.Log(DNS, "dnsStatus.update() UDP type A =", results) if (len(results) == 0) { me.digStatus.set(ds.udpA, "BROKEN") @@ -321,7 +336,7 @@ func (ds *dnsStatus) update() (bool, bool) { } results, _ = dnsTcpLookup(ds.server, ds.hostname, dns.TypeA) - log.Println("dnsStatus.update() TCP type A =", results) + log.Log(DNS, "dnsStatus.update() TCP type A =", results) if (len(results) == 0) { me.digStatus.set(ds.tcpA, "BROKEN") @@ -336,7 +351,7 @@ func (ds *dnsStatus) update() (bool, bool) { me.digStatus.set(ds.aSuccess,strconv.Itoa(ds.aSuccessc)) results, _ = dnsUdpLookup(ds.server, ds.hostname, dns.TypeAAAA) - log.Println("dnsStatus.update() UDP type AAAA =", results) + log.Log(DNS, "dnsStatus.update() UDP type AAAA =", results) if (len(results) == 0) { me.digStatus.set(ds.udpAAAA, "BROKEN") @@ -349,7 +364,7 @@ func (ds *dnsStatus) update() (bool, bool) { } results, _ = dnsTcpLookup(ds.server, ds.hostname, dns.TypeAAAA) - log.Println("dnsStatus.update() UDP type AAAA =", results) + log.Log(DNS, "dnsStatus.update() UDP type AAAA =", results) if (len(results) == 0) { me.digStatus.set(ds.tcpAAAA, "BROKEN") @@ -387,14 +402,14 @@ func (ds *digStatus) makeDnsStatusGrid() { grid.NewLabel(cmd) ds.DnsDigUDP = grid.NewLabel("?") out = shell.Run(cmd) - log.Println("makeDnsStatusGrid() dig", out) + log.Log(DNS, "makeDnsStatusGrid() dig", out) me.digStatus.set(ds.DnsDigUDP, out) cmd = "dig +noall +answer go.wit.com AAAA" grid.NewLabel(cmd) ds.DnsDigTCP = grid.NewLabel("?") out = shell.Run(cmd) - log.Println("makeDnsStatusGrid() dig", out) + log.Log(DNS, "makeDnsStatusGrid() dig", out) me.digStatus.set(ds.DnsDigTCP, out) group.Pad() @@ -443,19 +458,20 @@ func dnsTcpLookup(server string, domain string, recordType uint16) ([]string, er func (ds *digStatus) checkLookupDoH(hostname string) bool { var status bool = false - domain := "go.wit.com" - ipv6Addresses, err := dnsAAAAlookupDoH(domain) + ipv6Addresses, err := dnsAAAAlookupDoH(hostname) if err != nil { log.Error(err, "checkLookupDoH()") return status } - log.Println("IPv6 Addresses for %s:\n", domain) + log.Log(DNS, "IPv6 Addresses for ", hostname) + var s []string for _, addr := range ipv6Addresses { - log.Println(addr) - me.digStatus.set(ds.httpGoWitCom, addr) + log.Log(DNS, addr) + s = append(s, addr) status = true } + me.digStatus.SetIPv6(strings.Join(s, "\n")) return status } diff --git a/gui.go b/gui.go index 9498fa3..0b96e39 100644 --- a/gui.go +++ b/gui.go @@ -6,11 +6,9 @@ import ( "os" "os/user" "strconv" -// "net" "strings" "go.wit.com/log" - "go.wit.com/shell" "go.wit.com/gui/gui" "go.wit.com/gui/gadgets" @@ -100,8 +98,9 @@ func debugTab(title string) { }) g2.NewButton("dig +trace", func () { - o := shell.Run("dig +trace +noadditional DS " + me.hostname + " @8.8.8.8") - log.Println(o) + log.Log(NOW, "TODO: redo this") + // o := shell.Run("dig +trace +noadditional DS " + me.hostname + " @8.8.8.8") + // log.Println(o) }) g2 = me.debug.Box().NewGroup("debugging options") @@ -149,14 +148,14 @@ func missingAAAA() string { func displayDNS() string { var aaaa []string aaaa = dhcpAAAA() // your AAAA records right now - h := me.hostname + // h := me.hostname var all string var broken string = "unknown" for _, s := range aaaa { - log.Log(NOW, "host", h, "DNS AAAA =", s, "ipmap[s] =", me.ipmap[s]) + log.Log(STATUS, "host", "fixme", "DNS AAAA =", s, "ipmap[s] =", me.ipmap[s]) all += s + "\n" if ( me.ipmap[s] == nil) { - log.Warn("THIS IS THE WRONG AAAA DNS ENTRY: host", h, "DNS AAAA =", s) + log.Warn("THIS IS THE WRONG AAAA DNS ENTRY: host", "fixme", "DNS AAAA =", s) broken = "wrong AAAA entry" } else { if (broken == "unknown") { @@ -166,7 +165,7 @@ func displayDNS() string { } all = sortLines(all) if (me.workingIPv6.S != all) { - log.Warn("workingIPv6.SetText() to:", all) + log.Log(NOW, "workingIPv6.SetText() to:", all) me.workingIPv6.SetText(all) } @@ -174,11 +173,11 @@ func displayDNS() string { a = realA() all = sortLines(strings.Join(a, "\n")) if (all == "") { - log.Info("THERE IS NOT a real A DNS ENTRY") + log.Log(NOW, "THERE IS NOT a real A DNS ENTRY") all = "CNAME ipv6.wit.com" } if (me.DnsA.S != all) { - log.Warn("DnsA.SetText() to:", all) + log.Log(NOW, "DnsA.SetText() to:", all) me.DnsA.SetText(all) } return broken @@ -199,19 +198,18 @@ func mainWindow(title string) { grid.NewLabel("hostname =") me.fqdn = grid.NewLabel("?") - me.hostname = "" - grid.NewLabel("DNS AAAA =") - me.DnsAAAA = grid.NewLabel("?") + // grid.NewLabel("DNS AAAA =") + me.DnsAAAA = gadgets.NewOneLiner(grid, "DNS AAAA =").Set("unknown") grid.NewLabel("DNS A =") me.DnsA = grid.NewLabel("?") me.digStatus = NewDigStatusWindow(me.myGui) - me.hostnameStatus = NewHostnameStatusWindow(me.myGui) + me.status = NewHostnameStatusWindow(me.myGui) me.hostnameStatusButton = me.mainStatus.NewButton("Fix hostname DNS", func () { - me.hostnameStatus.window.Toggle() + me.status.window.Toggle() }) grid.Margin() @@ -220,19 +218,16 @@ func mainWindow(title string) { statusGrid(me.window.Box()) gr := me.window.Box().NewGroup("debugging") - gr.NewButton("GO GUI Debugger", func () { - debugger.DebugWindow(me.myGui) - }) gr.NewButton("OS Details", func () { me.details.Toggle() }) - gr.NewButton("DNS Debug", func () { - me.debug.Toggle() - }) gr.NewButton("Resolver Status", func () { if ! me.digStatus.Ready() {return} me.digStatus.window.Toggle() }) + gr.NewButton("Control Panel Debug", func () { + me.debug.Toggle() + }) } func statusGrid(n *gui.Node) { @@ -240,15 +235,15 @@ func statusGrid(n *gui.Node) { gridP := problems.NewGrid("nuts", 2, 2) + gridP.NewLabel("hostname =") + me.hostnameStatus = gridP.NewLabel("invalid") + gridP.NewLabel("DNS Status =") me.DnsStatus = gridP.NewLabel("unknown") me.statusIPv6 = gadgets.NewOneLiner(gridP, "IPv6 working") me.statusIPv6.Set("known") - gridP.NewLabel("hostname =") - me.hostnameStatusOLD = gridP.NewLabel("invalid") - gridP.NewLabel("dns resolution") me.DnsSpeed = gridP.NewLabel("unknown") @@ -279,52 +274,51 @@ func statusGrid(n *gui.Node) { // run everything because something has changed func updateDNS() { - var aaaa []string - h := me.hostname - if (h == "") { - h = "test.wit.com" - } - me.digStatus.Update() - me.hostnameStatus.Update() + me.status.Update() // log.Println("digAAAA()") - aaaa = digAAAA(h) - log.Log(NOW, "digAAAA() =", aaaa) - // log.Println(SPEW, me) - if (aaaa == nil) { - log.Warn("There are no DNS AAAA records for hostname: ", h) - me.DnsAAAA.SetText("(none)") - if (cloudflare.CFdialog.TypeNode != nil) { - cloudflare.CFdialog.TypeNode.SetText("AAAA new") - } + if me.status.ValidHostname() { + var aaaa []string + h := me.status.GetHostname() + aaaa = digAAAA(h) + log.Log(NOW, "digAAAA() for", h, "=", aaaa) - if (cloudflare.CFdialog.NameNode != nil) { - cloudflare.CFdialog.NameNode.SetText(me.hostname) - } - - d := deleteAAA() - if (d != "") { - if (cloudflare.CFdialog.ValueNode != nil) { - cloudflare.CFdialog.ValueNode.SetText(d) + // log.Println(SPEW, me) + if (aaaa == nil) { + log.Warn("There are no DNS AAAA records for hostname: ", h) + me.DnsAAAA.Set("(none)") + if (cloudflare.CFdialog.TypeNode != nil) { + cloudflare.CFdialog.TypeNode.SetText("AAAA new") } - } - m := missingAAAA() - if (m != "") { - if (cloudflare.CFdialog.ValueNode != nil) { - cloudflare.CFdialog.ValueNode.SetText(m) + + if (cloudflare.CFdialog.NameNode != nil) { + cloudflare.CFdialog.NameNode.SetText(h) } - /* - rr := &cloudflare.RRT{ - Type: "AAAA", - Name: me.hostname, - Ttl: "Auto", - Proxied: false, - Content: m, + + d := deleteAAA() + if (d != "") { + if (cloudflare.CFdialog.ValueNode != nil) { + cloudflare.CFdialog.ValueNode.SetText(d) + } + } + m := missingAAAA() + if (m != "") { + if (cloudflare.CFdialog.ValueNode != nil) { + cloudflare.CFdialog.ValueNode.SetText(m) + } + /* + rr := &cloudflare.RRT{ + Type: "AAAA", + Name: me.hostname, + Ttl: "Auto", + Proxied: false, + Content: m, + } + cloudflare.Update(rr) + */ } - cloudflare.Update(rr) - */ } } status := displayDNS() // update the GUI based on dig results diff --git a/hostname.go b/hostname.go index 9eb1a65..b21aa9b 100644 --- a/hostname.go +++ b/hostname.go @@ -22,14 +22,7 @@ func getHostname() { log.Error(err, "FQDN hostname error") return } - if (me.fqdn != nil) { - if (me.hostname != s) { - me.fqdn.SetText(s) - me.hostname = s - me.changed = true - } - } - log.Log(NET, "FQDN =", s) + me.status.SetHostname(s) dn := run("domainname") if (me.domainname.S != dn) { @@ -47,17 +40,17 @@ func getHostname() { var test string test = hshort + "." + dn - if (me.hostname != test) { - log.Info("me.hostname", me.hostname, "does not equal", test) - if (me.hostnameStatusOLD.S != "BROKEN") { - log.Log(CHANGE, "me.hostname", me.hostname, "does not equal", test) + if (me.status.GetHostname() != test) { + log.Log(CHANGE, "me.hostname", me.status.GetHostname(), "does not equal", test) + if (me.hostnameStatus.S != "BROKEN") { + log.Log(CHANGE, "me.hostname", me.status.GetHostname(), "does not equal", test) me.changed = true - me.hostnameStatusOLD.SetText("BROKEN") + me.hostnameStatus.SetText("BROKEN") } } else { - if (me.hostnameStatusOLD.S != "VALID") { - log.Log(CHANGE, "me.hostname", me.hostname, "is valid") - me.hostnameStatusOLD.SetText("VALID") + if (me.hostnameStatus.S != "VALID") { + log.Log(CHANGE, "me.hostname", me.status.GetHostname(), "is valid") + me.hostnameStatus.SetText("VALID") me.changed = true } // enable the cloudflare button if the provider is cloudflare @@ -76,7 +69,7 @@ func getHostname() { // check that all the OS settings are correct here // On Linux, /etc/hosts, /etc/hostname // and domainname and hostname -func goodHostname(h string) bool { +func goodHostname() bool { hostname := shell.Chomp(shell.Cat("/etc/hostname")) log.Log(NOW, "hostname =", hostname) @@ -141,20 +134,3 @@ func digAAAA(hostname string) []string { return blah } - -/* -func dnsHttpsLookup(domain string, recordType uint16) ([]string, error) { - domain := "google.com" - dnsLookupDoH(domain string) ([]string, error) { - ipv6Addresses, err := dnsLookupDoH(domain) - if err != nil { - log.Println("Error:", err) - return - } - - log.Printf("IPv6 Addresses for %s:\n", domain) - for _, addr := range ipv6Addresses { - log.Println(addr) - } -} -*/ diff --git a/hostnameStatus.go b/hostnameStatus.go index eb158bf..0e09709 100644 --- a/hostnameStatus.go +++ b/hostnameStatus.go @@ -23,7 +23,8 @@ type hostnameStatus struct { ready bool hidden bool - hostname string // my hostname. Example: "test.wit.com" + // hostname string // my hostname. Example: "test.wit.com" + lastname string // used to watch for changes in the hostname window *gadgets.BasicWindow @@ -60,9 +61,9 @@ func NewHostnameStatusWindow(p *gui.Node) *hostnameStatus { hs.ready = false hs.hidden = true - hs.hostname = me.hostname + // hs.hostname = me.hostname - hs.window = gadgets.NewBasicWindow(p, hs.hostname + " Status") + hs.window = gadgets.NewBasicWindow(p, "fix hostname here" + " Status") hs.window.Draw() hs.window.Hide() @@ -116,6 +117,25 @@ func NewHostnameStatusWindow(p *gui.Node) *hostnameStatus { return hs } +func (hs *hostnameStatus) ValidHostname() bool { + return goodHostname() +} + +func (hs *hostnameStatus) GetHostname() string { + return hs.lastname +} + +func (hs *hostnameStatus) SetHostname(hostname string) { + if hostname == hs.lastname {return} + log.Log(CHANGE, "the hostname is changing from", hs.lastname, "to", hostname) + hs.lastname = hostname + me.changed = true + + if (me.fqdn != nil) { + me.fqdn.SetText(hostname) + } +} + func (hs *hostnameStatus) Domain() string { if ! hs.Ready() {return ""} return hs.domainname.Get() @@ -128,26 +148,26 @@ func (hs *hostnameStatus) API() string { func (hs *hostnameStatus) deleteDNSrecord(value string) bool { log.Info("deleteDNSrecord() START for", value) - log.Info("deleteDNSrecord() hostname =", me.hostname) + log.Info("deleteDNSrecord() hostname =", me.status.GetHostname()) log.Info("deleteDNSrecord() domain =", hs.Domain()) log.Info("deleteDNSrecord() DNS API Provider =", hs.API()) if (hs.API() == "cloudflare") { log.Info("deleteDNSrecord() Try to delete via cloudflare") - return cloudflare.Delete(hs.Domain(), me.hostname, value) + return cloudflare.Delete(hs.Domain(), me.status.GetHostname(), value) } return false } func (hs *hostnameStatus) createDNSrecord(value string) bool { log.Info("createDNSrecord() START for", value) - log.Info("createDNSrecord() hostname =", me.hostname) + log.Info("createDNSrecord() hostname =", me.status.GetHostname()) log.Info("createDNSrecord() domain =", hs.Domain()) log.Info("createDNSrecord() DNS API Provider =", hs.API()) if (hs.API() == "cloudflare") { - log.Warn("createDNSrecord() Try to delete via cloudflare:", me.hostname, value) - return cloudflare.Create(hs.Domain(), me.hostname, value) + log.Warn("createDNSrecord() Try to create via cloudflare:", me.status.GetHostname(), value) + return cloudflare.Create(hs.Domain(), me.status.GetHostname(), value) } return false } @@ -229,10 +249,10 @@ func (hs *hostnameStatus) set(a any, s string) { if reflect.TypeOf(a) == reflect.TypeOf(ol) { ol = a.(*gadgets.OneLiner) if ol == nil { - log.Println("ol = nil", reflect.TypeOf(a), "a =", a) + // log.Println("ol = nil", reflect.TypeOf(a), "a =", a) return } - log.Println("SETTING ol:", ol) + // log.Println("SETTING ol:", ol) ol.Set(s) return } @@ -240,15 +260,26 @@ func (hs *hostnameStatus) set(a any, s string) { os.Exit(0) } +// returns true if AAAA record already exists in DNS +func (hs *hostnameStatus) existsAAAA(s string) bool { + log.Log(NOW, "existsAAAA() try to see if AAAA is already set", s) + return false +} + // figure out if I'm missing any IPv6 address in DNS func (hs *hostnameStatus) missingAAAA() bool { var aaaa []string aaaa = dhcpAAAA() for _, s := range aaaa { log.Log(NET, "my actual AAAA = ",s) - hs.dnsValue.SetText(s) - hs.dnsAction.SetText("CREATE") - return true + if hs.existsAAAA(s) { + log.Log(NOW, "my actual AAAA already exists in DNS =",s) + } else { + log.Log(NOW, "my actual AAAA is missing from DNS",s) + hs.dnsValue.SetText(s) + hs.dnsAction.SetText("CREATE") + return true + } } return false @@ -257,46 +288,48 @@ func (hs *hostnameStatus) missingAAAA() bool { func (hs *hostnameStatus) updateStatus() { var s string var vals []string - log.Info("updateStatus() START") + log.Log(STATUS, "updateStatus() START") if ! hs.Ready() { return } hs.hostShort.Set(me.hostshort.S) hs.domainname.Set(me.domainname.S) - vals = lookupDoH(hs.hostname, "AAAA") + if hs.ValidHostname() { + vals = lookupDoH(hs.GetHostname(), "AAAA") - log.Println("DNS IPv6 Addresses for ", hs.hostname, "=", vals) - if len(vals) == 0 { - s = "(none)" - hs.setIPv6("Check for real IPv6 addresses here") - if hs.missingAAAA() { - hs.setIPv6("Add the missing IPv6 address") + log.Log(STATUS, "DNS IPv6 Addresses for ", hs.GetHostname(), "=", vals) + if len(vals) == 0 { + s = "(none)" + hs.setIPv6("Check for real IPv6 addresses here") + if hs.missingAAAA() { + hs.setIPv6("Add the missing IPv6 address") + } + } else { + for _, addr := range vals { + log.Log(STATUS, addr) + s += addr + " (DELETE)" + hs.setIPv6("NEEDS DELETE") + hs.dnsValue.SetText(addr) + hs.dnsAction.SetText("DELETE") + } } - } else { - for _, addr := range vals { - log.Println(addr) - s += addr + " (DELETE)" - hs.setIPv6("NEEDS DELETE") - hs.dnsValue.SetText(addr) - hs.dnsAction.SetText("DELETE") + hs.set(hs.dnsAAAA, s) + + vals = lookupDoH(hs.GetHostname(), "A") + log.Log(STATUS, "IPv4 Addresses for ", hs.GetHostname(), "=", vals) + s = strings.Join(vals, "\n") + if (s == "") { + s = "(none)" + hs.setIPv4("NEEDS CNAME") } - } - hs.set(hs.dnsAAAA, s) + hs.set(hs.dnsA, s) - vals = lookupDoH(hs.hostname, "A") - log.Println("IPv4 Addresses for ", hs.hostname, "=", vals) - s = strings.Join(vals, "\n") - if (s == "") { - s = "(none)" - hs.setIPv4("NEEDS CNAME") - } - hs.set(hs.dnsA, s) - - vals = lookupDoH(hs.hostname, "CNAME") - s = strings.Join(vals, "\n") - if (s != "") { - hs.set(hs.dnsA, "CNAME " + s) - hs.setIPv4("GOOD") + vals = lookupDoH(hs.GetHostname(), "CNAME") + s = strings.Join(vals, "\n") + if (s != "") { + hs.set(hs.dnsA, "CNAME " + s) + hs.setIPv4("GOOD") + } } hs.currentIPv4.Set(me.IPv4.S) @@ -312,7 +345,7 @@ func (hs *hostnameStatus) updateStatus() { } func (hs *hostnameStatus) Show() { - log.Info("hostnameStatus.Show() window") + log.Log(STATUS, "hostnameStatus.Show() window") if hs.hidden { hs.window.Show() } @@ -320,7 +353,7 @@ func (hs *hostnameStatus) Show() { } func (hs *hostnameStatus) Hide() { - log.Info("hostnameStatus.Hide() window") + log.Log(STATUS, "hostnameStatus.Hide() window") if ! hs.hidden { hs.window.Hide() } diff --git a/nsupdate.go b/nsupdate.go index d86178f..2757b75 100644 --- a/nsupdate.go +++ b/nsupdate.go @@ -22,7 +22,7 @@ func nsupdate() { cmd := "go-nsupdate --tsig-algorithm=hmac-sha512" tsigSecret = os.Getenv("TIG_SECRET") cmd += " --tig-secret=\"" + tsigSecret + "\"" - cmd += " -i wlo1 " + me.hostname + cmd += " -i wlo1 " + me.status.GetHostname() log.Log(NET, "nsupdate() RUN:", cmd) for s, t := range me.ipmap { diff --git a/structs.go b/structs.go index 3d4e153..ec32ca5 100644 --- a/structs.go +++ b/structs.go @@ -13,10 +13,13 @@ import ( var me Host type Host struct { - hostname string // mirrors + status *hostnameStatus // keeps track of the hostname and it's status + + hostnameStatus *gui.Node // a summary for the user of where things are + + // hostname string // mirrors domainname *gui.Node // kernel.org hostshort *gui.Node // hostname -s - hostnameStatusOLD *gui.Node // is the hostname configured correctly in the OS? // fqdn string // mirrors.kernel.org // dnsTTL int `default:"3"` // Recheck DNS is working every TTL (in seconds) @@ -59,7 +62,7 @@ type Host struct { // DNS stuff NSrr *gui.Node // NS resource records for the domain name DnsAPI *gui.Node // what DNS API to use? - DnsAAAA *gui.Node // the actual DNS AAAA results + DnsAAAA *gadgets.OneLiner // the actual DNS AAAA results workingIPv6 *gui.Node // currently working AAAA DnsA *gui.Node // the actual DNS A results (ignore for status since mostly never happens?) DnsStatus *gui.Node // the current state of DNS @@ -81,7 +84,6 @@ type Host struct { statusIPv6 *gadgets.OneLiner digStatusButton *gui.Node - hostnameStatus *hostnameStatus hostnameStatusButton *gui.Node myDebug *gui.Node