From 2fa87f0e00a98fc00258da6e353dcdc1714bf0bd Mon Sep 17 00:00:00 2001 From: Simone Basso Date: Fri, 15 Oct 2021 16:20:07 +0200 Subject: [PATCH] fix(wcth): match legacy TH w/ empty DNS reply (#546) See https://github.com/ooni/probe/issues/1707#issuecomment-944322725 --- internal/cmd/oohelperd/internal/webconnectivity/dns.go | 9 +++++++-- .../cmd/oohelperd/internal/webconnectivity/dns_test.go | 2 +- internal/netxlite/serialresolver.go | 3 +++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/cmd/oohelperd/internal/webconnectivity/dns.go b/internal/cmd/oohelperd/internal/webconnectivity/dns.go index d74af22..1125958 100644 --- a/internal/cmd/oohelperd/internal/webconnectivity/dns.go +++ b/internal/cmd/oohelperd/internal/webconnectivity/dns.go @@ -51,8 +51,13 @@ func dnsMapFailure(failure *string) *string { // already checking for this specific error string. s := webconnectivity.DNSNameError return &s - case netxlite.FailureDNSNoAnswer, - netxlite.FailureDNSNonRecoverableFailure, + case netxlite.FailureDNSNoAnswer: + // In this case the legacy TH would produce an empty + // reply that is not attached to any error. + // + // See https://github.com/ooni/probe/issues/1707#issuecomment-944322725 + return nil + case netxlite.FailureDNSNonRecoverableFailure, netxlite.FailureDNSRefusedError, netxlite.FailureDNSServerMisbehaving, netxlite.FailureDNSTemporaryFailure: diff --git a/internal/cmd/oohelperd/internal/webconnectivity/dns_test.go b/internal/cmd/oohelperd/internal/webconnectivity/dns_test.go index 486dde7..1e51ea7 100644 --- a/internal/cmd/oohelperd/internal/webconnectivity/dns_test.go +++ b/internal/cmd/oohelperd/internal/webconnectivity/dns_test.go @@ -31,7 +31,7 @@ func Test_dnsMapFailure(t *testing.T) { }, { name: "no answer", failure: stringPointerForString(netxlite.FailureDNSNoAnswer), - want: stringPointerForString("dns_server_failure"), + want: nil, }, { name: "non recoverable failure", failure: stringPointerForString(netxlite.FailureDNSNonRecoverableFailure), diff --git a/internal/netxlite/serialresolver.go b/internal/netxlite/serialresolver.go index 90f7723..1466120 100644 --- a/internal/netxlite/serialresolver.go +++ b/internal/netxlite/serialresolver.go @@ -64,6 +64,9 @@ func (r *SerialResolver) LookupHost(ctx context.Context, hostname string) ([]str addrsA, errA := r.lookupHostWithRetry(ctx, hostname, dns.TypeA) addrsAAAA, errAAAA := r.lookupHostWithRetry(ctx, hostname, dns.TypeAAAA) if errA != nil && errAAAA != nil { + // Note: we choose to return the errA because we assume that + // it's the more meaningful one: the errAAAA may just be telling + // us that there is no AAAA record for the website. return nil, errA } addrs = append(addrs, addrsA...)