Require URLs for DOH addresses (#684)

* Require URLs for DOH addresses

* Move time.Now directly above http.Client.Do in DoH

* Remove https scheme check from DOH

Although the draft RFC explicitly requires that the scheme be https,
this was deemed undesirable, so remove it.
This commit is contained in:
Tom Thorogood 2018-05-30 00:09:02 +09:30 committed by Miek Gieben
parent 350cd086d1
commit 8ccae88257
2 changed files with 4 additions and 15 deletions

View File

@ -12,7 +12,6 @@ import (
"io/ioutil" "io/ioutil"
"net" "net"
"net/http" "net/http"
"net/url"
"strings" "strings"
"time" "time"
) )
@ -216,17 +215,7 @@ func (c *Client) exchangeDOH(ctx context.Context, m *Msg, a string) (r *Msg, rtt
return nil, 0, err return nil, 0, err
} }
// TODO(tmthrgd): Allow the path to be customised? req, err := http.NewRequest(http.MethodPost, a, bytes.NewReader(p))
u := &url.URL{
Scheme: "https",
Host: a,
Path: "/.well-known/dns-query",
}
if u.Port() == "443" {
u.Host = u.Hostname()
}
req, err := http.NewRequest(http.MethodPost, u.String(), bytes.NewReader(p))
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err
} }
@ -234,8 +223,6 @@ func (c *Client) exchangeDOH(ctx context.Context, m *Msg, a string) (r *Msg, rtt
req.Header.Set("Content-Type", dohMimeType) req.Header.Set("Content-Type", dohMimeType)
req.Header.Set("Accept", dohMimeType) req.Header.Set("Accept", dohMimeType)
t := time.Now()
hc := http.DefaultClient hc := http.DefaultClient
if c.HTTPClient != nil { if c.HTTPClient != nil {
hc = c.HTTPClient hc = c.HTTPClient
@ -245,6 +232,8 @@ func (c *Client) exchangeDOH(ctx context.Context, m *Msg, a string) (r *Msg, rtt
req = req.WithContext(ctx) req = req.WithContext(ctx)
} }
t := time.Now()
resp, err := hc.Do(req) resp, err := hc.Do(req)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err

View File

@ -590,7 +590,7 @@ func TestConcurrentExchanges(t *testing.T) {
} }
func TestDoHExchange(t *testing.T) { func TestDoHExchange(t *testing.T) {
const addrstr = "dns.cloudflare.com:443" const addrstr = "https://dns.cloudflare.com/dns-query"
m := new(Msg) m := new(Msg)
m.SetQuestion("miek.nl.", TypeSOA) m.SetQuestion("miek.nl.", TypeSOA)