diff options
| author | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2010-07-16 19:34:19 +0000 |
|---|---|---|
| committer | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2010-07-16 19:34:19 +0000 |
| commit | 2fc20aa68250f24d38e90fc86ead46291c55a33f (patch) | |
| tree | c187c088e961a7df788bfc70584cc540f87cbd8b | |
| parent | 950565e5a29ea6d0fb9052fd06a00042a53f4370 (diff) | |
| download | lasso-2fc20aa68250f24d38e90fc86ead46291c55a33f.tar.gz lasso-2fc20aa68250f24d38e90fc86ead46291c55a33f.tar.xz lasso-2fc20aa68250f24d38e90fc86ead46291c55a33f.zip | |
[Core] dump custom signature parameters in lasso dumps
The signature parameters are serialized as global attributes from the
http://lasso.entrouvert.org/lasso/namespaces/0.0 named:
SignatureType
SignatureMethod
PrivateKey
PrivateKeyPassword
Certificate
| -rw-r--r-- | lasso/xml/xml.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c index 3e92101d..830b88d5 100644 --- a/lasso/xml/xml.c +++ b/lasso/xml/xml.c @@ -65,6 +65,7 @@ static void lasso_node_traversal(LassoNode *node, void (*do_to_node)(LassoNode * static LassoNode* lasso_node_new_from_xmlNode_with_type(xmlNode *xmlnode, char *typename); static void lasso_node_remove_original_xmlnode(LassoNode *node, SnippetType type); +static xmlNs * get_or_define_ns(xmlNode *xmlnode, xmlChar *ns_uri); GHashTable *dst_services_by_href = NULL; /* ID-WSF 1 extra DST services, indexed on href */ GHashTable *dst_services_by_prefix = NULL; /* ID-WSF 1 extra DST services, indexed on prefix */ @@ -1362,6 +1363,7 @@ lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode) GSList *tmp_attr; xmlAttr *node_attr; + any_attribute = G_STRUCT_MEMBER_P(node, snippet_any_attribute->offset); if (*any_attribute == NULL) { *any_attribute = g_hash_table_new_full( @@ -1558,6 +1560,36 @@ lasso_node_impl_get_xmlNode(LassoNode *node, gboolean lasso_dump) } } + /* store signature parameters */ + if (lasso_dump) + { + LassoSignatureType type; + LassoSignatureMethod method; + const char *private_key = NULL; + const char *private_key_password = NULL; + const char *certificate = NULL; + xmlNsPtr ns = NULL; + char buffer[64] = { 0 }; + + lasso_node_get_signature(node, &type, &method, (char **)&private_key, + (char **)&private_key_password, + (char **)&certificate); + if (private_key) { + ns = get_or_define_ns(xmlnode, BAD_CAST LASSO_LASSO_HREF); + sprintf(buffer, "%u", type); + xmlSetNsProp(xmlnode, ns, BAD_CAST "SignatureType", BAD_CAST buffer); + sprintf(buffer, "%u", method); + xmlSetNsProp(xmlnode, ns, BAD_CAST "SignatureMethod", BAD_CAST buffer); + xmlSetNsProp(xmlnode, ns, BAD_CAST "PrivateKey", BAD_CAST private_key); + if (private_key_password) { + xmlSetNsProp(xmlnode, ns, BAD_CAST "PrivateKeyPassword", BAD_CAST private_key_password); + } + if (certificate) { + xmlSetNsProp(xmlnode, ns, BAD_CAST "Certificate", BAD_CAST certificate); + } + } + } + return xmlnode; } |
