Skip to content

Commit a8d5a54

Browse files
committed
fix: validating certificate subject alternative names
Signed-off-by: Dario Tranchitella <[email protected]>
1 parent c442436 commit a8d5a54

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

controllers/kamajicontrolplane_controller_tcp.go

+12
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package controllers
66
import (
77
"context"
88
"fmt"
9+
"net"
910
"strings"
1011

1112
kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1"
@@ -20,6 +21,8 @@ import (
2021
"github.com/clastix/cluster-api-control-plane-provider-kamaji/pkg/externalclusterreference"
2122
)
2223

24+
var ErrUnsupportedCertificateSAN = errors.New("a certificate SAN must be made of host only with no port")
25+
2326
//+kubebuilder:rbac:groups=kamaji.clastix.io,resources=tenantcontrolplanes,verbs=get;list;watch;create;update
2427

2528
//nolint:funlen,gocognit,cyclop
@@ -141,6 +144,15 @@ func (r *KamajiControlPlaneReconciler) createOrUpdateTenantControlPlane(ctx cont
141144
tcp.Spec.ControlPlane.Service.ServiceType = kcp.Spec.Network.ServiceType
142145
tcp.Spec.ControlPlane.Service.AdditionalMetadata.Labels = kcp.Spec.Network.ServiceLabels
143146
tcp.Spec.ControlPlane.Service.AdditionalMetadata.Annotations = kcp.Spec.Network.ServiceAnnotations
147+
148+
for _, i := range kcp.Spec.Network.CertSANs {
149+
// validating CertSANs as soon as possible to avoid github.com/clastix/kamaji/issues/679:
150+
// nil err means the entry is in the form of <HOST>:<PORT> which is not accepted
151+
if _, _, err := net.SplitHostPort(i); err == nil {
152+
return errors.Wrap(ErrUnsupportedCertificateSAN, fmt.Sprintf("entry %s is invalid", i))
153+
}
154+
}
155+
144156
tcp.Spec.NetworkProfile.CertSANs = kcp.Spec.Network.CertSANs
145157
// Ingress
146158
if kcp.Spec.Network.Ingress != nil {

0 commit comments

Comments
 (0)