diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2004-11-16 14:40:39 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2004-11-16 14:40:39 +0000 |
| commit | cff9d28b650019948594770c97b390bb27a57be4 (patch) | |
| tree | 9a0bbd4579194f0ede15ea71ca00fce0bad768d1 | |
| parent | 2cab29a3c35e67ab2710786ea69180bed3259085 (diff) | |
support for samlp:StatusCode in samlp:StatusCode in ... ad vitam.
| -rw-r--r-- | lasso/xml/samlp_status.c | 6 | ||||
| -rw-r--r-- | lasso/xml/samlp_status_code.c | 25 | ||||
| -rw-r--r-- | lasso/xml/samlp_status_code.h | 3 |
3 files changed, 28 insertions, 6 deletions
diff --git a/lasso/xml/samlp_status.c b/lasso/xml/samlp_status.c index 7e8f4333..542dd1a1 100644 --- a/lasso/xml/samlp_status.c +++ b/lasso/xml/samlp_status.c @@ -54,13 +54,11 @@ get_xmlNode(LassoNode *node) xmlnode = xmlNewNode(NULL, "Status"); xmlSetNs(xmlnode, xmlNewNs(xmlnode, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX)); - if (status->StatusCode) { + if (status->StatusCode) xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(status->StatusCode))); - } - if (status->StatusMessage) { + if (status->StatusMessage) xmlNewTextChild(xmlnode, NULL, "StatusMessage", status->StatusMessage); - } return xmlnode; } diff --git a/lasso/xml/samlp_status_code.c b/lasso/xml/samlp_status_code.c index d1b2a430..a1c64a32 100644 --- a/lasso/xml/samlp_status_code.c +++ b/lasso/xml/samlp_status_code.c @@ -47,10 +47,15 @@ static xmlNode* get_xmlNode(LassoNode *node) { xmlNode *xmlnode; + LassoSamlpStatusCode *status_code = LASSO_SAMLP_STATUS_CODE(node); xmlnode = xmlNewNode(NULL, "StatusCode"); xmlSetNs(xmlnode, xmlNewNs(xmlnode, LASSO_SAML_PROTOCOL_HREF, LASSO_SAML_PROTOCOL_PREFIX)); - xmlSetProp(xmlnode, "Value", LASSO_SAMLP_STATUS_CODE(node)->Value); + if (status_code->Value) + xmlSetProp(xmlnode, "Value", status_code->Value); + + if (status_code->StatusCode) + xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(status_code->StatusCode))); return xmlnode; } @@ -58,7 +63,23 @@ get_xmlNode(LassoNode *node) static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { - LASSO_SAMLP_STATUS_CODE(node)->Value = xmlGetProp(xmlnode, "Value"); + LassoSamlpStatusCode *status_code = LASSO_SAMLP_STATUS_CODE(node); + xmlNode *t; + + if (parent_class->init_from_xml(node, xmlnode)) + return -1; + + status_code->Value = xmlGetProp(xmlnode, "Value"); + t = xmlnode->children; + while (t) { + if (t->type != XML_ELEMENT_NODE || strcmp(t->name, "StatusCode") != 0) { + t = t->next; + continue; + } + status_code->StatusCode = LASSO_SAMLP_STATUS_CODE(lasso_node_new_from_xmlNode(t)); + break; + } + return 0; } diff --git a/lasso/xml/samlp_status_code.h b/lasso/xml/samlp_status_code.h index 85ab4768..bb78c66b 100644 --- a/lasso/xml/samlp_status_code.h +++ b/lasso/xml/samlp_status_code.h @@ -44,6 +44,9 @@ typedef struct _LassoSamlpStatusCodeClass LassoSamlpStatusCodeClass; struct _LassoSamlpStatusCode { LassoNode parent; + /* <element ref="samlp:StatusCode" minOccurs="0"/> */ + LassoSamlpStatusCode *StatusCode; + /* <attribute name="Value" type="QName" use="required"/> */ char *Value; }; |
