From 605926d24f277fe7e67977ba4613d660b1d29804 Mon Sep 17 00:00:00 2001 From: Fred Cox Date: Wed, 17 Oct 2018 21:46:44 +0300 Subject: [PATCH] Fix segfault in x509_cert (#4874) --- plugins/inputs/x509_cert/README.md | 2 +- plugins/inputs/x509_cert/dev/telegraf.conf | 5 +++++ plugins/inputs/x509_cert/x509_cert.go | 5 ++++- plugins/inputs/x509_cert/x509_cert_test.go | 18 ++++++++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 plugins/inputs/x509_cert/dev/telegraf.conf diff --git a/plugins/inputs/x509_cert/README.md b/plugins/inputs/x509_cert/README.md index 781b9332ae3de..82fe520f9e649 100644 --- a/plugins/inputs/x509_cert/README.md +++ b/plugins/inputs/x509_cert/README.md @@ -10,7 +10,7 @@ file or network connection. # Reads metrics from a SSL certificate [[inputs.x509_cert]] ## List certificate sources - sources = ["/etc/ssl/certs/ssl-cert-snakeoil.pem", "https://example.org"] + sources = ["/etc/ssl/certs/ssl-cert-snakeoil.pem", "https://example.org:443"] ## Timeout for SSL connection # timeout = "5s" diff --git a/plugins/inputs/x509_cert/dev/telegraf.conf b/plugins/inputs/x509_cert/dev/telegraf.conf new file mode 100644 index 0000000000000..1eda94f02b325 --- /dev/null +++ b/plugins/inputs/x509_cert/dev/telegraf.conf @@ -0,0 +1,5 @@ +[[inputs.x509_cert]] + sources = ["https://www.influxdata.com:443"] + +[[outputs.file]] + files = ["stdout"] diff --git a/plugins/inputs/x509_cert/x509_cert.go b/plugins/inputs/x509_cert/x509_cert.go index affd3fa0428be..45eddf3aab4d1 100644 --- a/plugins/inputs/x509_cert/x509_cert.go +++ b/plugins/inputs/x509_cert/x509_cert.go @@ -80,7 +80,10 @@ func (c *X509Cert) getCert(location string, timeout time.Duration) ([]*x509.Cert } defer ipConn.Close() - tlsCfg.ServerName = u.Host + if tlsCfg == nil { + tlsCfg = &tls.Config{} + } + tlsCfg.ServerName = u.Hostname() conn := tls.Client(ipConn, tlsCfg) defer conn.Close() diff --git a/plugins/inputs/x509_cert/x509_cert_test.go b/plugins/inputs/x509_cert/x509_cert_test.go index f4c6c873876f2..fc75bc8254003 100644 --- a/plugins/inputs/x509_cert/x509_cert_test.go +++ b/plugins/inputs/x509_cert/x509_cert_test.go @@ -4,6 +4,8 @@ import ( "crypto/tls" "encoding/base64" "fmt" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "io/ioutil" "os" "testing" @@ -203,3 +205,19 @@ func TestStrings(t *testing.T) { }) } } + +func TestGatherCert(t *testing.T) { + if testing.Short() { + t.Skip("Skipping integration test in short mode") + } + + m := &X509Cert{ + Sources: []string{"https://www.influxdata.com:443"}, + } + + var acc testutil.Accumulator + err := m.Gather(&acc) + require.NoError(t, err) + + assert.True(t, acc.HasMeasurement("x509_cert")) +}