From 854c2127c650d73ea57992a0eaf44982365dfbfd Mon Sep 17 00:00:00 2001 From: m0ark <33390109+m0ark@users.noreply.github.com> Date: Thu, 24 May 2018 08:39:33 +0200 Subject: [PATCH] Update MetaDataStorageSource.php Support both hint.cidr and DiscoHints->IPHint --- .../Metadata/MetaDataStorageSource.php | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/SimpleSAML/Metadata/MetaDataStorageSource.php b/lib/SimpleSAML/Metadata/MetaDataStorageSource.php index 74822bdbf..8460ef52a 100644 --- a/lib/SimpleSAML/Metadata/MetaDataStorageSource.php +++ b/lib/SimpleSAML/Metadata/MetaDataStorageSource.php @@ -177,18 +177,27 @@ abstract class SimpleSAML_Metadata_MetaDataStorageSource $metadataSet = $this->getMetadataSet($set); foreach ($metadataSet as $index => $entry) { - - if (!array_key_exists('DiscoHints', $entry)) { - continue; + + $cidrHints = array(); + + // support hint.cidr for idp discovery + if (array_key_exists('hint.cidr', $entry) && is_array($entry['hint.cidr'])) { + $cidrHints = $entry['hint.cidr']; } - if (!array_key_exists('IPHint', $entry['DiscoHints'])) { - continue; + + // support discohints in idp metadata for idp discovery + if (array_key_exists('DiscoHints', $entry) + && array_key_exists('IPHint', $entry['DiscoHints']) + && is_array($entry['DiscoHints']['IPHint'])) { + // merge with hints derived from discohints, but prioritize hint.cidr in case it is used + $cidrHints = array_merge($entry['DiscoHints']['IPHint'], $cidrHints); } - if (!is_array($entry['DiscoHints']['IPHint'])) { + + if (empty($cidrHints)) { continue; } - foreach ($entry['DiscoHints']['IPHint'] as $hint_entry) { + foreach ($cidrHints as $hint_entry) { if (SimpleSAML\Utils\Net::ipCIDRcheck($hint_entry, $ip)) { if ($type === 'entityid') { return $entry['entityid']; -- GitLab