1/*2Maddy Mail Server - Composable all-in-one email server.3Copyright © 2019-2020 Max Mazurov <fox.cpp@disroot.org>, Maddy Mail Server contributors45This program is free software: you can redistribute it and/or modify6it under the terms of the GNU General Public License as published by7the Free Software Foundation, either version 3 of the License, or8(at your option) any later version.910This program is distributed in the hope that it will be useful,11but WITHOUT ANY WARRANTY; without even the implied warranty of12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the13GNU General Public License for more details.1415You should have received a copy of the GNU General Public License16along with this program. If not, see <https://www.gnu.org/licenses/>.17*/1819package dns2021import (22 "context"23 "net"24 "time"25)2627var overrideServ string2829// 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 are31// initialized to have full effect.32//33// The server argument is in form of "IP:PORT". It is expected that the server34// will be available both using TCP and UDP on the same port.35func override(server string) {36 net.DefaultResolver.PreferGo = true37 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 if40 // we can't connect.41 Timeout: 1 * time.Second,42 }4344 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}