fix(netxlite/dns): more stricly mirror stdlib error strings (#513)
This diff attempts to modify the errors reported by our custom resolver by matching more strings from the stdlib. Part of https://github.com/ooni/probe/issues/1733 and diff has been extracted from https://github.com/ooni/probe-cli/pull/506.
This commit is contained in:
parent
201f602a40
commit
24b230fd38
17 changed files with 177 additions and 52 deletions
|
|
@ -84,12 +84,18 @@ func classifyWithStringSuffix(err error) string {
|
|||
if strings.HasSuffix(s, "TLS handshake timeout") {
|
||||
return FailureGenericTimeoutError
|
||||
}
|
||||
if strings.HasSuffix(s, "no such host") {
|
||||
if strings.HasSuffix(s, DNSNoSuchHostSuffix) {
|
||||
// This is dns_lookup_error in MK but such error is used as a
|
||||
// generic "hey, the lookup failed" error. Instead, this error
|
||||
// that we return here is significantly more specific.
|
||||
return FailureDNSNXDOMAINError
|
||||
}
|
||||
if strings.HasSuffix(s, DNSServerMisbehavingSuffix) {
|
||||
return FailureDNSServerMisbehaving
|
||||
}
|
||||
if strings.HasSuffix(s, DNSNoAnswerSuffix) {
|
||||
return FailureDNSNoAnswer
|
||||
}
|
||||
if strings.HasSuffix(s, "use of closed network connection") {
|
||||
return FailureConnectionAlreadyClosed
|
||||
}
|
||||
|
|
@ -223,6 +229,21 @@ func quicIsCertificateError(alert uint8) bool {
|
|||
// filters for DNS bogons MUST use this error.
|
||||
var ErrDNSBogon = errors.New("dns: detected bogon address")
|
||||
|
||||
// These strings are same as the standard library.
|
||||
const (
|
||||
DNSNoSuchHostSuffix = "no such host"
|
||||
DNSServerMisbehavingSuffix = "server misbehaving"
|
||||
DNSNoAnswerSuffix = "no answer from DNS server"
|
||||
)
|
||||
|
||||
// These errors are returned by the decoder and/or the serial resolver.
|
||||
var (
|
||||
ErrOODNSNoSuchHost = fmt.Errorf("ooniresolver: %s", DNSNoSuchHostSuffix)
|
||||
ErrOODNSRefused = errors.New("ooniresolver: refused")
|
||||
ErrOODNSMisbehaving = fmt.Errorf("ooniresolver: %s", DNSServerMisbehavingSuffix)
|
||||
ErrOODNSNoAnswer = fmt.Errorf("ooniresolver: %s", DNSNoAnswerSuffix)
|
||||
)
|
||||
|
||||
// ClassifyResolverError maps an error occurred during a domain name
|
||||
// resolution to the corresponding OONI failure string.
|
||||
//
|
||||
|
|
@ -239,6 +260,11 @@ func ClassifyResolverError(err error) string {
|
|||
if errors.Is(err, ErrDNSBogon) {
|
||||
return FailureDNSBogonError // not in MK
|
||||
}
|
||||
// Implementation note: we match errors that share the same
|
||||
// string of the stdlib in the generic classifier.
|
||||
if errors.Is(err, ErrOODNSRefused) {
|
||||
return FailureDNSRefusedError // not in MK
|
||||
}
|
||||
return ClassifyGenericError(err)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue