Skip to content

Commit 46c725c

Browse files
committed
Add additional validation to otel endpoint
1 parent 22217ef commit 46c725c

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

internal/configs/configmaps.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,11 @@ func parseConfigMapOpenTelemetry(l *slog.Logger, cfgm *v1.ConfigMap, cfgParams *
754754
if otelExporterEndpoint, exists := cfgm.Data["otel-exporter-endpoint"]; exists {
755755
otelExporterEndpoint = strings.TrimSpace(otelExporterEndpoint)
756756
if otelExporterEndpoint != "" {
757+
if err := validation.ValidateHost(otelExporterEndpoint); err != nil {
758+
nl.Warn(l, err)
759+
eventLog.Event(cfgm, v1.EventTypeWarning, nl.EventReasonInvalidValue, err.Error())
760+
return nil, err
761+
}
757762
cfgParams.MainOtelExporterEndpoint = otelExporterEndpoint
758763
}
759764
}

internal/configs/configmaps_test.go

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1403,6 +1403,34 @@ func TestOpenTelemetryConfigurationSuccess(t *testing.T) {
14031403
expectedServiceName: "nginx-ingress-controller:nginx",
14041404
msg: "endpoint set, minimal config",
14051405
},
1406+
{
1407+
configMap: &v1.ConfigMap{
1408+
Data: map[string]string{
1409+
"otel-exporter-endpoint": "subdomain.goes.on.and.on.and.on.and.on.example.com",
1410+
},
1411+
},
1412+
expectedLoadModule: true,
1413+
expectedExporterEndpoint: "subdomain.goes.on.and.on.and.on.and.on.example.com",
1414+
expectedExporterHeaderName: "",
1415+
expectedExporterHeaderValue: "",
1416+
expectedServiceName: "",
1417+
expectedTraceInHTTP: false,
1418+
msg: "endpoint set, complicated long subdomain",
1419+
},
1420+
{
1421+
configMap: &v1.ConfigMap{
1422+
Data: map[string]string{
1423+
"otel-exporter-endpoint": "localhost:9933",
1424+
},
1425+
},
1426+
expectedLoadModule: true,
1427+
expectedExporterEndpoint: "localhost:9933",
1428+
expectedExporterHeaderName: "",
1429+
expectedExporterHeaderValue: "",
1430+
expectedServiceName: "",
1431+
expectedTraceInHTTP: false,
1432+
msg: "endpoint set, hostname and port no scheme",
1433+
},
14061434
{
14071435
configMap: &v1.ConfigMap{
14081436
Data: map[string]string{
@@ -1595,6 +1623,76 @@ func TestOpenTelemetryConfigurationInvalid(t *testing.T) {
15951623
expectedTraceInHTTP: true,
15961624
msg: "partially invalid, header name missing, trace in http set",
15971625
},
1626+
{
1627+
configMap: &v1.ConfigMap{
1628+
Data: map[string]string{
1629+
"otel-exporter-endpoint": "something?invalid*30here",
1630+
},
1631+
},
1632+
expectedLoadModule: false,
1633+
expectedExporterEndpoint: "",
1634+
expectedExporterHeaderName: "",
1635+
expectedExporterHeaderValue: "",
1636+
expectedServiceName: "",
1637+
expectedTraceInHTTP: false,
1638+
msg: "invalid, endpoint does not look like a host",
1639+
},
1640+
{
1641+
configMap: &v1.ConfigMap{
1642+
Data: map[string]string{
1643+
"otel-exporter-endpoint": "localhost:0",
1644+
},
1645+
},
1646+
expectedLoadModule: false,
1647+
expectedExporterEndpoint: "localhost:0",
1648+
expectedExporterHeaderName: "",
1649+
expectedExporterHeaderValue: "",
1650+
expectedServiceName: "",
1651+
expectedTraceInHTTP: false,
1652+
msg: "invalid, port is outside of range down",
1653+
},
1654+
{
1655+
configMap: &v1.ConfigMap{
1656+
Data: map[string]string{
1657+
"otel-exporter-endpoint": "localhost:99999",
1658+
},
1659+
},
1660+
expectedLoadModule: false,
1661+
expectedExporterEndpoint: "",
1662+
expectedExporterHeaderName: "",
1663+
expectedExporterHeaderValue: "",
1664+
expectedServiceName: "",
1665+
expectedTraceInHTTP: false,
1666+
msg: "invalid, port is outside of range up",
1667+
},
1668+
{
1669+
configMap: &v1.ConfigMap{
1670+
Data: map[string]string{
1671+
"otel-exporter-endpoint": "fe80::1",
1672+
},
1673+
},
1674+
expectedLoadModule: false,
1675+
expectedExporterEndpoint: "",
1676+
expectedExporterHeaderName: "",
1677+
expectedExporterHeaderValue: "",
1678+
expectedServiceName: "",
1679+
expectedTraceInHTTP: false,
1680+
msg: "invalid, endpoint is an ipv6 address",
1681+
},
1682+
{
1683+
configMap: &v1.ConfigMap{
1684+
Data: map[string]string{
1685+
"otel-exporter-endpoint": "thisisaverylongsubdomainthatexceedsatotalofsixtythreecharactersz.example.com",
1686+
},
1687+
},
1688+
expectedLoadModule: false,
1689+
expectedExporterEndpoint: "",
1690+
expectedExporterHeaderName: "",
1691+
expectedExporterHeaderValue: "",
1692+
expectedServiceName: "",
1693+
expectedTraceInHTTP: false,
1694+
msg: "invalid, subdomain is more than 63 characters long",
1695+
},
15981696
}
15991697

16001698
isPlus := false

0 commit comments

Comments
 (0)