summaryrefslogtreecommitdiff
path: root/dns.go
blob: 8afbf26053ae2adc2dcd5596e6bb262a439d5c9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Various Linux/Unix'y things

// https://wiki.archlinux.org/title/Dynamic_DNS

package main

import 	(
	"log"
	"net"
	"strings"

	"git.wit.org/wit/shell"
)

/*
	Check a bunch of things. If they don't work right, then things are not correctly configured
	They are things like:
		/etc/hosts
		hostname
		hostname -f
		domainname
*/
func (h *Host) verifyETC() bool {
	return true
}

func (h *Host) updateIPs(host string) {
    ips, err := net.LookupIP(host)
        if err != nil {
                debug(LogError, "updateIPs failed", err)
        }
        for _, ip := range ips {
                log.Println(host, ip)
        }
}

func (h *Host) setIPv4(ipv4s map[string]*IPtype) {
        for ip, t := range ipv4s {
		log.Println("IPv4", ip, t)
        }
}

func (h *Host) checkDNS() {
	var ip4 bool = false
	var ip6 bool = false

	for s, t := range h.ipmap {
		i := t.iface
		ipt := "IPv4"
		if (t.ipv6) {
			ipt = "IPv6"
		}
		if (! t.IsReal()) {
			log.Println(args.VerboseDNS, "\tIP is not Real", ipt, i.Index, i.Name, s)
			continue
		}

		log.Println(args.VerboseDNS, "\tIP is Real    ", ipt, i.Index, i.Name, s)
		if (t.ipv6) {
			ip6 = true
		} else {
			ip4 = true
		}
	}

	if (ip4 == true) {
		log.Println(args.VerboseDNS, "IPv4 should work. Wow. You actually have a real IPv4 address")
	} else {
		log.Println(args.VerboseDNS, "IPv4 is broken. (be nice and setup ipv4-only.wit.com)")
	}
	if (ip6 == true) {
		log.Println(args.VerboseDNS, "IPv6 should be working. Need to test it here.")
	} else {
		log.Println(args.VerboseDNS, "IPv6 is broken. Need to fix it here.")
	}
}

// nsLookup performs an NS lookup on the given domain name.
func lookupNS(domain string) {
	var domains string

	nsRecords, err := net.LookupNS(domain)
	if err != nil {
		return
	}

	var servers []string
	for _, ns := range nsRecords {
		servers = append(servers, ns.Host)
	}

	// checks to see if the NS records change
	for _, server := range servers {
		server = strings.TrimRight(server, ".")
		if (me.nsmap[server] != domain) {
			debug(LogChange, "lookupNS() domain", domain, "has NS", server)
			me.nsmap[server] = domain
			domains += server + "\n"
		}
	}

	var tmp string
	// checks to see if the NS records change
	for s, d := range me.nsmap {
		debug(LogChange, "lookupNS() domain =", d, "server =", s)
		if (domain == d) {
			tmp += s + "\n"
			// figure out the provider (google, cloudflare, etc)
			setProvider(s)
		}
	}
	tmp = shell.Chomp(tmp)

	if (tmp != me.NSrr.S) {
		me.changed = true
		debug(LogChange, "lookupNS() setting me.NSrr =", tmp)
		me.NSrr.SetText(tmp)
	}
}

// getDomain returns the second-to-last part of a domain name.
func setProvider(hostname string) {
	var provider string = ""
	parts := strings.Split(hostname, ".")
	if len(parts) >= 2 {
		provider = parts[len(parts)-2]
	}
	if (me.DnsAPI.S != provider) {
		me.changed = true
		debug(LogChange, "setProvider() changed to =", provider)
		me.DnsAPI.SetText(provider)
	}
}