summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-06-24 00:00:35 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-06-24 00:00:35 +0000
commit5c9c919917fb9cabc1ddd3b2bf641da3098ecb07 (patch)
tree4a2bd8c3ce44c36cebd59d698aa1509a60c6e88e
parentccfaf01702cdf41bd1be20781203d06650cbfc8d (diff)
*** empty log message ***
-rw-r--r--lasso/Attic/protocols/Makefile.am6
-rw-r--r--lasso/Attic/protocols/authn_response.c493
-rw-r--r--lasso/Attic/protocols/authn_response.h4
-rw-r--r--lasso/id-ff/Makefile.am2
-rw-r--r--lasso/id-ff/server_environ.c2
-rw-r--r--lasso/id-ff/server_environ.h5
-rw-r--r--lasso/id-ff/session_environ.c281
-rw-r--r--lasso/id-ff/session_environ.h57
-rw-r--r--lasso/id-ff/user_environ.c2
-rw-r--r--lasso/id-ff/user_environ.h12
-rw-r--r--lasso/xml/lib_authn_request.c1
-rw-r--r--lasso/xml/samlp_request.c3
-rw-r--r--lasso/xml/samlp_request_abstract.c15
-rw-r--r--lasso/xml/samlp_request_abstract.h21
-rw-r--r--lasso/xml/samlp_response_abstract.c16
-rw-r--r--lasso/xml/samlp_response_abstract.h29
-rw-r--r--lasso/xml/tools.c6
17 files changed, 512 insertions, 443 deletions
diff --git a/lasso/Attic/protocols/Makefile.am b/lasso/Attic/protocols/Makefile.am
index de71698d..dc1e9187 100644
--- a/lasso/Attic/protocols/Makefile.am
+++ b/lasso/Attic/protocols/Makefile.am
@@ -31,7 +31,8 @@ liblasso_protocols_la_SOURCES = \
name_identifier_mapping_request.c \
name_identifier_mapping_response.c \
register_name_identifier_request.c \
- register_name_identifier_response.c
+ register_name_identifier_response.c \
+ request.c
liblassoinclude_HEADERS = \
protocols.h \
@@ -43,4 +44,5 @@ liblassoinclude_HEADERS = \
name_identifier_mapping_request.h \
name_identifier_mapping_response.h \
register_name_identifier_request.h \
- register_name_identifier_response.h
+ register_name_identifier_response.h \
+ request.h
diff --git a/lasso/Attic/protocols/authn_response.c b/lasso/Attic/protocols/authn_response.c
index 6b68f2ee..8f7d41a8 100644
--- a/lasso/Attic/protocols/authn_response.c
+++ b/lasso/Attic/protocols/authn_response.c
@@ -25,153 +25,154 @@
#include <lasso/protocols/authn_response.h>
#include <lasso/protocols/authn_request.h>
-
-static GObjectClass *parent_class = NULL;
-static void
-lasso_authn_response_set_status(LassoAuthnResponse *response,
- const xmlChar *statusCodeValue) {
- LassoNode *status, *status_code;
+//static GObjectClass *parent_class = NULL;
- status = lasso_samlp_status_new();
+/* static void */
+/* lasso_authn_response_set_status(LassoAuthnResponse *response, */
+/* const xmlChar *statusCodeValue) { */
+/* LassoNode *status, *status_code; */
- status_code = lasso_samlp_status_code_new();
- lasso_samlp_status_code_set_value(LASSO_SAMLP_STATUS_CODE(status_code),
- statusCodeValue);
+/* status = lasso_samlp_status_new(); */
- lasso_samlp_status_set_statusCode(LASSO_SAMLP_STATUS(status),
- LASSO_SAMLP_STATUS_CODE(status_code));
+/* status_code = lasso_samlp_status_code_new(); */
+/* lasso_samlp_status_code_set_value(LASSO_SAMLP_STATUS_CODE(status_code), */
+/* statusCodeValue); */
- lasso_samlp_response_set_status(LASSO_SAMLP_RESPONSE(response),
- LASSO_SAMLP_STATUS(status));
- lasso_node_destroy(status_code);
- lasso_node_destroy(status);
-}
+/* lasso_samlp_status_set_statusCode(LASSO_SAMLP_STATUS(status), */
+/* LASSO_SAMLP_STATUS_CODE(status_code)); */
+
+/* lasso_samlp_response_set_status(LASSO_SAMLP_RESPONSE(response), */
+/* LASSO_SAMLP_STATUS(status)); */
+/* lasso_node_destroy(status_code); */
+/* lasso_node_destroy(status); */
+/* } */
/*****************************************************************************/
/* public methods */
/*****************************************************************************/
-gboolean
-lasso_authn_response_must_authenticate(LassoAuthnResponse *response,
- gboolean is_authenticated)
-{
- GData *gd;
- gboolean must_authenticate = FALSE;
- /* default values for ForceAuthn and IsPassive */
- gboolean forceAuthn = FALSE;
- gboolean isPassive = TRUE;
+/* gboolean */
+/* lasso_authn_response_must_authenticate(LassoAuthnResponse *response, */
+/* LassoAuthnRe *request, */
+/* gboolean is_authenticated) */
+/* { */
+/* GData *gd; */
+/* gboolean must_authenticate = FALSE; */
+/* /\* default values for ForceAuthn and IsPassive *\/ */
+/* gboolean forceAuthn = FALSE; */
+/* gboolean isPassive = TRUE; */
- gd = lasso_query_to_dict(LASSO_AUTHN_RESPONSE(response)->query);
- /* Get ForceAuthn and IsPassive */
- if (xmlStrEqual(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ForceAuthn"), 0), "true")) {
- forceAuthn = TRUE;
- }
- if (xmlStrEqual((xmlChar *)lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IsPassive"), 0), "false")) {
- isPassive = FALSE;
- }
+/* gd = lasso_query_to_dict(LASSO_AUTHN_RESPONSE(response)->query); */
+/* /\* Get ForceAuthn and IsPassive *\/ */
+/* if (xmlStrEqual(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ForceAuthn"), 0), "true")) { */
+/* forceAuthn = TRUE; */
+/* } */
+/* if (xmlStrEqual((xmlChar *)lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IsPassive"), 0), "false")) { */
+/* isPassive = FALSE; */
+/* } */
- if ((forceAuthn == TRUE || is_authenticated == FALSE) && isPassive == FALSE) {
- must_authenticate = TRUE;
- }
- else
- if (is_authenticated == FALSE && isPassive == TRUE) {
- lasso_authn_response_set_status(response, lassoLibStatusCodeNoPassive);
- }
+/* if ((forceAuthn == TRUE || is_authenticated == FALSE) && isPassive == FALSE) { */
+/* must_authenticate = TRUE; */
+/* } */
+/* else */
+/* if (is_authenticated == FALSE && isPassive == TRUE) { */
+/* lasso_authn_response_set_status(response, lassoLibStatusCodeNoPassive); */
+/* } */
- g_datalist_clear(&gd);
- return (must_authenticate);
-}
-
-void
-lasso_authn_response_process_authentication_result(LassoAuthnResponse *response,
- gboolean authentication_result)
-{
- if (authentication_result == FALSE) {
- lasso_authn_response_set_status(response, lassoLibStatusCodeUnknownPrincipal);
- }
-}
-
-gboolean
-lasso_authn_response_verify_signature(LassoAuthnResponse *response,
- xmlChar *public_key_file,
- xmlChar *private_key_file)
-{
- g_return_val_if_fail(LASSO_IS_AUTHN_RESPONSE(response), FALSE);
-
- gboolean signature_status;
-
- signature_status = lasso_query_verify_signature(LASSO_AUTHN_RESPONSE(response)->query,
- public_key_file,
- private_key_file);
-
- /* Status & StatusCode */
- if (signature_status == 0 || signature_status == 2) {
- switch (signature_status) {
- case 0:
- lasso_authn_response_set_status(response, lassoLibStatusCodeInvalidSignature);
- break;
- case 2:
- lasso_authn_response_set_status(response, lassoLibStatusCodeUnsignedAuthnRequest);
- break;
- }
- }
-
- if (signature_status == 1)
- return (TRUE);
- else
- return (FALSE);
-}
+/* g_datalist_clear(&gd); */
+/* return (must_authenticate); */
+/* } */
+
+/* void */
+/* lasso_authn_response_process_authentication_result(LassoAuthnResponse *response, */
+/* gboolean authentication_result) */
+/* { */
+/* if (authentication_result == FALSE) { */
+/* lasso_authn_response_set_status(response, lassoLibStatusCodeUnknownPrincipal); */
+/* } */
+/* } */
+
+/* gboolean */
+/* lasso_authn_response_verify_signature(LassoAuthnResponse *response, */
+/* xmlChar *public_key_file, */
+/* xmlChar *private_key_file) */
+/* { */
+/* g_return_val_if_fail(LASSO_IS_AUTHN_RESPONSE(response), FALSE); */
+
+/* gboolean signature_status; */
+
+/* signature_status = lasso_query_verify_signature(LASSO_AUTHN_RESPONSE(response)->query, */
+/* public_key_file, */
+/* private_key_file); */
+
+/* /\* Status & StatusCode *\/ */
+/* if (signature_status == 0 || signature_status == 2) { */
+/* switch (signature_status) { */
+/* case 0: */
+/* lasso_authn_response_set_status(response, lassoLibStatusCodeInvalidSignature); */
+/* break; */
+/* case 2: */
+/* lasso_authn_response_set_status(response, lassoLibStatusCodeUnsignedAuthnRequest); */
+/* break; */
+/* } */
+/* } */
+
+/* if (signature_status == 1) */
+/* return (TRUE); */
+/* else */
+/* return (FALSE); */
+/* } */
/*****************************************************************************/
/* overrided parent classes methods */
/*****************************************************************************/
-static void
-lasso_authn_response_dispose(LassoAuthnResponse *response)
-{
- parent_class->dispose(G_OBJECT(response));
-}
+/* static void */
+/* lasso_authn_response_dispose(LassoAuthnResponse *response) */
+/* { */
+/* parent_class->dispose(G_OBJECT(response)); */
+/* } */
/* override lasso_node_dump() method */
-static xmlChar *
-lasso_authn_response_dump(LassoAuthnResponse *response,
- const xmlChar *encoding,
- int format)
-{
- LassoNode *response_copy, *request, *response_dump;
- xmlChar *dump;
-
- response_dump = lasso_node_new();
- LASSO_NODE_GET_CLASS(response_dump)->set_name(response_dump, "LassoDumpAuthnResponse");
- response_copy = lasso_node_copy(LASSO_NODE(response));
- LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, response_copy, FALSE);
- if (response->query != NULL) {
- request = lasso_authn_request_new_from_query(response->query);
- LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, request, FALSE);
- }
- else {
- request = lasso_node_copy(response->request);
- LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, request, FALSE);
- }
- dump = lasso_node_dump(response_dump, encoding, format);
-
- lasso_node_destroy(response_copy);
- lasso_node_destroy(request);
- lasso_node_destroy(response_dump);
-
- return (dump);
-}
-
-static void
-lasso_authn_response_finalize(LassoAuthnResponse *response)
-{
- if (response->query != NULL)
- g_free(response->query);
- if (response->request != NULL)
- lasso_node_destroy(response->request);
- parent_class->finalize(G_OBJECT(response));
-}
+/* static xmlChar * */
+/* lasso_authn_response_dump(LassoAuthnResponse *response, */
+/* const xmlChar *encoding, */
+/* int format) */
+/* { */
+/* LassoNode *response_copy, *request, *response_dump; */
+/* xmlChar *dump; */
+
+/* response_dump = lasso_node_new(); */
+/* LASSO_NODE_GET_CLASS(response_dump)->set_name(response_dump, "LassoDumpAuthnResponse"); */
+/* response_copy = lasso_node_copy(LASSO_NODE(response)); */
+/* LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, response_copy, FALSE); */
+/* if (response->query != NULL) { */
+/* request = lasso_authn_request_new_from_query(response->query); */
+/* LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, request, FALSE); */
+/* } */
+/* else { */
+/* request = lasso_node_copy(response->request); */
+/* LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, request, FALSE); */
+/* } */
+/* dump = lasso_node_dump(response_dump, encoding, format); */
+
+/* lasso_node_destroy(response_copy); */
+/* lasso_node_destroy(request); */
+/* lasso_node_destroy(response_dump); */
+
+/* return (dump); */
+/* } */
+
+/* static void */
+/* lasso_authn_response_finalize(LassoAuthnResponse *response) */
+/* { */
+/* if (response->query != NULL) */
+/* g_free(response->query); */
+/* if (response->request != NULL) */
+/* lasso_node_destroy(response->request); */
+/* parent_class->finalize(G_OBJECT(response)); */
+/* } */
/*****************************************************************************/
/* instance and class init functions */
@@ -186,13 +187,13 @@ static void
lasso_authn_response_class_init(LassoAuthnResponseClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(class);
- LassoNodeClass *lasso_node_class = LASSO_NODE_CLASS(class);
+ //LassoNodeClass *lasso_node_class = LASSO_NODE_CLASS(class);
- parent_class = g_type_class_peek_parent(class);
+ //parent_class = g_type_class_peek_parent(class);
/* override parent classes methods */
- gobject_class->dispose = (void *)lasso_authn_response_dispose;
- gobject_class->finalize = (void *)lasso_authn_response_finalize;
- lasso_node_class->dump = lasso_authn_response_dump;
+ //gobject_class->dispose = (void *)lasso_authn_response_dispose;
+ //gobject_class->finalize = (void *)lasso_authn_response_finalize;
+ //lasso_node_class->dump = lasso_authn_response_dump;
}
GType lasso_authn_response_get_type() {
@@ -218,72 +219,47 @@ GType lasso_authn_response_get_type() {
return this_type;
}
-LassoNode*
-lasso_authn_response_new_from_dump(xmlChar *buffer)
-{
- LassoNode *response, *request, *response_dump, *request_dump, *node_dump;
- xmlNodePtr xmlNode_response, xmlNode_request;
-
- g_return_val_if_fail(buffer != NULL, NULL);
-
- response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL));
- request = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_REQUEST, NULL));
-
- node_dump = lasso_node_new_from_dump(buffer);
- /* get xmlNodes */
- response_dump = lasso_node_get_child(node_dump, "AuthnResponse", NULL);
- request_dump = lasso_node_get_child(node_dump, "AuthnRequest", NULL);
- /* xmlNodes are copies because they will be freed when node_dump will be destroy */
- xmlNode_response = xmlCopyNode(LASSO_NODE_GET_CLASS(response)->get_xmlNode(response_dump), 1);
- xmlNode_request = xmlCopyNode(LASSO_NODE_GET_CLASS(response)->get_xmlNode(request_dump), 1);
-
- /* put xmlNodes in LassoNodes */
- LASSO_NODE_GET_CLASS(response)->set_xmlNode(response, xmlNode_response);
- LASSO_NODE_GET_CLASS(request)->set_xmlNode(request, xmlNode_request);
-
- LASSO_AUTHN_RESPONSE(response)->request = request;
- LASSO_AUTHN_RESPONSE(response)->query = NULL;
+/* LassoNode* */
+/* lasso_authn_response_new_from_dump(xmlChar *buffer) */
+/* { */
+/* LassoNode *response, *request, *response_dump, *request_dump, *node_dump; */
+/* xmlNodePtr xmlNode_response, xmlNode_request; */
- lasso_node_destroy(response_dump);
- lasso_node_destroy(request_dump);
- lasso_node_destroy(node_dump);
+/* g_return_val_if_fail(buffer != NULL, NULL); */
- return (response);
-}
-
-LassoNode*
-lasso_authn_response_new_from_export(xmlChar *buffer,
- gint type)
-{
- xmlChar *buffer_decoded = xmlMalloc(strlen(buffer));
- LassoNode *response, *node;
- xmlNodePtr xmlNode_response;
+/* response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL)); */
+/* request = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_REQUEST, NULL)); */
- g_return_val_if_fail(buffer != NULL, NULL);
+/* node_dump = lasso_node_new_from_dump(buffer); */
+/* /\* get xmlNodes *\/ */
+/* response_dump = lasso_node_get_child(node_dump, "AuthnResponse", NULL); */
+/* request_dump = lasso_node_get_child(node_dump, "AuthnRequest", NULL); */
+/* /\* xmlNodes are copies because they will be freed when node_dump will be destroy *\/ */
+/* xmlNode_response = xmlCopyNode(LASSO_NODE_GET_CLASS(response)->get_xmlNode(response_dump), 1); */
+/* xmlNode_request = xmlCopyNode(LASSO_NODE_GET_CLASS(response)->get_xmlNode(request_dump), 1); */
- xmlSecBase64Decode(buffer, buffer_decoded, strlen(buffer));
+/* /\* put xmlNodes in LassoNodes *\/ */
+/* LASSO_NODE_GET_CLASS(response)->set_xmlNode(response, xmlNode_response); */
+/* LASSO_NODE_GET_CLASS(request)->set_xmlNode(request, xmlNode_request); */
- response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL));
-
- node = lasso_node_new_from_dump(buffer_decoded);
- xmlNode_response = xmlCopyNode(LASSO_NODE_GET_CLASS(node)->get_xmlNode(node), 1);
- LASSO_NODE_GET_CLASS(response)->set_xmlNode(response, xmlNode_response);
+/* LASSO_AUTHN_RESPONSE(response)->request = request; */
+/* LASSO_AUTHN_RESPONSE(response)->query = NULL; */
- LASSO_AUTHN_RESPONSE(response)->request = NULL;
- LASSO_AUTHN_RESPONSE(response)->query = NULL;
- lasso_node_destroy(node);
+/* lasso_node_destroy(response_dump); */
+/* lasso_node_destroy(request_dump); */
+/* lasso_node_destroy(node_dump); */
- return (response);
-}
+/* return (response); */
+/* } */
LassoNode*
lasso_authn_response_new(char *providerID, LassoNode *request){
- LassoAuthnResponse *response;
+ LassoNode *response;
xmlChar *id, *time, content;
g_return_val_if_fail(providerID != NULL, NULL);
- response = g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL);
+ response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL));
/* ResponseID */
id = lasso_build_unique_id(32);
@@ -316,76 +292,101 @@ lasso_authn_response_new(char *providerID, LassoNode *request){
}
LassoNode*
-lasso_authn_response_new_from_request_query(gchar *query,
- const xmlChar *providerID)
+lasso_authn_response_new_from_export(xmlChar *buffer,
+ gint type)
{
- GData *gd;
- LassoNode *response;
- xmlChar *id, *time;
-
- g_return_val_if_fail(query != NULL, NULL);
- g_return_val_if_fail(providerID != NULL, NULL);
-
- response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL));
+ xmlChar *buffer_decoded = xmlMalloc(strlen(buffer));
+ LassoNode *response, *node;
+ xmlNodePtr xmlNode_response;
- gd = lasso_query_to_dict(query);
- /* store query - need to verify signature */
- LASSO_AUTHN_RESPONSE(response)->query = g_strdup(query);
- LASSO_AUTHN_RESPONSE(response)->request = lasso_authn_request_new_from_query(query);
-
- /* ResponseID */
- id = lasso_build_unique_id(32);
- lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
- (const xmlChar *)id);
- xmlFree(id);
- /* MajorVersion */
- lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
- lassoLibMajorVersion);
- /* MinorVersion */
- lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
- lassoLibMinorVersion);
- /* IssueInstance */
- time = lasso_get_current_time();
- lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
- (const xmlChar *)time);
- xmlFree(time);
-
- /* ProviderID */
- lasso_lib_authn_response_set_providerID(LASSO_LIB_AUTHN_RESPONSE(response),
- providerID);
-
- /* RelayState */
- if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0) != NULL) {
- lasso_lib_authn_response_set_relayState(LASSO_LIB_AUTHN_RESPONSE(response),
- lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0));
- }
- /* InResponseTo */
- if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0) != NULL) {
- lasso_samlp_response_abstract_set_inResponseTo(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
- lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0));
- }
+ g_return_val_if_fail(buffer != NULL, NULL);
- /* consent */
- if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0) != NULL) {
- lasso_lib_authn_response_set_consent(LASSO_LIB_AUTHN_RESPONSE(response),
- lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0));
- }
+ xmlSecBase64Decode(buffer, buffer_decoded, strlen(buffer));
- /* Recipient */
- lasso_samlp_response_abstract_set_recipient(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
- lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0));
+ response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL));
- /* Status & StatusCode */
- lasso_authn_response_set_status(response, lassoSamlStatusCodeSuccess);
+ node = lasso_node_new_from_dump(buffer_decoded);
+ xmlNode_response = xmlCopyNode(LASSO_NODE_GET_CLASS(node)->get_xmlNode(node), 1);
+ LASSO_NODE_GET_CLASS(response)->set_xmlNode(response, xmlNode_response);
- g_datalist_clear(&gd);
+/* LASSO_AUTHN_RESPONSE(response)->request = NULL; */
+/* LASSO_AUTHN_RESPONSE(response)->query = NULL; */
+ lasso_node_destroy(node);
return (response);
}
-LassoNode*
-lasso_authn_response_new_from_lareq(xmlChar *lareq,
- const xmlChar *providerID)
-{
+/* LassoNode* */
+/* lasso_authn_response_new_from_request_query(gchar *query, */
+/* const xmlChar *providerID) */
+/* { */
+/* GData *gd; */
+/* LassoNode *response; */
+/* xmlChar *id, *time; */
+
+/* g_return_val_if_fail(query != NULL, NULL); */
+/* g_return_val_if_fail(providerID != NULL, NULL); */
+
+/* response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL)); */
+
+/* gd = lasso_query_to_dict(query); */
+/* /\* /\\* store query - need to verify signature *\\/ *\/ */
+/* /\* LASSO_AUTHN_RESPONSE(response)->query = g_strdup(query); *\/ */
+/* /\* LASSO_AUTHN_RESPONSE(response)->request = lasso_authn_request_new_from_query(query); *\/ */
+
+/* /\* ResponseID *\/ */
+/* id = lasso_build_unique_id(32); */
+/* lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */
+/* (const xmlChar *)id); */
+/* xmlFree(id); */
+/* /\* MajorVersion *\/ */
+/* lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */
+/* lassoLibMajorVersion); */
+/* /\* MinorVersion *\/ */
+/* lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */
+/* lassoLibMinorVersion); */
+/* /\* IssueInstance *\/ */
+/* time = lasso_get_current_time(); */
+/* lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */
+/* (const xmlChar *)time); */
+/* xmlFree(time); */
+
+/* /\* ProviderID *\/ */
+/* lasso_lib_authn_response_set_providerID(LASSO_LIB_AUTHN_RESPONSE(response), */
+/* providerID); */
+
+/* /\* RelayState *\/ */
+/* if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0) != NULL) { */
+/* lasso_lib_authn_response_set_relayState(LASSO_LIB_AUTHN_RESPONSE(response), */
+/* lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0)); */
+/* } */
+/* /\* InResponseTo *\/ */
+/* if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0) != NULL) { */
+/* lasso_samlp_response_abstract_set_inResponseTo(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */
+/* lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0)); */
+/* } */
+
+/* /\* consent *\/ */
+/* if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0) != NULL) { */
+/* lasso_lib_authn_response_set_consent(LASSO_LIB_AUTHN_RESPONSE(response), */
+/* lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0)); */
+/* } */
+
+/* /\* Recipient *\/ */
+/* lasso_samlp_response_abstract_set_recipient(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */
+/* lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0)); */
+
+/* /\* Status & StatusCode *\/ */
+/* lasso_authn_response_set_status(response, lassoSamlStatusCodeSuccess); */
+
+/* g_datalist_clear(&gd); */
+
+/* return (response); */
+/* } */
+
+/* LassoNode* */
+/* lasso_authn_response_new_from_lareq(xmlChar *lareq, */
+/* const xmlChar *providerID) */
+/* { */
-}
+/* } */
diff --git a/lasso/Attic/protocols/authn_response.h b/lasso/Attic/protocols/authn_response.h
index 4097ab6c..66b95f4f 100644
--- a/lasso/Attic/protocols/authn_response.h
+++ b/lasso/Attic/protocols/authn_response.h
@@ -46,8 +46,6 @@ typedef struct _LassoAuthnResponseClass LassoAuthnResponseClass;
struct _LassoAuthnResponse {
LassoLibAuthnResponse parent;
/*< public >*/
- gchar *query;
- LassoNode *request;
/*< private >*/
};
@@ -62,7 +60,7 @@ LASSO_EXPORT LassoNode* lasso_authn_response_new_from_dump (xmlC
LASSO_EXPORT LassoNode* lasso_authn_response_new_from_export (xmlChar *buffer,
gint type);
-LASSO_EXPORT LassoNode* lasso_authn_response_new (char *providerID,
+LASSO_EXPORT LassoNode* lasso_authn_response_new (char *providerID,
LassoNode *request);
LASSO_EXPORT LassoNode* lasso_authn_response_new_from_request_query (gchar *query,
diff --git a/lasso/id-ff/Makefile.am b/lasso/id-ff/Makefile.am
index a9fc0e90..6232ba56 100644
--- a/lasso/id-ff/Makefile.am
+++ b/lasso/id-ff/Makefile.am
@@ -15,7 +15,6 @@ INCLUDES = \
noinst_LTLIBRARIES = liblasso-environs.la
liblasso_environs_la_SOURCES = \
- environ.c \
identity.c \
provider.c \
server_environ.c \
@@ -23,7 +22,6 @@ liblasso_environs_la_SOURCES = \
user_environ.c
liblassoinclude_HEADERS = \
- environ.h \
identity.h \
provider.h \
server_environ.h \
diff --git a/lasso/id-ff/server_environ.c b/lasso/id-ff/server_environ.c
index b36c6ec1..b9d3200a 100644
--- a/lasso/id-ff/server_environ.c
+++ b/lasso/id-ff/server_environ.c
@@ -98,7 +98,7 @@ GType lasso_server_environ_get_type() {
(GInstanceInitFunc) lasso_server_environ_instance_init,
};
- this_type = g_type_register_static(LASSO_TYPE_ENVIRON,
+ this_type = g_type_register_static(G_TYPE_OBJECT,
"LassoServerEnviron",
&this_info, 0);
}
diff --git a/lasso/id-ff/server_environ.h b/lasso/id-ff/server_environ.h
index a1c295cc..6007118f 100644
--- a/lasso/id-ff/server_environ.h
+++ b/lasso/id-ff/server_environ.h
@@ -31,7 +31,6 @@ extern "C" {
#endif /* __cplusplus */
#include <lasso/xml/xml.h>
-#include <lasso/environs/environ.h>
#include <lasso/environs/provider.h>
#define LASSO_TYPE_SERVER_ENVIRON (lasso_server_environ_get_type())
@@ -45,7 +44,7 @@ typedef struct _LassoServerEnviron LassoServerEnviron;
typedef struct _LassoServerEnvironClass LassoServerEnvironClass;
struct _LassoServerEnviron {
- LassoEnviron parent;
+ GObject parent;
GPtrArray *providers;
@@ -57,7 +56,7 @@ struct _LassoServerEnviron {
};
struct _LassoServerEnvironClass {
- LassoEnvironClass parent;
+ GObjectClass parent;
};
LASSO_EXPORT GType lasso_server_environ_get_type (void);
diff --git a/lasso/id-ff/session_environ.c b/lasso/id-ff/session_environ.c
index 05f7a048..e76e3af1 100644
--- a/lasso/id-ff/session_environ.c
+++ b/lasso/id-ff/session_environ.c
@@ -22,25 +22,50 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <lasso/xml/samlp_response.h>
+#include <lasso/protocols/request.h>
+#include <lasso/protocols/authn_response.h>
#include <lasso/environs/session_environ.h>
/*****************************************************************************/
+/* functions */
+/*****************************************************************************/
+
+static void
+set_response_status(LassoNode *response,
+ const xmlChar *statusCodeValue) {
+ LassoNode *status, *status_code;
+
+ status = lasso_samlp_status_new();
+
+ status_code = lasso_samlp_status_code_new();
+ lasso_samlp_status_code_set_value(LASSO_SAMLP_STATUS_CODE(status_code),
+ statusCodeValue);
+
+ lasso_samlp_status_set_statusCode(LASSO_SAMLP_STATUS(status),
+ LASSO_SAMLP_STATUS_CODE(status_code));
+
+ lasso_samlp_response_set_status(LASSO_SAMLP_RESPONSE(response),
+ LASSO_SAMLP_STATUS(status));
+ lasso_node_destroy(status_code);
+ lasso_node_destroy(status);
+}
+
+/*****************************************************************************/
/* public methods */
/*****************************************************************************/
-char *lasso_session_environ_build_authnRequest(LassoSessionEnviron *session,
- const char *responseProtocolProfile,
- gboolean isPassive,
- gboolean forceAuthn,
- const char *nameIDPolicy){
+char *lasso_session_environ_build_authn_request(LassoSessionEnviron *session,
+ const char *responseProtocolProfile,
+ gboolean isPassive,
+ gboolean forceAuthn,
+ const char *nameIDPolicy){
LassoProvider *provider;
char *str, *requestProtocolProfile;
char *url, *query;
int url_len, query_len;
- //LassoEnviron *environ = LASSO_ENVIRON(session);
-
provider = lasso_server_environ_get_provider(session->server, session->local_providerID);
if(!provider)
return(NULL);
@@ -48,13 +73,13 @@ char *lasso_session_environ_build_authnRequest(LassoSessionEnviron *session,
/* build the request object */
session->request = LASSO_NODE(lasso_authn_request_new(session->local_providerID));
if(responseProtocolProfile!=NULL)
- lasso_lib_authn_request_set_protocolProfile(session->request, responseProtocolProfile);
+ lasso_lib_authn_request_set_protocolProfile(LASSO_LIB_AUTHN_REQUEST(session->request), responseProtocolProfile);
if(nameIDPolicy!=NULL)
- lasso_lib_authn_request_set_nameIDPolicy(session->request, nameIDPolicy);
+ lasso_lib_authn_request_set_nameIDPolicy(LASSO_LIB_AUTHN_REQUEST(session->request), nameIDPolicy);
- lasso_lib_authn_request_set_isPassive(session->request, isPassive);
- lasso_lib_authn_request_set_forceAuthn(session->request, forceAuthn);
+ lasso_lib_authn_request_set_isPassive(LASSO_LIB_AUTHN_REQUEST(session->request), isPassive);
+ lasso_lib_authn_request_set_forceAuthn(LASSO_LIB_AUTHN_REQUEST(session->request), forceAuthn);
/* export request depending on the request protocol profile */
str = NULL;
@@ -69,7 +94,7 @@ char *lasso_session_environ_build_authnRequest(LassoSessionEnviron *session,
str = (char *)malloc(url_len+query_len+2); // +2 for the ? character and the end line character
sprintf(str, "%s?%s", url, query);
- session->request_protocol_profile = lasso_protocol_profile_type_get;
+ session->request_protocol_method = lasso_protocol_method_get;
}
else if(!strcmp(requestProtocolProfile, lassoLibProtocolProfileSSOPost)){
printf("TODO - export the AuthnRequest in a formular\n");
@@ -78,117 +103,126 @@ char *lasso_session_environ_build_authnRequest(LassoSessionEnviron *session,
return(str);
}
-gboolean lasso_session_environ_process_assertion(LassoSessionEnviron *session, char *str){
- LassoNode *statusCode, *assertion;
- LassoNode *nameIdentifier, *idpProvidedNameIdentifier;
- char *artifact, *statusCodeValue;
-
- LassoEnviron *environ = LASSO_ENVIRON(session);
-
- artifact = strstr(str, "SAMLArt");
- if(artifact){
- printf("TODO - lasso_session_environ_process_assertion() - process artifact\n");
- }
- else{
- printf("DEBUG - POST response, process the authnResponse\n");
- session->response = LASSO_NODE(lasso_authn_response_new_from_export(str, 0));
-
- /* process the status code value */
- statusCode = lasso_node_get_child(session->response, "StatusCode", NULL);
- statusCodeValue = lasso_node_get_attr_value(statusCode, "Value");
- if(strcmp(statusCodeValue, lassoSamlStatusCodeSuccess))
- return(FALSE);
-
- /* process the assertion */
- assertion = lasso_node_get_child(session->response, "Assertion", NULL);
- if(!assertion)
- return(FALSE);
-
- /* set the name identifiers */
- nameIdentifier = lasso_node_get_child(assertion, "NameIdentifier", NULL);
- printf("name identifier %s(%s)\n", lasso_node_get_content(nameIdentifier), lasso_node_export(nameIdentifier));
-
- idpProvidedNameIdentifier = lasso_node_get_child(assertion, "IDPProvidedNameIdentifier", NULL);
-
-
- }
-
- return(FALSE);
+xmlChar*
+lasso_session_environ_process_artifact(LassoSessionEnviron *session,
+ gchar *artifact)
+{
+ session->request = lasso_request_new(artifact);
+ return (lasso_node_export_to_soap(session->request));
}
-gboolean lasso_session_environ_process_authnRequest(LassoSessionEnviron *session,
- char *str_request,
- int protocol_profile_type,
- gboolean has_cookie){
- gboolean must_authenticate = TRUE;
- char *response_protocol_profile;
- char *content;
- gboolean isPassive = TRUE;
- gboolean forceAuthn = FALSE;
-
- LassoEnviron *environ = LASSO_ENVIRON(session);
-
- printf("plop, process AuthnRequest\n");
-
- /* get the protocol profile */
- if(protocol_profile_type==lasso_protocol_profile_type_get){
- session->request = LASSO_NODE(lasso_authn_request_new_from_query(str_request));
- }
- else if(protocol_profile_type==lasso_protocol_profile_type_post){
- printf("TODO - lasso_session_environ_process_authnRequest() - implement the parsing of the post request\n");
- }
- else{
- printf("ERROR - lasso_session_environ_process_authnRequest() - Unknown protocol profile\n");
- }
+gboolean
+lasso_session_environ_process_authn_response(LassoSessionEnviron *session,
+ xmlChar *response)
+{
+ LassoNode *statusCode, *assertion;
+ LassoNode *nameIdentifier, *idpProvidedNameIdentifier;
+ char *artifact, *statusCodeValue;
- /* Verify the signature */
- printf("TODO - verify the signature\n");
+ printf("DEBUG - POST response, process the authnResponse\n");
+ session->response = LASSO_NODE(lasso_authn_response_new_from_export(response, 0));
+
+ /* process the status code value */
+ statusCode = lasso_node_get_child(session->response, "StatusCode", NULL);
+ statusCodeValue = lasso_node_get_attr_value(statusCode, "Value");
+ if(strcmp(statusCodeValue, lassoSamlStatusCodeSuccess))
+ return(FALSE);
+
+ /* process the assertion */
+ assertion = lasso_node_get_child(session->response, "Assertion", NULL);
+ if(!assertion)
+ return(FALSE);
+
+ /* set the name identifiers */
+ nameIdentifier = lasso_node_get_child(assertion, "NameIdentifier", NULL);
+ printf("name identifier %s(%s)\n", lasso_node_get_content(nameIdentifier), lasso_node_export(nameIdentifier));
+
+ idpProvidedNameIdentifier = lasso_node_get_child(assertion, "IDPProvidedNameIdentifier", NULL);
+
+ return(TRUE);
+}
- /* set the peer ProviderID from the request */
- content = lasso_node_get_child_content(session->request, "ProviderID", NULL);
- session->peer_providerID = (char *)malloc(strlen(content)+1);
- sprintf(session->peer_providerID, "%s", content);
- printf("request from %s\n", session->peer_providerID);
+gboolean lasso_session_environ_process_authn_request(LassoSessionEnviron *session,
+ char *request,
+ int request_method,
+ gboolean is_authenticated){
+ LassoProvider *provider;
+ xmlChar *protocolProfile;
+ gboolean must_authenticate = TRUE;
+ gboolean isPassive = TRUE;
+ gboolean forceAuthn = FALSE;
+ gboolean signature_status;
- /* response with protocol profile */
- response_protocol_profile = lasso_node_get_child_content(session->request, "ProtocolProfile", NULL);
- if(!response_protocol_profile || !strcmp(response_protocol_profile, lassoLibProtocolProfileArtifact)){
- session->response_protocol_profile = lasso_protocol_profile_type_artifact;
- printf("TODO - lasso_session_environ_process_authnRequest() - implement the artifact response\n");
- }
- else if(!strcmp(response_protocol_profile, lassoLibProtocolProfilePost)){
- session->response_protocol_profile = lasso_protocol_profile_type_post;
- session->response = LASSO_NODE(lasso_authn_response_new(session->local_providerID, session->request));
- }
- /* verify if the user must be authenticated or not */
- content = lasso_node_get_child_content(session->request, "IsPassive", NULL);
- if(content && !strcmp(content, "false")){
- isPassive = FALSE;
- }
+ switch (request_method) {
+ case lasso_protocol_method_get:
+
+ session->request = LASSO_NODE(lasso_authn_request_new_from_query(request));
+ session->peer_providerID = lasso_node_get_child_content(session->request, "ProviderID", NULL);
+
+ protocolProfile = lasso_node_get_child_content(session->request, "ProtocolProfile", NULL);
+ if (xmlStrEqual(protocolProfile, lassoLibProtocolProfilePost)) {
+ session->response = lasso_authn_response_new(session->local_providerID, session->request);
+ }
+ else {
+ // TODO
+ //session->response = lasso_response_new(session->local_providerID, session->request);
+ }
+
+ provider = lasso_server_environ_get_provider(session->server, session->peer_providerID);
+ if (xmlStrEqual(lasso_node_get_child_content(provider->metadata, "AuthnRequestsSigned", NULL), "true")) {
+ signature_status = lasso_query_verify_signature(request,
+ provider->public_key,
+ session->server->private_key);
+ /* Status & StatusCode */
+ if (signature_status == 0 || signature_status == 2) {
+ switch (signature_status) {
+ case 0:
+ set_response_status(session->response, lassoLibStatusCodeInvalidSignature);
+ break;
+ case 2:
+ set_response_status(session->response, lassoLibStatusCodeUnsignedAuthnRequest);
+ break;
+ }
+ }
+ }
+ break;
+ case lasso_protocol_method_post:
+ printf("TODO - lasso_session_environ_process_authnRequest() - implement the parsing of the post request\n");
+ break;
+ default:
+ printf("ERROR - lasso_session_environ_process_authnRequest() - Unknown protocol method\n");
+ }
+
+ /* verify if the user must be authenticated or not */
+ if (xmlStrEqual(lasso_node_get_child_content(session->request, "IsPassive", NULL), "false")) {
+ isPassive = FALSE;
+ }
- content = lasso_node_get_child_content(session->request, "ForceAuthn", NULL);
- if(content && !strcmp(content, "true")){
- forceAuthn = TRUE;
- }
+ if (xmlStrEqual(lasso_node_get_child_content(session->request, "ForceAuthn", NULL), "true")) {
+ forceAuthn = TRUE;
+ }
- /* complex test to authentication process */
- if((forceAuthn == TRUE || has_cookie == FALSE) && isPassive == FALSE){
- must_authenticate = TRUE;
- }
- else if(has_cookie == FALSE && isPassive == TRUE){
- printf("TODO - lasso_session_session_process_authnRequest() - implement the generic setting of the status code value\n");
- must_authenticate = FALSE;
- }
+ /* complex test to authentication process */
+ if ((forceAuthn == TRUE || is_authenticated == FALSE) && isPassive == FALSE) {
+ must_authenticate = TRUE;
+ }
+ else if (is_authenticated == FALSE && isPassive == TRUE) {
+ set_response_status(session->response, lassoLibStatusCodeNoPassive);
+ printf("TODO - lasso_session_session_process_authnRequest() - implement the generic setting of the status code value\n");
+ must_authenticate = FALSE;
+ }
- return(must_authenticate);
+ return (must_authenticate);
}
-char *lasso_session_environ_process_authentication(LassoSessionEnviron *session,
- gboolean isAuthenticated,
- const char *authentication_method){
+char *
+lasso_session_environ_process_authentication(LassoSessionEnviron *session,
+ gint authentication_result,
+ const char *authentication_method)
+{
LassoUserEnviron *user;
- char *str, *nameIDPolicy;
+ xmlChar *str, *nameIDPolicy, *protocolProfile;
LassoNode *assertion, *authentication_statement, *idpProvidedNameIdentifier;
LassoIdentity *identity;
@@ -241,17 +275,13 @@ char *lasso_session_environ_process_authentication(LassoSessionEnviron *session,
}
/* return a response message */
- str = NULL;
- if(session->response_protocol_profile==lasso_protocol_profile_type_post){
- printf("DEBUG - return a post message\n");
- str = lasso_node_export_to_base64(session->response);
- }
- else if(session->response_protocol_profile==lasso_protocol_profile_type_artifact){
- printf("DEBUG - return a artifact message\n");
- }
- else{
- printf("DEBUG - unknown response protocol profile\n");
- }
+ protocolProfile = lasso_node_get_child_content(session->request, "ProtocolProfile", NULL);
+ if (xmlStrEqual(protocolProfile, lassoLibProtocolProfilePost)) {
+ str = lasso_node_export_to_base64(session->response);
+ }
+ else {
+ printf("DEBUG - return a artifact message\n");
+ }
return(str);
}
@@ -287,8 +317,7 @@ lasso_session_environ_instance_init(LassoSessionEnviron *session){
session->response = NULL;
session->local_providerID = NULL;
session->peer_providerID = NULL;
- session->request_protocol_profile = 0;
- session->response_protocol_profile = 0;
+ session->request_protocol_method = 0;
}
static void
@@ -311,7 +340,7 @@ GType lasso_session_environ_get_type() {
(GInstanceInitFunc) lasso_session_environ_instance_init,
};
- this_type = g_type_register_static(LASSO_TYPE_ENVIRON,
+ this_type = g_type_register_static(G_TYPE_OBJECT,
"LassoSessionEnviron",
&this_info, 0);
}
@@ -334,7 +363,7 @@ lasso_session_environ_new(LassoServerEnviron *server,
session->server = server;
- if (user) {
+ if (user != NULL) {
session->user = user;
}
diff --git a/lasso/id-ff/session_environ.h b/lasso/id-ff/session_environ.h
index 27f42bdc..95eb96d3 100644
--- a/lasso/id-ff/session_environ.h
+++ b/lasso/id-ff/session_environ.h
@@ -47,15 +47,15 @@ typedef struct _LassoSessionEnviron LassoSessionEnviron;
typedef struct _LassoSessionEnvironClass LassoSessionEnvironClass;
typedef enum {
- lasso_protocol_profile_type_get = 1,
- lasso_protocol_profile_type_redirect,
- lasso_protocol_profile_type_post,
- lasso_protocol_profile_type_soap,
- lasso_protocol_profile_type_artifact,
-} lasso_protocol_profile_type;
+ lasso_protocol_method_get = 1,
+ lasso_protocol_method_redirect,
+ lasso_protocol_method_post,
+ lasso_protocol_method_soap,
+ lasso_protocol_method_artifact,
+} lasso_protocol_methods;
struct _LassoSessionEnviron {
- LassoEnviron parent;
+ GObject parent;
/*< public >*/
LassoServerEnviron *server;
@@ -68,14 +68,13 @@ struct _LassoSessionEnviron {
char *local_providerID, *peer_providerID;
- int request_protocol_profile;
- int response_protocol_profile;
-
+ gint request_protocol_method;
+
/*< private >*/
};
struct _LassoSessionEnvironClass {
- LassoNodeClass parent;
+ GObjectClass parent;
};
LASSO_EXPORT GType lasso_session_environ_get_type (void);
@@ -85,26 +84,32 @@ LASSO_EXPORT LassoSessionEnviron *lasso_session_environ_new (
gchar *local_providerID,
gchar *peer_providerID);
-LASSO_EXPORT char *lasso_session_environ_build_authnRequest (LassoSessionEnviron *session,
- const char *responseProtocolProfile,
- gboolean isPassive,
- gboolean forceAuthn,
- const char *nameIDPolicy);
+LASSO_EXPORT char *lasso_session_environ_build_authn_request (LassoSessionEnviron *session,
+ const char *responseProtocolProfile,
+ gboolean isPassive,
+ gboolean forceAuthn,
+ const char *nameIDPolicy);
+
+LASSO_EXPORT xmlChar* lasso_session_environ_process_artifact (LassoSessionEnviron *session,
+ gchar *artifact);
-LASSO_EXPORT gboolean lasso_session_environ_process_assertion (LassoSessionEnviron *session, char *str);
+LASSO_EXPORT gboolean lasso_session_environ_process_authn_response (LassoSessionEnviron *session,
+ xmlChar *response);
-LASSO_EXPORT gboolean lasso_session_environ_process_authnRequest (LassoSessionEnviron *session,
- char *str_request,
- int protocol_profile_type,
- gboolean has_cookie);
+LASSO_EXPORT gboolean lasso_session_environ_process_authn_request (LassoSessionEnviron *session,
+ char *request,
+ int request_method,
+ gboolean is_authenticated);
-LASSO_EXPORT char *lasso_session_environ_process_authentication (LassoSessionEnviron *session,
- gboolean isAuthenticated,
- const char *authentication_method);
+LASSO_EXPORT char *lasso_session_environ_process_authentication (LassoSessionEnviron *session,
+ gint authentication_result,
+ const char *authentication_method);
-LASSO_EXPORT int lasso_session_environ_set_local_providerID (LassoSessionEnviron *session, char *providerID);
+LASSO_EXPORT int lasso_session_environ_set_local_providerID (LassoSessionEnviron *session,
+ char *providerID);
-LASSO_EXPORT int lasso_session_environ_set_peer_providerID (LassoSessionEnviron *session, char *providerID);
+LASSO_EXPORT int lasso_session_environ_set_peer_providerID (LassoSessionEnviron *session,
+ char *providerID);
#ifdef __cplusplus
}
diff --git a/lasso/id-ff/user_environ.c b/lasso/id-ff/user_environ.c
index 63eb4acb..843121b8 100644
--- a/lasso/id-ff/user_environ.c
+++ b/lasso/id-ff/user_environ.c
@@ -84,7 +84,7 @@ GType lasso_user_environ_get_type() {
(GInstanceInitFunc) lasso_user_environ_instance_init,
};
- this_type = g_type_register_static(LASSO_TYPE_ENVIRON,
+ this_type = g_type_register_static(G_TYPE_OBJECT,
"LassoUserEnviron",
&this_info, 0);
}
diff --git a/lasso/id-ff/user_environ.h b/lasso/id-ff/user_environ.h
index aa812aa2..f9075f14 100644
--- a/lasso/id-ff/user_environ.h
+++ b/lasso/id-ff/user_environ.h
@@ -31,7 +31,6 @@ extern "C" {
#endif /* __cplusplus */
#include <lasso/xml/xml.h>
-#include <lasso/environs/environ.h>
#include <lasso/environs/identity.h>
#define LASSO_TYPE_USER_ENVIRON (lasso_user_environ_get_type())
@@ -41,13 +40,13 @@ extern "C" {
#define LASSP_IS_USER_ENVIRON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_USER_ENVIRON))
#define LASSO_USER_ENVIRON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_USER_ENVIRON, LassoUserEnvironClass))
-
typedef struct _LassoUserEnviron LassoUserEnviron;
typedef struct _LassoUserEnvironClass LassoUserEnvironClass;
struct _LassoUserEnviron {
- LassoEnviron parent;
+ GObject parent;
+ /*< public >*/
GPtrArray *assertions;
GPtrArray *identities;
@@ -55,13 +54,14 @@ struct _LassoUserEnviron {
};
struct _LassoUserEnvironClass {
- LassoEnvironClass parent;
+ GObjectClass parent;
};
LASSO_EXPORT GType lasso_user_environ_get_type (void);
-LASSO_EXPORT LassoUserEnviron* lasso_user_environ_new (void);
+LASSO_EXPORT LassoUserEnviron *lasso_user_environ_new (void);
-LASSO_EXPORT LassoIdentity *lasso_user_environ_find_identity (LassoUserEnviron *user, gchar *peer_providerID);
+LASSO_EXPORT LassoIdentity *lasso_user_environ_find_identity (LassoUserEnviron *user,
+ gchar *peer_providerID);
#ifdef __cplusplus
}
diff --git a/lasso/xml/lib_authn_request.c b/lasso/xml/lib_authn_request.c
index ee288569..b69b7ad7 100644
--- a/lasso/xml/lib_authn_request.c
+++ b/lasso/xml/lib_authn_request.c
@@ -193,6 +193,7 @@ lasso_lib_authn_request_set_relayState(LassoLibAuthnRequest *node,
const xmlChar *relayState) {
g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
g_assert(relayState != NULL);
+ // FIXME : RelayState lenght SHOULD be <= 80
LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
class->new_child(LASSO_NODE (node), "RelayState", relayState, FALSE);
diff --git a/lasso/xml/samlp_request.c b/lasso/xml/samlp_request.c
index f8d8c8bf..f383c68e 100644
--- a/lasso/xml/samlp_request.c
+++ b/lasso/xml/samlp_request.c
@@ -41,6 +41,9 @@
</extension>
</complexContent>
</complexType>
+
+<element name="AssertionArtifact" type="string"/>
+
*/
/*****************************************************************************/
diff --git a/lasso/xml/samlp_request_abstract.c b/lasso/xml/samlp_request_abstract.c
index e8b5ea1f..278aedf5 100644
--- a/lasso/xml/samlp_request_abstract.c
+++ b/lasso/xml/samlp_request_abstract.c
@@ -110,6 +110,21 @@ lasso_samlp_request_abstract_set_requestID(LassoSamlpRequestAbstract *node,
class->set_prop(LASSO_NODE (node), "RequestID", requestID);
}
+void
+lasso_samlp_request_abstract_set_signature(LassoSamlpRequestAbstract *node,
+ gint sign_method,
+ const xmlChar *private_key_file,
+ const xmlChar *certificate_file)
+{
+ g_assert(LASSO_IS_SAMLP_REQUEST_ABSTRACT(node));
+ g_assert(private_key_file != NULL);
+ g_assert(certificate_file != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_signature(LASSO_NODE (node), sign_method,
+ private_key_file, certificate_file);
+}
+
/*****************************************************************************/
/* instance and class init functions */
/*****************************************************************************/
diff --git a/lasso/xml/samlp_request_abstract.h b/lasso/xml/samlp_request_abstract.h
index b2c4eb2d..8c065592 100644
--- a/lasso/xml/samlp_request_abstract.h
+++ b/lasso/xml/samlp_request_abstract.h
@@ -57,17 +57,22 @@ LASSO_EXPORT LassoNode* lasso_samlp_request_abstract_new(void);
LASSO_EXPORT void lasso_samlp_request_abstract_add_respondWith (LassoSamlpRequestAbstract *node,
const xmlChar *respondWith);
-LASSO_EXPORT void lasso_samlp_request_abstract_set_issueInstance (LassoSamlpRequestAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_request_abstract_set_issueInstance (LassoSamlpRequestAbstract *node,
+ const xmlChar *issueInstant);
-LASSO_EXPORT void lasso_samlp_request_abstract_set_majorVersion (LassoSamlpRequestAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_request_abstract_set_majorVersion (LassoSamlpRequestAbstract *node,
+ const xmlChar *majorVersion);
-LASSO_EXPORT void lasso_samlp_request_abstract_set_minorVersion (LassoSamlpRequestAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_request_abstract_set_minorVersion (LassoSamlpRequestAbstract *node,
+ const xmlChar *minorVersion);
-LASSO_EXPORT void lasso_samlp_request_abstract_set_requestID (LassoSamlpRequestAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_request_abstract_set_requestID (LassoSamlpRequestAbstract *node,
+ const xmlChar *requestID);
+
+LASSO_EXPORT void lasso_samlp_request_abstract_set_signature (LassoSamlpRequestAbstract *node,
+ gint sign_method,
+ const xmlChar *private_key_file,
+ const xmlChar *certificate_file);
#ifdef __cplusplus
}
diff --git a/lasso/xml/samlp_response_abstract.c b/lasso/xml/samlp_response_abstract.c
index 2e5539a9..717ebc92 100644
--- a/lasso/xml/samlp_response_abstract.c
+++ b/lasso/xml/samlp_response_abstract.c
@@ -125,12 +125,20 @@ lasso_samlp_response_abstract_set_responseID(LassoSamlpResponseAbstract *node,
class->set_prop(LASSO_NODE (node), "ResponseID", responseID);
}
-/* TODO
- void
- lasso_samlp_response_abstract_set_signature(LassoSamlpResponseAbstract *node)
+void
+lasso_samlp_response_abstract_set_signature(LassoSamlpResponseAbstract *node,
+ gint sign_method,
+ const xmlChar *private_key_file,
+ const xmlChar *certificate_file)
{
+ g_assert(LASSO_IS_SAMLP_RESPONSE_ABSTRACT(node));
+ g_assert(private_key_file != NULL);
+ g_assert(certificate_file != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_signature(LASSO_NODE (node), sign_method,
+ private_key_file, certificate_file);
}
-*/
/*****************************************************************************/
/* instance and class init functions */
diff --git a/lasso/xml/samlp_response_abstract.h b/lasso/xml/samlp_response_abstract.h
index 8e6c2d23..bf80941f 100644
--- a/lasso/xml/samlp_response_abstract.h
+++ b/lasso/xml/samlp_response_abstract.h
@@ -54,23 +54,28 @@ struct _LassoSamlpResponseAbstractClass {
LASSO_EXPORT GType lasso_samlp_response_abstract_get_type(void);
LASSO_EXPORT LassoNode* lasso_samlp_response_abstract_new(void);
-LASSO_EXPORT void lasso_samlp_response_abstract_set_inResponseTo (LassoSamlpResponseAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_response_abstract_set_inResponseTo (LassoSamlpResponseAbstract *node,
+ const xmlChar *inResponseTo);
-LASSO_EXPORT void lasso_samlp_response_abstract_set_issueInstance (LassoSamlpResponseAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_response_abstract_set_issueInstance (LassoSamlpResponseAbstract *node,
+ const xmlChar *issueInstance);
-LASSO_EXPORT void lasso_samlp_response_abstract_set_majorVersion (LassoSamlpResponseAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_response_abstract_set_majorVersion (LassoSamlpResponseAbstract *node,
+ const xmlChar *majorVersion);
-LASSO_EXPORT void lasso_samlp_response_abstract_set_minorVersion (LassoSamlpResponseAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_response_abstract_set_minorVersion (LassoSamlpResponseAbstract *node,
+ const xmlChar *minorVersion);
-LASSO_EXPORT void lasso_samlp_response_abstract_set_recipient (LassoSamlpResponseAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_response_abstract_set_recipient (LassoSamlpResponseAbstract *node,
+ const xmlChar *recipient);
-LASSO_EXPORT void lasso_samlp_response_abstract_set_responseID (LassoSamlpResponseAbstract *,
- const xmlChar *);
+LASSO_EXPORT void lasso_samlp_response_abstract_set_responseID (LassoSamlpResponseAbstract *node,
+ const xmlChar *responseID);
+
+LASSO_EXPORT void lasso_samlp_response_abstract_set_signature (LassoSamlpResponseAbstract *node,
+ gint sign_method,
+ const xmlChar *private_key_file,
+ const xmlChar *certificate_file);
#ifdef __cplusplus
}
diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c
index 323dab04..2909c667 100644
--- a/lasso/xml/tools.c
+++ b/lasso/xml/tools.c
@@ -26,7 +26,7 @@
/**
* lasso_build_unique_id:
- * @size: the ID's lenght (between 32 and 48)
+ * @size: the ID's lenght (between 32 and 40)
*
* Builds an ID which has an unicity probability of 2^(-size*4).
* The result is Base64 encoded.
@@ -41,9 +41,9 @@ lasso_build_unique_id(guint8 size)
less than 2^-128 and SHOULD be less than 2^-160.
so we must have 128 <= exp <= 160
we could build a 128-bit binary number but hexa system is shorter
- 32 <= hexa number size <= 48
+ 32 <= hexa number size <= 40
*/
- g_return_val_if_fail((size >= 32 && size <= 48) || size == 0, NULL);
+ g_return_val_if_fail((size >= 32 && size <= 40) || size == 0, NULL);
int i, val;
xmlChar *id, *enc_id;