From 5f214247ca7322568c430a7b3dfd0e881fa98adc Mon Sep 17 00:00:00 2001 From: Tova-Rozovsky Date: Fri, 2 May 2025 10:00:16 +0300 Subject: [PATCH 1/4] added validition for service name --- pkg/api/service.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/api/service.go b/pkg/api/service.go index ca21e5fe..32cdb307 100644 --- a/pkg/api/service.go +++ b/pkg/api/service.go @@ -104,7 +104,15 @@ func (s *ServiceSpec) Validate() error { return fmt.Errorf("invalid mode: %q", s.Mode) } - // TODO: validate the service name is a valid DNS label. + if s.Name != "" { + if len(s.Name) > 253 { + return fmt.Errorf("service name too long (max 253 characters): %q", s.Name) + } + dnsSubdomainRegexp := regexp.MustCompile(`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(?:\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`) + if !dnsSubdomainRegexp.MatchString(s.Name) { + return fmt.Errorf("invalid service name %q: must be a valid DNS subdomain", s.Name) + } + } for _, p := range s.Ports { if (p.Mode == "" || p.Mode == PortModeIngress) && From 469d6fadcddb58fcff9289ffc73148293245b919 Mon Sep 17 00:00:00 2001 From: Tova-Rozovsky Date: Sun, 4 May 2025 16:14:17 +0300 Subject: [PATCH 2/4] Fix: restrict validation to RFC1123 label name --- pkg/api/service.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pkg/api/service.go b/pkg/api/service.go index 32cdb307..946e9a18 100644 --- a/pkg/api/service.go +++ b/pkg/api/service.go @@ -31,6 +31,7 @@ const ( ) var serviceIDRegexp = regexp.MustCompile("^[0-9a-f]{32}$") +var dnsLabelRegexp = regexp.MustCompile(`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`) func ValidateServiceID(id string) bool { return serviceIDRegexp.MatchString(id) @@ -104,13 +105,17 @@ func (s *ServiceSpec) Validate() error { return fmt.Errorf("invalid mode: %q", s.Mode) } +func (s *ServiceSpec) Validate() error { + if s.Mode != "someExpectedMode" { + return fmt.Errorf("invalid mode: %q", s.Mode) + } + if s.Name != "" { - if len(s.Name) > 253 { - return fmt.Errorf("service name too long (max 253 characters): %q", s.Name) + if len(s.Name) > 63 { + return fmt.Errorf("service name too long (max 63 characters): %q", s.Name) } - dnsSubdomainRegexp := regexp.MustCompile(`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(?:\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`) - if !dnsSubdomainRegexp.MatchString(s.Name) { - return fmt.Errorf("invalid service name %q: must be a valid DNS subdomain", s.Name) + if !dnsLabelRegexp.MatchString(s.Name) { + return fmt.Errorf("invalid service name: %q. Must comply with RFC 1123 label format", s.Name) } } From 9f4b8179b52460de3edf6bee99cf5bc92e1f8421 Mon Sep 17 00:00:00 2001 From: Tova-Rozovsky Date: Tue, 6 May 2025 17:43:05 +0300 Subject: [PATCH 3/4] valid service name --- pkg/api/service.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pkg/api/service.go b/pkg/api/service.go index 946e9a18..38d61a4f 100644 --- a/pkg/api/service.go +++ b/pkg/api/service.go @@ -104,18 +104,13 @@ func (s *ServiceSpec) Validate() error { default: return fmt.Errorf("invalid mode: %q", s.Mode) } - -func (s *ServiceSpec) Validate() error { - if s.Mode != "someExpectedMode" { - return fmt.Errorf("invalid mode: %q", s.Mode) - } - + if s.Name != "" { if len(s.Name) > 63 { return fmt.Errorf("service name too long (max 63 characters): %q", s.Name) } if !dnsLabelRegexp.MatchString(s.Name) { - return fmt.Errorf("invalid service name: %q. Must comply with RFC 1123 label format", s.Name) + return fmt.Errorf("invalid service name: %q.must be 1-63 characters, lowercase letters, numbers, and dashes only; must start and end with a letter or number", s.Name) } } @@ -151,6 +146,7 @@ func (s *ServiceSpec) Validate() error { return nil } + func (s *ServiceSpec) Clone() ServiceSpec { spec := *s From bb97537df7b62269dce4591664a2d96498f5000d Mon Sep 17 00:00:00 2001 From: Pasha Sviderski Date: Wed, 7 May 2025 15:59:53 +1000 Subject: [PATCH 4/4] fix: format error message --- pkg/api/service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/api/service.go b/pkg/api/service.go index 38d61a4f..59847a01 100644 --- a/pkg/api/service.go +++ b/pkg/api/service.go @@ -110,7 +110,7 @@ func (s *ServiceSpec) Validate() error { return fmt.Errorf("service name too long (max 63 characters): %q", s.Name) } if !dnsLabelRegexp.MatchString(s.Name) { - return fmt.Errorf("invalid service name: %q.must be 1-63 characters, lowercase letters, numbers, and dashes only; must start and end with a letter or number", s.Name) + return fmt.Errorf("invalid service name: %q. must be 1-63 characters, lowercase letters, numbers, and dashes only; must start and end with a letter or number", s.Name) } }