[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