Skip to content

Commit 6dbd3bf

Browse files
committed
xds: Support deprecated field in CombinedValidationContext
Add fallback to deprecated validation_context_certificate_provider_instance (field 4) in CombinedValidationContext for Istio compatibility.
1 parent cf4a2a1 commit 6dbd3bf

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

xds/src/main/java/io/grpc/xds/XdsClusterResource.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,16 @@ private static String getRootCertInstanceName(CommonTlsContext commonTlsContext)
564564
return combinedCertificateValidationContext.getDefaultValidationContext()
565565
.getCaCertificateProviderInstance().getInstanceName();
566566
}
567+
// Fall back to deprecated field (field 4) in CombinedValidationContext
568+
@SuppressWarnings("deprecation")
569+
String instanceName = combinedCertificateValidationContext
570+
.hasValidationContextCertificateProviderInstance()
571+
? combinedCertificateValidationContext.getValidationContextCertificateProviderInstance()
572+
.getInstanceName()
573+
: null;
574+
if (instanceName != null) {
575+
return instanceName;
576+
}
567577
}
568578
return null;
569579
}

xds/src/main/java/io/grpc/xds/internal/security/CommonTlsContextUtil.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,19 @@ private static boolean hasValidationProviderInstance(CommonTlsContext commonTlsC
4040
.hasCaCertificateProviderInstance()) {
4141
return true;
4242
}
43-
return commonTlsContext.hasCombinedValidationContext()
44-
&& commonTlsContext.getCombinedValidationContext().getDefaultValidationContext()
45-
.hasCaCertificateProviderInstance();
43+
if (commonTlsContext.hasCombinedValidationContext()) {
44+
CommonTlsContext.CombinedCertificateValidationContext combined =
45+
commonTlsContext.getCombinedValidationContext();
46+
if (combined.hasDefaultValidationContext()
47+
&& combined.getDefaultValidationContext().hasCaCertificateProviderInstance()) {
48+
return true;
49+
}
50+
// Check deprecated field (field 4) in CombinedValidationContext
51+
@SuppressWarnings("deprecation")
52+
boolean hasDeprecatedField = combined.hasValidationContextCertificateProviderInstance();
53+
return hasDeprecatedField;
54+
}
55+
return false;
4656
}
4757

4858
/**

xds/src/test/java/io/grpc/xds/GrpcXdsClientImplDataTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3234,6 +3234,24 @@ public void validateCommonTlsContext_combinedValidationContextSystemRootCerts()
32343234
.validateCommonTlsContext(commonTlsContext, ImmutableSet.of(), false);
32353235
}
32363236

3237+
@Test
3238+
@SuppressWarnings("deprecation")
3239+
public void validateCommonTlsContext_combinedValidationContextDeprecatedCertProvider()
3240+
throws ResourceInvalidException {
3241+
CommonTlsContext commonTlsContext = CommonTlsContext.newBuilder()
3242+
.setTlsCertificateProviderInstance(
3243+
CertificateProviderPluginInstance.newBuilder().setInstanceName("cert1"))
3244+
.setCombinedValidationContext(
3245+
CommonTlsContext.CombinedCertificateValidationContext.newBuilder()
3246+
.setValidationContextCertificateProviderInstance(
3247+
CommonTlsContext.CertificateProviderInstance.newBuilder()
3248+
.setInstanceName("root1"))
3249+
.build())
3250+
.build();
3251+
XdsClusterResource
3252+
.validateCommonTlsContext(commonTlsContext, ImmutableSet.of("cert1", "root1"), true);
3253+
}
3254+
32373255
@Test
32383256
public void validateCommonTlsContext_validationContextSystemRootCerts_envVarNotSet_throws() {
32393257
XdsClusterResource.enableSystemRootCerts = false;

0 commit comments

Comments
 (0)