diff --git a/experimental/demoprobe/main.go b/experimental/demoprobe/main.go index c53b4686e..a3d557ef8 100644 --- a/experimental/demoprobe/main.go +++ b/experimental/demoprobe/main.go @@ -23,7 +23,7 @@ func main() { ) flag.Parse() - _, publisher, err := xfer.NewHTTPPublisher(*publish, "demoprobe", "demoprobe", false) + _, publisher, err := xfer.NewHTTPPublisher(*publish, *publish, "demoprobe", "demoprobe", false) if err != nil { log.Fatal(err) } diff --git a/experimental/fixprobe/main.go b/experimental/fixprobe/main.go index 105572996..b253f79bc 100644 --- a/experimental/fixprobe/main.go +++ b/experimental/fixprobe/main.go @@ -34,7 +34,7 @@ func main() { } f.Close() - _, publisher, err := xfer.NewHTTPPublisher(*publish, "fixprobe", "fixprobe", false) + _, publisher, err := xfer.NewHTTPPublisher(*publish, *publish, "fixprobe", "fixprobe", false) if err != nil { log.Fatal(err) } diff --git a/probe/main.go b/probe/main.go index fbf027e3c..03e728628 100644 --- a/probe/main.go +++ b/probe/main.go @@ -90,8 +90,8 @@ func main() { } log.Printf("publishing to: %s", strings.Join(targets, ", ")) - factory := func(endpoint string) (string, xfer.Publisher, error) { - id, publisher, err := xfer.NewHTTPPublisher(endpoint, *token, probeID, *insecure) + factory := func(endpoint, hostname string) (string, xfer.Publisher, error) { + id, publisher, err := xfer.NewHTTPPublisher(endpoint, hostname, *token, probeID, *insecure) if err != nil { return "", nil, err } diff --git a/xfer/http_publisher.go b/xfer/http_publisher.go index f50895d74..dbe9a1ad6 100644 --- a/xfer/http_publisher.go +++ b/xfer/http_publisher.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io" + "net" "net/http" "time" @@ -21,27 +22,33 @@ type HTTPPublisher struct { client *http.Client } -func getHTTPTransport(insecure bool) (*http.Transport, error) { +func getHTTPTransport(hostname string, insecure bool) (*http.Transport, error) { if insecure { return &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }, nil } + host, _, err := net.SplitHostPort(hostname) + if err != nil { + return nil, err + } + certPool, err := gocertifi.CACerts() if err != nil { return nil, err } return &http.Transport{ TLSClientConfig: &tls.Config{ - RootCAs: certPool, + RootCAs: certPool, + ServerName: host, }, }, nil } // NewHTTPPublisher returns an HTTPPublisher ready for use. -func NewHTTPPublisher(target, token, probeID string, insecure bool) (string, *HTTPPublisher, error) { - httpTransport, err := getHTTPTransport(insecure) +func NewHTTPPublisher(target, hostname, token, probeID string, insecure bool) (string, *HTTPPublisher, error) { + httpTransport, err := getHTTPTransport(hostname, insecure) if err != nil { return "", nil, err } diff --git a/xfer/http_publisher_test.go b/xfer/http_publisher_test.go index 007642521..9421a3398 100644 --- a/xfer/http_publisher_test.go +++ b/xfer/http_publisher_test.go @@ -6,6 +6,7 @@ import ( "encoding/json" "net/http" "net/http/httptest" + "net/url" "reflect" "strings" "testing" @@ -67,7 +68,11 @@ func TestHTTPPublisher(t *testing.T) { s := httptest.NewServer(handlers.CompressHandler(handler)) defer s.Close() - _, p, err := xfer.NewHTTPPublisher(s.URL, token, id, false) + u, err := url.Parse(s.URL) + if err != nil { + t.Fatal(err) + } + _, p, err := xfer.NewHTTPPublisher(s.URL, u.Host, token, id, false) if err != nil { t.Fatal(err) } diff --git a/xfer/multi_publisher.go b/xfer/multi_publisher.go index 899551861..a1349d834 100644 --- a/xfer/multi_publisher.go +++ b/xfer/multi_publisher.go @@ -14,13 +14,13 @@ import ( // targets. See documentation of each method to understand the semantics. type MultiPublisher struct { mtx sync.Mutex - factory func(endpoint string) (string, Publisher, error) + factory func(endpoint, hostname string) (string, Publisher, error) sema semaphore list []tuple } // NewMultiPublisher returns a new MultiPublisher ready for use. -func NewMultiPublisher(factory func(endpoint string) (string, Publisher, error)) *MultiPublisher { +func NewMultiPublisher(factory func(endpoint, hostname string) (string, Publisher, error)) *MultiPublisher { return &MultiPublisher{ factory: factory, sema: newSemaphore(maxConcurrentGET), @@ -49,7 +49,7 @@ func (p *MultiPublisher) Set(target string, endpoints []string) { go func(endpoint string) { p.sema.p() defer p.sema.v() - id, publisher, err := p.factory(endpoint) + id, publisher, err := p.factory(endpoint, target) c <- tuple{publisher, target, endpoint, id, err} }(endpoint) } diff --git a/xfer/multi_publisher_test.go b/xfer/multi_publisher_test.go index 943f4dca9..1b532a821 100644 --- a/xfer/multi_publisher_test.go +++ b/xfer/multi_publisher_test.go @@ -19,7 +19,7 @@ func TestMultiPublisher(t *testing.T) { sum := func() int { return a1.count + a2.count + b2.count + b3.count } - mp := xfer.NewMultiPublisher(func(endpoint string) (string, xfer.Publisher, error) { + mp := xfer.NewMultiPublisher(func(endpoint, hostname string) (string, xfer.Publisher, error) { switch endpoint { case "a1": return "1", a1, nil