maddy

Fork https://github.com/foxcpp/maddy

git clone git://git.lin.moe/go/maddy.git

 1/*
 2Maddy Mail Server - Composable all-in-one email server.
 3Copyright © 2019-2020 Max Mazurov <fox.cpp@disroot.org>, Maddy Mail Server contributors
 4
 5This program is free software: you can redistribute it and/or modify
 6it under the terms of the GNU General Public License as published by
 7the Free Software Foundation, either version 3 of the License, or
 8(at your option) any later version.
 9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program.  If not, see <https://www.gnu.org/licenses/>.
17*/
18
19package dns
20
21import (
22	"context"
23	"net"
24	"time"
25)
26
27var overrideServ string
28
29// override globally overrides the used DNS server address with one provided.
30// This function is meant only for testing. It should be called before any modules are
31// initialized to have full effect.
32//
33// The server argument is in form of "IP:PORT". It is expected that the server
34// will be available both using TCP and UDP on the same port.
35func override(server string) {
36	net.DefaultResolver.PreferGo = true
37	net.DefaultResolver.Dial = func(ctx context.Context, network, _ string) (net.Conn, error) {
38		dialer := net.Dialer{
39			// This is localhost, it is either running or not. Fail quickly if
40			// we can't connect.
41			Timeout: 1 * time.Second,
42		}
43
44		switch network {
45		case "udp", "udp4", "udp6":
46			return dialer.DialContext(ctx, "udp4", server)
47		case "tcp", "tcp4", "tcp6":
48			return dialer.DialContext(ctx, "tcp4", server)
49		default:
50			panic("OverrideDNS.Dial: unknown network")
51		}
52	}
53}