@@ -23,6 +23,12 @@ func randomHostname() string {
23
23
// GetDNSRecords returns DNS records for a given hostname
24
24
func GetDNSRecords (hostname string ) []models.DNSRecord {
25
25
var records []models.DNSRecord
26
+ resolveDNS (hostname , & records )
27
+ return records
28
+ }
29
+
30
+ // resolveDNS resolves DNS records for a given hostname. It is a recursive function that resolves CNAME and A/AAAA records.
31
+ func resolveDNS (hostname string , records * []models.DNSRecord ) {
26
32
currentHost := hostname
27
33
isWildcard := false
28
34
@@ -47,9 +53,15 @@ func GetDNSRecords(hostname string) []models.DNSRecord {
47
53
isWildcard = false // reset the wildcard flag
48
54
}
49
55
50
- records = append (records , models.DNSRecord {Host : cnameHost , Type : "CNAME" , Data : cname })
56
+ * records = append (* records , models.DNSRecord {Host : cnameHost , Type : "CNAME" , Data : cname })
51
57
// replace currentHost with the CNAME
52
58
currentHost = cname
59
+
60
+ // recursively resolve the CNAME
61
+ resolveDNS (currentHost , records )
62
+ // no need to continue if it is a CNAME
63
+ // so that, final CNAME will resolve the A/AAAA records
64
+ return
53
65
}
54
66
55
67
// A and AAAA lookup
@@ -63,12 +75,10 @@ func GetDNSRecords(hostname string) []models.DNSRecord {
63
75
if err == nil {
64
76
for _ , ip := range ips {
65
77
if ipv4 := ip .To4 (); ipv4 != nil {
66
- records = append (records , models.DNSRecord {Host : currentHost , Type : "A" , Data : ipv4 .String ()})
78
+ * records = append (* records , models.DNSRecord {Host : currentHost , Type : "A" , Data : ipv4 .String ()})
67
79
} else {
68
- records = append (records , models.DNSRecord {Host : currentHost , Type : "AAAA" , Data : ip .String ()})
80
+ * records = append (* records , models.DNSRecord {Host : currentHost , Type : "AAAA" , Data : ip .String ()})
69
81
}
70
82
}
71
83
}
72
-
73
- return records
74
84
}
0 commit comments