Pull request: 3914 fix lack of client name

Merge in DNS/adguard-home from 3914-fix-client-name to master

Closes #3914.

Squashed commit of the following:

commit 6bd06d277ec5e64fc548245eee75edd8da67fa2c
Author: Eugene Burkov <E.Burkov@AdGuard.COM>
Date:   Fri Dec 3 17:13:15 2021 +0300

    dnsforward: fix lack of client name
This commit is contained in:
Eugene Burkov 2021-12-03 17:56:07 +03:00
parent 0122710750
commit 90e65b662c
2 changed files with 12 additions and 19 deletions

View File

@ -2,7 +2,6 @@ package dnsforward
import ( import (
"crypto/tls" "crypto/tls"
"encoding/binary"
"fmt" "fmt"
"path" "path"
"strings" "strings"
@ -172,19 +171,3 @@ func (s *Server) clientIDFromDNSContext(pctx *proxy.DNSContext) (clientID string
return clientID, nil return clientID, nil
} }
// processClientID puts the clientID into the DNS context, if there is one.
func (s *Server) processClientID(dctx *dnsContext) (rc resultCode) {
pctx := dctx.proxyCtx
var key [8]byte
binary.BigEndian.PutUint64(key[:], pctx.RequestID)
clientIDData := s.clientIDCache.Get(key[:])
if clientIDData == nil {
return resultCodeSuccess
}
dctx.clientID = string(clientIDData)
return resultCodeSuccess
}

View File

@ -1,6 +1,7 @@
package dnsforward package dnsforward
import ( import (
"encoding/binary"
"net" "net"
"strings" "strings"
"time" "time"
@ -86,7 +87,6 @@ func (s *Server) handleDNSRequest(_ *proxy.Proxy, d *proxy.DNSContext) error {
s.processInternalHosts, s.processInternalHosts,
s.processRestrictLocal, s.processRestrictLocal,
s.processInternalIPAddrs, s.processInternalIPAddrs,
s.processClientID,
s.processFilteringBeforeRequest, s.processFilteringBeforeRequest,
s.processLocalPTR, s.processLocalPTR,
s.processUpstream, s.processUpstream,
@ -131,7 +131,10 @@ func (s *Server) processRecursion(dctx *dnsContext) (rc resultCode) {
return resultCodeSuccess return resultCodeSuccess
} }
// Perform initial checks; process WHOIS & rDNS // processInitial terminates the following processing for some requests if
// needed and enriches the ctx with some client-specific information.
//
// TODO(e.burkov): Decompose into less general processors.
func (s *Server) processInitial(ctx *dnsContext) (rc resultCode) { func (s *Server) processInitial(ctx *dnsContext) (rc resultCode) {
d := ctx.proxyCtx d := ctx.proxyCtx
if s.conf.AAAADisabled && d.Req.Question[0].Qtype == dns.TypeAAAA { if s.conf.AAAADisabled && d.Req.Question[0].Qtype == dns.TypeAAAA {
@ -151,6 +154,13 @@ func (s *Server) processInitial(ctx *dnsContext) (rc resultCode) {
return resultCodeFinish return resultCodeFinish
} }
// Get the client's ID if any. It should be performed before getting
// client-specific filtering settings.
var key [8]byte
binary.BigEndian.PutUint64(key[:], d.RequestID)
ctx.clientID = string(s.clientIDCache.Get(key[:]))
// Get the client-specific filtering settings.
ctx.protectionEnabled = s.conf.ProtectionEnabled ctx.protectionEnabled = s.conf.ProtectionEnabled
ctx.setts = s.getClientRequestFilteringSettings(ctx) ctx.setts = s.getClientRequestFilteringSettings(ctx)