From 94afa151834cd6b21bc5a49ef6a5ddb06a9e80e2 Mon Sep 17 00:00:00 2001 From: tpazderka Date: Fri, 23 Oct 2015 15:42:59 +0200 Subject: [PATCH] Ommit StatusMessage from Error response if empty Although the resulting XML is valid, it fails validation by java-opensaml2 --- src/saml2/s_utils.py | 24 ++++++++++++------------ tests/test_12_s_utils.py | 21 ++++++++++++++++++++- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/saml2/s_utils.py b/src/saml2/s_utils.py index c3962c0..2b31ead 100644 --- a/src/saml2/s_utils.py +++ b/src/saml2/s_utils.py @@ -236,20 +236,20 @@ def error_status_factory(info): msg = info.args[0] except IndexError: msg = "%s" % info - status = samlp.Status( - status_message=samlp.StatusMessage(text=msg), - status_code=samlp.StatusCode( - value=samlp.STATUS_RESPONDER, - status_code=samlp.StatusCode( - value=exc_val))) else: - (errcode, text) = info - status = samlp.Status( - status_message=samlp.StatusMessage(text=text), - status_code=samlp.StatusCode( - value=samlp.STATUS_RESPONDER, - status_code=samlp.StatusCode(value=errcode))) + (exc_val, msg) = info + if msg: + status_msg = samlp.StatusMessage(text=msg) + else: + status_msg = None + + status = samlp.Status( + status_message=status_msg, + status_code=samlp.StatusCode( + value=samlp.STATUS_RESPONDER, + status_code=samlp.StatusCode( + value=exc_val))) return status diff --git a/tests/test_12_s_utils.py b/tests/test_12_s_utils.py index 3b4c8ab..4e1833f 100644 --- a/tests/test_12_s_utils.py +++ b/tests/test_12_s_utils.py @@ -30,8 +30,15 @@ ERROR_STATUS_NO_HEADER = ( 'Value="urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal" ' '/>Error resolving ' 'principal') -ERROR_STATUS = '%s%s' % (XML_HEADER, ERROR_STATUS_NO_HEADER) +ERROR_STATUS_NO_HEADER_EMPTY = ( +'') + +ERROR_STATUS = '%s%s' % (XML_HEADER, ERROR_STATUS_NO_HEADER) +ERROR_STATUS_EMPTY = '%s%s' % (XML_HEADER, ERROR_STATUS_NO_HEADER_EMPTY) def _eq(l1, l2): return set(l1) == set(l2) @@ -89,6 +96,18 @@ def test_status_from_exception(): assert status_text in (ERROR_STATUS_NO_HEADER, ERROR_STATUS) +def test_status_from_tuple(): + stat = utils.error_status_factory((samlp.STATUS_UNKNOWN_PRINCIPAL, 'Error resolving principal')) + status_text = "%s" % stat + assert status_text == ERROR_STATUS + + +def test_status_from_tuple_empty_message(): + stat = utils.error_status_factory((samlp.STATUS_UNKNOWN_PRINCIPAL, None)) + status_text = "%s" % stat + assert status_text == ERROR_STATUS_EMPTY + + def test_attribute_sn(): attr = utils.do_attributes({"surName": ("Jeter", "")}) assert len(attr) == 1