Prevent wildcard destinations for proxies and upstreams

This commit is contained in:
freddygv 2021-03-19 20:56:02 -06:00
parent 24ee8a0488
commit 77ead5cca9
3 changed files with 36 additions and 0 deletions

View File

@ -333,6 +333,9 @@ func (u *Upstream) Validate() error {
if u.DestinationName == "" { if u.DestinationName == "" {
return fmt.Errorf("upstream destination name cannot be empty") return fmt.Errorf("upstream destination name cannot be empty")
} }
if u.DestinationName == WildcardSpecifier && !u.CentrallyConfigured {
return fmt.Errorf("upstream destination name cannot be a wildcard")
}
if u.LocalBindPort == 0 && !u.CentrallyConfigured { if u.LocalBindPort == 0 && !u.CentrallyConfigured {
return fmt.Errorf("upstream local bind port cannot be zero") return fmt.Errorf("upstream local bind port cannot be zero")

View File

@ -1153,6 +1153,11 @@ func (s *NodeService) Validate() error {
"Proxy.DestinationServiceName must be non-empty for Connect proxy "+ "Proxy.DestinationServiceName must be non-empty for Connect proxy "+
"services")) "services"))
} }
if strings.TrimSpace(s.Proxy.DestinationServiceName) == WildcardSpecifier {
result = multierror.Append(result, fmt.Errorf(
"Proxy.DestinationServiceName must not be a wildcard for Connect proxy "+
"services"))
}
if s.Port == 0 { if s.Port == 0 {
result = multierror.Append(result, fmt.Errorf( result = multierror.Append(result, fmt.Errorf(

View File

@ -648,6 +648,12 @@ func TestStructs_NodeService_ValidateConnectProxy(t *testing.T) {
"Proxy.DestinationServiceName must be", "Proxy.DestinationServiceName must be",
}, },
{
"connect-proxy: wildcard Proxy.DestinationServiceName",
func(x *NodeService) { x.Proxy.DestinationServiceName = "*" },
"Proxy.DestinationServiceName must not be",
},
{ {
"connect-proxy: valid Proxy.DestinationServiceName", "connect-proxy: valid Proxy.DestinationServiceName",
func(x *NodeService) { x.Proxy.DestinationServiceName = "hello" }, func(x *NodeService) { x.Proxy.DestinationServiceName = "hello" },
@ -697,6 +703,28 @@ func TestStructs_NodeService_ValidateConnectProxy(t *testing.T) {
}, },
"upstream destination name cannot be empty", "upstream destination name cannot be empty",
}, },
{
"connect-proxy: upstream wildcard name",
func(x *NodeService) {
x.Proxy.Upstreams = Upstreams{{
DestinationType: UpstreamDestTypeService,
DestinationName: WildcardSpecifier,
LocalBindPort: 5000,
}}
},
"upstream destination name cannot be a wildcard",
},
{
"connect-proxy: upstream can have wildcard name when centrally configured",
func(x *NodeService) {
x.Proxy.Upstreams = Upstreams{{
DestinationType: UpstreamDestTypeService,
DestinationName: WildcardSpecifier,
CentrallyConfigured: true,
}}
},
"",
},
{ {
"connect-proxy: upstream empty bind port", "connect-proxy: upstream empty bind port",
func(x *NodeService) { func(x *NodeService) {