summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-01-06 19:58:58 -0600
committerJeff Carr <[email protected]>2024-01-06 19:58:58 -0600
commitcefe15539fc8f9d96a793c1aeea6e806cfc0944c (patch)
tree9569ccb0ca0598f53335c4866c9608323875518b
parent53fbb4cb85ffe7be05aedfcb40a17bf8d15560ad (diff)
knows which AAAA records are broken!
Signed-off-by: Jeff Carr <[email protected]>
-rw-r--r--args.go66
-rw-r--r--dns.go4
-rw-r--r--fix.go65
-rw-r--r--gui.go6
-rw-r--r--hostnameStatus.go9
-rw-r--r--linuxstatus/hostname.go3
-rw-r--r--main.go2
-rw-r--r--structs.go3
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