[java-oidfed-common] 02/02: Add properties to control maximum HTTP response content size from federation endpoints
Codeberg
noreply at shibboleth.net
Thu Oct 8 11:27:51 UTC 2026
This is an automated email from the git hooks/post-receive script.
codeberg pushed a commit to branch main
in repository java-oidfed-common.
View the commit online:
https://codeberg.org/Shibboleth/java-oidfed-common/commit/1f51ef55d6227cf9dbc0df697b8af4197a76feef
commit 1f51ef55d6227cf9dbc0df697b8af4197a76feef
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Thu Oct 8 14:27:17 2026 +0300
Add properties to control maximum HTTP response content size from federation endpoints
- Exploit HttpClientSupport.toString(..) from java-shib-shared/shib-networking
- Initially all defaults to same 1048576 (1MB) - to be revisited
- idp.oidfed.cache.entityConfiguration.maxResponseSize
- idp.oidfed.cache.subordinateStatement.maxResponseSize
- idp.oidfed.cache.resolveEntity.maxResponseSize
- idp.oidfed.cache.trustMarkStatus.maxResponseSize
- idp.oidfed.cache.trustMark.maxResponseSize
- idp.oidfed.cache.signedKeyset.maxResponseSize
---
.../META-INF/net.shibboleth.idp/postconfig.xml | 42 +++++++++++++++++
oidfed-common-impl/pom.xml | 5 ++
...FederationEndpointResponseFetchingStrategy.java | 54 ++++++++++++++++++++++
...DefaultEntityConfigurationFetchingStrategy.java | 3 +-
.../DefaultSignedKeysetFetchingStrategy.java | 3 +-
...ultResolveEntityTrustChainFetchingStrategy.java | 3 +-
...efaultSubordinateStatementFetchingStrategy.java | 3 +-
.../DefaultTrustMarkFetchingStrategy.java | 3 +-
.../DefaultTrustMarkStatusFetchingStrategy.java | 3 +-
.../oidfed/conf/oidfed/oidfed.properties | 6 +++
10 files changed, 113 insertions(+), 12 deletions(-)
diff --git a/oidfed-common-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml b/oidfed-common-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
index 87638a2..f33fc94 100644
--- a/oidfed-common-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
+++ b/oidfed-common-conf-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
@@ -100,6 +100,13 @@
</constructor-arg>
</bean>
</property>
+ <property name="criteriaToMaximumContentLengthStrategy">
+ <bean parent="shibboleth.Functions.Constant">
+ <constructor-arg>
+ <bean class="java.lang.Integer" factory-method="parseInt" c:_0="%{idp.oidfed.cache.entityConfiguration.maxResponseSize:1048576}" />
+ </constructor-arg>
+ </bean>
+ </property>
</bean>
</property>
<property name="metadataFilterStrategy">
@@ -274,6 +281,13 @@
</property>
</bean>
</property>
+ <property name="criteriaToMaximumContentLengthStrategy">
+ <bean parent="shibboleth.Functions.Constant">
+ <constructor-arg>
+ <bean class="java.lang.Integer" factory-method="parseInt" c:_0="%{idp.oidfed.cache.subordinateStatement.maxResponseSize:1048576}" />
+ </constructor-arg>
+ </bean>
+ </property>
</bean>
</property>
</bean>
@@ -503,6 +517,13 @@
</property>
</bean>
</property>
+ <property name="criteriaToMaximumContentLengthStrategy">
+ <bean parent="shibboleth.Functions.Constant">
+ <constructor-arg>
+ <bean class="java.lang.Integer" factory-method="parseInt" c:_0="%{idp.oidfed.cache.resolveEntity.maxResponseSize:1048576}" />
+ </constructor-arg>
+ </bean>
+ </property>
</bean>
</property>
</bean>
@@ -681,6 +702,13 @@
</property>
</bean>
</property>
+ <property name="criteriaToMaximumContentLengthStrategy">
+ <bean parent="shibboleth.Functions.Constant">
+ <constructor-arg>
+ <bean class="java.lang.Integer" factory-method="parseInt" c:_0="%{idp.oidfed.cache.trustMarkStatus.maxResponseSize:1048576}" />
+ </constructor-arg>
+ </bean>
+ </property>
</bean>
</property>
</bean>
@@ -801,6 +829,13 @@
</property>
</bean>
</property>
+ <property name="criteriaToMaximumContentLengthStrategy">
+ <bean parent="shibboleth.Functions.Constant">
+ <constructor-arg>
+ <bean class="java.lang.Integer" factory-method="parseInt" c:_0="%{idp.oidfed.cache.trustMark.maxResponseSize:1048576}" />
+ </constructor-arg>
+ </bean>
+ </property>
</bean>
</property>
</bean>
@@ -872,6 +907,13 @@
</constructor-arg>
</bean>
</property>
+ <property name="criteriaToMaximumContentLengthStrategy">
+ <bean parent="shibboleth.Functions.Constant">
+ <constructor-arg>
+ <bean class="java.lang.Integer" factory-method="parseInt" c:_0="%{idp.oidfed.cache.signedKeyset.maxResponseSize:1048576}" />
+ </constructor-arg>
+ </bean>
+ </property>
</bean>
</property>
<property name="metadataFilterStrategy">
diff --git a/oidfed-common-impl/pom.xml b/oidfed-common-impl/pom.xml
index 92f3482..8bb4fcb 100644
--- a/oidfed-common-impl/pom.xml
+++ b/oidfed-common-impl/pom.xml
@@ -106,6 +106,11 @@
<artifactId>shib-support</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>${shib-shared.groupId}</groupId>
+ <artifactId>shib-networking</artifactId>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>content-type</artifactId>
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/AbstractFederationEndpointResponseFetchingStrategy.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/AbstractFederationEndpointResponseFetchingStrategy.java
index 858f82a..5688e59 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/AbstractFederationEndpointResponseFetchingStrategy.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/AbstractFederationEndpointResponseFetchingStrategy.java
@@ -16,6 +16,7 @@ package net.shibboleth.oidfed.metadata.cache;
import java.io.IOException;
import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
@@ -34,6 +35,7 @@ import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.NameValuePair;
+import org.apache.hc.core5.http.ParseException;
import org.apache.hc.core5.http.ProtocolException;
import org.opensaml.security.httpclient.HttpClientSecurityParameters;
import org.opensaml.security.httpclient.HttpClientSecuritySupport;
@@ -44,6 +46,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.httpclient.HttpClientSupport;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.resolver.CriteriaSet;
@@ -85,6 +88,9 @@ public abstract class
/** Condition to validate the response status code. */
@Nonnull private BiPredicate<R, ClassicHttpResponse> responseStatusCodeValidationCondition;
+ /** Strategy to fetch maximum response content length. */
+ @NonnullAfterInit private Function<CriteriaSet, Integer> criteriaToMaximumContentLengthStrategy;
+
/** Strategy to fetch client authentication decorator for HTTP request and its parameters. */
@Nullable protected
Function<CriteriaSet, BiConsumer<HttpRequest,List<NameValuePair>>> clientAuthenticationLookupStrategy;
@@ -204,6 +210,18 @@ public abstract class
Constraint.isNotNull(condition, "Response status code validation condition cannot be null");
}
+ /**
+ * Set the strategy to fetch maximum response content length.
+ *
+ * @param strategy maximum content length strategy
+ */
+ public void setCriteriaToMaximumContentLengthStrategy(@Nonnull final Function<CriteriaSet, Integer> strategy) {
+ checkSetterPreconditions();
+
+ criteriaToMaximumContentLengthStrategy =
+ Constraint.isNotNull(strategy, "Criteria to maximum content length strategy cannot be null");
+ }
+
/** {@inheritDoc} */
@Override
protected void doInitialize() throws ComponentInitializationException {
@@ -228,6 +246,9 @@ public abstract class
throw new ComponentInitializationException(
"Criteria to exception container lifetime strategy cannot be null");
}
+ if (criteriaToMaximumContentLengthStrategy == null) {
+ throw new ComponentInitializationException("Criteria to maximum content length strategy cannot be null");
+ }
}
/** {@inheritDoc} */
@@ -360,4 +381,37 @@ public abstract class
@Nullable protected abstract C handleException(@Nonnull final CriteriaSet criteria,
@Nonnull final R requestData, @Nonnull final Throwable throwable, @Nonnull final Instant expiration);
+ /**
+ * Helper method to get the response contents as String, exploiting the configurable strategy for controlling the
+ * maximum response content length.
+ *
+ * @param criteria criteria set used for resolving the maximum response content length
+ * @param requestData the request data
+ * @param response the HTTP response
+ * @return the content as String
+ * @throws IOException if an error occurs reading the response contents, or the size exceeds limits
+ * @throws ParseException if header elements cannot be parsed
+ */
+ @Nonnull protected String getContentAsString(@Nonnull final CriteriaSet criteria, @Nonnull final R requestData,
+ @Nonnull final ClassicHttpResponse response) throws IOException, ParseException {
+ final Integer maxContentLength = criteriaToMaximumContentLengthStrategy.apply(criteria);
+ if (maxContentLength == null || maxContentLength <= 0) {
+ log.error("Could not resolve maximum content length for the response: {}", maxContentLength);
+ throw new IOException("Could not resolve maximum content length for the response");
+ }
+ final HttpEntity entity = response.getEntity();
+ if (entity != null) {
+ try {
+ final String result = HttpClientSupport.toString(entity, StandardCharsets.UTF_8, maxContentLength);
+ if (result != null) {
+ return result;
+ }
+ } catch (final IOException e) {
+ log.warn("Could not extract the response contents from {}", requestData, e);
+ throw e;
+ }
+ }
+ log.warn("Null/empty response obtained from {}", requestData);
+ throw new IOException("Null/empty response obtained from " + requestData);
+ }
}
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/configuration/DefaultEntityConfigurationFetchingStrategy.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/configuration/DefaultEntityConfigurationFetchingStrategy.java
index 838bf16..ef3a716 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/configuration/DefaultEntityConfigurationFetchingStrategy.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/configuration/DefaultEntityConfigurationFetchingStrategy.java
@@ -30,7 +30,6 @@ import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.ProtocolException;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.net.URIBuilder;
import org.slf4j.Logger;
@@ -109,7 +108,7 @@ public class DefaultEntityConfigurationFetchingStrategy
}
try {
- final String content = EntityUtils.toString(response.getEntity());
+ final String content = getContentAsString(criteria, entityId, response);
log.trace("Attempting to parse signed JWT from content: {}", content);
final SignedJWT jwt = SignedJWT.parse(content);
if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/keyset/DefaultSignedKeysetFetchingStrategy.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/keyset/DefaultSignedKeysetFetchingStrategy.java
index cfa974a..bdfbf21 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/keyset/DefaultSignedKeysetFetchingStrategy.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/keyset/DefaultSignedKeysetFetchingStrategy.java
@@ -27,7 +27,6 @@ import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.ProtocolException;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.slf4j.Logger;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -111,7 +110,7 @@ public class DefaultSignedKeysetFetchingStrategy
}
try {
- final String content = EntityUtils.toString(response.getEntity());
+ final String content = getContentAsString(criteria, identifier, response);
log.trace("Attempting to parse signed JWT from content: {}", content);
final SignedJWT jwt = SignedJWT.parse(content);
if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java
index c26c7b3..8dc5fbf 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java
@@ -36,7 +36,6 @@ import org.apache.hc.core5.http.HttpHeaders;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.ProtocolException;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.BasicNameValuePair;
import org.apache.hc.core5.net.URIBuilder;
import org.slf4j.Logger;
@@ -128,7 +127,7 @@ public class DefaultResolveEntityTrustChainFetchingStrategy
}
try {
- final SignedJWT jwt = SignedJWT.parse(EntityUtils.toString(response.getEntity()));
+ final SignedJWT jwt = SignedJWT.parse(getContentAsString(criteria, identifier, response));
if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
log.warn("Unexpected JWT type header {}", jwt.getHeader().getType());
return new ResolveEntityResponseContainer(identifier, null, validExpiration,
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementFetchingStrategy.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementFetchingStrategy.java
index c7fdd45..ce5e6bf 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementFetchingStrategy.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementFetchingStrategy.java
@@ -41,7 +41,6 @@ import org.apache.hc.core5.http.HttpHeaders;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.ProtocolException;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.BasicNameValuePair;
import org.apache.hc.core5.net.URIBuilder;
import org.slf4j.Logger;
@@ -206,7 +205,7 @@ public class DefaultSubordinateStatementFetchingStrategy
}
try {
- final String content = EntityUtils.toString(response.getEntity());
+ final String content = getContentAsString(criteria, id, response);
log.trace("Attempting to parse signed JWT from content: {}", content);
final SignedJWT jwt = SignedJWT.parse(content);
if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/trustmark/DefaultTrustMarkFetchingStrategy.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/trustmark/DefaultTrustMarkFetchingStrategy.java
index 13e9df3..9e0d1a4 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/trustmark/DefaultTrustMarkFetchingStrategy.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/trustmark/DefaultTrustMarkFetchingStrategy.java
@@ -36,7 +36,6 @@ import org.apache.hc.core5.http.HttpHeaders;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.ProtocolException;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.BasicNameValuePair;
import org.apache.hc.core5.net.URIBuilder;
import org.slf4j.Logger;
@@ -126,7 +125,7 @@ public class DefaultTrustMarkFetchingStrategy
}
try {
- final SignedJWT jwt = SignedJWT.parse(EntityUtils.toString(response.getEntity()));
+ final SignedJWT jwt = SignedJWT.parse(getContentAsString(criteria, request, response));
if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
log.warn("Unexpected JWT type header {}", jwt.getHeader().getType());
return new TrustMarkContainer(request, null, validExpiration, invalidExpiration);
diff --git a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/trustmark/DefaultTrustMarkStatusFetchingStrategy.java b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/trustmark/DefaultTrustMarkStatusFetchingStrategy.java
index 2a8bdae..15a2a98 100644
--- a/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/trustmark/DefaultTrustMarkStatusFetchingStrategy.java
+++ b/oidfed-common-impl/src/main/java/net/shibboleth/oidfed/metadata/cache/trustmark/DefaultTrustMarkStatusFetchingStrategy.java
@@ -33,7 +33,6 @@ import org.apache.hc.core5.http.HttpHeaders;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.ProtocolException;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.BasicNameValuePair;
import org.slf4j.Logger;
@@ -112,7 +111,7 @@ public class DefaultTrustMarkStatusFetchingStrategy
}
try {
- final SignedJWT jwt = SignedJWT.parse(EntityUtils.toString(response.getEntity()));
+ final SignedJWT jwt = SignedJWT.parse(getContentAsString(criteria, identifier, response));
if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
log.warn("Unexpected JWT type header {}", jwt.getHeader().getType());
return new TrustMarkStatusContainer(identifier, null, validExpiration, invalidExpiration);
diff --git a/oidfed-common-impl/src/main/resources/net/shibboleth/oidfed/conf/oidfed/oidfed.properties b/oidfed-common-impl/src/main/resources/net/shibboleth/oidfed/conf/oidfed/oidfed.properties
index 140c4d6..8520e3f 100644
--- a/oidfed-common-impl/src/main/resources/net/shibboleth/oidfed/conf/oidfed/oidfed.properties
+++ b/oidfed-common-impl/src/main/resources/net/shibboleth/oidfed/conf/oidfed/oidfed.properties
@@ -35,6 +35,7 @@
#idp.oidfed.cache.entityConfiguration.maxJwtLifetime = PT24H
#idp.oidfed.cache.entityConfiguration.claimsValidator = shibboleth.oidfed.DefaultEntityConfigurationClaimsValidator
#idp.oidfed.cache.entityConfiguration.critClaims = %{idp.oidfed.cache.default.critClaims:}
+#idp.oidfed.cache.entityConfiguration.maxResponseSize = 1048576
#idp.oidfed.cache.subordinateStatement.cleanupTaskInterval = PT5M
#idp.oidfed.cache.subordinateStatement.minRefreshDelay = PT1M
@@ -46,6 +47,7 @@
#idp.oidfed.cache.subordinateStatement.exceptionContainerLifetime = PT0S
#idp.oidfed.cache.subordinateStatement.maxJwtLifetime = PT24H
#idp.oidfed.cache.subordinateStatement.critClaims = %{idp.oidfed.cache.default.critClaims:}
+#idp.oidfed.cache.subordinateStatement.maxResponseSize = 1048576
# Maximum trust chain length to be locally resolved - must be greater than 2
# Example lengths:
@@ -80,6 +82,7 @@
#idp.oidfed.cache.resolveEntity.invalidContainerLifetime = PT1M
#idp.oidfed.cache.resolveEntity.exceptionContainerLifetime = PT0S
#idp.oidfed.cache.resolveEntity.maxJwtLifetime = PT24H
+#idp.oidfed.cache.resolveEntity.maxResponseSize = 1048576
#idp.oidfed.LocalTrustAnchorsFile = %{idp.home}/conf/oidfed/oidfed-trust-anchors.json
@@ -92,6 +95,7 @@
#idp.oidfed.cache.trustMarkStatus.invalidContainerLifetime = PT1M
#idp.oidfed.cache.trustMarkStatus.exceptionContainerLifetime = PT0S
#idp.oidfed.cache.trustMarkStatus.maxJwtLifetime = PT24H
+#idp.oidfed.cache.trustMarkStatus.maxResponseSize = 1048576
#idp.oidfed.cache.trustMark.cleanupTaskInterval = PT5M
#idp.oidfed.cache.trustMark.minRefreshDelay = PT1H
@@ -102,6 +106,7 @@
#idp.oidfed.cache.trustMark.invalidContainerLifetime = PT1M
#idp.oidfed.cache.trustMark.exceptionContainerLifetime = PT0S
#idp.oidfed.cache.trustMark.maxJwtLifetime = P365D
+#idp.oidfed.cache.trustMark.maxResponseSize = 1048576
#idp.oidfed.cache.signedKeyset.cleanupTaskInterval = PT5M
#idp.oidfed.cache.signedKeyset.minRefreshDelay = PT1M
@@ -111,6 +116,7 @@
#idp.oidfed.cache.signedKeyset.exceptionContainerLifetime = PT0S
#idp.oidfed.cache.signedKeyset.customFilterStrategies =
#idp.oidfed.cache.signedKeyset.claimsValidator = shibboleth.oidfed.DefaultSignedKeysetClaimsValidator
+#idp.oidfed.cache.signedKeyset.maxResponseSize = 1048576
#idp.oidfed.admin.resolvertest.logging = TestTrustChainResolver
#idp.oidfed.admin.resolvertest.accessPolicy = AccessByIPAddress
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list