From 8bf632d7b63971d792215d5180c2b12f7c0d1d76 Mon Sep 17 00:00:00 2001 From: Olav Morken <olav.morken@uninett.no> Date: Thu, 6 Aug 2009 12:42:37 +0000 Subject: [PATCH] SAML2: Fix declaration of 'xs' namespace. $document->importNode(...) "helpfully" optimizes away the namespace declaration for the 'xs' namespace. Fix this by avoiding to use that function. git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@1636 44740490-163a-0410-bde0-09ae8108e29a --- lib/SAML2/Assertion.php | 12 +++++++++--- lib/SAML2/EncryptedAssertion.php | 12 +++++++++--- lib/SAML2/Response.php | 4 +--- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/SAML2/Assertion.php b/lib/SAML2/Assertion.php index 4cc24573c..be4b8ea35 100644 --- a/lib/SAML2/Assertion.php +++ b/lib/SAML2/Assertion.php @@ -879,14 +879,20 @@ class SAML2_Assertion implements SAML2_SignedElement { /** * Convert this assertion to an XML element. * + * @param DOMNode|NULL $parentElement The DOM node the assertion should be created in. * @return DOMElement This assertion. */ - public function toXML() { + public function toXML(DOMNode $parentElement = NULL) { - $document = new DOMDocument(); + if ($parentElement === NULL) { + $document = new DOMDocument(); + $parentElement = $document; + } else { + $document = $parentElement->ownerDocument; + } $root = $document->createElementNS(SAML2_Const::NS_SAML, 'saml:' . 'Assertion'); - $document->appendChild($root); + $parentElement->appendChild($root); /* Ugly hack to add another namespace declaration to the root element. */ $root->setAttributeNS(SAML2_Const::NS_SAMLP, 'samlp:tmp', 'tmp'); diff --git a/lib/SAML2/EncryptedAssertion.php b/lib/SAML2/EncryptedAssertion.php index 5c22dfe37..af87ec8fb 100644 --- a/lib/SAML2/EncryptedAssertion.php +++ b/lib/SAML2/EncryptedAssertion.php @@ -143,14 +143,20 @@ class SAML2_EncryptedAssertion { /** * Convert this encrypted assertion to an XML element. * + * @param DOMNode|NULL $parentElement The DOM node the assertion should be created in. * @return DOMElement This encrypted assertion. */ - public function toXML() { + public function toXML(DOMNode $parentElement = NULL) { - $document = new DOMDocument(); + if ($parentElement === NULL) { + $document = new DOMDocument(); + $parentElement = $document; + } else { + $document = $parentElement->ownerDocument; + } $root = $document->createElementNS(SAML2_Const::NS_SAML, 'saml:' . 'EncryptedAssertion'); - $document->appendChild($root); + $parentElement->appendChild($root); $root->appendChild($document->importNode($this->encryptedData, TRUE)); diff --git a/lib/SAML2/Response.php b/lib/SAML2/Response.php index d45c73f35..adae1fed0 100644 --- a/lib/SAML2/Response.php +++ b/lib/SAML2/Response.php @@ -73,9 +73,7 @@ class SAML2_Response extends SAML2_StatusResponse { $root = parent::toUnsignedXML(); foreach ($this->assertions as $assertion) { - $node = $assertion->toXML(); - $node = $root->ownerDocument->importNode($node, TRUE); - $root->appendChild($node); + $node = $assertion->toXML($root); } return $root; -- GitLab