summaryrefslogtreecommitdiffstats
path: root/lasso/xml/samlp_response.c
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2004-11-17 23:04:57 +0000
committerFrederic Peters <fpeters@entrouvert.com>2004-11-17 23:04:57 +0000
commit59bdda3549b13cbe97ce49fdb541f8bad006f08e (patch)
tree5f8809c208fafea2e5fda8078b032636ebece261 /lasso/xml/samlp_response.c
parentcfc07351978eef632c1b06f06f7246c2860cfc9c (diff)
downloadlasso-59bdda3549b13cbe97ce49fdb541f8bad006f08e.tar.gz
lasso-59bdda3549b13cbe97ce49fdb541f8bad006f08e.tar.xz
lasso-59bdda3549b13cbe97ce49fdb541f8bad006f08e.zip
use same "xmlsnippets" (name will probably change) to build xml nodes
Diffstat (limited to 'lasso/xml/samlp_response.c')
-rw-r--r--lasso/xml/samlp_response.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/lasso/xml/samlp_response.c b/lasso/xml/samlp_response.c
index fc2bc8cd..8a089432 100644
--- a/lasso/xml/samlp_response.c
+++ b/lasso/xml/samlp_response.c
@@ -47,30 +47,34 @@ Schema fragment (oasis-sstc-saml-schema-protocol-1.0.xsd):
/* private methods */
/*****************************************************************************/
+#define snippets() \
+ LassoSamlpResponse *response = LASSO_SAMLP_RESPONSE(node); \
+ struct XmlSnippet snippets[] = { \
+ { "Assertion", 'n', (void**)&(response->Assertion) }, \
+ { "Status", 'n', (void**)&(response->Status) }, \
+ { NULL, 0, NULL} \
+ };
+
static LassoNodeClass *parent_class = NULL;
static xmlNode*
get_xmlNode(LassoNode *node)
{
xmlNode *xmlnode, *t;
+ snippets();
xmlnode = parent_class->get_xmlNode(node);
xmlNodeSetName(xmlnode, "Response");
+ lasso_node_build_xml_with_snippets(xmlnode, snippets);
- if (LASSO_SAMLP_RESPONSE(node)->Status) /* XXX: is mandatory */
- xmlAddChild(xmlnode, lasso_node_get_xmlNode(
- LASSO_NODE(LASSO_SAMLP_RESPONSE(node)->Status)));
-
- if (LASSO_SAMLP_RESPONSE(node)->Assertion) {
- t = xmlAddChild(xmlnode, lasso_node_get_xmlNode(
- LASSO_NODE(LASSO_SAMLP_RESPONSE(node)->Assertion)));
- if (strcmp(t->ns->href, LASSO_LIB_HREF) == 0) {
- /* liberty nodes are not allowed in samlp nodes */
- xmlSetNs(t, xmlNewNs(xmlnode, LASSO_SAML_ASSERTION_HREF,
- LASSO_SAML_ASSERTION_PREFIX));
- xmlNewNsProp(t, xmlNewNs(xmlnode, LASSO_XSI_HREF, LASSO_XSI_PREFIX),
- "type", "lib:AssertionType");
- }
+ for (t = xmlnode->children; t && strcmp(t->name, "Assertion"); t = t->next) ;
+
+ if (t && strcmp(t->ns->href, LASSO_LIB_HREF) == 0) {
+ /* liberty nodes are not allowed in samlp nodes */
+ xmlSetNs(t, xmlNewNs(xmlnode, LASSO_SAML_ASSERTION_HREF,
+ LASSO_SAML_ASSERTION_PREFIX));
+ xmlNewNsProp(t, xmlNewNs(xmlnode, LASSO_XSI_HREF, LASSO_XSI_PREFIX),
+ "type", "lib:AssertionType");
}
return xmlnode;
@@ -79,12 +83,7 @@ get_xmlNode(LassoNode *node)
static int
init_from_xml(LassoNode *node, xmlNode *xmlnode)
{
- LassoSamlpResponse *response = LASSO_SAMLP_RESPONSE(node);
- struct XmlSnippet snippets[] = {
- { "Assertion", 'n', (void**)&(response->Assertion) },
- { "Status", 'n', (void**)&(response->Status) },
- { NULL, 0, NULL}
- };
+ snippets();
if (parent_class->init_from_xml(node, xmlnode))
return -1;