From cc5730e58da57d4bdadc81968d5d2ab0e86c94bd Mon Sep 17 00:00:00 2001 From: Olav Morken <olav.morken@uninett.no> Date: Fri, 10 Sep 2010 13:13:37 +0000 Subject: [PATCH] Log received XML messages to log file when debug is set to TRUE. git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@2541 44740490-163a-0410-bde0-09ae8108e29a --- lib/SAML2/HTTPPost.php | 5 ++++ lib/SAML2/HTTPRedirect.php | 5 ++++ lib/SAML2/SOAPClient.php | 4 +++ lib/SimpleSAML/Bindings/Shib13/Artifact.php | 4 +++ lib/SimpleSAML/Bindings/Shib13/HTTPPost.php | 4 +++ lib/SimpleSAML/Utilities.php | 29 +++++++++++++++++++++ 6 files changed, 51 insertions(+) diff --git a/lib/SAML2/HTTPPost.php b/lib/SAML2/HTTPPost.php index 3a0a85c8b..fc98537f4 100644 --- a/lib/SAML2/HTTPPost.php +++ b/lib/SAML2/HTTPPost.php @@ -26,6 +26,9 @@ class SAML2_HTTPPost extends SAML2_Binding { $msgStr = $message->toSignedXML(); $msgStr = $msgStr->ownerDocument->saveXML($msgStr); + + SimpleSAML_Utilities::debugMessage($msgStr, 'out'); + $msgStr = base64_encode($msgStr); $msgStr = htmlspecialchars($msgStr); @@ -86,6 +89,8 @@ END; $msg = base64_decode($msg); + SimpleSAML_Utilities::debugMessage($msg, 'in'); + $document = new DOMDocument(); $document->loadXML($msg); $xml = $document->firstChild; diff --git a/lib/SAML2/HTTPRedirect.php b/lib/SAML2/HTTPRedirect.php index 71a32b42a..24f13c104 100644 --- a/lib/SAML2/HTTPRedirect.php +++ b/lib/SAML2/HTTPRedirect.php @@ -30,6 +30,9 @@ class SAML2_HTTPRedirect extends SAML2_Binding { $msgStr = $message->toUnsignedXML(); $msgStr = $msgStr->ownerDocument->saveXML($msgStr); + + SimpleSAML_Utilities::debugMessage($msgStr, 'out'); + $msgStr = gzdeflate($msgStr); $msgStr = base64_encode($msgStr); @@ -112,6 +115,8 @@ class SAML2_HTTPRedirect extends SAML2_Binding { throw new Exception('Unknown SAMLEncoding: ' . var_export($encoding, TRUE)); } + SimpleSAML_Utilities::debugMessage($msg, 'in'); + $document = new DOMDocument(); $document->loadXML($msg); $xml = $document->firstChild; diff --git a/lib/SAML2/SOAPClient.php b/lib/SAML2/SOAPClient.php index 292d16699..fc1824fea 100644 --- a/lib/SAML2/SOAPClient.php +++ b/lib/SAML2/SOAPClient.php @@ -91,6 +91,8 @@ class SAML2_SOAPClient { $request = $msg->toSignedXML(); $request = self::START_SOAP_ENVELOPE . $request->ownerDocument->saveXML($request) . self::END_SOAP_ENVELOPE; + SimpleSAML_Utilities::debugMessage($request, 'out'); + $action = 'http://www.oasis-open.org/committees/security'; $version = '1.1'; $destination = $msg->getDestination(); @@ -102,6 +104,8 @@ class SAML2_SOAPClient { throw new Exception('Empty SOAP response, check peer certificate.'); } + SimpleSAML_Utilities::debugMessage($soapresponsexml, 'in'); + // Convert to SAML2_Message (DOMElement) $dom = new DOMDocument(); if (!$dom->loadXML($soapresponsexml)) { diff --git a/lib/SimpleSAML/Bindings/Shib13/Artifact.php b/lib/SimpleSAML/Bindings/Shib13/Artifact.php index 63241b16d..7ed7561e1 100644 --- a/lib/SimpleSAML/Bindings/Shib13/Artifact.php +++ b/lib/SimpleSAML/Bindings/Shib13/Artifact.php @@ -122,6 +122,8 @@ class SimpleSAML_Bindings_Shib13_Artifact { $artifacts = self::getArtifacts(); $request = self::buildRequest($artifacts); + SimpleSAML_Utilities::debugMessage($msgStr, 'out'); + $url = $idpMetadata->getDefaultEndpoint('ArtifactResolutionService', array('urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding')); $url = $url['Location']; @@ -166,6 +168,8 @@ class SimpleSAML_Bindings_Shib13_Artifact { throw new SimpleSAML_Error_Exception('Failed to retrieve assertion from IdP.'); } + SimpleSAML_Utilities::debugMessage($response, 'in'); + /* Find the response in the SOAP message. */ $response = self::extractResponse($response); diff --git a/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php b/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php index bd6cff3a7..ee769e5a4 100644 --- a/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php +++ b/lib/SimpleSAML/Bindings/Shib13/HTTPPost.php @@ -79,6 +79,8 @@ class SimpleSAML_Bindings_Shib13_HTTPPost { $response = $responsedom->saveXML(); + SimpleSAML_Utilities::debugMessage($response, 'out'); + if ($this->configuration->getBoolean('debug', FALSE)) { $p = new SimpleSAML_XHTML_Template($this->configuration, 'post-debug.php'); $p->data['header'] = 'SAML (Shibboleth 1.3) Response Debug-mode'; @@ -114,6 +116,8 @@ class SimpleSAML_Bindings_Shib13_HTTPPost { $rawResponse = $post['SAMLResponse']; $samlResponseXML = base64_decode($rawResponse); + SimpleSAML_Utilities::debugMessage($samlResponseXML, 'in'); + SimpleSAML_Utilities::validateXMLDocument($samlResponseXML, 'saml11'); $samlResponse = new SimpleSAML_XML_Shib13_AuthnResponse(); diff --git a/lib/SimpleSAML/Utilities.php b/lib/SimpleSAML/Utilities.php index 5b78098e6..02057ee25 100644 --- a/lib/SimpleSAML/Utilities.php +++ b/lib/SimpleSAML/Utilities.php @@ -1906,6 +1906,35 @@ class SimpleSAML_Utilities { SimpleSAML_Utilities::redirect($url); } + + /** + * Helper function to log messages that we send or receive. + * + * @param string $message The message, as an XML string. + * @param string $type Whether this message is sent or received. + */ + public static function debugMessage($message, $type) { + assert('is_string($message)'); + assert('$type === "out" || $type === "in"'); + + $globalConfig = SimpleSAML_Configuration::getInstance(); + if (!$globalConfig->getBoolean('debug', FALSE)) { + /* Message debug disabled. */ + return; + } + + if ($type === 'in') { + SimpleSAML_Logger::debug('Received message:'); + } else { + SimpleSAML_Logger::debug('Sending message:'); + } + + $str = self::formatXMLString($message); + foreach (explode("\n", $str) as $line) { + SimpleSAML_Logger::debug($line); + } + } + } ?> \ No newline at end of file -- GitLab