fix: propagate UseRR errors consistently across all service analyzers
Several service analyzers were silently discarding errors returned by a.UseRR(), unlike txt.go and others that properly checked them. This could mask issues like double-claimed records during zone analysis.
This commit is contained in:
parent
e95ecd6671
commit
1523b549d2
16 changed files with 86 additions and 40 deletions
|
|
@ -51,9 +51,11 @@ func acmechallenge_analyze(a *svc.Analyzer) error {
|
|||
for _, record := range a.SearchRR(svc.AnalyzerRecordFilter{Type: dns.TypeTXT, Prefix: "_acme-challenge"}) {
|
||||
domain := strings.TrimPrefix(record.Header().Name, "_acme-challenge.")
|
||||
if record.Header().Rrtype == dns.TypeTXT {
|
||||
a.UseRR(record, domain, &ACMEChallenge{
|
||||
if err := a.UseRR(record, domain, &ACMEChallenge{
|
||||
Record: helpers.RRRelativeSubdomain(record, a.GetOrigin(), domain).(*happydns.TXT),
|
||||
})
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -76,11 +76,13 @@ func delegation_analyze(a *svc.Analyzer) error {
|
|||
|
||||
delegations[dn].NameServers = append(delegations[dn].NameServers, helpers.RRRelativeSubdomain(ns, a.GetOrigin(), dn).(*dns.NS))
|
||||
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
record,
|
||||
dn,
|
||||
delegations[dn],
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -89,11 +91,13 @@ func delegation_analyze(a *svc.Analyzer) error {
|
|||
if _, ok := record.(*dns.DS); ok {
|
||||
delegations[subdomain].DS = append(delegations[subdomain].DS, helpers.RRRelativeSubdomain(record, a.GetOrigin(), subdomain).(*dns.DS))
|
||||
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
record,
|
||||
subdomain,
|
||||
delegations[subdomain],
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,9 +58,11 @@ func githubverification_analyze(a *svc.Analyzer) error {
|
|||
domain := strings.Join(dnparts[1:], ".")
|
||||
|
||||
if record.Header().Rrtype == dns.TypeTXT {
|
||||
a.UseRR(record, domain, &GithubOrgVerif{
|
||||
if err := a.UseRR(record, domain, &GithubOrgVerif{
|
||||
Record: helpers.RRRelativeSubdomain(record, a.GetOrigin(), domain).(*happydns.TXT),
|
||||
})
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,9 +51,11 @@ func gitlabverification_analyze(a *svc.Analyzer) error {
|
|||
for _, record := range a.SearchRR(svc.AnalyzerRecordFilter{Type: dns.TypeTXT, Prefix: "_gitlab-pages-verification-code"}) {
|
||||
domain := strings.TrimPrefix(record.Header().Name, "_gitlab-pages-verification-code.")
|
||||
if txt, ok := record.(*dns.TXT); ok && strings.HasPrefix(strings.Join(txt.Txt, ""), "gitlab-pages-verification-code=") {
|
||||
a.UseRR(record, domain, &GitlabPageVerif{
|
||||
if err := a.UseRR(record, domain, &GitlabPageVerif{
|
||||
Record: helpers.RRRelativeSubdomain(record, a.GetOrigin(), domain).(*happydns.TXT),
|
||||
})
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -51,9 +51,11 @@ func googleverification_analyze(a *svc.Analyzer) error {
|
|||
for _, record := range a.SearchRR(svc.AnalyzerRecordFilter{Type: dns.TypeTXT}) {
|
||||
domain := record.Header().Name
|
||||
if txt, ok := record.(*happydns.TXT); ok && strings.HasPrefix(txt.Txt, "google-site-verification=") {
|
||||
a.UseRR(record, domain, &GoogleVerif{
|
||||
if err := a.UseRR(record, domain, &GoogleVerif{
|
||||
Record: helpers.RRRelativeSubdomain(record, a.GetOrigin(), domain).(*happydns.TXT),
|
||||
})
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -51,9 +51,11 @@ func keybaseverification_analyze(a *svc.Analyzer) error {
|
|||
for _, record := range a.SearchRR(svc.AnalyzerRecordFilter{Type: dns.TypeTXT, Prefix: "_keybase"}) {
|
||||
domain := strings.TrimPrefix(record.Header().Name, "_keybase.")
|
||||
if record.Header().Rrtype == dns.TypeTXT {
|
||||
a.UseRR(record, domain, &KeybaseVerif{
|
||||
if err := a.UseRR(record, domain, &KeybaseVerif{
|
||||
Record: helpers.RRRelativeSubdomain(record, a.GetOrigin(), domain).(*happydns.TXT),
|
||||
})
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -100,11 +100,13 @@ func matrix_analyze(a *svc.Analyzer) error {
|
|||
if srv, ok := record.(*dns.SRV); ok {
|
||||
matrixDomains[domain].Records = append(matrixDomains[domain].Records, helpers.RRRelativeSubdomain(srv, a.GetOrigin(), domain).(*dns.SRV))
|
||||
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
srv,
|
||||
domain,
|
||||
matrixDomains[domain],
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -103,20 +103,24 @@ func origin_analyze(a *svc.Analyzer) error {
|
|||
SOA: helpers.RRRelativeSubdomain(soa, a.GetOrigin(), domain).(*dns.SOA),
|
||||
}
|
||||
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
record,
|
||||
domain,
|
||||
origin,
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, record := range a.SearchRR(svc.AnalyzerRecordFilter{Type: dns.TypeNS, Domain: domain}) {
|
||||
if ns, ok := record.(*dns.NS); ok {
|
||||
origin.NameServers = append(origin.NameServers, helpers.RRRelativeSubdomain(ns, a.GetOrigin(), domain).(*dns.NS))
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
record,
|
||||
domain,
|
||||
origin,
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -129,11 +133,13 @@ func origin_analyze(a *svc.Analyzer) error {
|
|||
if ns, ok := record.(*dns.NS); ok {
|
||||
domain := record.Header().Name
|
||||
origin.NameServers = append(origin.NameServers, helpers.RRRelativeSubdomain(ns, a.GetOrigin(), domain).(*dns.NS))
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
record,
|
||||
domain,
|
||||
origin,
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -165,11 +165,13 @@ func rfc6186_analyze(a *svc.Analyzer) error {
|
|||
|
||||
emailDomains[domain].Records = append(emailDomains[domain].Records, helpers.RRRelativeSubdomain(srv, a.GetOrigin(), domain).(*dns.SRV))
|
||||
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
record,
|
||||
domain,
|
||||
emailDomains[domain],
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,9 +51,11 @@ func scalewaychallenge_analyze(a *svc.Analyzer) error {
|
|||
for _, record := range a.SearchRR(svc.AnalyzerRecordFilter{Type: dns.TypeTXT, Prefix: "_scaleway-challenge"}) {
|
||||
domain := strings.TrimPrefix(record.Header().Name, "_scaleway-challenge.")
|
||||
if record.Header().Rrtype == dns.TypeTXT {
|
||||
a.UseRR(record, domain, &ScalewayChallenge{
|
||||
if err := a.UseRR(record, domain, &ScalewayChallenge{
|
||||
Record: helpers.RRRelativeSubdomain(record, a.GetOrigin(), domain).(*happydns.TXT),
|
||||
})
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -131,7 +131,9 @@ next_pool:
|
|||
s.SSHFP[i] = helpers.RRRelativeSubdomain(s.SSHFP[i], a.GetOrigin(), dn).(*dns.SSHFP)
|
||||
}
|
||||
|
||||
a.UseRR(rr, dn, s)
|
||||
if err := a.UseRR(rr, dn, s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -98,11 +98,13 @@ func xmpp_subanalyze(a *svc.Analyzer, prefix string, xmppDomains map[string]*XMP
|
|||
if srv, ok := record.(*dns.SRV); ok {
|
||||
xmppDomains[domain].Records = append(xmppDomains[domain].Records, helpers.RRRelativeSubdomain(srv, a.GetOrigin(), domain).(*dns.SRV))
|
||||
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
record,
|
||||
domain,
|
||||
xmppDomains[domain],
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -112,9 +114,15 @@ func xmpp_subanalyze(a *svc.Analyzer, prefix string, xmppDomains map[string]*XMP
|
|||
func xmpp_analyze(a *svc.Analyzer) error {
|
||||
xmppDomains := map[string]*XMPP{}
|
||||
|
||||
xmpp_subanalyze(a, "_jabber._tcp.", xmppDomains)
|
||||
xmpp_subanalyze(a, "_xmpp-client._tcp.", xmppDomains)
|
||||
xmpp_subanalyze(a, "_xmpp-server._tcp.", xmppDomains)
|
||||
if err := xmpp_subanalyze(a, "_jabber._tcp.", xmppDomains); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := xmpp_subanalyze(a, "_xmpp-client._tcp.", xmppDomains); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := xmpp_subanalyze(a, "_xmpp-server._tcp.", xmppDomains); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,9 +66,11 @@ func specialalias_analyze(a *svc.Analyzer) error {
|
|||
for _, record := range a.SearchRR(svc.AnalyzerRecordFilter{Type: dns.TypeCNAME, Prefix: "_"}) {
|
||||
subdomains := SRV_DOMAIN.FindStringSubmatch(record.Header().Name)
|
||||
if cname, ok := record.(*dns.CNAME); ok && len(subdomains) == 4 {
|
||||
a.UseRR(record, subdomains[3], &SpecialCNAME{
|
||||
if err := a.UseRR(record, subdomains[3], &SpecialCNAME{
|
||||
Record: helpers.RRRelativeSubdomain(cname, a.GetOrigin(), subdomains[3]).(*dns.CNAME),
|
||||
})
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
@ -78,9 +80,11 @@ func alias_analyze(a *svc.Analyzer) error {
|
|||
for _, record := range a.SearchRR(svc.AnalyzerRecordFilter{Type: dns.TypeCNAME}) {
|
||||
if cname, ok := record.(*dns.CNAME); ok {
|
||||
domain := record.Header().Name
|
||||
a.UseRR(record, domain, &CNAME{
|
||||
if err := a.UseRR(record, domain, &CNAME{
|
||||
Record: helpers.RRRelativeSubdomain(cname, a.GetOrigin(), domain).(*dns.CNAME),
|
||||
})
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -53,7 +53,9 @@ func pointer_analyze(a *svc.Analyzer) error {
|
|||
Record: helpers.RRRelativeSubdomain(ptr, a.GetOrigin(), domain).(*dns.PTR),
|
||||
}
|
||||
|
||||
a.UseRR(record, domain, newrr)
|
||||
if err := a.UseRR(record, domain, newrr); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -83,11 +83,13 @@ func srv_analyze(a *svc.Analyzer) error {
|
|||
|
||||
srvDomains[domain][svc].Records = append(srvDomains[domain][svc].Records, helpers.RRRelativeSubdomain(record, a.GetOrigin(), domain).(*dns.SRV))
|
||||
|
||||
a.UseRR(
|
||||
if err := a.UseRR(
|
||||
record,
|
||||
subdomains[3],
|
||||
srvDomains[domain][svc],
|
||||
)
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,7 +82,9 @@ func sshfp_analyze(a *svc.Analyzer) error {
|
|||
FingerPrint: sshfp.FingerPrint,
|
||||
})
|
||||
|
||||
a.UseRR(rr, dn, s)
|
||||
if err := a.UseRR(rr, dn, s); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue