From cefe15539fc8f9d96a793c1aeea6e806cfc0944c Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 6 Jan 2024 19:58:58 -0600 Subject: [PATCH] knows which AAAA records are broken! Signed-off-by: Jeff Carr --- args.go | 66 +++++++++++------------------------------ dns.go | 4 +-- fix.go | 65 +++++++++++++++++++++++++++++++++++----- gui.go | 6 ++-- hostnameStatus.go | 9 +++--- linuxstatus/hostname.go | 3 +- main.go | 2 +- structs.go | 3 +- 8 files changed, 90 insertions(+), 68 deletions(-) diff --git a/args.go b/args.go index 7d441ae..6ee6960 100644 --- a/args.go +++ b/args.go @@ -22,62 +22,32 @@ var NOW log.LogFlag var INFO log.LogFlag var NET log.LogFlag var DNS log.LogFlag -var PROC log.LogFlag +var WARN log.LogFlag var SPEW log.LogFlag var CHANGE log.LogFlag var STATUS log.LogFlag +func myreg(f *log.LogFlag, b bool, name string, desc string) { + f.B = b + f.Subsystem = "go.wit.com/control-panels/dns" + f.Short = "cpdns" + f.Desc = desc + f.Name = name + f.Register() +} + func init() { arg.MustParse(&args) // fmt.Println(args.Foo, args.Bar, args.User) - NOW.B = false - NOW.Name = "NOW" - NOW.Subsystem = "cpdns" - NOW.Desc = "temp debugging stuff" - NOW.Register() - - INFO.B = false - INFO.Name = "INFO" - INFO.Subsystem = "cpdns" - INFO.Desc = "normal debugging stuff" - INFO.Register() - - NET.B = false - NET.Name = "NET" - NET.Subsystem = "cpdns" - 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" - PROC.Desc = "/proc logging" - PROC.Register() - - SPEW.B = false - SPEW.Name = "SPEW" - SPEW.Subsystem = "cpdns" - SPEW.Desc = "spew logging" - SPEW.Register() - - CHANGE.B = true - CHANGE.Name = "CHANGE" - CHANGE.Subsystem = "cpdns" - CHANGE.Desc = "show droplet state changes" - CHANGE.Register() - - STATUS.B = false - STATUS.Name = "STATUS" - STATUS.Subsystem = "cpdns" - STATUS.Desc = "updateStatus()" - STATUS.Register() + myreg(&NOW, true, "NOW", "temp debugging stuff") + myreg(&INFO, false, "INFO", "normal debugging stuff") + myreg(&NET, false, "NET", "Network logging") + myreg(&DNS, false, "DNS", "dnsStatus.update()") + myreg(&WARN, true, "WARN", "bad things") + myreg(&SPEW, false, "SPEW", "spew stuff") + myreg(&CHANGE, true, "CHANGE", "when host or dns change") + myreg(&STATUS, false, "STATUS", "updateStatus()") if debugger.ArgDebug() { log.Log(true, "INIT() gui debug == true") diff --git a/dns.go b/dns.go index 2f2f3ae..fd60b72 100644 --- a/dns.go +++ b/dns.go @@ -113,10 +113,10 @@ func lookupNS(domain string) { } tmp = shell.Chomp(tmp) - if (tmp != me.status.NSrr.Get()) { + if (tmp != me.statusDNS.NSrr.Get()) { me.changed = true log.Log(CHANGE, "lookupNS() setting changed to me.NSrr =", tmp) - me.status.NSrr.Set(tmp) + me.statusDNS.NSrr.Set(tmp) } } diff --git a/fix.go b/fix.go index 40179c5..8b9af1a 100644 --- a/fix.go +++ b/fix.go @@ -7,7 +7,7 @@ import ( func fix() bool { log.Warn("") - if ! me.status.Ready() { + if ! me.statusDNS.Ready() { log.Warn("The IPv6 Control Panel is not Ready() yet") return false } @@ -30,10 +30,10 @@ func fix() bool { log.Warn("You must first figure out why you can't look up IPv6 addresses") return false } - if ! me.status.IPv4() { + if ! me.statusDNS.IPv4() { log.Warn("You do not have real IPv4 addresses. Nothing to fix here") } - if ! me.status.IPv6() { + if ! me.statusDNS.IPv6() { log.Warn("IPv6 DNS is broken. Check what is broken here") fixIPv6dns() return false @@ -44,12 +44,63 @@ func fix() bool { func fixIPv6dns() { log.Warn("What are my IPv6 addresses?") - for _, aaaa := range me.statusOS.GetIPv6os() { - log.Warn("FOUND AAAA ip", aaaa) + osAAAA := make(map[string]string) + dnsAAAA := make(map[string]string) + + for _, aaaa := range me.statusOS.GetIPv6() { + log.Warn("FOUND OS AAAA ip", aaaa) + osAAAA[aaaa] = "os" } log.Warn("What are the AAAA resource records in DNS?") - for _, aaaa := range me.status.GetIPv6dns() { - log.Warn("FOUND AAAA ip", aaaa) + for _, aaaa := range me.statusDNS.GetIPv6() { + log.Warn("FOUND DNS AAAA ip", aaaa) + dnsAAAA[aaaa] = "dns" + } + + // remove old DNS entries first + for aaaa, _ := range dnsAAAA { + if osAAAA[aaaa] == "dns" { + log.Warn("DNS AAAA is not in OS", aaaa) + if deleteFromDNS(aaaa) { + log.Warn("Delete AAAA", aaaa, "Worked") + } else { + log.Warn("Delete AAAA", aaaa, "Failed") + } + } else { + log.Warn("DNS AAAA is in OS", aaaa) + } + } + + // now add new DNS entries + for aaaa, _ := range osAAAA { + if dnsAAAA[aaaa] == "dns" { + log.Warn("OS AAAA is in DNS", aaaa) + } else { + log.Warn("OS AAAA is not in DNS", aaaa) + if addToDNS(aaaa) { + log.Warn("Add AAAA", aaaa, "Worked") + } else { + log.Warn("Add AAAA", aaaa, "Failed") + } + } } } + +func deleteFromDNS(aaaa string) bool { + log.Warn("deleteFromDNS", aaaa) + return false +} + +func addToDNS(aaaa string) bool { + log.Warn("TODO: Add this to DNS !!!!", aaaa) + log.Warn("what is your API provider?") + return false +} + +func exists(m map[string]bool, s string) bool { + if _, ok := m[s]; ok { + return true + } + return false +} diff --git a/gui.go b/gui.go index 9413deb..b01df07 100644 --- a/gui.go +++ b/gui.go @@ -162,8 +162,8 @@ func mainWindow(title string) { gr = me.window.Box().NewGroup("debugging") gr.NewButton("hostname status", func () { - if ! me.status.Ready() {return} - me.status.window.Toggle() + if ! me.statusDNS.Ready() {return} + me.statusDNS.window.Toggle() }) gr.NewButton("linuxstatus.New()", func () { @@ -245,7 +245,7 @@ func statusGrid(n *gui.Node) { // run everything because something has changed func updateDNS() { me.digStatus.Update() - me.status.Update() + me.statusDNS.Update() // log.Println("digAAAA()") diff --git a/hostnameStatus.go b/hostnameStatus.go index 4701b33..d7568aa 100644 --- a/hostnameStatus.go +++ b/hostnameStatus.go @@ -40,6 +40,7 @@ type hostnameStatus struct { // what the current IP address your network has given you currentIPv4 *gadgets.OneLiner currentIPv6 *gadgets.OneLiner + currentAAAA string // what the DNS servers have NSrr *gadgets.OneLiner @@ -279,9 +280,9 @@ func (hs *hostnameStatus) missingAAAA() bool { } */ -func (hs *hostnameStatus) GetIPv6dns() []string { - tmp := hs.dnsAAAA.Get() - return strings.Split(tmp, "\n") +func (hs *hostnameStatus) GetIPv6() []string { + if ! hs.Ready() { return nil} + return strings.Split(hs.currentAAAA, "\n") } func (hs *hostnameStatus) updateStatus() { @@ -314,7 +315,7 @@ func (hs *hostnameStatus) updateStatus() { // hs.dnsAction.SetText("DELETE") } } - hs.set(hs.dnsAAAA, s) + hs.currentAAAA = strings.Join(vals, "\n") vals = lookupDoH(me.statusOS.GetHostname(), "A") log.Log(STATUS, "IPv4 Addresses for ", me.statusOS.GetHostname(), "=", vals) diff --git a/linuxstatus/hostname.go b/linuxstatus/hostname.go index 63ab817..d31299f 100644 --- a/linuxstatus/hostname.go +++ b/linuxstatus/hostname.go @@ -65,7 +65,8 @@ func (ls *LinuxStatus) setHostShort() { } } -func (ls *LinuxStatus) GetIPv6os() []string { +func (ls *LinuxStatus) GetIPv6() []string { + if ! me.Ready() {return nil} tmp := me.workingIPv6.Get() return strings.Split(tmp, "\n") } diff --git a/main.go b/main.go index d209f14..a421c71 100644 --- a/main.go +++ b/main.go @@ -46,7 +46,7 @@ func main() { setupControlPanelWindow() me.digStatus = NewDigStatusWindow(me.myGui) - me.status = NewHostnameStatusWindow(me.myGui) + me.statusDNS = NewHostnameStatusWindow(me.myGui) linuxstatus.New() diff --git a/structs.go b/structs.go index 30103d3..035ddf9 100644 --- a/structs.go +++ b/structs.go @@ -20,7 +20,7 @@ type Host struct { window *gadgets.BasicWindow // the main window debug *gadgets.BasicWindow // the debug window - status *hostnameStatus // keeps track of the hostname and it's status + statusDNS *hostnameStatus // keeps track of the hostname and it's status statusOS *linuxstatus.LinuxStatus // what the Linux OS sees digStatus *digStatus // window of the results of DNS lookups @@ -46,7 +46,6 @@ type Host struct { ipv4s map[string]dns.RR ipv6s map[string]dns.RR - // DNS stuff DnsAPI *gui.Node // what DNS API to use? DnsAAAA *gadgets.OneLiner // the actual DNS AAAA results