[java-metadata-aggregator] branch master updated: MDA-187 - Add IPHintValidationStage

Ian Young ian at iay.org.uk
Wed May 20 15:18:50 UTC 2020


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

iay pushed a commit to branch master
in repository java-metadata-aggregator.

View the commit online:
http://git.shibboleth.net/view/?p=java-metadata-aggregator.git;a=commit;h=569d44ab7af999434cbabef8059363876a1b9ecb

The following commit(s) were added to refs/heads/master by this push:
       new  569d44a   MDA-187 - Add IPHintValidationStage
569d44a is described below

commit 569d44ab7af999434cbabef8059363876a1b9ecb
Author: Ian Young <ian at iay.org.uk>
AuthorDate: Wed May 20 16:18:45 2020 +0100

    MDA-187 - Add IPHintValidationStage
    
    https://issues.shibboleth.net/jira/browse/MDA-187
---
 .../dom/saml/mdui/IPHintValidationStage.java       |  94 ++++++++++++++++
 .../metadata/dom/saml/mdui/MDUISupport.java        |   3 +
 .../resources/net/shibboleth/metadata/beans.xml    |   7 ++
 .../dom/saml/mdui/IPHintValidationStageTest.java   | 113 +++++++++++++++++++
 .../dom/saml/mdui/IPHintValidationStage-1.xml      | 121 +++++++++++++++++++++
 .../dom/saml/mdui/IPHintValidationStage-2.xml      |  16 +++
 .../dom/saml/mdui/IPHintValidationStage-3.xml      |  16 +++
 7 files changed, 370 insertions(+)

