diff options
| -rw-r--r-- | lasso/Attic/protocols/authn_request.c | 9 | ||||
| -rw-r--r-- | lasso/Attic/protocols/authn_response.c | 13 | ||||
| -rw-r--r-- | lasso/Attic/protocols/elements/assertion.c | 11 | ||||
| -rw-r--r-- | lasso/Attic/protocols/elements/authentication_statement.c | 5 | ||||
| -rw-r--r-- | lasso/Attic/protocols/federation_termination_notification.c | 9 | ||||
| -rw-r--r-- | lasso/Attic/protocols/logout_request.c | 11 | ||||
| -rw-r--r-- | lasso/Attic/protocols/logout_response.c | 11 | ||||
| -rw-r--r-- | lasso/Attic/protocols/name_identifier_mapping_request.c | 10 | ||||
| -rw-r--r-- | lasso/Attic/protocols/name_identifier_mapping_response.c | 9 | ||||
| -rw-r--r-- | lasso/Attic/protocols/register_name_identifier_request.c | 164 | ||||
| -rw-r--r-- | lasso/Attic/protocols/register_name_identifier_response.c | 9 | ||||
| -rw-r--r-- | lasso/lasso.c | 2 | ||||
| -rw-r--r-- | lasso/xml/ds_signature.c | 4 | ||||
| -rw-r--r-- | lasso/xml/tools.c | 7 | ||||
| -rw-r--r-- | lasso/xml/xml.c | 40 |
15 files changed, 197 insertions, 117 deletions
diff --git a/lasso/Attic/protocols/authn_request.c b/lasso/Attic/protocols/authn_request.c index 08993fd1..dc58afea 100644 --- a/lasso/Attic/protocols/authn_request.c +++ b/lasso/Attic/protocols/authn_request.c @@ -150,13 +150,16 @@ LassoNode* lasso_authn_request_new(const xmlChar *providerID) { LassoNode *request; + xmlChar *id, *time; request = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_REQUEST, NULL)); /* Set ONLY required elements/attributs */ /* RequestID */ + id = lasso_build_unique_id(32); lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMajorVersion); @@ -164,8 +167,10 @@ lasso_authn_request_new(const xmlChar *providerID) lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMinorVersion); /* IssueInstant */ + time = lasso_get_current_time(); lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_authn_request_set_providerID(LASSO_LIB_AUTHN_REQUEST(request), providerID); diff --git a/lasso/Attic/protocols/authn_response.c b/lasso/Attic/protocols/authn_response.c index 6efead45..ee934447 100644 --- a/lasso/Attic/protocols/authn_response.c +++ b/lasso/Attic/protocols/authn_response.c @@ -263,8 +263,9 @@ LassoNode* lasso_authn_response_new_from_request_query(gchar *query, const xmlChar *providerID) { - GData *gd; - LassoNode *response, *status, *status_code; + GData *gd; + LassoNode *response, *status, *status_code; + xmlChar *id, *time; g_return_val_if_fail(query != NULL, NULL); g_return_val_if_fail(providerID != NULL, NULL); @@ -277,8 +278,10 @@ lasso_authn_response_new_from_request_query(gchar *query, LASSO_AUTHN_RESPONSE(response)->request = NULL; /* ResponseID */ + id = lasso_build_unique_id(32); lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), lassoLibMajorVersion); @@ -286,8 +289,10 @@ lasso_authn_response_new_from_request_query(gchar *query, 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), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_authn_response_set_providerID(LASSO_LIB_AUTHN_RESPONSE(response), diff --git a/lasso/Attic/protocols/elements/assertion.c b/lasso/Attic/protocols/elements/assertion.c index 4ae56a91..ef5c65ee 100644 --- a/lasso/Attic/protocols/elements/assertion.c +++ b/lasso/Attic/protocols/elements/assertion.c @@ -71,20 +71,25 @@ lasso_assertion_new(const xmlChar *issuer, xmlChar *requestID) { LassoNode *assertion; + xmlChar *id, *time; g_return_val_if_fail(issuer != NULL, NULL); assertion = LASSO_NODE(g_object_new(LASSO_TYPE_ASSERTION, NULL)); + id = lasso_build_unique_id(32); lasso_saml_assertion_set_assertionID(LASSO_SAML_ASSERTION(assertion), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); lasso_saml_assertion_set_majorVersion(LASSO_SAML_ASSERTION(assertion), lassoLibMajorVersion); lasso_saml_assertion_set_minorVersion(LASSO_SAML_ASSERTION(assertion), lassoLibMinorVersion); + time = lasso_get_current_time(); lasso_saml_assertion_set_issueInstance(LASSO_SAML_ASSERTION(assertion), - lasso_get_current_time()); - + (const xmlChar *)time); + xmlFree(time); + lasso_saml_assertion_set_issuer(LASSO_SAML_ASSERTION(assertion), issuer); /* InResponseTo */ diff --git a/lasso/Attic/protocols/elements/authentication_statement.c b/lasso/Attic/protocols/elements/authentication_statement.c index 18db1f78..f9101e28 100644 --- a/lasso/Attic/protocols/elements/authentication_statement.c +++ b/lasso/Attic/protocols/elements/authentication_statement.c @@ -78,13 +78,16 @@ lasso_authentication_statement_new(const xmlChar *authenticationMethod, { LassoNode *statement; LassoNode *subject, *identifier, *idp_identifier, *subject_confirmation; + xmlChar *time; statement = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHENTICATION_STATEMENT, NULL)); lasso_saml_authentication_statement_set_authenticationMethod(LASSO_SAML_AUTHENTICATION_STATEMENT(statement), authenticationMethod); + time = lasso_get_current_time(); lasso_saml_authentication_statement_set_authenticationInstant(LASSO_SAML_AUTHENTICATION_STATEMENT(statement), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); lasso_lib_authentication_statement_set_reauthenticateOnOrAfter(LASSO_LIB_AUTHENTICATION_STATEMENT(statement), reauthenticateOnOrAfter); diff --git a/lasso/Attic/protocols/federation_termination_notification.c b/lasso/Attic/protocols/federation_termination_notification.c index d54ab8f5..203e7044 100644 --- a/lasso/Attic/protocols/federation_termination_notification.c +++ b/lasso/Attic/protocols/federation_termination_notification.c @@ -74,13 +74,16 @@ lasso_federation_termination_notification_new(const xmlChar *providerID, const xmlChar *format) { LassoNode *request, *identifier; + xmlChar *id, *time; request = LASSO_NODE(g_object_new(LASSO_TYPE_FEDERATION_TERMINATION_NOTIFICATION, NULL)); /* Set ONLY required elements/attributs */ /* RequestID */ + id = lasso_build_unique_id(32); lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMajorVersion); @@ -88,8 +91,10 @@ lasso_federation_termination_notification_new(const xmlChar *providerID, lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMinorVersion); /* IssueInstant */ + time = lasso_get_current_time(); lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_federation_termination_notification_set_providerID(LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(request), providerID); diff --git a/lasso/Attic/protocols/logout_request.c b/lasso/Attic/protocols/logout_request.c index a833ac80..8a863622 100644 --- a/lasso/Attic/protocols/logout_request.c +++ b/lasso/Attic/protocols/logout_request.c @@ -74,12 +74,15 @@ lasso_logout_request_new(const xmlChar *providerID, const xmlChar *format) { LassoNode *request, *identifier; - + xmlChar *id, *time; + request = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_REQUEST, NULL)); /* RequestID */ + id = lasso_build_unique_id(32); lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMajorVersion); @@ -87,8 +90,10 @@ lasso_logout_request_new(const xmlChar *providerID, lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMinorVersion); /* IssueInstant */ + time = lasso_get_current_time(); lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_logout_request_set_providerID(LASSO_LIB_LOGOUT_REQUEST(request), providerID); diff --git a/lasso/Attic/protocols/logout_response.c b/lasso/Attic/protocols/logout_response.c index 44f24d0f..4e41c379 100644 --- a/lasso/Attic/protocols/logout_response.c +++ b/lasso/Attic/protocols/logout_response.c @@ -73,13 +73,16 @@ lasso_logout_response_new(const xmlChar *providerID, { LassoNode *response, *ss, *ssc; xmlChar *inResponseTo, *recipient, *relayState; - + xmlChar *id, *time; + response = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_RESPONSE, NULL)); /* Set ONLY required elements/attributs */ /* ResponseID */ + id = lasso_build_unique_id(32); lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), lassoLibMajorVersion); @@ -87,8 +90,10 @@ lasso_logout_response_new(const xmlChar *providerID, lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), lassoLibMinorVersion); /* IssueInstant */ + time = lasso_get_current_time(); lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_status_response_set_providerID(LASSO_LIB_STATUS_RESPONSE(response), providerID); diff --git a/lasso/Attic/protocols/name_identifier_mapping_request.c b/lasso/Attic/protocols/name_identifier_mapping_request.c index 0bf465bc..16536ddd 100644 --- a/lasso/Attic/protocols/name_identifier_mapping_request.c +++ b/lasso/Attic/protocols/name_identifier_mapping_request.c @@ -74,6 +74,7 @@ lasso_name_identifier_mapping_request_new(const xmlChar *providerID, const xmlChar *format) { LassoNode *request, *identifier; + xmlChar *id, *time; g_return_val_if_fail(providerID != NULL, NULL); g_return_val_if_fail(nameIdentifier != NULL, NULL); @@ -84,8 +85,10 @@ lasso_name_identifier_mapping_request_new(const xmlChar *providerID, /* Set ONLY required elements/attributs */ /* RequestID */ + id = lasso_build_unique_id(32); lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMajorVersion); @@ -93,8 +96,10 @@ lasso_name_identifier_mapping_request_new(const xmlChar *providerID, lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMinorVersion); /* IssueInstant */ + time = lasso_get_current_time(); lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_name_identifier_mapping_request_set_providerID(LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(request), providerID); @@ -125,7 +130,6 @@ lasso_name_identifier_mapping_request_new_from_query(const xmlChar *query) /* RequestID */ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0); lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); - /* MajorVersion */ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0); diff --git a/lasso/Attic/protocols/name_identifier_mapping_response.c b/lasso/Attic/protocols/name_identifier_mapping_response.c index c102af43..39aba017 100644 --- a/lasso/Attic/protocols/name_identifier_mapping_response.c +++ b/lasso/Attic/protocols/name_identifier_mapping_response.c @@ -74,13 +74,16 @@ lasso_name_identifier_mapping_response_new(const xmlChar *providerID, /* FIXME : change request type */ LassoNode *response, *ss, *ssc; xmlChar *inResponseTo, *recipient, *relayState; + xmlChar *id, *time; response = LASSO_NODE(g_object_new(LASSO_TYPE_NAME_IDENTIFIER_MAPPING_RESPONSE, NULL)); /* Set ONLY required elements/attributs */ /* ResponseID */ + id = lasso_build_unique_id(32); lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), lassoLibMajorVersion); @@ -88,8 +91,10 @@ lasso_name_identifier_mapping_response_new(const xmlChar *providerID, lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), lassoLibMinorVersion); /* IssueInstant */ + time = lasso_get_current_time(); lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_name_identifier_mapping_response_set_providerID(LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(response), providerID); diff --git a/lasso/Attic/protocols/register_name_identifier_request.c b/lasso/Attic/protocols/register_name_identifier_request.c index 73c3818d..9dac1fbd 100644 --- a/lasso/Attic/protocols/register_name_identifier_request.c +++ b/lasso/Attic/protocols/register_name_identifier_request.c @@ -99,13 +99,16 @@ lasso_register_name_identifier_request_new(const xmlChar *providerID, const xmlChar *oldFormat) { LassoNode *request, *idpidentifier, *spidentifier, *oldidentifier; + xmlChar *id, *time; request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL)); /* Set ONLY required elements/attributs */ /* RequestID */ + id = lasso_build_unique_id(32); lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMajorVersion); @@ -113,8 +116,10 @@ lasso_register_name_identifier_request_new(const xmlChar *providerID, lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), lassoLibMinorVersion); /* IssueInstant */ + time = lasso_get_current_time(); lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_register_name_identifier_request_set_providerID(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), providerID); @@ -143,97 +148,96 @@ lasso_register_name_identifier_request_new(const xmlChar *providerID, LassoNode * lasso_register_name_identifier_request_new_from_query(const xmlChar *query) { - LassoNode *request, *idpidentifier, *spidentifier, *oldidentifier; - xmlChar *str; - GData *gd; - - request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL)); + LassoNode *request, *idpidentifier, *spidentifier, *oldidentifier; + xmlChar *str; + GData *gd; + + request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL)); - gd = lasso_query_to_dict(query); + gd = lasso_query_to_dict(query); - /* RequestID */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0); - lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); + /* RequestID */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0); + lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); - /* MajorVersion */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0); - lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); + /* MajorVersion */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0); + lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); - /* MinorVersion */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MinorVersion"), 0); - lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); + /* MinorVersion */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MinorVersion"), 0); + lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); - /* IssueInstant */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IssueInstance"), 0); - lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); + /* IssueInstant */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IssueInstance"), 0); + lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), str); - /* ProviderID */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0); - lasso_lib_register_name_identifier_request_set_providerID(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), str); - - /* RelayState */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0); - if (str != NULL) - lasso_lib_register_name_identifier_request_set_relayState(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), str); - - /* IDPProvidedNameIdentifier */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPProvidedNameIdentifier"), 0); - idpidentifier = lasso_lib_idp_provided_name_identifier_new(str); - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPNameQualifier"), 0); - lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(idpidentifier), str); - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPFormat"), 0); - lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(idpidentifier), str); - - lasso_lib_register_name_identifier_request_set_idpProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), - LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER(idpidentifier)); - - /* SPPProvidedNameIdentifier */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPProvidedNameIdentifier"), 0); - spidentifier = lasso_lib_sp_provided_name_identifier_new(str); - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPNameQualifier"), 0); - lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(spidentifier), str); - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPFormat"), 0); - lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(spidentifier), str); - - lasso_lib_register_name_identifier_request_set_spProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), - LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER(spidentifier)); + /* ProviderID */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0); + lasso_lib_register_name_identifier_request_set_providerID(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), str); + + /* RelayState */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0); + if (str != NULL) + lasso_lib_register_name_identifier_request_set_relayState(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), str); + + /* IDPProvidedNameIdentifier */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPProvidedNameIdentifier"), 0); + idpidentifier = lasso_lib_idp_provided_name_identifier_new(str); + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPNameQualifier"), 0); + lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(idpidentifier), str); + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPFormat"), 0); + lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(idpidentifier), str); + + lasso_lib_register_name_identifier_request_set_idpProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), + LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER(idpidentifier)); + + /* SPPProvidedNameIdentifier */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPProvidedNameIdentifier"), 0); + spidentifier = lasso_lib_sp_provided_name_identifier_new(str); + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPNameQualifier"), 0); + lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(spidentifier), str); + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPFormat"), 0); + lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(spidentifier), str); + + lasso_lib_register_name_identifier_request_set_spProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), + LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER(spidentifier)); - /* OldPProvidedNameIdentifier */ - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldProvidedNameIdentifier"), 0); - oldidentifier = lasso_lib_old_provided_name_identifier_new(str); - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldNameQualifier"), 0); - lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(oldidentifier), str); - str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldFormat"), 0); - lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(oldidentifier), str); + /* OldPProvidedNameIdentifier */ + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldProvidedNameIdentifier"), 0); + oldidentifier = lasso_lib_old_provided_name_identifier_new(str); + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldNameQualifier"), 0); + lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(oldidentifier), str); + str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldFormat"), 0); + lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(oldidentifier), str); - lasso_lib_register_name_identifier_request_set_oldProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), - LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER(oldidentifier)); - - g_datalist_clear(&gd); - - return(request); + lasso_lib_register_name_identifier_request_set_oldProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), + LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER(oldidentifier)); + + g_datalist_clear(&gd); + + return(request); } - LassoNode * lasso_register_name_identifier_request_new_from_soap(const xmlChar *buffer) { - LassoNode *request; - LassoNode *envelope, *lassoNode_request; - xmlNodePtr xmlNode_request; - LassoNodeClass *class; - - request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL)); - - envelope = lasso_node_new_from_dump(buffer); - lassoNode_request = lasso_node_get_child(envelope, "RegisterNameIdentifierRequest"); + LassoNode *request; + LassoNode *envelope, *lassoNode_request; + xmlNodePtr xmlNode_request; + LassoNodeClass *class; - class = LASSO_NODE_GET_CLASS(lassoNode_request); - xmlNode_request = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_request)), 1); + request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL)); - class = LASSO_NODE_GET_CLASS(request); - class->set_xmlNode(LASSO_NODE(request), xmlNode_request); - g_object_unref(envelope); - - return(request); + envelope = lasso_node_new_from_dump(buffer); + lassoNode_request = lasso_node_get_child(envelope, "RegisterNameIdentifierRequest"); + + class = LASSO_NODE_GET_CLASS(lassoNode_request); + xmlNode_request = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_request)), 1); + + class = LASSO_NODE_GET_CLASS(request); + class->set_xmlNode(LASSO_NODE(request), xmlNode_request); + g_object_unref(envelope); + + return(request); } diff --git a/lasso/Attic/protocols/register_name_identifier_response.c b/lasso/Attic/protocols/register_name_identifier_response.c index c5ba5d77..cadc76dd 100644 --- a/lasso/Attic/protocols/register_name_identifier_response.c +++ b/lasso/Attic/protocols/register_name_identifier_response.c @@ -74,13 +74,16 @@ lasso_register_name_identifier_response_new(const xmlChar *providerID, /* FIXME : change request type */ LassoNode *response, *ss, *ssc; xmlChar *inResponseTo, *recipient, *relayState; + xmlChar *id, *time; response = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_RESPONSE, NULL)); /* Set ONLY required elements/attributs */ /* ResponseID */ + id = lasso_build_unique_id(32); lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - (const xmlChar *)lasso_build_unique_id(32)); + (const xmlChar *)id); + xmlFree(id); /* MajorVersion */ lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), lassoLibMajorVersion); @@ -88,8 +91,10 @@ lasso_register_name_identifier_response_new(const xmlChar *providerID, lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), lassoLibMinorVersion); /* IssueInstant */ + time = lasso_get_current_time(); lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - lasso_get_current_time()); + (const xmlChar *)time); + xmlFree(time); /* ProviderID */ lasso_lib_status_response_set_providerID(LASSO_LIB_STATUS_RESPONSE(response), providerID); diff --git a/lasso/lasso.c b/lasso/lasso.c index 0aa7086a..14ecc275 100644 --- a/lasso/lasso.c +++ b/lasso/lasso.c @@ -40,7 +40,7 @@ int lasso_init() LIBXML_TEST_VERSION xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS; xmlSubstituteEntitiesDefault(1); - + /* Init xmlsec library */ if(xmlSecInit() < 0) { fprintf(stderr, "Error: xmlsec initialization failed.\n"); diff --git a/lasso/xml/ds_signature.c b/lasso/xml/ds_signature.c index 28a20022..3bc5455d 100644 --- a/lasso/xml/ds_signature.c +++ b/lasso/xml/ds_signature.c @@ -102,8 +102,8 @@ GType lasso_ds_signature_get_type() { /** * lasso_ds_signature_new: - * @doc: the doc - * @signMethodId: the signature method (RsaSha1 or DsaSha1) + * @node: the doc + * @sign_method: the signature method (RsaSha1 or DsaSha1) * * Creates a new <ds:Signature> node object. * diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c index 67712c43..bf1d5da8 100644 --- a/lasso/xml/tools.c +++ b/lasso/xml/tools.c @@ -87,7 +87,7 @@ lasso_get_current_time() { struct tm *tm; GTimeVal time_val; - xmlChar *ret = g_malloc(21); + xmlChar *ret = xmlMalloc(21); g_get_current_time(&time_val); tm = localtime(&(time_val.tv_sec)); @@ -186,6 +186,7 @@ lasso_query_verify_signature(const gchar *query, xmlDocPtr doc; xmlNodePtr sigNode, sigValNode; xmlSecDSigCtxPtr dsigCtx; + xmlChar *str_unescaped; gchar **str_split; /* 0: signature invalid @@ -207,7 +208,9 @@ lasso_query_verify_signature(const gchar *query, xmlSecNodeSignatureValue, xmlSecDSigNs); /* set SignatureValue content */ - xmlNodeSetContent(sigValNode, lasso_str_unescape(str_split[1])); + str_unescaped = lasso_str_unescape(str_split[1]); + xmlNodeSetContent(sigValNode, str_unescaped); + xmlFree(str_unescaped); g_strfreev(str_split); //xmlDocDump(stdout, doc); diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c index 402cd6af..1e82b035 100644 --- a/lasso/xml/xml.c +++ b/lasso/xml/xml.c @@ -29,6 +29,7 @@ struct _LassoNodePrivate { gboolean dispose_has_run; xmlNodePtr node; + GPtrArray *children; }; /*****************************************************************************/ @@ -714,24 +715,39 @@ lasso_node_impl_add_child(LassoNode *node, LassoNode *child, gboolean unbounded) { - LassoNode *old_child; + xmlNodePtr old_child; + LassoNode *search_child = NULL; + gint i; g_return_if_fail (LASSO_IS_NODE(node)); g_return_if_fail (LASSO_IS_NODE(child)); - // if child is not unbounded, we search it + /* if child is not unbounded, we search it */ if (!unbounded) { - old_child = lasso_node_get_child(node, child->private->node->name); + //old_child = lasso_node_get_child(node, child->private->node->name); + old_child = xmlSecFindNode(node->private->node, + child->private->node->name, NULL); } if (!unbounded && old_child != NULL) { - // child replace old child - xmlReplaceNode(old_child->private->node, child->private->node); + /* old child removed in array children and freed */ + for(i=0;i<node->private->children->len;i++) { + search_child = LASSO_NODE(g_ptr_array_index(node->private->children, i)); + if (search_child->private->node == old_child) { + g_ptr_array_remove_index(node->private->children, i); + break; + } + } + /* child replace old child */ + xmlReplaceNode(old_child, child->private->node); + g_object_unref(G_OBJECT(search_child)); } else { - // else child is added + /* else child is added */ xmlAddChild(node->private->node, child->private->node); } + /* child added in children array */ + g_ptr_array_add(node->private->children, (gpointer)child); } static void @@ -1014,7 +1030,16 @@ lasso_node_dispose(LassoNode *node) static void lasso_node_finalize(LassoNode *node) { + gint i; + LassoNode *child; + g_print("%s 0x%x finalized ...\n", lasso_node_get_name(node), node); + for(i=0;i<node->private->children->len;i++) { + child = LASSO_NODE(g_ptr_array_index(node->private->children, i)); + g_ptr_array_remove_index(node->private->children, i); + g_object_unref(G_OBJECT(child)); + } + xmlUnlinkNode(node->private->node); xmlFreeNode(node->private->node); g_free (node->private); } @@ -1030,7 +1055,8 @@ lasso_node_instance_init(LassoNode *instance) node->private = g_new (LassoNodePrivate, 1); node->private->dispose_has_run = FALSE; - node->private->node = xmlNewNode(NULL, "no-name-set"); + node->private->node = xmlNewNode(NULL, "no-name-set"); + node->private->children = g_ptr_array_new(); } static void |
