mirror of
https://github.com/safing/portmaster
synced 2025-09-02 02:29:12 +00:00
Fix verdicts of DNS request connections
This commit is contained in:
parent
6cbe33ae70
commit
1dde1437b6
1 changed files with 10 additions and 2 deletions
|
@ -250,27 +250,35 @@ func handleRequest(ctx context.Context, w dns.ResponseWriter, request *dns.Msg)
|
||||||
rrCache, err = resolver.Resolve(ctx, q)
|
rrCache, err = resolver.Resolve(ctx, q)
|
||||||
// Handle error.
|
// Handle error.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
conn.Failed(fmt.Sprintf("query failed: %s", err), "")
|
|
||||||
switch {
|
switch {
|
||||||
case errors.Is(err, resolver.ErrNotFound):
|
case errors.Is(err, resolver.ErrNotFound):
|
||||||
tracer.Tracef("nameserver: %s", err)
|
tracer.Tracef("nameserver: %s", err)
|
||||||
|
conn.Failed("domain does not exist", "")
|
||||||
return reply(nsutil.NxDomain("nxdomain: " + err.Error()))
|
return reply(nsutil.NxDomain("nxdomain: " + err.Error()))
|
||||||
|
|
||||||
case errors.Is(err, resolver.ErrBlocked):
|
case errors.Is(err, resolver.ErrBlocked):
|
||||||
tracer.Tracef("nameserver: %s", err)
|
tracer.Tracef("nameserver: %s", err)
|
||||||
|
conn.Block(err.Error(), "")
|
||||||
return reply(nsutil.BlockIP("blocked: " + err.Error()))
|
return reply(nsutil.BlockIP("blocked: " + err.Error()))
|
||||||
|
|
||||||
case errors.Is(err, resolver.ErrLocalhost):
|
case errors.Is(err, resolver.ErrLocalhost):
|
||||||
tracer.Tracef("nameserver: returning localhost records")
|
tracer.Tracef("nameserver: returning localhost records")
|
||||||
|
conn.Accept("allowing query for localhost", "")
|
||||||
return reply(nsutil.Localhost())
|
return reply(nsutil.Localhost())
|
||||||
|
|
||||||
case errors.Is(err, resolver.ErrOffline):
|
case errors.Is(err, resolver.ErrOffline):
|
||||||
if rrCache == nil {
|
if rrCache == nil {
|
||||||
log.Tracer(ctx).Debugf("nameserver: not resolving %s, device is offline", q.ID())
|
log.Tracer(ctx).Debugf("nameserver: not resolving %s, device is offline", q.ID())
|
||||||
|
conn.Failed("not resolving, device is offline", "")
|
||||||
return reply(nsutil.ServerFailure(err.Error()))
|
return reply(nsutil.ServerFailure(err.Error()))
|
||||||
}
|
}
|
||||||
// If an rrCache was returned, it's usable a backup.
|
// If an rrCache was returned, it's usable as a backup.
|
||||||
rrCache.IsBackup = true
|
rrCache.IsBackup = true
|
||||||
log.Tracer(ctx).Debugf("nameserver: device is offline, using backup cache for %s", q.ID())
|
log.Tracer(ctx).Debugf("nameserver: device is offline, using backup cache for %s", q.ID())
|
||||||
|
|
||||||
default:
|
default:
|
||||||
tracer.Warningf("nameserver: failed to resolve %s: %s", q.ID(), err)
|
tracer.Warningf("nameserver: failed to resolve %s: %s", q.ID(), err)
|
||||||
|
conn.Failed(fmt.Sprintf("query failed: %s", err), "")
|
||||||
addFailingQuery(q, err)
|
addFailingQuery(q, err)
|
||||||
return reply(nsutil.ServerFailure("internal error: " + err.Error()))
|
return reply(nsutil.ServerFailure("internal error: " + err.Error()))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue