diff --git a/lib/SAML2/Utils.php b/lib/SAML2/Utils.php index 0e37acc71988b4daf709e818c8fdf23b1bf108df..ea5dd2cc85aa218ff39cdf85fbc13521f9a757c5 100644 --- a/lib/SAML2/Utils.php +++ b/lib/SAML2/Utils.php @@ -434,15 +434,21 @@ class SAML2_Utils { /** * Extract localized strings from a set of nodes. * - * @param DOMElement $parent The element we should rund the XPath query on. - * @param string $query The XPath query we should use to retrieve the nodes. + * @param DOMElement $parent The element that contains the localized strings. + * @param string $namespaceURI The namespace URI the localized strings should have. + * @param string $localName The localName of the localized strings. * @return array Localized strings. */ - public static function extractLocalizedStrings(DOMElement $parent, $query) { - assert('is_string($query)'); + public static function extractLocalizedStrings(DOMElement $parent, $namespaceURI, $localName) { + assert('is_string($namespaceURI)'); + assert('is_string($localName)'); $ret = array(); - foreach (self::xpQuery($parent, $query) as $node) { + for ($node = $parent->firstChild; $node !== NULL; $node = $node->nextSibling) { + if ($node->namespaceURI !== $namespaceURI || $node->localName !== $localName) { + continue; + } + if ($node->hasAttribute('xml:lang')) { $language = $node->getAttribute('xml:lang'); } else { diff --git a/lib/SAML2/XML/md/AttributeConsumingService.php b/lib/SAML2/XML/md/AttributeConsumingService.php index 3e0b6a3dea16cbdbedc2c85d0052b30f83ab8ceb..427fd28533303b3e12f729fc352b6ed803e02565 100644 --- a/lib/SAML2/XML/md/AttributeConsumingService.php +++ b/lib/SAML2/XML/md/AttributeConsumingService.php @@ -73,12 +73,12 @@ class SAML2_XML_md_AttributeConsumingService { $this->isDefault = SAML2_Utils::parseBoolean($xml, 'isDefault', NULL); - $this->ServiceName = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:ServiceName'); + $this->ServiceName = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'ServiceName'); if (empty($this->ServiceName)) { throw new Exception('Missing ServiceName in AttributeConsumingService.'); } - $this->ServiceDescription = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:ServiceDescription'); + $this->ServiceDescription = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'ServiceDescription'); foreach (SAML2_Utils::xpQuery($xml, './saml_metadata:RequestedAttribute') as $ra) { $this->RequestedAttribute[] = new SAML2_XML_md_RequestedAttribute($ra); diff --git a/lib/SAML2/XML/md/Organization.php b/lib/SAML2/XML/md/Organization.php index 3869b042ae5ae7f04116e3a164d3f1ac51ed209f..5ceaeed5bca1dcce75757ca44468feaadaf84bba 100644 --- a/lib/SAML2/XML/md/Organization.php +++ b/lib/SAML2/XML/md/Organization.php @@ -56,17 +56,17 @@ class SAML2_XML_md_Organization { $this->Extensions = SAML2_XML_md_Extensions::getList($xml); - $this->OrganizationName = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:OrganizationName'); + $this->OrganizationName = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'OrganizationName'); if (empty($this->OrganizationName)) { $this->OrganizationName = array('invalid' => ''); } - $this->OrganizationDisplayName = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:OrganizationDisplayName'); + $this->OrganizationDisplayName = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'OrganizationDisplayName'); if (empty($this->OrganizationDisplayName)) { $this->OrganizationDisplayName = array('invalid' => ''); } - $this->OrganizationURL = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:OrganizationURL'); + $this->OrganizationURL = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'OrganizationURL'); if (empty($this->OrganizationURL)) { $this->OrganizationURL = array('invalid' => ''); } diff --git a/lib/SAML2/XML/mdrpi/PublicationInfo.php b/lib/SAML2/XML/mdrpi/PublicationInfo.php index 3e1caeea8d25b89d93b79622c82f717d3678fd4d..bf6bff8d39d6f876fe9b3c81dcb67c756ea4532f 100644 --- a/lib/SAML2/XML/mdrpi/PublicationInfo.php +++ b/lib/SAML2/XML/mdrpi/PublicationInfo.php @@ -64,8 +64,7 @@ class SAML2_XML_mdrpi_PublicationInfo { $this->publicationId = $xml->getAttribute('publicationId'); } - $query = './*[local-name()="UsagePolicy" and namespace-uri()="' . SAML2_XML_mdrpi_Common::NS_MDRPI . '"]'; - $this->UsagePolicy = SAML2_Utils::extractLocalizedStrings($xml, $query); + $this->UsagePolicy = SAML2_Utils::extractLocalizedStrings($xml, SAML2_XML_mdrpi_Common::NS_MDRPI, 'UsagePolicy'); }