From e4b95abd66ec685079a700cd3716510635a4ec2d Mon Sep 17 00:00:00 2001 From: Olav Morken <olav.morken@uninett.no> Date: Thu, 3 Nov 2011 12:41:48 +0000 Subject: [PATCH] SAML2_Utils: Change extractLocalizedStrings to take the namespaceURI and localname instead of an XPath query. git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@2972 44740490-163a-0410-bde0-09ae8108e29a --- lib/SAML2/Utils.php | 16 +++++++++++----- lib/SAML2/XML/md/AttributeConsumingService.php | 4 ++-- lib/SAML2/XML/md/Organization.php | 6 +++--- lib/SAML2/XML/mdrpi/PublicationInfo.php | 3 +-- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/SAML2/Utils.php b/lib/SAML2/Utils.php index 0e37acc71..ea5dd2cc8 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 3e0b6a3de..427fd2853 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 3869b042a..5ceaeed5b 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 3e1caeea8..bf6bff8d3 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'); } -- GitLab