[java-identity-provider] branch main updated: IDP-1642 - Migrate configuration into jars where feasible

Scott Cantor cantor.2 at osu.edu
Tue Sep 29 14:40:30 UTC 2020


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch main
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=4652bea2c89c0a084df9915ddcb7b2a86e0d6268

The following commit(s) were added to refs/heads/main by this push:
       new  4652bea2c IDP-1642 - Migrate configuration into jars where feasible
4652bea2c is described below

commit 4652bea2c89c0a084df9915ddcb7b2a86e0d6268
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Sep 29 10:40:27 2020 -0400

    IDP-1642 - Migrate configuration into jars where feasible
    
    https://issues.shibboleth.net/jira/browse/IDP-1642
    
    Use properties for most c14n config.
---
 .../AbstractSubjectCanonicalizationAction.java     | 25 ++++++------
 .../authn/impl/X500SubjectCanonicalization.java    | 14 ++++---
 .../c14n/attribute-sourced-subject-c14n-beans.xml  | 16 +++++---
 .../idp/flows/c14n/simple-subject-c14n-beans.xml   | 13 ++++---
 .../idp/flows/c14n/x500-subject-c14n-beans.xml     | 19 +++++++---
 .../c14n/attribute-sourced-subject-c14n-config.xml | 44 ----------------------
 .../conf/c14n/simple-subject-c14n-config.xml       | 27 -------------
 .../resources/conf/c14n/subject-c14n.properties    | 29 ++++++++++++++
 .../src/main/resources/conf/c14n/subject-c14n.xml  |  9 +++--
 .../conf/c14n/x500-subject-c14n-config.xml         | 37 ------------------
 idp-conf/src/test/resources/conf/idp.properties    |  2 +-
 .../idp/profile/impl/ResolveAttributes.java        |  3 +-
 12 files changed, 89 insertions(+), 149 deletions(-)

diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractSubjectCanonicalizationAction.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractSubjectCanonicalizationAction.java
index f94f33ac7..9f73bd5d4 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractSubjectCanonicalizationAction.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/AbstractSubjectCanonicalizationAction.java
@@ -108,15 +108,18 @@ public abstract class AbstractSubjectCanonicalizationAction
      * 
      * @param newTransforms collection of replacement transforms
      */
-    public void setTransforms(@Nonnull @NonnullElements final Collection<Pair<String, String>> newTransforms) {
+    public void setTransforms(@Nullable @NonnullElements final Collection<Pair<String, String>> newTransforms) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        Constraint.isNotNull(newTransforms, "Transforms collection cannot be null");
-        
-        transforms = new ArrayList<>();
-        for (final Pair<String,String> p : newTransforms) {
-            final Pattern pattern = Pattern.compile(StringSupport.trimOrNull(p.getFirst()));
-            transforms.add(new Pair<>(pattern, Constraint.isNotNull(
-                    StringSupport.trimOrNull(p.getSecond()), "Replacement expression cannot be null")));
+
+        if (newTransforms != null) {
+            transforms = new ArrayList<>();
+            for (final Pair<String,String> p : newTransforms) {
+                final Pattern pattern = Pattern.compile(StringSupport.trimOrNull(p.getFirst()));
+                transforms.add(new Pair<>(pattern, Constraint.isNotNull(
+                        StringSupport.trimOrNull(p.getSecond()), "Replacement expression cannot be null")));
+            }
+        } else {
+            transforms = Collections.emptyList();
         }
     }
 
@@ -227,11 +230,7 @@ public abstract class AbstractSubjectCanonicalizationAction
             s = s.toUpperCase();
         }
 
