diff options
-rw-r--r-- | Makefile | 89 | ||||
-rwxr-xr-x | scripts/create_mxml.sh | 81 | ||||
-rwxr-xr-x | scripts/get-metadata.sh | 36 | ||||
-rw-r--r-- | sp-with-coco-errors | 20 |
4 files changed, 150 insertions, 76 deletions
@@ -23,10 +23,12 @@ TOU := swamid-tou-en.txt swamid-tou-sv.txt -include $(SWAMID_MK_CONFIG) -all: clean dependencies test sign clean web +all: clean dependencies signtest sign clean web MXML=$(shell echo *.mxml) -SWAMIDXML=$(patsubst swamid-2.0/%.xml,.time/%.time,$(wildcard swamid-2.0/*.xml)) +EDUGAINXML=$(patsubst swamid-edugain/%.xml,.time/%.time,$(wildcard swamid-edugain/*.xml)) +SWAMID20XML=$(patsubst swamid-2.0/%.xml,.time/%.time,$(wildcard swamid-2.0/*.xml)) +TESTINGXML=$(patsubst swamid-testing/%.xml,.time/%.time,$(wildcard swamid-testing/*.xml)) sign: swamid upstream @@ -100,8 +102,8 @@ tidy: @for x in `find $(SRCDIRS) -name \*.xml`; do xsltproc xslt/clean-entitydescriptor.xsl $$x > $$x.c && mv $$x.c $$x; done testMetadataUsage: - @echo "Checking for files in swamid-2.0 that isn't used" - @for file in swamid-2.0/* ; do if ! grep -q $$file *.mxml; then echo " $$file is not referenced in any mxml file"; fi; done | sed 's/.*/[1;31m&[0m/' + @echo "Checking for files in swamid-edugain swamid-2.0 and swamid-testing that isn't used" + @for file in `find $(SRCDIRS) -name \*.xml` ; do if ! grep -q $$file *.mxml; then echo " $$file is not referenced in any mxml file"; fi; done | sed 's/.*/[1;31m&[0m/' testRefedsRnS: @echo "Checking for refeds R&S compatibillity for entities exported to eduGAIN" @@ -135,7 +137,7 @@ testEduGAINchecks: testMDUI: @echo "Checking for uniq IdP MDUI DisplayName" - @for lang in `cat swamid-2.0/*.xml | sed -n 's/.*xml:lang="\([^"]*\)".*/\1/p' | sort -u` ; do for x in `find $(SRCDIRS) -name \*.xml | xargs grep -l IDPSSODescriptor` ; do cat $$x | sed 's;\(</*\)[a-z0-9]*:;\1;g' | sed 's/xmlns="[^"]*"//' | xmllint --xpath "/EntityDescriptor/IDPSSODescriptor/Extensions/UIInfo/DisplayName[@xml:lang='$$lang']" - 2>/dev/null | sed 's/^[ ]*//;s/[ ]*$$//' | tr -d '\n' | sed 's;<[^>]*>\([^<]*\)</[^>]*>;\1\n;g' | sed "s;^; $$x $$lang ;" | sed 's/.*/[1;31m&[0m/' ; done | sort -k 3 | uniq -d -f 2 ; done | grep . && exit 1 || true + @for lang in `find $(SRCDIRS) -name \*.xml -exec cat {} \; | sed -n 's/.*xml:lang="\([^"]*\)".*/\1/p' | sort -u` ; do for x in `find $(SRCDIRS) -name \*.xml | xargs grep -l IDPSSODescriptor` ; do cat $$x | sed 's;\(</*\)[a-z0-9]*:;\1;g' | sed 's/xmlns="[^"]*"//' | xmllint --xpath "/EntityDescriptor/IDPSSODescriptor/Extensions/UIInfo/DisplayName[@xml:lang='$$lang']" - 2>/dev/null | sed 's/^[ ]*//;s/[ ]*$$//' | tr -d '\n' | sed 's;<[^>]*>\([^<]*\)</[^>]*>;\1\n;g' | sed "s;^; $$x $$lang ;" | sed 's/.*/[1;31m&[0m/' ; done | sort -k 3 | uniq -d -f 2 ; done | grep . && exit 1 || true testIdPinSP: @echo "Check that SP:s does not define IDPSSODescriptor" @@ -175,49 +177,78 @@ checkInvalidChars: fi;\ done | grep . && exit 1 || exit 0 -test: syntaxtest testMDUI testALlevel testEduGAINchecks testRefedsRnS testMetadataUsage testBadStrings testIdPinSP testRegistrationAuthority checkInvalidChars +createMXMLfiles: + @echo Recreating MXML files + @scripts/create_mxml.sh | sed 's/.*/[1;31m&[0m/' | grep . && exit 1 || exit 0 -test2: $(SWAMIDXML) schematest testALlevel testEduGAINchecks testRefedsRnS testMetadataUsage testBadStrings testIdPinSP testRegistrationAuthority checkInvalidChars +signtest: syntaxtest testMDUI testALlevel testEduGAINchecks testRefedsRnS testMetadataUsage testBadStrings testIdPinSP testRegistrationAuthority checkInvalidChars +test: createMXMLfiles signtest + +test2: $(EDUGAINXML) $(SWAMID20XML) $(TESTINGXML) test + +.time/%.time: swamid-edugain/%.xml + @# make tidy + @xsltproc --stringparam regDate $(NOW) xslt/add-rpi.xsl $< > $<.c && mv $<.c $< + @xsltproc xslt/clean-entitydescriptor.xsl $< > $<.c && mv $<.c $< + + @# make schematest + @xmllint --xinclude --nowarning --noout --path schema --schema schema.xsd $< 2>&1 + + @echo $< done + @touch -r $< $@ .time/%.time: swamid-2.0/%.xml + @# make tidy + @xsltproc --stringparam regDate $(NOW) xslt/add-rpi.xsl $< > $<.c && mv $<.c $< + @xsltproc xslt/clean-entitydescriptor.xsl $< > $<.c && mv $<.c $< + @# make schematest @xmllint --xinclude --nowarning --noout --path schema --schema schema.xsd $< 2>&1 + @echo $< done + @touch -r $< $@ + +.time/%.time: swamid-testing/%.xml @# make tidy @xsltproc --stringparam regDate $(NOW) xslt/add-rpi.xsl $< > $<.c && mv $<.c $< @xsltproc xslt/clean-entitydescriptor.xsl $< > $<.c && mv $<.c $< - @# make testMDUI - @echo "Checking for bad lang codes" - @# Lang = ISO_639-1 - @cat $< | sed -n 's/.*xml:lang="\([^"]*\)".*/\1/p' | sort -u | grep -vxE 'cs|da|de|en|fi|fr|it|sv|no|nn|nb|is' | sed 's/.*/[1;31mBad lang code : &[0m/' | grep . && exit 1 || true - @if [ `grep EntityAttributes $< | wc -l ` -gt 2 ]; then echo "Multiple EntityAttributes" | sed 's/.*/[1;31m&[0m/' ; exit 1; fi - @if ( grep -q IDPSSODescriptor $< ) ; then \ - echo "Do IdP checks" ; \ - echo ">Checking for uniq IdP MDUI DisplayName"; \ - for lang in `cat $< | sed -n 's/.*xml:lang="\(..\)".*/\1/p' | sort -u` ; do \ - mdui_displayname=`cat $< | sed 's;\(</*\)[a-z0-9]*:;\1;g' | sed 's/xmlns="[^"]*"//' | xmllint --xpath "/EntityDescriptor/IDPSSODescriptor/Extensions/UIInfo/DisplayName[@xml:lang='$$lang']" - 2>/dev/null | sed 's/^[ ]*//;s/[ ]*$$//' | tr -d '\n' | sed 's;<[^>]*>\([^<]*\)</[^>]*>;\1\n;g'`;\ - organizationdisplayname=`cat $< | sed 's;\(</*\)[a-z0-9]*:;\1;g' | sed 's/xmlns="[^"]*"//' | xmllint --xpath "/EntityDescriptor/Organization/OrganizationDisplayName[@xml:lang='$$lang']" - 2>/dev/null | sed 's/^[ ]*//;s/[ ]*$$//' | tr -d '\n' | sed 's;<[^>]*>\([^<]*\)</[^>]*>;\1\n;g'` ;\ - for x in `find $(SRCDIRS) -name \*.xml | xargs grep -l IDPSSODescriptor | egrep -v $<` ; do cat $$x | sed 's;\(</*\)[a-z0-9]*:;\1;g' | sed 's/xmlns="[^"]*"//' | xmllint --xpath "/EntityDescriptor/IDPSSODescriptor/Extensions/UIInfo/DisplayName[@xml:lang='$$lang']" - 2>/dev/null | tr -d '\n' | sed 's;<[^>]*>\([^<]*\)</[^>]*>;\1\n;g' | egrep "^$$mdui_displayname$$" | sed "s;^;Duplicate DisplayName in $$x for lang = $$lang\n;" | sed 's/.*/[1;31m&[0m/' ; done | grep . && exit 1 || true;\ - done; \ - echo ">Checking for invalid IPHint"; \ - cat $< | sed -n 's;.*<[a-z0-9:]*IPHint>\(.*\)</[a-z0-9:]*IPHint>;\1;p' | grep -vE '^$$|^[0-9./a-fA-F:]*$$' | sed 's/.*/[1;31m&[0m/'; \ - echo ">Checking for invalid geodata (syntax is geo:xx.yy,zz.vv)";\ - cat $< | sed -n 's;.*<[a-z0-9:]*GeolocationHint>\(.*\)</[a-z0-9:]*GeolocationHint>;\1;p' | grep -vE '^$$|^geo:[0-9][0-9][0-9.]*,[0-9][0-9][0-9.]*$$' | sed 's/.*/[1;31m&[0m/' ; \ - echo ">Check for IdP:s with Logos over http";\ - cat $< | grep 'Logo .*http://' | sed 's/.*>\(.*\)<.*/[1;31m\1[0m/' | grep . && exit 1 || exit 0 ; \ - fi + @# make schematest + @xmllint --xinclude --nowarning --noout --path schema --schema schema.xsd $< 2>&1 @echo $< done @touch -r $< $@ +old_check: + @# make testMDUI + @#echo "Checking for bad lang codes" + @# Lang = ISO_639-1 + @#cat $< | sed -n 's/.*xml:lang="\([^"]*\)".*/\1/p' | sort -u | grep -vxE 'cs|da|de|en|fi|fr|it|sv|no|nn|nb|is' | sed 's/.*/[1;31mBad lang code : &[0m/' | grep . && exit 1 || true + @#if [ `grep EntityAttributes $< | wc -l ` -gt 2 ]; then echo "Multiple EntityAttributes" | sed 's/.*/[1;31m&[0m/' ; exit 1; fi + @#if ( grep -q IDPSSODescriptor $< ) ; then \ + #echo "Do IdP checks" ; \ + #echo ">Checking for uniq IdP MDUI DisplayName"; \ + #for lang in `cat $< | sed -n 's/.*xml:lang="\(..\)".*/\1/p' | sort -u` ; do \ + #mdui_displayname=`cat $< | sed 's;\(</*\)[a-z0-9]*:;\1;g' | sed 's/xmlns="[^"]*"//' | xmllint --xpath "/EntityDescriptor/IDPSSODescriptor/Extensions/UIInfo/DisplayName[@xml:lang='$$lang']" - 2>/dev/null | sed 's/^[ ]*//;s/[ ]*$$//' | tr -d '\n' | sed 's;<[^>]*>\([^<]*\)</[^>]*>;\1\n;g'`;\ + #organizationdisplayname=`cat $< | sed 's;\(</*\)[a-z0-9]*:;\1;g' | sed 's/xmlns="[^"]*"//' | xmllint --xpath "/EntityDescriptor/Organization/OrganizationDisplayName[@xml:lang='$$lang']" - 2>/dev/null | sed 's/^[ ]*//;s/[ ]*$$//' | tr -d '\n' | sed 's;<[^>]*>\([^<]*\)</[^>]*>;\1\n;g'` ;\ + #for x in `find $(SRCDIRS) -name \*.xml | xargs grep -l IDPSSODescriptor | egrep -v $<` ; do cat $$x | sed 's;\(</*\)[a-z0-9]*:;\1;g' | sed 's/xmlns="[^"]*"//' | xmllint --xpath "/EntityDescriptor/IDPSSODescriptor/Extensions/UIInfo/DisplayName[@xml:lang='$$lang']" - 2>/dev/null | tr -d '\n' | sed 's;<[^>]*>\([^<]*\)</[^>]*>;\1\n;g' | egrep "^$$mdui_displayname$$" | sed "s;^;Duplicate DisplayName in $$x for lang = $$lang\n;" | sed 's/.*/[1;31m&[0m/' ; done | grep . && exit 1 || true;\ + #done; \ + #echo ">Checking for invalid IPHint"; \ + #cat $< | sed -n 's;.*<[a-z0-9:]*IPHint>\(.*\)</[a-z0-9:]*IPHint>;\1;p' | grep -vE '^$$|^[0-9./a-fA-F:]*$$' | sed 's/.*/[1;31m&[0m/'; \ + #echo ">Checking for invalid geodata (syntax is geo:xx.yy,zz.vv)";\ + #cat $< | sed -n 's;.*<[a-z0-9:]*GeolocationHint>\(.*\)</[a-z0-9:]*GeolocationHint>;\1;p' | grep -vE '^$$|^geo:[0-9][0-9][0-9.]*,[0-9][0-9][0-9.]*$$' | sed 's/.*/[1;31m&[0m/' ; \ + #echo ">Check for IdP:s with Logos over http";\ + #cat $< | grep 'Logo .*http://' | sed 's/.*>\(.*\)<.*/[1;31m\1[0m/' | grep . && exit 1 || exit 0 ; \ + #fi + + deeptest: test testMDUIreach commit2: test2 @git diff --color || true @echo ; echo -n "Run 'git commit -av'? [Y/n/skip] " ; read x ; case $$x in "Y"|"y"|"") git commit -av ;; s|skip) ;; *) exit 1 ;; esac @git status -u - @echo "Checking for not committed files in swamid-2.0/" ; if git status --porcelain --ignored | awk '{print $$2}' | grep "^swamid-2.0/" | sed 's/^/ /' | grep . ; then echo "Not committed files in swamid-2.0/, aborting" ; exit 1 ; fi + @echo "Checking for not committed files in swamid-*/" ; if git status --porcelain --ignored | awk '{print $$2}' | egrep "^swamid-edugain|^swamid-2.0/|^swamid-testing/" | sed 's/^/ /' | grep . ; then echo "Not committed files in swamid-*/, aborting" ; exit 1 ; fi @echo ; echo -n "Run 'git push'? [Y/n] " ; read x ; case $$x in "Y"|"y"|"") ;; *) exit 1 ;; esac @git push @@ -225,6 +256,6 @@ commit: tidy test @git diff --color || true @echo ; echo -n "Run 'git commit -av'? [Y/n/skip] " ; read x ; case $$x in "Y"|"y"|"") git commit -av ;; s|skip) ;; *) exit 1 ;; esac @git status -u - @echo "Checking for not committed files in swamid-2.0/" ; if git status --porcelain --ignored | awk '{print $$2}' | grep "^swamid-2.0/" | sed 's/^/ /' | grep . ; then echo "Not committed files in swamid-2.0/, aborting" ; exit 1 ; fi + @echo "Checking for not committed files in swamid-*/" ; if git status --porcelain --ignored | awk '{print $$2}' | egrep "^swamid-edugain|^swamid-2.0/|^swamid-testing/" | sed 's/^/ /' | grep . ; then echo "Not committed files in swamid-*/, aborting" ; exit 1 ; fi @echo ; echo -n "Run 'git push'? [Y/n] " ; read x ; case $$x in "Y"|"y"|"") ;; *) exit 1 ;; esac @git push diff --git a/scripts/create_mxml.sh b/scripts/create_mxml.sh new file mode 100755 index 00000000..f0fd139f --- /dev/null +++ b/scripts/create_mxml.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# Creates MXML files to be used in signing of Metadata +if ! test -d swamid-2.0 ; then + echo "Script should be run from base directory of swamid-metadata" + exit +fi + +ls swamid-2.0/ swamid-testing/ swamid-edugain | egrep -v "/:|^$" | sort | uniq -c | awk '$1 > 1 {print $2, "exists in more than one feed"}' + +# +# eduGAIN +# +cat << EOF > swamid-edugain-idp-1.0.mxml +<?xml version="1.0" encoding="UTF-8"?> +<md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" + xmlns:xi="http://www.w3.org/2001/XInclude" + Name="http://md.swamid.se/md/swamid-idp-2.0.xml"> +EOF +grep -l IDPSSO swamid-edugain/*.xml | while read file; do + echo " <xi:include href=\"$file\"/>" >> swamid-edugain-idp-1.0.mxml +done +echo "</md:EntitiesDescriptor>" >> swamid-edugain-idp-1.0.mxml + +cat << EOF > swamid-edugain-sp-1.0.mxml +<?xml version="1.0" encoding="UTF-8"?> +<md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:shibmeta="urn:mace:shibboleth:metadata:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:shibmd="urn:mace:shibboleth:metadata:1.0"> +EOF +grep -l SPSSO swamid-edugain/*.xml | grep -v "`grep -l IDPSSO swamid-edugain/*.xml`" | while read file; do + echo " <xi:include href=\"$file\"/>" >> swamid-edugain-sp-1.0.mxml +done +echo "</md:EntitiesDescriptor>" >> swamid-edugain-sp-1.0.mxml + +# +# Swamid-2.0 +# +cat << EOF > swamid-idp-2.0.mxml +<?xml version="1.0" encoding="UTF-8"?> +<md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" + xmlns:xi="http://www.w3.org/2001/XInclude" + Name="http://md.swamid.se/md/swamid-idp-2.0.xml"> + <xi:include href="swamid-edugain-idp-1.0.mxml" xpointer="xpointer(//*[@entityID])"/> + + <!-- Opt-out from eduGAIN IDP:s --> +EOF +grep -l IDPSSO swamid-2.0/*.xml | while read file; do + echo " <xi:include href=\"$file\"/>" >> swamid-idp-2.0.mxml +done +echo "</md:EntitiesDescriptor>" >> swamid-idp-2.0.mxml + +cat << EOF > swamid-sp-2.0.mxml +<?xml version="1.0" encoding="UTF-8"?> +<md:EntitiesDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:shibmeta="urn:mace:shibboleth:metadata:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:shibmd="urn:mace:shibboleth:metadata:1.0"> + <xi:include href="swamid-edugain-idp-1.0.mxml" xpointer="xpointer(//*[@entityID])"/> + + <!-- Opt-out from eduGAIN SP:s --> +EOF +grep -l SPSSO swamid-2.0/*.xml | grep -v "`grep -l IDPSSO swamid-2.0/*.xml`" | while read file; do + echo " <xi:include href=\"$file\"/>" >> swamid-sp-2.0.mxml +done +echo "</md:EntitiesDescriptor>" >> swamid-sp-2.0.mxml + +# +# Swamid-testing +# +cat << EOF > swamid-testing-idp-1.0.mxml +<?xml version="1.0"?> +<EntitiesDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:xi="http://www.w3.org/2001/XInclude" Name="http://md.swamid.se/md/swamid-testing-idp-1.0.xml"> +EOF +egrep -l "AttributeAuthorityDescriptor|IDPSSODescriptor" swamid-testing/*.xml | while read file; do + echo " <xi:include href=\"$file\"/>" >> swamid-testing-idp-1.0.mxml +done +echo "</EntitiesDescriptor>" >> swamid-testing-idp-1.0.mxml + +cat << EOF > swamid-testing-sp-1.0.mxml +<?xml version="1.0"?> +<EntitiesDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:xi="http://www.w3.org/2001/XInclude" Name="http://md.swamid.se/md/swamid-testing-sp-1.0.xml"> +EOF +grep -l SPSSO swamid-testing/*.xml | grep -v "`egrep -l "AttributeAuthorityDescriptor|IDPSSODescriptor" swamid-testing/*.xml`" | while read file; do + echo " <xi:include href=\"$file\"/>" >> swamid-testing-sp-1.0.mxml +done +echo "</EntitiesDescriptor>" >> swamid-testing-sp-1.0.mxml diff --git a/scripts/get-metadata.sh b/scripts/get-metadata.sh index c3be62a4..c26262ba 100755 --- a/scripts/get-metadata.sh +++ b/scripts/get-metadata.sh @@ -22,13 +22,7 @@ EOF exit 1 fi -script_cwd=`dirname "$0"` -if test -d swamid-2.0 ; then - echo "Moving into swamid-2.0/" - cd swamid-2.0 - echo "$script_cwd" | grep -q ^/ || script_cwd=../$script_cwd -fi - +xmldir=swamid-2.0 update_xml=true if echo "$metadataurl" | grep -qE '^http://|^https://' ; then metadata=`curl -L -s -k -f "$metadataurl"` @@ -42,6 +36,7 @@ else else case $metadataurl in [0-9][0-9]*) + xmldir=$(curl -L -m 5 -s -k -f "https://metadata.swamid.se/?show=feed&id=${metadataurl}") urls="https://metadata.swamid.se/?rawXML=${metadataurl}" update_xml=false ;; @@ -60,6 +55,13 @@ else fi [ -n "$metadata" ] || error "Failed to fetch metadata from $metadataurl" +script_cwd=`dirname "$0"` +if test -d $xmldir ; then + echo "Moving into $xmldir/" + cd $xmldir + echo "$script_cwd" | grep -q ^/ || script_cwd=../$script_cwd +fi + entityid=`echo "$metadata" | sed -n 's/.*entityID=['\''"]\([^"]*\)['\''"].*/\1/p'` [ -n "$entityid" ] || error "Failed to find entityID in metadata" [ `echo "$entityid" | wc -l` = 1 ] || error "Multiple entityid:s found: `echo $entityid`" @@ -79,25 +81,6 @@ fi read x case $x in Y|y|"") - if $new ; then - echo -n "Add swamid-2.0/$entityidfn to swamid-sp-2.0.mxml [Y/n]? " - read x - case $x in - Y|y|"") - sed -i.bak "s;^</md:EntitiesDescriptor>; <xi:include href=\"swamid-2.0/$entityidfn\"/>\n&;" ../swamid-sp-2.0.mxml - if [ -f ../swamid-sp-2.0.mxml.bak ]; then - rm ../swamid-sp-2.0.mxml.bak - fi - echo -- - tail -n 10 ../swamid-sp-2.0.mxml | sed 's/^/ /' - echo -- - ;; - *) - echo "Not added" - ;; - esac - fi - echo "$metadata" > $entityidfn tmp=`mktemp` if $update_xml ; then @@ -122,4 +105,3 @@ case $x in echo "Nothing done" ;; esac - diff --git a/sp-with-coco-errors b/sp-with-coco-errors deleted file mode 100644 index 0ac393db..00000000 --- a/sp-with-coco-errors +++ /dev/null @@ -1,20 +0,0 @@ -swamid-2.0/auth.asiaportal.info.xml -swamid-2.0/dev-us.cloudmore.com-shibboleth.xml -swamid-2.0/dev.cloudmore.com-shibboleth.xml -swamid-2.0/digkonto-test.ita.chalmers.se.xml -swamid-2.0/indico.test.uu.se-shibboleth.xml -swamid-2.0/ki.alma.exlibrisgroup.com-mng-login.xml -swamid-2.0/ki.primo.exlibrisgroup.com-mng-login.xml -swamid-2.0/konto-test.test.hb.se-shibboleth.xml -swamid-2.0/konto.hb.se-shibboleth.xml -swamid-2.0/local.cloudmore.com-shibboleth.xml -swamid-2.0/moodle.media.nordu.net-.xml -swamid-2.0/myaccount.chalmers.se.xml -swamid-2.0/prestaging.cloudmore.com-shibboleth.xml -swamid-2.0/staging-us.cloudmore.com-shibboleth.xml -swamid-2.0/staging.cloudmore.com-shibboleth.xml -swamid-2.0/urn-mace-feide.no-services-no.inspera.assessment.test.xml -swamid-2.0/us.cloudmore.com-shibboleth.xml -swamid-2.0/www.itslearning.com-integrations-samlmetadata-saml2v2-extensions-2.xml -swamid-2.0/solid-proxy.sunet.se-sp-metadata.xml.xml -swamid-2.0/test-examensansokan.portal.chalmers.se-ny.xml |