From aebbc4883dcf26060c6b338cef3187dd14161ccb Mon Sep 17 00:00:00 2001 From: Andrey Meshkov Date: Mon, 27 May 2019 17:52:48 +0300 Subject: [PATCH] Add server instance to the context in ServerTLS and ServerHTTPS (#2840) * Add server instance to the context in ServerTLS and ServerHTTPS The problem with the current code is that there's no way to get the server instance inside a plugin. Because of that "metrics" plugin sets empty "server" label for requests served over TLS or HTTPS. * use s.Server instead of s * Added server to the context of grpc requests --- core/dnsserver/server_grpc.go | 3 ++- core/dnsserver/server_https.go | 3 ++- core/dnsserver/server_tls.go | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/core/dnsserver/server_grpc.go b/core/dnsserver/server_grpc.go index e26eaebfb..599f5c197 100644 --- a/core/dnsserver/server_grpc.go +++ b/core/dnsserver/server_grpc.go @@ -129,7 +129,8 @@ func (s *ServergRPC) Query(ctx context.Context, in *pb.DnsPacket) (*pb.DnsPacket w := &gRPCresponse{localAddr: s.listenAddr, remoteAddr: a, Msg: msg} - s.ServeDNS(ctx, w, msg) + dnsCtx := context.WithValue(ctx, Key{}, s.Server) + s.ServeDNS(dnsCtx, w, msg) packed, err := w.Msg.Pack() if err != nil { diff --git a/core/dnsserver/server_https.go b/core/dnsserver/server_https.go index 6ae6ce6a6..93d62fa84 100644 --- a/core/dnsserver/server_https.go +++ b/core/dnsserver/server_https.go @@ -117,7 +117,8 @@ func (s *ServerHTTPS) ServeHTTP(w http.ResponseWriter, r *http.Request) { // We just call the normal chain handler - all error handling is done there. // We should expect a packet to be returned that we can send to the client. - s.ServeDNS(context.Background(), dw, msg) + ctx := context.WithValue(context.Background(), Key{}, s.Server) + s.ServeDNS(ctx, dw, msg) // See section 4.2.1 of RFC 8484. // We are using code 500 to indicate an unexpected situation when the chain diff --git a/core/dnsserver/server_tls.go b/core/dnsserver/server_tls.go index a63ac848a..95c2d6912 100644 --- a/core/dnsserver/server_tls.go +++ b/core/dnsserver/server_tls.go @@ -44,7 +44,7 @@ func (s *ServerTLS) Serve(l net.Listener) error { // Only fill out the TCP server for this one. s.server[tcp] = &dns.Server{Listener: l, Net: "tcp-tls", Handler: dns.HandlerFunc(func(w dns.ResponseWriter, r *dns.Msg) { - ctx := context.Background() + ctx := context.WithValue(context.Background(), Key{}, s.Server) s.ServeDNS(ctx, w, r) })} s.m.Unlock()