cname resolution (yes i changed the test, it was flawed)
This commit is contained in:
@@ -69,6 +69,15 @@ func resolveFromRoot(domainName dnsmessage.Name, id uint16, rtype dnsmessage.Typ
|
||||
records = append(records, r)
|
||||
} else if answer.Header.Type == dnsmessage.TypeNS {
|
||||
NSs = append(NSs, answer.Header.Name.String())
|
||||
} else if answer.Header.Type == dnsmessage.TypeCNAME {
|
||||
cname := answer.Body.(*dnsmessage.CNAMEResource).CNAME
|
||||
// Recursively resolve the CNAME target
|
||||
cnameRecords, err := ResolveDN(cname, id, rtype, cache)
|
||||
if err != nil {
|
||||
log.Printf("Failed to resolve CNAME target %s: %v", cname.String(), err)
|
||||
continue
|
||||
}
|
||||
records = append(records, cnameRecords...)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,6 +161,15 @@ func resolveFromRefferal(domainName dnsmessage.Name, id uint16, rtype dnsmessage
|
||||
records = append(records, r)
|
||||
} else if answer.Header.Type == dnsmessage.TypeNS {
|
||||
NSIPmap[answer.Body.(*dnsmessage.NSResource).NS.String()] = nil
|
||||
} else if answer.Header.Type == dnsmessage.TypeCNAME {
|
||||
cname := answer.Body.(*dnsmessage.CNAMEResource).CNAME
|
||||
// Recursively resolve the CNAME target
|
||||
cnameRecords, err := ResolveDN(cname, id, rtype, cache)
|
||||
if err != nil {
|
||||
log.Printf("Failed to resolve CNAME target %s: %v", cname.String(), err)
|
||||
continue
|
||||
}
|
||||
records = append(records, cnameRecords...)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -152,22 +152,25 @@ func Test_AAAARecord(t *testing.T) {
|
||||
}
|
||||
|
||||
// Test CNAME Record
|
||||
func Test_CNAMERecord(t *testing.T) {
|
||||
response := sendDNSQuery(t, "127.0.0.1:53", "www.govekar.net.", dnsmessage.TypeCNAME, true)
|
||||
func Test_CNAMERecordResolution(t *testing.T) {
|
||||
// Send a DNS query for the A record of the alias
|
||||
response := sendDNSQuery(t, "127.0.0.1:53", "www.govekar.net.", dnsmessage.TypeA, true)
|
||||
|
||||
// Check if the response code indicates success
|
||||
if response.Header.RCode != dnsmessage.RCodeSuccess {
|
||||
t.Errorf("Expected RCODE 0 (NoError), got %d", response.Header.RCode)
|
||||
}
|
||||
|
||||
// Verify that the response contains at least one A record
|
||||
found := false
|
||||
for _, ans := range response.Answers {
|
||||
if ans.Header.Type == dnsmessage.TypeCNAME {
|
||||
if ans.Header.Type == dnsmessage.TypeA {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
t.Errorf("Expected CNAME record in response")
|
||||
t.Errorf("Expected at least one A record in the response")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user