-        if (transforms.isEmpty()) {
-            return s;
-        }
-        
-        for (final Pair<Pattern,String> p : transforms) {            
+        for (final Pair<Pattern,String> p : transforms) {
             final Matcher m = p.getFirst().matcher(s);
             log.debug("{} applying replacement expression '{}' against input '{}'", getLogPrefix(),
                     p.getFirst().pattern(), s);
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalization.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalization.java
index 71761f460..33f1c9abf 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalization.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalization.java
@@ -34,7 +34,6 @@ import net.shibboleth.idp.authn.context.SubjectCanonicalizationContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 import org.cryptacular.x509.dn.Attribute;
@@ -101,10 +100,14 @@ public class X500SubjectCanonicalization extends AbstractSubjectCanonicalization
      * 
      * @param types types to search for
      */
-    public void setSubjectAltNameTypes(@Nonnull @NonnullElements final List<Integer> types) {
+    public void setSubjectAltNameTypes(@Nullable @NonnullElements final List<Integer> types) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        subjectAltNameTypes = List.copyOf(Constraint.isNotNull(types, "Type list cannot be null"));
+        if (types != null) {
+            subjectAltNameTypes = List.copyOf(types);
+        } else {
+            subjectAltNameTypes = Collections.emptyList();
+        }
     }
 
     /**
@@ -112,11 +115,10 @@ public class X500SubjectCanonicalization extends AbstractSubjectCanonicalization
      * 
      * @param ids RDN OIDs to search for
      */
-    public void setObjectIds(@Nonnull @NonnullElements final List<String> ids) {
+    public void setObjectIds(@Nullable @NonnullElements final List<String> ids) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
-        objectIds = List.copyOf(StringSupport.normalizeStringCollection(
-                Constraint.isNotNull(ids, "OID list cannot be null")));
+        objectIds = List.copyOf(StringSupport.normalizeStringCollection(ids));
     }
     
     /** {@inheritDoc} */
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/attribute-sourced-subject-c14n-beans.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/attribute-sourced-subject-c14n-beans.xml
index f66f465ef..4337e4e12 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/attribute-sourced-subject-c14n-beans.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/attribute-sourced-subject-c14n-beans.xml
@@ -15,7 +15,13 @@
     <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
         p:placeholderPrefix="%{" p:placeholderSuffix="}" />
 
-    <import resource="%{idp.home}/conf/c14n/attribute-sourced-subject-c14n-config.xml" />
+    <!-- Property-driven defaults to be overridden. -->
+    <bean id="shibboleth.c14n.attribute.AttributesToResolve" parent="shibboleth.CommaDelimStringArray"
+        c:_0="#{'%{idp.c14n.attribute.attributesToResolve:}'.trim()}" />
+    <bean id="shibboleth.c14n.attribute.AttributeSourceIds" parent="shibboleth.CommaDelimStringArray"
+        c:_0="#{'%{idp.c14n.attribute.attributeSourceIds:}'.trim()}" />
+
+    <import resource="conditional:%{idp.home}/conf/c14n/attribute-sourced-subject-c14n-config.xml" />
 
     <bean class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
     <bean class="net.shibboleth.idp.profile.impl.ProfileActionBeanPostProcessor" />
@@ -35,9 +41,9 @@
     <bean id="AttributeSourcedSubjectCanonicalization"
         class="net.shibboleth.idp.authn.impl.AttributeSourcedSubjectCanonicalization" scope="prototype"
         p:attributeSourceIds-ref="shibboleth.c14n.attribute.AttributeSourceIds"
-        p:lowercase-ref="shibboleth.c14n.attribute.Lowercase"
-        p:uppercase-ref="shibboleth.c14n.attribute.Uppercase"
-        p:trim-ref="shibboleth.c14n.attribute.Trim"
-        p:transforms-ref="shibboleth.c14n.attribute.Transforms" />
+        p:lowercase="#{getObject('shibboleth.c14n.attribute.Lowercase') ?: %{idp.c14n.attribute.lowercase:false}}"
+        p:uppercase="#{getObject('shibboleth.c14n.attribute.Uppercase') ?: %{idp.c14n.attribute.uppercase:false}}"
+        p:trim="#{getObject('shibboleth.c14n.attribute.Trim') ?: %{idp.c14n.attribute.trim:true}}"
+        p:transforms="#{getObject('shibboleth.c14n.attribute.Transforms')}" />
     
 </beans>
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/simple-subject-c14n-beans.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/simple-subject-c14n-beans.xml
index 336049011..7b4a689d3 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/simple-subject-c14n-beans.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/simple-subject-c14n-beans.xml
@@ -12,16 +12,19 @@
        default-init-method="initialize"
        default-destroy-method="destroy">
 
-    <import resource="%{idp.home}/conf/c14n/simple-subject-c14n-config.xml" />
+    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
+        p:placeholderPrefix="%{" p:placeholderSuffix="}" />
+
+    <import resource="conditional:%{idp.home}/conf/c14n/simple-subject-c14n-config.xml" />
 
     <bean class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
     <bean class="net.shibboleth.idp.profile.impl.ProfileActionBeanPostProcessor" />
     
     <bean id="SimpleSubjectCanonicalization"
         class="net.shibboleth.idp.authn.impl.SimpleSubjectCanonicalization" scope="prototype"
-        p:lowercase-ref="shibboleth.c14n.simple.Lowercase"
-        p:uppercase-ref="shibboleth.c14n.simple.Uppercase"
-        p:trim-ref="shibboleth.c14n.simple.Trim"
-        p:transforms-ref="shibboleth.c14n.simple.Transforms" />
+        p:lowercase="#{getObject('shibboleth.c14n.simple.Lowercase') ?: %{idp.c14n.simple.lowercase:false}}"
+        p:uppercase="#{getObject('shibboleth.c14n.simple.Uppercase') ?: %{idp.c14n.simple.uppercase:false}}"
+        p:trim="#{getObject('shibboleth.c14n.simple.Trim') ?: %{idp.c14n.simple.trim:true}}"
+        p:transforms="#{getObject('shibboleth.c14n.simple.Transforms')}" />
     
 </beans>
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/x500-subject-c14n-beans.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/x500-subject-c14n-beans.xml
index b9f819e8a..8b675bc4b 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/x500-subject-c14n-beans.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/c14n/x500-subject-c14n-beans.xml
@@ -12,7 +12,16 @@
        default-init-method="initialize"
        default-destroy-method="destroy">
 
-    <import resource="%{idp.home}/conf/c14n/x500-subject-c14n-config.xml" />
+    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
+        p:placeholderPrefix="%{" p:placeholderSuffix="}" />
+
+    <!-- Property-driven defaults to be overridden. -->
+    <bean id="shibboleth.c14n.x500.SubjectAltNameTypes" parent="shibboleth.CommaDelimStringArray"
+        c:_0="#{'%{idp.c14n.x500.subjectAltNameTypes:}'.trim()}" />
+    <bean id="shibboleth.c14n.x500.ObjectIDs" parent="shibboleth.CommaDelimStringArray"
+        c:_0="#{'%{idp.c14n.x500.objectIDs:}'.trim()}" />
+
+    <import resource="conditional:%{idp.home}/conf/c14n/x500-subject-c14n-config.xml" />
 
     <bean class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
     <bean class="net.shibboleth.idp.profile.impl.ProfileActionBeanPostProcessor" />
@@ -21,9 +30,9 @@
         class="net.shibboleth.idp.authn.impl.X500SubjectCanonicalization" scope="prototype"
         p:subjectAltNameTypes-ref="shibboleth.c14n.x500.SubjectAltNameTypes"
         p:objectIds-ref="shibboleth.c14n.x500.ObjectIDs"
-        p:lowercase-ref="shibboleth.c14n.x500.Lowercase"
-        p:uppercase-ref="shibboleth.c14n.x500.Uppercase"
-        p:trim-ref="shibboleth.c14n.x500.Trim"
-        p:transforms-ref="shibboleth.c14n.x500.Transforms" />
+        p:lowercase="#{getObject('shibboleth.c14n.x500.Lowercase') ?: %{idp.c14n.x500.lowercase:false}}"
+        p:uppercase="#{getObject('shibboleth.c14n.x500.Uppercase') ?: %{idp.c14n.x500.uppercase:false}}"
+        p:trim="#{getObject('shibboleth.c14n.x500.Trim') ?: %{idp.c14n.x500.trim:true}}"
+        p:transforms="#{getObject('shibboleth.c14n.x500.Transforms')}" />
     
 </beans>
diff --git a/idp-conf/src/main/resources/conf/c14n/attribute-sourced-subject-c14n-config.xml b/idp-conf/src/main/resources/conf/c14n/attribute-sourced-subject-c14n-config.xml
deleted file mode 100644
index 938b30f11..000000000
--- a/idp-conf/src/main/resources/conf/c14n/attribute-sourced-subject-c14n-config.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!--
-    A list of attributes to resolve for normalizing the subject. For example, you might
-    intend to lookup a uid in a directory based on what the user entered. You can make this
-    an empty list if you just want to resolve everything you normally would.
-    -->
-    <util:list id="shibboleth.c14n.attribute.AttributesToResolve">
-        <value>altuid</value>
-    </util:list>
-    
-    <!--
-    A list of attributes to search for a value to produce as the normalized subject name.
-    This will normally be something you resolve above.
-    -->
-    <util:list id="shibboleth.c14n.attribute.AttributeSourceIds">
-        <value>altuid</value>
-    </util:list>
-
-    <!-- Simple transforms to apply to attribute value used for canonicalization result. -->
-    <util:constant id="shibboleth.c14n.attribute.Lowercase" static-field="java.lang.Boolean.FALSE"/>
-    <util:constant id="shibboleth.c14n.attribute.Uppercase" static-field="java.lang.Boolean.FALSE"/>
-    <util:constant id="shibboleth.c14n.attribute.Trim" static-field="java.lang.Boolean.TRUE"/>
-
-    <!-- Apply any regular expression replacement pairs. -->
-    <util:list id="shibboleth.c14n.attribute.Transforms">
-        <!--
-        <bean parent="shibboleth.Pair" p:first="^(.+)@example\.edu$" p:second="$1" />
-        -->
-    </util:list>
-        
-</beans>
diff --git a/idp-conf/src/main/resources/conf/c14n/simple-subject-c14n-config.xml b/idp-conf/src/main/resources/conf/c14n/simple-subject-c14n-config.xml
deleted file mode 100644
index 3cddfa67a..000000000
--- a/idp-conf/src/main/resources/conf/c14n/simple-subject-c14n-config.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- Simple transforms to apply to username after authentication. -->
-    <util:constant id="shibboleth.c14n.simple.Lowercase" static-field="java.lang.Boolean.FALSE"/>
-    <util:constant id="shibboleth.c14n.simple.Uppercase" static-field="java.lang.Boolean.FALSE"/>
-    <util:constant id="shibboleth.c14n.simple.Trim" static-field="java.lang.Boolean.TRUE"/>
-
-    <!-- Apply any regular expression replacement pairs after authentication. -->
-    <util:list id="shibboleth.c14n.simple.Transforms">
-        <!--
-        <bean parent="shibboleth.Pair" p:first="^(.+)@example\.edu$" p:second="$1" />
-        -->
-    </util:list>
-        
-</beans>
diff --git a/idp-conf/src/main/resources/conf/c14n/subject-c14n.properties b/idp-conf/src/main/resources/conf/c14n/subject-c14n.properties
new file mode 100644
index 000000000..617348bc1
--- /dev/null
+++ b/idp-conf/src/main/resources/conf/c14n/subject-c14n.properties
@@ -0,0 +1,29 @@
+# Properties that control the behavior of post-login subject c14n flows.
+# A few more advanced settings require XML configuration, see flow-specific docs.
+
+
+# Simple username -> principal name c14n
+#idp.c14n.simple.lowercase = false
+#idp.c14n.simple.uppercase = false
+#idp.c14n.simple.trim = true
+
+
+# Attribute resolution -> principal name c14n
+#idp.c14n.attribute.lowercase = false
+#idp.c14n.attribute.uppercase = false
+#idp.c14n.attribute.trim = true
+# Lists of attributes to resolve...
+#idp.c14n.attribute.attributesToResolve =
+#  and then select a principal name from
+#idp.c14n.attribute.attributeSourceIds =
+
+# X.509 certificate -> principal name c14n
+#idp.c14n.x500.lowercase = false
+#idp.c14n.x500.uppercase = false
+#idp.c14n.x500.trim = true
+# Precedence is to check for a subjectAltName and then an OID RDN
+# Comma-delimited list of subjectAltName type numbers
+#  (See https://tools.ietf.org/html/rfc5280#section-4.2.1.6)
+#idp.c14n.x500.subjectAltNameTypes = 
+# Comma-delimited list of OIDS
+#idp.c14n.x500.objectIDs = 
diff --git a/idp-conf/src/main/resources/conf/c14n/subject-c14n.xml b/idp-conf/src/main/resources/conf/c14n/subject-c14n.xml
index e4b772f1f..b354535d2 100644
--- a/idp-conf/src/main/resources/conf/c14n/subject-c14n.xml
+++ b/idp-conf/src/main/resources/conf/c14n/subject-c14n.xml
@@ -21,6 +21,8 @@
     principal name.
     
     Flows are identified with an ID that corresponds to a Spring Web Flow subflow name.
+    
+    Most of the simple settings that configure these flows are in subject-c14n.properties.
     -->
 
     <!--
@@ -31,9 +33,8 @@
     <util:list id="shibboleth.PostLoginSubjectCanonicalizationFlows">
         <!--
         This is an advanced post-login step that performs attribute resolution and then produces a username
-        from an attribute value. Most of this configuration is handled by attribute-sourced-c14n-config.xml.
-        To enable universally, just uncomment, but if you want it to run under more specific conditions,
-        set an activationCondition property to a condition function to use to control when it should run. 
+        from an attribute value. To enable universally, just uncomment, but if you want it to run under more
+        specific conditions, set an activationCondition property to a condition to apply. 
         -->
         <!-- <bean id="c14n/attribute" parent="shibboleth.PostLoginSubjectCanonicalizationFlow" /> -->
 
@@ -54,7 +55,7 @@
         <!--
         This is the standard post-login step that returns a username derived from the login process. If you
         have more complex needs such as mapping a certificate DN into a principal name, an alternative may
-        be required such as that above, but you can configure simple transforms in simple-subject-c14n-config.xml
+        be required such as that above, but you can use this for simple transforms.
         -->
         <ref bean="c14n/simple" />
     </util:list>
diff --git a/idp-conf/src/main/resources/conf/c14n/x500-subject-c14n-config.xml b/idp-conf/src/main/resources/conf/c14n/x500-subject-c14n-config.xml
deleted file mode 100644
index 1ae25e405..000000000
--- a/idp-conf/src/main/resources/conf/c14n/x500-subject-c14n-config.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:p="http://www.springframework.org/schema/p"
-       xmlns:c="http://www.springframework.org/schema/c"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
-                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-                           
-       default-init-method="initialize"
-       default-destroy-method="destroy">
-
-    <!-- First priority is given to any subjectAltNames specified (emailAddress is 1) -->
-    <util:list id="shibboleth.c14n.x500.SubjectAltNameTypes">
-        <!-- <value>1</value> -->
-    </util:list>
-
-    <!-- Second priority is a list of Certificate Subject RDN OIDs to look for. -->
-    <util:list id="shibboleth.c14n.x500.ObjectIDs">
-        <value>2.5.4.3</value>
-    </util:list>
-
-    <!-- Simple transforms to apply to username after authentication. -->
-    <util:constant id="shibboleth.c14n.x500.Lowercase" static-field="java.lang.Boolean.FALSE"/>
-    <util:constant id="shibboleth.c14n.x500.Uppercase" static-field="java.lang.Boolean.FALSE"/>
-    <util:constant id="shibboleth.c14n.x500.Trim" static-field="java.lang.Boolean.TRUE"/>
-
-    <!-- Apply any regular expression replacement pairs after authentication. -->
-    <util:list id="shibboleth.c14n.x500.Transforms">
-        <!--
-        <bean parent="shibboleth.Pair" p:first="^(.+)@example\.edu$" p:second="$1" />
-        -->
-    </util:list>
-        
-</beans>
diff --git a/idp-conf/src/test/resources/conf/idp.properties b/idp-conf/src/test/resources/conf/idp.properties
index 7721cb91f..80b4146d5 100644
--- a/idp-conf/src/test/resources/conf/idp.properties
+++ b/idp-conf/src/test/resources/conf/idp.properties
@@ -3,7 +3,7 @@
 #idp.searchForProperties = false
 
 # Load any additional property resources from a comma-delimited list
-idp.additionalProperties = /conf/ldap.properties, /conf/saml-nameid.properties, /conf/services.properties, /conf/admin/admin.properties, /conf/authn/authn.properties, /conf/authn/duo.properties, /credentials/secrets.properties
+idp.additionalProperties = /conf/ldap.properties, /conf/saml-nameid.properties, /conf/services.properties, /conf/admin/admin.properties, /conf/authn/authn.properties, /conf/authn/duo.properties, /conf/c14n/subject-c14n.properties, /credentials/secrets.properties
 
 # In most cases (and unless noted in the surrounding comments) the
 # commented settings in the distributed files document default behavior.
diff --git a/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/impl/ResolveAttributes.java b/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/impl/ResolveAttributes.java
index cfdf95378..1d0283f60 100644
--- a/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/impl/ResolveAttributes.java
+++ b/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/impl/ResolveAttributes.java
@@ -198,8 +198,7 @@ public final class ResolveAttributes extends AbstractProfileAction {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         
         Constraint.isNotNull(attributeIds, "Attribute ID collection cannot be null");
-        attributesLookupStrategy = FunctionSupport.<ProfileRequestContext,Collection<String>>constant(
-                StringSupport.normalizeStringCollection(attributeIds));
+        attributesLookupStrategy = FunctionSupport.constant(StringSupport.normalizeStringCollection(attributeIds));
     }
     
     /**

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list