summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-05-15 00:38:03 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-05-15 00:38:03 +0000
commit98d6264eadc827ff34e1bee2d3643f43567c00d0 (patch)
tree7837fbc1b5d9d13a6981fae79f2474638c04948b
parent5ba578ade45dd65238fa7c94b6fff641c67e79ce (diff)
downloadlasso-98d6264eadc827ff34e1bee2d3643f43567c00d0.tar.gz
lasso-98d6264eadc827ff34e1bee2d3643f43567c00d0.tar.xz
lasso-98d6264eadc827ff34e1bee2d3643f43567c00d0.zip
Many many memory leaks fixed
-rw-r--r--lasso/Attic/protocols/authn_request.c9
-rw-r--r--lasso/Attic/protocols/authn_response.c13
-rw-r--r--lasso/Attic/protocols/elements/assertion.c11
-rw-r--r--lasso/Attic/protocols/elements/authentication_statement.c5
-rw-r--r--lasso/Attic/protocols/federation_termination_notification.c9
-rw-r--r--lasso/Attic/protocols/logout_request.c11
-rw-r--r--lasso/Attic/protocols/logout_response.c11
-rw-r--r--lasso/Attic/protocols/name_identifier_mapping_request.c10
-rw-r--r--lasso/Attic/protocols/name_identifier_mapping_response.c9
-rw-r--r--lasso/Attic/protocols/register_name_identifier_request.c164
-rw-r--r--lasso/Attic/protocols/register_name_identifier_response.c9
-rw-r--r--lasso/lasso.c2
-rw-r--r--lasso/xml/ds_signature.c4
-rw-r--r--lasso/xml/tools.c7
-rw-r--r--lasso/xml/xml.c40
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