mirror of
https://github.com/safing/portmaster
synced 2025-09-04 11:39:29 +00:00
Return cached entries if device is offline
This commit is contained in:
parent
cad957bae0
commit
0e93204caf
3 changed files with 11 additions and 12 deletions
|
@ -73,13 +73,6 @@ func handleRequest(ctx context.Context, w dns.ResponseWriter, request *dns.Msg)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return with server failure if offline.
|
|
||||||
if netenv.GetOnlineStatus() == netenv.StatusOffline &&
|
|
||||||
!netenv.IsConnectivityDomain(q.FQDN) {
|
|
||||||
tracer.Debugf("nameserver: not resolving %s, device is offline", q.FQDN)
|
|
||||||
return reply(nsutil.ServerFailure("resolving disabled, device is offline"))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the Query Class.
|
// Check the Query Class.
|
||||||
if originalQuestion.Qclass != dns.ClassINET {
|
if originalQuestion.Qclass != dns.ClassINET {
|
||||||
// we only serve IN records, return nxdomain
|
// we only serve IN records, return nxdomain
|
||||||
|
@ -186,6 +179,14 @@ func handleRequest(ctx context.Context, w dns.ResponseWriter, request *dns.Msg)
|
||||||
case errors.Is(err, resolver.ErrLocalhost):
|
case errors.Is(err, resolver.ErrLocalhost):
|
||||||
tracer.Tracef("nameserver: returning localhost records")
|
tracer.Tracef("nameserver: returning localhost records")
|
||||||
return reply(nsutil.Localhost())
|
return reply(nsutil.Localhost())
|
||||||
|
case errors.Is(err, resolver.ErrOffline):
|
||||||
|
if rrCache == nil {
|
||||||
|
log.Tracer(ctx).Debugf("nameserver: not resolving %s, device is offline", q.ID())
|
||||||
|
return reply(nsutil.ServerFailure(err.Error()))
|
||||||
|
}
|
||||||
|
// If an rrCache was returned, it's usable a backup.
|
||||||
|
rrCache.IsBackup = true
|
||||||
|
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)
|
||||||
return reply(nsutil.ServerFailure("internal error: " + err.Error()))
|
return reply(nsutil.ServerFailure("internal error: " + err.Error()))
|
||||||
|
|
|
@ -317,9 +317,8 @@ func resolveAndCache(ctx context.Context, q *Query, oldCache *RRCache) (rrCache
|
||||||
// check if we are online
|
// check if we are online
|
||||||
if netenv.GetOnlineStatus() == netenv.StatusOffline {
|
if netenv.GetOnlineStatus() == netenv.StatusOffline {
|
||||||
if !netenv.IsConnectivityDomain(q.FQDN) {
|
if !netenv.IsConnectivityDomain(q.FQDN) {
|
||||||
log.Tracer(ctx).Debugf("resolver: not resolving %s, device is offline", q.FQDN)
|
|
||||||
// we are offline and this is not an online check query
|
// we are offline and this is not an online check query
|
||||||
return nil, ErrOffline
|
return oldCache, ErrOffline
|
||||||
}
|
}
|
||||||
log.Tracer(ctx).Debugf("resolver: permitting online status test domain %s to resolve even though offline", q.FQDN)
|
log.Tracer(ctx).Debugf("resolver: permitting online status test domain %s to resolve even though offline", q.FQDN)
|
||||||
}
|
}
|
||||||
|
@ -356,9 +355,8 @@ resolveLoop:
|
||||||
return nil, err
|
return nil, err
|
||||||
case netenv.GetOnlineStatus() == netenv.StatusOffline &&
|
case netenv.GetOnlineStatus() == netenv.StatusOffline &&
|
||||||
!netenv.IsConnectivityDomain(q.FQDN):
|
!netenv.IsConnectivityDomain(q.FQDN):
|
||||||
log.Tracer(ctx).Debugf("resolver: not resolving %s, device is offline", q.FQDN)
|
|
||||||
// we are offline and this is not an online check query
|
// we are offline and this is not an online check query
|
||||||
return nil, ErrOffline
|
return oldCache, ErrOffline
|
||||||
case errors.Is(err, ErrContinue):
|
case errors.Is(err, ErrContinue):
|
||||||
continue
|
continue
|
||||||
case errors.Is(err, ErrTimeout):
|
case errors.Is(err, ErrTimeout):
|
||||||
|
|
|
@ -324,7 +324,7 @@ func (rrCache *RRCache) GetExtraRRs(ctx context.Context, query *dns.Msg) (extra
|
||||||
extra = addExtra(ctx, extra, "async request to refresh the cache has been started")
|
extra = addExtra(ctx, extra, "async request to refresh the cache has been started")
|
||||||
}
|
}
|
||||||
if rrCache.IsBackup {
|
if rrCache.IsBackup {
|
||||||
extra = addExtra(ctx, extra, "this record is served because a fresh request failed")
|
extra = addExtra(ctx, extra, "this record is served because a fresh request was unsuccessful")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add information about filtered entries.
|
// Add information about filtered entries.
|
||||||
|
|
Loading…
Add table
Reference in a new issue