summaryrefslogtreecommitdiffstats
path: root/lasso/xml
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-07-16 19:34:19 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-07-16 19:34:19 +0000
commit2fc20aa68250f24d38e90fc86ead46291c55a33f (patch)
treec187c088e961a7df788bfc70584cc540f87cbd8b /lasso/xml
parent950565e5a29ea6d0fb9052fd06a00042a53f4370 (diff)
downloadlasso-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
Diffstat (limited to 'lasso/xml')
-rw-r--r--lasso/xml/xml.c32
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;
}