summaryrefslogtreecommitdiffstats
path: root/lasso/xml
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-09-03 19:07:08 +0200
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2010-09-03 19:07:08 +0200
commit3f336a8e83515b7136a04361199be082cd3d8555 (patch)
tree8a3dbd55b0950cf25898300f8f55cb6749aff4c7 /lasso/xml
parent9ab6b944f14556422fd4f279be5f568b0b18cfe4 (diff)
parentaaca9ce9927d9ea1568dfa89ba05a41b40333e9b (diff)
downloadlasso-3f336a8e83515b7136a04361199be082cd3d8555.tar.gz
lasso-3f336a8e83515b7136a04361199be082cd3d8555.tar.xz
lasso-3f336a8e83515b7136a04361199be082cd3d8555.zip
Merge branch 'develop' into hotfixes-2.3.1
Diffstat (limited to 'lasso/xml')
-rw-r--r--lasso/xml/strings.h42
-rw-r--r--lasso/xml/tools.c4
-rw-r--r--lasso/xml/xml.c75
-rw-r--r--lasso/xml/xml.h6
4 files changed, 120 insertions, 7 deletions
diff --git a/lasso/xml/strings.h b/lasso/xml/strings.h
index 9638e9c1..e3610316 100644
--- a/lasso/xml/strings.h
+++ b/lasso/xml/strings.h
@@ -107,6 +107,13 @@
*/
#define LASSO_SOAP_FAULT_CODE_VERSION_MISMATCH "s:VersionMismatch"
+/**
+ * LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT:
+ *
+ * An artifact content is present but Lasso failed to rebuild the corresponding XML content.
+ */
+#define LASSO_PRIVATE_STATUS_CODE_FAILED_TO_RESTORE_ARTIFACT "FailedToRestoreArtifact"
+
/*****************************************************************************/
/* Lasso */
/*****************************************************************************/
@@ -131,6 +138,41 @@
*/
#define LASSO_PYTHON_HREF "http://www.entrouvert.org/namespaces/python/0.0"
+/**
+ * LASSO_SIGNATURE_TYPE_ATTRIBUTE:
+ *
+ * Attribute name for the Lasso signature type attribute.
+ */
+#define LASSO_SIGNATURE_TYPE_ATTRIBUTE BAD_CAST "SignatureType"
+
+/**
+ * LASSO_SIGNATURE_METHOD_ATTRIBUTE:
+ *
+ * Attribute name for the Lasso signature type attribute.
+ */
+#define LASSO_SIGNATURE_METHOD_ATTRIBUTE BAD_CAST "SignatureMethod"
+
+/**
+ * LASSO_PRIVATE_KEY_ATTRIBUTE:
+ *
+ * Attribute name for the Lasso private key attribute.
+ */
+#define LASSO_PRIVATE_KEY_ATTRIBUTE BAD_CAST "PrivateKey"
+
+/**
+ * LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE:
+ *
+ * Attribute name for the Lasso private key attribute.
+ */
+#define LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE BAD_CAST "PrivateKeyPassword"
+
+/**
+ * LASSO_CERTIFICATE_ATTRIBUTE:
+ *
+ * Attribute name for the Lasso private key attribute.
+ */
+#define LASSO_CERTIFICATE_ATTRIBUTE BAD_CAST "Certificate"
+
/*****************************************************************************/
/* Liberty Alliance ID-FF */
/*****************************************************************************/
diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c
index 523a7dda..38f81dd6 100644
--- a/lasso/xml/tools.c
+++ b/lasso/xml/tools.c
@@ -518,6 +518,8 @@ lasso_query_sign(char *query, LassoSignatureMethod sign_method, const char *priv
new_query = g_strdup_printf("%s&SigAlg=%s", query, t);
xmlFree(t);
break;
+ case LASSO_SIGNATURE_METHOD_LAST:
+ g_assert_not_reached();
}
/* build buffer digest */
@@ -568,6 +570,8 @@ lasso_query_sign(char *query, LassoSignatureMethod sign_method, const char *priv
case LASSO_SIGNATURE_METHOD_DSA_SHA1:
s_new_query = g_strdup_printf("%s&Signature=%s", new_query, e_b64_sigret);
break;
+ case LASSO_SIGNATURE_METHOD_LAST:
+ g_assert_not_reached();
}
done:
diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c
index db20ac25..eff4e98c 100644
--- a/lasso/xml/xml.c
+++ b/lasso/xml/xml.c
@@ -1129,6 +1129,27 @@ _lasso_node_collect_namespaces(GHashTable **namespaces, xmlNode *node)
}
}
+gboolean
+lasso_get_integer_attribute(xmlNode *node, xmlChar *attribute_name, xmlChar *ns_href, int *integer, long int low, long int high) {
+ xmlChar *content = NULL;
+ gboolean rc = FALSE;
+ long int what;
+
+ g_assert (integer);
+ content = xmlGetNsProp(node, attribute_name, ns_href);
+ if (! content)
+ goto cleanup;
+ if (! lasso_string_to_xsd_integer((char*)content, &what))
+ goto cleanup;
+ if (*integer < low || *integer >= high)
+ goto cleanup;
+ *integer = what;
+ rc = TRUE;
+cleanup:
+ lasso_release_xml_string(content);
+ return rc;
+}
+
/** FIXME: return a real error code */
static int
lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode)
@@ -1141,6 +1162,7 @@ lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode)
struct XmlSnippet *snippet_any = NULL;
struct XmlSnippet *snippet_any_attribute = NULL;
struct XmlSnippet *snippet_collect_namespaces = NULL;
+ struct XmlSnippet *snippet_signature = NULL;
GSList *unknown_nodes = NULL;
GSList *known_attributes = NULL;
gboolean keep_xmlnode = FALSE;
@@ -1350,6 +1372,10 @@ lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode)
snippet_collect_namespaces = snippet;
}
+ if (type == SNIPPET_SIGNATURE) {
+ snippet_signature = snippet;
+ }
+
if (type == SNIPPET_ATTRIBUTE) {
if (snippet->type & SNIPPET_ANY) {
snippet_any_attribute = snippet;
@@ -1406,6 +1432,44 @@ lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode)
_lasso_node_collect_namespaces(value, xmlnode);
}
+ /* Collect signature parameters */
+ {
+ LassoSignatureMethod method;
+ LassoSignatureType type;
+ xmlChar *private_key = NULL;
+ xmlChar *private_key_password = NULL;
+ xmlChar *certificate = NULL;
+
+ while (snippet_signature) {
+ int what;
+ if (! lasso_get_integer_attribute(xmlnode, LASSO_SIGNATURE_METHOD_ATTRIBUTE,
+ BAD_CAST LASSO_LIB_HREF, &what,
+ LASSO_SIGNATURE_METHOD_RSA_SHA1,
+ LASSO_SIGNATURE_METHOD_LAST))
+ break;
+ method = what;
+ if (! lasso_get_integer_attribute(xmlnode, LASSO_SIGNATURE_METHOD_ATTRIBUTE,
+ BAD_CAST LASSO_LIB_HREF, &what, LASSO_SIGNATURE_TYPE_NONE+1,
+ LASSO_SIGNATURE_TYPE_LAST))
+ break;
+ type = what;
+ private_key = xmlGetNsProp(xmlnode, LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE,
+ BAD_CAST LASSO_LIB_HREF);
+ if (! private_key)
+ break;
+ private_key = xmlGetNsProp(xmlnode, LASSO_PRIVATE_KEY_ATTRIBUTE, BAD_CAST
+ LASSO_LIB_HREF);
+ certificate = xmlGetNsProp(xmlnode, LASSO_CERTIFICATE_ATTRIBUTE, BAD_CAST
+ LASSO_LIB_HREF);
+ lasso_node_set_signature(node, type,
+ method, (char*) private_key, (char*) private_key_password, (char*) certificate);
+ }
+ lasso_release_xml_string(private_key);
+ lasso_release_xml_string(private_key_password);
+ lasso_release_xml_string(certificate);
+ }
+
+ /* Collect other children */
if (unknown_nodes && snippet_any) {
xmlNode *t = unknown_nodes->data;
void *tmp;
@@ -1414,6 +1478,7 @@ lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode)
(*(char**)value) = tmp;
}
+ /* Collect other attributes */
if (snippet_any_attribute) {
GHashTable **any_attribute;
GSList *tmp_attr;
@@ -1633,15 +1698,15 @@ lasso_node_impl_get_xmlNode(LassoNode *node, gboolean lasso_dump)
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);
+ xmlSetNsProp(xmlnode, ns, LASSO_SIGNATURE_TYPE_ATTRIBUTE, 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);
+ xmlSetNsProp(xmlnode, ns, LASSO_SIGNATURE_METHOD_ATTRIBUTE, BAD_CAST buffer);
+ xmlSetNsProp(xmlnode, ns, LASSO_PRIVATE_KEY_ATTRIBUTE, BAD_CAST private_key);
if (private_key_password) {
- xmlSetNsProp(xmlnode, ns, BAD_CAST "PrivateKeyPassword", BAD_CAST private_key_password);
+ xmlSetNsProp(xmlnode, ns, LASSO_PRIVATE_KEY_PASSWORD_ATTRIBUTE, BAD_CAST private_key_password);
}
if (certificate) {
- xmlSetNsProp(xmlnode, ns, BAD_CAST "Certificate", BAD_CAST certificate);
+ xmlSetNsProp(xmlnode, ns, LASSO_CERTIFICATE_ATTRIBUTE, BAD_CAST certificate);
}
}
}
diff --git a/lasso/xml/xml.h b/lasso/xml/xml.h
index 06709c02..d4283956 100644
--- a/lasso/xml/xml.h
+++ b/lasso/xml/xml.h
@@ -84,7 +84,8 @@ typedef enum {
typedef enum {
LASSO_SIGNATURE_TYPE_NONE = 0,
LASSO_SIGNATURE_TYPE_SIMPLE,
- LASSO_SIGNATURE_TYPE_WITHX509
+ LASSO_SIGNATURE_TYPE_WITHX509,
+ LASSO_SIGNATURE_TYPE_LAST
} LassoSignatureType;
@@ -97,7 +98,8 @@ typedef enum {
**/
typedef enum {
LASSO_SIGNATURE_METHOD_RSA_SHA1 = 1,
- LASSO_SIGNATURE_METHOD_DSA_SHA1
+ LASSO_SIGNATURE_METHOD_DSA_SHA1,
+ LASSO_SIGNATURE_METHOD_LAST
} LassoSignatureMethod;