cname resolution (yes i changed the test, it was flawed)

This commit is contained in:
LovroG05
2025-03-17 19:24:33 +01:00
parent 34cbb2dd55
commit 48be00e686
2 changed files with 25 additions and 4 deletions

View File

@@ -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...)
}
}

View File

@@ -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")
}
}