diff --git a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage.java b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage.java
new file mode 100644
index 0000000..97bcb56
--- /dev/null
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements.  See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.metadata.dom.saml.mdui;
+
+import javax.annotation.Nonnull;
+import javax.annotation.concurrent.ThreadSafe;
+
+import org.w3c.dom.Element;
+
+import net.shibboleth.metadata.Item;
+import net.shibboleth.metadata.dom.AbstractDOMTraversalStage;
+import net.shibboleth.metadata.dom.DOMTraversalContext;
+import net.shibboleth.metadata.dom.SimpleDOMTraversalContext;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.net.IPRange;
+import net.shibboleth.utilities.java.support.xml.ElementSupport;
+
+/**
+ * A stage which validates mdui:IPHint elements.
+ */
+ at ThreadSafe
+public class IPHintValidationStage extends AbstractDOMTraversalStage<DOMTraversalContext> {
+
+    /** Whether to check that the CIDR notation describes a network. Defaults to true. */
+    private boolean checkingNetworks = true;
+    
+    /**
+     * Gets whether the stage is checking for network addresses only.
+     * 
+     * @return whether the stage is checking for network addresses only
+     */
+    public boolean isCheckingNetworks() {
+        return checkingNetworks;
+    }
+
+    /**
+     * Sets whether the stage is checking for network addresses only.
+     * 
+     * @param check whether to check for network addresses only
+     */
+    public void setCheckingNetworks(final boolean check) {
+        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+        this.checkingNetworks = check;
+    }
+
+    @Override
+    protected boolean applicable(final Element element) {
+        return ElementSupport.isElementNamed(element, MDUISupport.IPHINT_NAME);
+    }
+
+    @Override
+    protected void visit(@Nonnull final Element ipHint, @Nonnull final DOMTraversalContext context) {
+        assert ipHint != null;
+        assert context != null;
+        final String hint = ipHint.getTextContent();
+        try {
+            final IPRange range = IPRange.parseCIDRBlock(hint);
+            if (checkingNetworks) {
+                if (range.getHostAddress() != null) {
+                    addError(context.getItem(), ipHint, "invalid IPHint '" + hint +
+                            "': CIDR notation represents a host, not a network");
+                }
+            }
+        } catch (final IllegalArgumentException e) {
+            addError(context.getItem(), ipHint, "invalid IPHint '" + hint + "': " + e.getMessage());
+        } catch (final ArrayIndexOutOfBoundsException e) {
+            // temporary work-round for JSPT-49
+            addError(context.getItem(), ipHint, "invalid IPHint '" + hint + "': missing '/'");
+        }
+    }
+
+    @Override
+    protected DOMTraversalContext buildContext(final Item<Element> item) {
+        return new SimpleDOMTraversalContext(item);
+    }
+
+}
diff --git a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdui/MDUISupport.java b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdui/MDUISupport.java
index 886e5aa..6ff1d40 100644
--- a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdui/MDUISupport.java
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdui/MDUISupport.java
@@ -48,6 +48,9 @@ public final class MDUISupport {
     /** {@link QName} representing an <code>mdui:PrivacyStatementURL</code>. */
     public static final QName PRIVACYSTATEMENTURL_NAME = new QName(MDUI_NS, "PrivacyStatementURL");
 
+    /** {@link QName} representing an <code>mdui:IPHint</code>. */
+    public static final QName IPHINT_NAME = new QName(MDUI_NS, "IPHint");
+
     /** Constructor. */
     private MDUISupport() {
     }
diff --git a/aggregator-pipeline/src/main/resources/net/shibboleth/metadata/beans.xml b/aggregator-pipeline/src/main/resources/net/shibboleth/metadata/beans.xml
index 0a18970..c2f5afb 100644
--- a/aggregator-pipeline/src/main/resources/net/shibboleth/metadata/beans.xml
+++ b/aggregator-pipeline/src/main/resources/net/shibboleth/metadata/beans.xml
@@ -194,6 +194,13 @@
     <bean id="mda.RegistrationAuthorityPopulationStage" abstract="true" parent="mda.stage_parent"
         class="net.shibboleth.metadata.dom.saml.mdrpi.RegistrationAuthorityPopulationStage"/>
 
+    <!--
+        net.shibboleth.metadata.dom.saml.mdui
+    -->
+
+    <bean id="mda.IPHintValidationStage" abstract="true" parent="mda.stage_parent"
+        class="net.shibboleth.metadata.dom.saml.mdui.IPHintValidationStage"/>
+
     <!--
         net.shibboleth.metadata.pipeline
     -->
diff --git a/aggregator-pipeline/src/test/java/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStageTest.java b/aggregator-pipeline/src/test/java/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStageTest.java
new file mode 100644
index 0000000..ed65f38
--- /dev/null
+++ b/aggregator-pipeline/src/test/java/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStageTest.java
@@ -0,0 +1,113 @@
+
+package net.shibboleth.metadata.dom.saml.mdui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.shibboleth.metadata.ErrorStatus;
+import net.shibboleth.metadata.Item;
+import net.shibboleth.metadata.ItemMetadata;
+import net.shibboleth.metadata.dom.BaseDOMTest;
+import net.shibboleth.metadata.dom.DOMElementItem;
+import net.shibboleth.utilities.java.support.collection.ClassToInstanceMultiMap;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+import org.w3c.dom.Element;
+
+public class IPHintValidationStageTest extends BaseDOMTest {
+
+    /**
+     * Constructor sets class under test.
+     * 
+     * @throws Exception if something goes wrong
+     */
+    public IPHintValidationStageTest() throws Exception {
+        super(IPHintValidationStage.class);
+    }
+    
+    @Test
+    public void missingComponent() throws Exception {
+        final Element doc = readXMLData("1.xml");
+        final DOMElementItem item = new DOMElementItem(doc);
+        final List<Item<Element>> items = new ArrayList<>();
+        items.add(item);
+        
+        final IPHintValidationStage stage = new IPHintValidationStage();
+        stage.setId("test");
+        stage.initialize();
+        
+        stage.execute(items);
+        
+        final ClassToInstanceMultiMap<ItemMetadata> metadata = item.getItemMetadata();
+        final List<ErrorStatus> errors = metadata.get(ErrorStatus.class);
+        Assert.assertEquals(errors.size(), 1);
+        
+        final ErrorStatus error = errors.get(0);
+        Assert.assertTrue(error.getStatusMessage().contains("193.72.192/26"));
+    }
+
+    @Test
+    public void hostAddress() throws Exception {
+        final Element doc = readXMLData("2.xml");
+        final DOMElementItem item = new DOMElementItem(doc);
+        final List<Item<Element>> items = new ArrayList<>();
+        items.add(item);
+        
+        final IPHintValidationStage stage = new IPHintValidationStage();
+        stage.setId("test");
+        stage.setCheckingNetworks(true);
+        stage.initialize();
+        
+        stage.execute(items);
+        
+        final ClassToInstanceMultiMap<ItemMetadata> metadata = item.getItemMetadata();
+        final List<ErrorStatus> errors = metadata.get(ErrorStatus.class);
+        Assert.assertEquals(errors.size(), 1);
+        
+        final ErrorStatus error = errors.get(0);
+        Assert.assertTrue(error.getStatusMessage().contains("82.68.124.32/3"));
+    }
+
+    @Test
+    public void ignoreHostAddress() throws Exception {
+        final Element doc = readXMLData("2.xml");
+        final DOMElementItem item = new DOMElementItem(doc);
+        final List<Item<Element>> items = new ArrayList<>();
+        items.add(item);
+        
+        final IPHintValidationStage stage = new IPHintValidationStage();
+        stage.setId("test");
+        stage.setCheckingNetworks(false);
+        stage.initialize();
+        
+        stage.execute(items);
+        
+        final ClassToInstanceMultiMap<ItemMetadata> metadata = item.getItemMetadata();
+        final List<ErrorStatus> errors = metadata.get(ErrorStatus.class);
+        Assert.assertEquals(errors.size(), 0);
+    }
+    
+    @Test
+    public void missingSlash() throws Exception {
+        final Element doc = readXMLData("3.xml");
+        final DOMElementItem item = new DOMElementItem(doc);
+        final List<Item<Element>> items = new ArrayList<>();
+        items.add(item);
+        
+        final IPHintValidationStage stage = new IPHintValidationStage();
+        stage.setId("test");
+        stage.setCheckingNetworks(true);
+        stage.initialize();
+        
+        stage.execute(items);
+        
+        final ClassToInstanceMultiMap<ItemMetadata> metadata = item.getItemMetadata();
+        final List<ErrorStatus> errors = metadata.get(ErrorStatus.class);
+        Assert.assertEquals(errors.size(), 1);
+        
+        final ErrorStatus error = errors.get(0);
+        Assert.assertTrue(error.getStatusMessage().contains("11.12.13.14"));
+    }
+
+}
diff --git a/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-1.xml b/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-1.xml
new file mode 100644
index 0000000..faa5da5
--- /dev/null
+++ b/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-1.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
+    xmlns:shibmd="urn:mace:shibboleth:metadata:1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
+    ID="uk000283" entityID="https://idp.glowscotland.org.uk/shibboleth">
+    <IDPSSODescriptor
+        protocolSupportEnumeration="urn:mace:shibboleth:1.0 urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
+        <Extensions>
+            <mdui:DiscoHints xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
+                <mdui:IPHint>198.81.223.0/28</mdui:IPHint>
+                <mdui:IPHint>212.219.36.0/25</mdui:IPHint>
+                <mdui:IPHint>212.219.74.176/28</mdui:IPHint>
+                <mdui:IPHint>195.194.219.0/25</mdui:IPHint>
+                <mdui:IPHint>212.219.248.0/24</mdui:IPHint>
+                <mdui:IPHint>195.194.187.40/29</mdui:IPHint>
+                <mdui:IPHint>212.219.240.208/28</mdui:IPHint>
+                <mdui:IPHint>195.194.8.0/26</mdui:IPHint>
+                <mdui:IPHint>195.194.8.64/28</mdui:IPHint>
+                <mdui:IPHint>212.219.247.224/28</mdui:IPHint>
+                <mdui:IPHint>194.83.243.0/25</mdui:IPHint>
+                <mdui:IPHint>194.83.172.0/26</mdui:IPHint>
+                <mdui:IPHint>195.195.236.0/26</mdui:IPHint>
+                <mdui:IPHint>194.83.96.0/24</mdui:IPHint>
+                <mdui:IPHint>194.83.172.64/28</mdui:IPHint>
+                <mdui:IPHint>193.63.62.192/27</mdui:IPHint>
+                <mdui:IPHint>193.63.62.224/29</mdui:IPHint>
+                <mdui:IPHint>193.63.62.0/25</mdui:IPHint>
+                <mdui:IPHint>193.63.62.128/26</mdui:IPHint>
+                <mdui:IPHint>212.219.240.200/29</mdui:IPHint>
+                <mdui:IPHint>212.219.113.224/27</mdui:IPHint>
+                <mdui:IPHint>194.80.19.64/26</mdui:IPHint>
+                <mdui:IPHint>194.81.46.148/30</mdui:IPHint>
+                <mdui:IPHint>195.194.111.0/24</mdui:IPHint>
+                <mdui:IPHint>212.219.99.64/27</mdui:IPHint>
+                <mdui:IPHint>194.83.173.192/28</mdui:IPHint>
+                <mdui:IPHint>212.219.247.128/26</mdui:IPHint>
+                <mdui:IPHint>195.195.43.192/27</mdui:IPHint>
+                <mdui:IPHint>193.39.144.0/20</mdui:IPHint>
+                <mdui:IPHint>194.80.23.128/26</mdui:IPHint>
+                <mdui:IPHint>194.83.245.240/28</mdui:IPHint>
+                <mdui:IPHint>212.219.255.0/26</mdui:IPHint>
+                <mdui:IPHint>212.219.255.64/28</mdui:IPHint>
+                <mdui:IPHint>194.82.141.208/28</mdui:IPHint>
+                <mdui:IPHint>194.81.49.0/24</mdui:IPHint>
+                <mdui:IPHint>212.219.247.192/27</mdui:IPHint>
+                <mdui:IPHint>195.194.56.0/24</mdui:IPHint>
+                <mdui:IPHint>195.194.57.0/25</mdui:IPHint>
+                <mdui:IPHint>212.219.249.0/24</mdui:IPHint>
+                <mdui:IPHint>194.83.57.0/26</mdui:IPHint>
+                <mdui:IPHint>212.219.203.0/24</mdui:IPHint>
+                <mdui:IPHint>194.83.240.192/26</mdui:IPHint>
+                <mdui:IPHint>194.80.22.0/25</mdui:IPHint>
+                <mdui:IPHint>212.219.234.120/29</mdui:IPHint>
+                <mdui:IPHint>194.81.222.96/27</mdui:IPHint>
+                <mdui:IPHint>194.83.240.128/27</mdui:IPHint>
+                <mdui:IPHint>194.83.240.160/28</mdui:IPHint>
+                <mdui:IPHint>212.219.99.96/27</mdui:IPHint>
+                <mdui:IPHint>193.60.198.208/28</mdui:IPHint>
+                <mdui:IPHint>212.219.202.0/24</mdui:IPHint>
+                <mdui:IPHint>195.194.160.0/23</mdui:IPHint>
+                <mdui:IPHint>195.194.10.0/25</mdui:IPHint>
+                <mdui:IPHint>193.62.43.208/28</mdui:IPHint>
+                <mdui:IPHint>195.194.8.128/26</mdui:IPHint>
+                <mdui:IPHint>194.81.46.160/27</mdui:IPHint>
+                <mdui:IPHint>212.219.98.64/28</mdui:IPHint>
+                <mdui:IPHint>194.82.255.64/28</mdui:IPHint>
+                <mdui:IPHint>194.82.255.0/26</mdui:IPHint>
+                <mdui:IPHint>212.219.243.40/29</mdui:IPHint>
+                <mdui:IPHint>194.81.124.0/24</mdui:IPHint>
+                <mdui:IPHint>212.219.150.0/24</mdui:IPHint>
+                <mdui:IPHint>212.219.253.0/24</mdui:IPHint>
+                <mdui:IPHint>212.219.252.0/24</mdui:IPHint>
+                <mdui:IPHint>212.219.208.0/24</mdui:IPHint>
+                <mdui:IPHint>193.63.61.0/25</mdui:IPHint>
+                <mdui:IPHint>194.80.19.128/26</mdui:IPHint>
+                <mdui:IPHint>194.80.19.192/27</mdui:IPHint>
+                <mdui:IPHint>212.219.254.0/24</mdui:IPHint>
+                <mdui:IPHint>194.80.22.128/25</mdui:IPHint>
+                <mdui:IPHint>193.63.86.128/26</mdui:IPHint>
+                <mdui:IPHint>212.219.243.8/29</mdui:IPHint>
+                <mdui:IPHint>194.83.173.128/26</mdui:IPHint>
+                <mdui:IPHint>212.219.242.160/28</mdui:IPHint>
+                <mdui:IPHint>195.194.8.192/26</mdui:IPHint>
+                <mdui:IPHint>194.80.224.64/29</mdui:IPHint>
+                <mdui:IPHint>194.83.172.128/28</mdui:IPHint>
+                <mdui:IPHint>195.194.86.240/29</mdui:IPHint>
+                <mdui:IPHint>212.219.118.8/29</mdui:IPHint>
+                <mdui:IPHint>212.219.250.0/23</mdui:IPHint>
+                <mdui:IPHint>195.194.62.128/27</mdui:IPHint>
+                <mdui:IPHint>212.219.247.240/28</mdui:IPHint>
+                <mdui:IPHint>194.80.23.224/27</mdui:IPHint>
+                <mdui:IPHint>212.219.242.192/28</mdui:IPHint>
+                <mdui:IPHint>194.83.173.0/26</mdui:IPHint>
+                <mdui:IPHint>194.83.173.64/26</mdui:IPHint>
+                <mdui:IPHint>194.83.172.224/29</mdui:IPHint>
+                <mdui:IPHint>212.219.57.104/29</mdui:IPHint>
+                <mdui:IPHint>212.219.74.160/29</mdui:IPHint>
+                <mdui:IPHint>194.80.19.0/26</mdui:IPHint>
+                <mdui:IPHint>194.83.172.80/28</mdui:IPHint>
+                <mdui:IPHint>193.63.72.128/27</mdui:IPHint>
+                <mdui:IPHint>193.93.72.160/27</mdui:IPHint>
+                <mdui:IPHint>193.72.192/26</mdui:IPHint><!-- this one is wrong -->
+                <mdui:IPHint>193.63.61.128/25</mdui:IPHint>
+                <mdui:IPHint>194.80.23.0/25</mdui:IPHint>
+            </mdui:DiscoHints>
+        </Extensions>
+        <ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding"
+            Location="https://idp.glowscotland.org.uk:8443/idp/profile/SAML1/SOAP/ArtifactResolution"
+            index="1"/>
+        <ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP"
+            Location="https://idp.glowscotland.org.uk:8443/idp/profile/SAML2/SOAP/ArtifactResolution"
+            index="2"/>
+        <SingleSignOnService Binding="urn:mace:shibboleth:1.0:profiles:AuthnRequest"
+            Location="https://idp.glowscotland.org.uk/idp/profile/Shibboleth/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
+            Location="https://idp.glowscotland.org.uk/idp/profile/SAML2/POST/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign"
+            Location="https://idp.glowscotland.org.uk/idp/profile/SAML2/POST-SimpleSign/SSO"/>
+        <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
+            Location="https://idp.glowscotland.org.uk/idp/profile/SAML2/Redirect/SSO"/>
+    </IDPSSODescriptor>
+</EntityDescriptor>
diff --git a/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-2.xml b/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-2.xml
new file mode 100644
index 0000000..b768e7b
--- /dev/null
+++ b/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-2.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<EntityDescriptor ID="uk000981" entityID="https://idp.edina.ac.uk/shibboleth-devel"
+    xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:shibmeta="urn:mace:shibboleth:metadata:1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+    <IDPSSODescriptor
+        protocolSupportEnumeration="urn:mace:shibboleth:1.0 urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
+        <Extensions>
+            <mdui:DiscoHints xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
+                <mdui:IPHint>82.68.124.32/3</mdui:IPHint> <!-- RDW's fixed IP address -->
+                <mdui:DomainHint>ucs.ed.ac.uk</mdui:DomainHint>
+                <mdui:GeolocationHint>geo:55.935575,-3.1800687</mdui:GeolocationHint>
+            </mdui:DiscoHints>
+        </Extensions>
+    </IDPSSODescriptor>
+</EntityDescriptor>
diff --git a/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-3.xml b/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-3.xml
new file mode 100644
index 0000000..412537d
--- /dev/null
+++ b/aggregator-pipeline/src/test/resources/net/shibboleth/metadata/dom/saml/mdui/IPHintValidationStage-3.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<EntityDescriptor ID="uk000981" entityID="https://idp.edina.ac.uk/shibboleth-devel"
+    xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:shibmeta="urn:mace:shibboleth:metadata:1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
+    <IDPSSODescriptor
+        protocolSupportEnumeration="urn:mace:shibboleth:1.0 urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
+        <Extensions>
+            <mdui:DiscoHints xmlns:mdui="urn:oasis:names:tc:SAML:metadata:ui">
+                <mdui:IPHint>11.12.13.14</mdui:IPHint> <!-- does not contain a '/' -->
+                <mdui:DomainHint>ucs.ed.ac.uk</mdui:DomainHint>
+                <mdui:GeolocationHint>geo:55.935575,-3.1800687</mdui:GeolocationHint>
+            </mdui:DiscoHints>
+        </Extensions>
+    </IDPSSODescriptor>
+</EntityDescriptor>

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


More information about the commits mailing list