diff options
author | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2010-09-03 19:07:08 +0200 |
---|---|---|
committer | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2010-09-03 19:07:08 +0200 |
commit | 3f336a8e83515b7136a04361199be082cd3d8555 (patch) | |
tree | 8a3dbd55b0950cf25898300f8f55cb6749aff4c7 /lasso/xml | |
parent | 9ab6b944f14556422fd4f279be5f568b0b18cfe4 (diff) | |
parent | aaca9ce9927d9ea1568dfa89ba05a41b40333e9b (diff) | |
download | lasso-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.h | 42 | ||||
-rw-r--r-- | lasso/xml/tools.c | 4 | ||||
-rw-r--r-- | lasso/xml/xml.c | 75 | ||||
-rw-r--r-- | lasso/xml/xml.h | 6 |
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; |