Skip to content

Commit bb140ad

Browse files
Merge pull request #18312 from rajatchopra/tls_admit_bug
Automatic merge from submit-queue (batch tested with PRs 18422, 18312). tls update will be possible with 'create' permissions on custom-host Supercedes #18177 Fix for bz: https://bugzilla.redhat.com/show_bug.cgi?id=1524707
2 parents ad4bd3f + 6785f92 commit bb140ad

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

pkg/route/registry/route/strategy.go

+30-7
Original file line numberDiff line numberDiff line change
@@ -214,14 +214,37 @@ func (s routeStrategy) validateHostUpdate(ctx apirequest.Context, route, older *
214214
if hostChanged {
215215
return kvalidation.ValidateImmutableField(route.Spec.Host, older.Spec.Host, field.NewPath("spec", "host"))
216216
}
217-
if route.Spec.TLS == nil || older.Spec.TLS == nil {
218-
return kvalidation.ValidateImmutableField(route.Spec.TLS, older.Spec.TLS, field.NewPath("spec", "tls"))
217+
218+
// if tls is being updated without host being updated, we check if 'create' permission exists on custom-host subresource
219+
res, err := s.sarClient.Create(
220+
authorizationutil.AddUserToSAR(
221+
user,
222+
&authorizationapi.SubjectAccessReview{
223+
Spec: authorizationapi.SubjectAccessReviewSpec{
224+
ResourceAttributes: &authorizationapi.ResourceAttributes{
225+
Namespace: apirequest.NamespaceValue(ctx),
226+
Verb: "create",
227+
Group: routeapi.GroupName,
228+
Resource: "routes",
229+
Subresource: "custom-host",
230+
},
231+
},
232+
},
233+
),
234+
)
235+
if err != nil {
236+
return field.ErrorList{field.InternalError(field.NewPath("spec", "host"), err)}
237+
}
238+
if !res.Status.Allowed {
239+
if route.Spec.TLS == nil || older.Spec.TLS == nil {
240+
return kvalidation.ValidateImmutableField(route.Spec.TLS, older.Spec.TLS, field.NewPath("spec", "tls"))
241+
}
242+
errs := kvalidation.ValidateImmutableField(route.Spec.TLS.CACertificate, older.Spec.TLS.CACertificate, field.NewPath("spec", "tls", "caCertificate"))
243+
errs = append(errs, kvalidation.ValidateImmutableField(route.Spec.TLS.Certificate, older.Spec.TLS.Certificate, field.NewPath("spec", "tls", "certificate"))...)
244+
errs = append(errs, kvalidation.ValidateImmutableField(route.Spec.TLS.DestinationCACertificate, older.Spec.TLS.DestinationCACertificate, field.NewPath("spec", "tls", "destinationCACertificate"))...)
245+
errs = append(errs, kvalidation.ValidateImmutableField(route.Spec.TLS.Key, older.Spec.TLS.Key, field.NewPath("spec", "tls", "key"))...)
246+
return errs
219247
}
220-
errs := kvalidation.ValidateImmutableField(route.Spec.TLS.CACertificate, older.Spec.TLS.CACertificate, field.NewPath("spec", "tls", "caCertificate"))
221-
errs = append(errs, kvalidation.ValidateImmutableField(route.Spec.TLS.Certificate, older.Spec.TLS.Certificate, field.NewPath("spec", "tls", "certificate"))...)
222-
errs = append(errs, kvalidation.ValidateImmutableField(route.Spec.TLS.DestinationCACertificate, older.Spec.TLS.DestinationCACertificate, field.NewPath("spec", "tls", "destinationCACertificate"))...)
223-
errs = append(errs, kvalidation.ValidateImmutableField(route.Spec.TLS.Key, older.Spec.TLS.Key, field.NewPath("spec", "tls", "key"))...)
224-
return errs
225248
}
226249
return nil
227250
}

0 commit comments

Comments
 (0)