mirror of
https://github.com/DNSCrypt/dnscrypt-proxy.git
synced 2025-03-04 10:24:40 +01:00
Handle Drop/Synth actions the same way in query and response plugins
This commit is contained in:
parent
a23f07a93d
commit
b1c08f8931
2 changed files with 23 additions and 13 deletions
|
@ -226,6 +226,7 @@ type Plugin interface {
|
|||
func NewPluginsState(proxy *Proxy, clientProto string, clientAddr *net.Addr, start time.Time) PluginsState {
|
||||
return PluginsState{
|
||||
action: PluginsActionForward,
|
||||
returnCode: PluginsReturnCodeForward,
|
||||
maxPayloadSize: MaxDNSUDPPacketSize - ResponseOverhead,
|
||||
clientProto: clientProto,
|
||||
clientAddr: clientAddr,
|
||||
|
|
|
@ -442,23 +442,19 @@ func (proxy *Proxy) processIncomingQuery(serverInfo *ServerInfo, clientProto str
|
|||
if len(query) < MinDNSPacketSize || len(query) > MaxDNSPacketSize {
|
||||
return
|
||||
}
|
||||
if pluginsState.action == PluginsActionDrop {
|
||||
pluginsState.returnCode = PluginsReturnCodeDrop
|
||||
pluginsState.ApplyLoggingPlugins(&proxy.pluginsGlobals)
|
||||
return
|
||||
}
|
||||
var err error
|
||||
if pluginsState.action != PluginsActionForward {
|
||||
if pluginsState.synthResponse != nil {
|
||||
response, err = pluginsState.synthResponse.PackBuffer(response)
|
||||
if err != nil {
|
||||
pluginsState.returnCode = PluginsReturnCodeParseError
|
||||
pluginsState.ApplyLoggingPlugins(&proxy.pluginsGlobals)
|
||||
return
|
||||
}
|
||||
}
|
||||
if pluginsState.action == PluginsActionDrop {
|
||||
pluginsState.returnCode = PluginsReturnCodeDrop
|
||||
if pluginsState.synthResponse != nil {
|
||||
response, err = pluginsState.synthResponse.PackBuffer(response)
|
||||
if err != nil {
|
||||
pluginsState.returnCode = PluginsReturnCodeParseError
|
||||
pluginsState.ApplyLoggingPlugins(&proxy.pluginsGlobals)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
pluginsState.returnCode = PluginsReturnCodeForward
|
||||
}
|
||||
if len(response) == 0 && serverInfo != nil {
|
||||
var ttl *uint32
|
||||
|
@ -533,6 +529,19 @@ func (proxy *Proxy) processIncomingQuery(serverInfo *ServerInfo, clientProto str
|
|||
serverInfo.noticeFailure(proxy)
|
||||
return
|
||||
}
|
||||
if pluginsState.action == PluginsActionDrop {
|
||||
pluginsState.returnCode = PluginsReturnCodeDrop
|
||||
pluginsState.ApplyLoggingPlugins(&proxy.pluginsGlobals)
|
||||
return
|
||||
}
|
||||
if pluginsState.synthResponse != nil {
|
||||
response, err = pluginsState.synthResponse.PackBuffer(response)
|
||||
if err != nil {
|
||||
pluginsState.returnCode = PluginsReturnCodeParseError
|
||||
pluginsState.ApplyLoggingPlugins(&proxy.pluginsGlobals)
|
||||
return
|
||||
}
|
||||
}
|
||||
if rcode := Rcode(response); rcode == dns.RcodeServerFailure { // SERVFAIL
|
||||
dlog.Infof("Server [%v] returned temporary error code [%v] -- Upstream server may be experiencing connectivity issues", serverInfo.Name, rcode)
|
||||
serverInfo.noticeFailure(proxy)
|
||||
|
|
Loading…
Add table
Reference in a new issue