summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2008-12-01 17:30:35 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2008-12-01 17:30:35 +0000
commit47641f88bf9531cd51b818aabe46368a7b08ad2e (patch)
treeb9011f25c77d12860dc84d6750baa25ed2d0527c
parent6d12685ed63de044d020279e2f14fed3b2629356 (diff)
Use assignment macros in id-wsf 2.0 module
* lasso/id-wsf-2.0/data_service.c, lasso/id-wsf-2.0/discovery.c, lasso/id-wsf-2.0/profile.c: use assignment macros to maintain proper reference counting and ownership of object field values.
-rw-r--r--lasso/id-wsf-2.0/data_service.c26
-rw-r--r--lasso/id-wsf-2.0/discovery.c17
-rw-r--r--lasso/id-wsf-2.0/profile.c47
3 files changed, 33 insertions, 57 deletions
diff --git a/lasso/id-wsf-2.0/data_service.c b/lasso/id-wsf-2.0/data_service.c
index 2323c4e5..96daa67f 100644
--- a/lasso/id-wsf-2.0/data_service.c
+++ b/lasso/id-wsf-2.0/data_service.c
@@ -76,7 +76,7 @@ lasso_idwsf2_data_service_init_query(LassoIdWsf2DataService *service)
if (LASSO_PROFILE(profile)->request) {
lasso_node_destroy(LASSO_NODE(LASSO_PROFILE(profile)->request));
}
- LASSO_PROFILE(profile)->request = LASSO_NODE(query);
+ lasso_assign_new_gobject(LASSO_PROFILE(profile)->request, query);
if (service == NULL || service->private_data == NULL
|| service->private_data->epr == NULL
@@ -110,7 +110,7 @@ lasso_idwsf2_data_service_init_query(LassoIdWsf2DataService *service)
/* Set msg_url as epr address, which is the SoapEndpoint */
if (epr->Address != NULL) {
- LASSO_PROFILE(profile)->msg_url = g_strdup(epr->Address->content);
+ lasso_assign_string(LASSO_PROFILE(profile)->msg_url, epr->Address->content);
} else {
return LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS;
}
@@ -162,7 +162,7 @@ lasso_idwsf2_data_service_process_query_msg(LassoIdWsf2DataService *service, con
res = LASSO_PROFILE_ERROR_INVALID_SOAP_MSG;
} else {
request = LASSO_IDWSF2_DSTREF_QUERY(LASSO_PROFILE(profile)->request);
- service->type = g_strdup(request->hrefServiceType);
+ lasso_assign_string(service->type, request->hrefServiceType);
}
if (res == 0) {
@@ -221,8 +221,8 @@ lasso_idwsf2_data_service_parse_query_items(LassoIdWsf2DataService *service)
response = lasso_idwsf2_dstref_query_response_new();
response->prefixServiceType = g_strdup(request->prefixServiceType);
response->hrefServiceType = g_strdup(request->hrefServiceType);
- LASSO_PROFILE(profile)->response = LASSO_NODE(response);
- envelope->Body->any = g_list_append(envelope->Body->any, response);
+ lasso_assign_new_gobject(LASSO_PROFILE(profile)->response, response);
+ lasso_list_add_gobject(envelope->Body->any, response);
/* Initialise XML parsing */
doc = xmlNewDoc((xmlChar*)"1.0");
@@ -288,7 +288,7 @@ lasso_idwsf2_data_service_parse_query_items(LassoIdWsf2DataService *service)
lasso_release_doc(doc);
response2 = LASSO_IDWSF2_UTIL_RESPONSE(response);
- response2->Status = lasso_idwsf2_util_status_new();
+ lasso_assign_new_gobject(response2->Status, lasso_idwsf2_util_status_new());
response2->Status->code = g_strdup(status_code);
if (strcmp(status_code, LASSO_DST_STATUS_CODE_FAILED) == 0) {
@@ -563,11 +563,7 @@ lasso_idwsf2_data_service_init_modify(LassoIdWsf2DataService *service)
LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
modify = lasso_idwsf2_dstref_modify_new();
-
- if (LASSO_PROFILE(profile)->request) {
- lasso_node_destroy(LASSO_NODE(LASSO_PROFILE(profile)->request));
- }
- LASSO_PROFILE(profile)->request = LASSO_NODE(modify);
+ lasso_assign_new_gobject(LASSO_PROFILE(profile)->request, modify);
if (service == NULL || service->private_data == NULL
|| service->private_data->epr == NULL
@@ -770,8 +766,8 @@ lasso_idwsf2_data_service_parse_modify_items(LassoIdWsf2DataService *service)
response = lasso_idwsf2_dstref_modify_response_new();
response->prefixServiceType = g_strdup(request->prefixServiceType);
response->hrefServiceType = g_strdup(request->hrefServiceType);
- LASSO_PROFILE(profile)->response = LASSO_NODE(response);
- envelope->Body->any = g_list_append(envelope->Body->any, response);
+ lasso_assign_new_gobject(LASSO_PROFILE(profile)->response, response);
+ lasso_list_add_gobject(envelope->Body->any, response);
response2 = LASSO_IDWSF2_UTIL_RESPONSE(response);
response2->Status = lasso_idwsf2_util_status_new();
@@ -911,9 +907,7 @@ dispose(GObject *object)
g_list_free(service->query_items);
service->query_items = NULL;
}
-
- lasso_node_destroy(LASSO_NODE(service->private_data->epr));
- service->private_data->epr = NULL;
+ lasso_release_gobject(service->private_data->epr);
G_OBJECT_CLASS(parent_class)->dispose(object);
}
diff --git a/lasso/id-wsf-2.0/discovery.c b/lasso/id-wsf-2.0/discovery.c
index c88bdba9..dd30d27f 100644
--- a/lasso/id-wsf-2.0/discovery.c
+++ b/lasso/id-wsf-2.0/discovery.c
@@ -59,6 +59,7 @@
#include <lasso/id-wsf-2.0/identity.h>
#include <lasso/id-wsf-2.0/server.h>
#include <lasso/id-wsf-2.0/session.h>
+#include "../utils.h"
struct _LassoIdWsf2DiscoveryPrivate
{
@@ -194,7 +195,7 @@ lasso_idwsf2_discovery_process_metadata_register_msg(LassoIdWsf2Discovery *disco
request = LASSO_IDWSF2_DISCO_SVC_MD_REGISTER(LASSO_PROFILE(profile)->request);
/* FIXME : foreach on the list instead */
if (request != NULL && request->SvcMD != NULL) {
- discovery->metadata = LASSO_IDWSF2_DISCO_SVC_METADATA(request->SvcMD->data);
+ lasso_assign_gobject(discovery->metadata, request->SvcMD->data);
/* Build a unique SvcMDID */
lasso_build_random_sequence(unique_id, 32);
unique_id[32] = 0;
@@ -319,7 +320,7 @@ lasso_idwsf2_discovery_process_metadata_association_add_msg(LassoIdWsf2Discovery
envelope = profile->soap_envelope_response;
envelope->Body->any = g_list_append(envelope->Body->any, response);
- LASSO_PROFILE(profile)->response = LASSO_NODE(response);
+ lasso_assign_gobject(LASSO_PROFILE(profile)->response, response);
return res;
}
@@ -429,10 +430,7 @@ lasso_idwsf2_discovery_init_query(LassoIdWsf2Discovery *discovery, G_GNUC_UNUSED
g_return_val_if_fail(LASSO_IS_SESSION(session), LASSO_PROFILE_ERROR_SESSION_NOT_FOUND);
- if (LASSO_PROFILE(profile)->request) {
- lasso_node_destroy(LASSO_NODE(LASSO_PROFILE(profile)->request));
- }
- LASSO_PROFILE(profile)->request = LASSO_NODE(lasso_idwsf2_disco_query_new());
+ lasso_assign_new_gobject(LASSO_PROFILE(profile)->request, lasso_idwsf2_disco_query_new());
lasso_idwsf2_profile_init_soap_request(profile,
LASSO_PROFILE(profile)->request, LASSO_IDWSF2_DISCO_HREF);
@@ -584,8 +582,9 @@ lasso_idwsf2_discovery_build_epr(LassoIdWsf2DiscoRequestedService *service,
provider->private_data->encryption_sym_key_type));
if (encrypted_element != NULL) {
assertion->Subject->EncryptedID = encrypted_element;
- g_object_unref(assertion->Subject->NameID);
- assertion->Subject->NameID = NULL;
+ lasso_release_gobject(assertion->Subject->NameID);
+ } else {
+ /** FIXME: find a return value for this case */
}
}
@@ -755,7 +754,7 @@ lasso_idwsf2_discovery_get_service(LassoIdWsf2Discovery *discovery, G_GNUC_UNUSE
}
service = lasso_idwsf2_data_service_new_full(LASSO_PROFILE(profile)->server, epr);
- LASSO_PROFILE(service)->session = g_object_ref(LASSO_PROFILE(profile)->session);
+ lasso_assign_gobject(LASSO_PROFILE(service)->session, LASSO_PROFILE(profile)->session);
return service;
}
diff --git a/lasso/id-wsf-2.0/profile.c b/lasso/id-wsf-2.0/profile.c
index 23bb7878..23e34bd3 100644
--- a/lasso/id-wsf-2.0/profile.c
+++ b/lasso/id-wsf-2.0/profile.c
@@ -46,6 +46,7 @@
#include <lasso/xml/ws/wsse_security_header.h>
#include <lasso/xml/saml-2.0/saml2_assertion.h>
+#include "../utils.h"
/*****************************************************************************/
/* private methods */
@@ -95,14 +96,14 @@ lasso_idwsf2_profile_init_soap_request(LassoIdWsf2Profile *profile, LassoNode *r
/* Initialise soap envelope */
envelope = lasso_idwsf2_profile_build_soap_envelope(NULL,
LASSO_PROVIDER(LASSO_PROFILE(profile)->server)->ProviderID);
- profile->soap_envelope_request = envelope;
+ lasso_assign_new_gobject(profile->soap_envelope_request, envelope);
/* Add identity token (if it exists in the session) in soap header */
assertion = lasso_session_get_assertion_identity_token(session, service_type);
if (assertion != NULL) {
wsse_security = lasso_wsse_security_header_new();
- wsse_security->any = g_list_append(wsse_security->any, assertion);
+ lasso_list_add(wsse_security->any, assertion);
envelope->Header->Other = g_list_append(envelope->Header->Other, wsse_security);
}
@@ -143,16 +144,10 @@ lasso_idwsf2_profile_process_soap_request_msg(LassoIdWsf2Profile *profile, const
g_return_val_if_fail(message != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
/* Get soap request */
- if (profile->soap_envelope_request) {
- g_object_unref(profile->soap_envelope_request);
- }
- profile->soap_envelope_request = lasso_soap_envelope_new_from_message(message);
+ lasso_assign_new_gobject(profile->soap_envelope_request, lasso_soap_envelope_new_from_message(message));
envelope = profile->soap_envelope_request;
- if (LASSO_PROFILE(profile)->nameIdentifier != NULL) {
- lasso_node_destroy(LASSO_PROFILE(profile)->nameIdentifier);
- LASSO_PROFILE(profile)->nameIdentifier = NULL;
- }
+ lasso_release_gobject(LASSO_PROFILE(profile)->nameIdentifier);
/* Get NameIdentifier (if exists) from the soap header */
for (i = g_list_first(envelope->Header->Other); i != NULL; i = g_list_next(i)) {
@@ -169,7 +164,7 @@ lasso_idwsf2_profile_process_soap_request_msg(LassoIdWsf2Profile *profile, const
continue;
}
if (LASSO_IS_SAML2_NAME_ID(assertion->Subject->NameID)) {
- LASSO_PROFILE(profile)->nameIdentifier = g_object_ref(
+ lasso_assign_gobject(LASSO_PROFILE(profile)->nameIdentifier,
assertion->Subject->NameID);
} else if (LASSO_IS_SAML2_ENCRYPTED_ELEMENT(
assertion->Subject->EncryptedID)) {
@@ -188,15 +183,12 @@ lasso_idwsf2_profile_process_soap_request_msg(LassoIdWsf2Profile *profile, const
if (LASSO_PROFILE(profile)->nameIdentifier == NULL && encrypted_id != NULL
&& encryption_private_key != NULL) {
decrypted_name_id = lasso_node_decrypt(encrypted_id, encryption_private_key);
- if (LASSO_IS_SAML2_NAME_ID(decrypted_name_id)) {
- LASSO_PROFILE(profile)->nameIdentifier = decrypted_name_id;
- }
- g_object_unref(encrypted_id);
- assertion->Subject->EncryptedID = NULL;
+ lasso_assign_new_gobject(LASSO_PROFILE(profile)->nameIdentifier, decrypted_name_id);
+ lasso_release_gobject(assertion->Subject->EncryptedID);
}
if (envelope != NULL && envelope->Body != NULL && envelope->Body->any != NULL) {
- LASSO_PROFILE(profile)->request = LASSO_NODE(envelope->Body->any->data);
+ lasso_assign_gobject(LASSO_PROFILE(profile)->request, envelope->Body->any->data);
} else {
res = LASSO_SOAP_ERROR_MISSING_BODY;
}
@@ -206,11 +198,8 @@ lasso_idwsf2_profile_process_soap_request_msg(LassoIdWsf2Profile *profile, const
}
/* Set soap response */
- if (profile->soap_envelope_response) {
- g_object_unref(profile->soap_envelope_response);
- }
- profile->soap_envelope_response = lasso_idwsf2_profile_build_soap_envelope(NULL,
- LASSO_PROVIDER(LASSO_PROFILE(profile)->server)->ProviderID);
+ lasso_assign_new_gobject(profile->soap_envelope_response, lasso_idwsf2_profile_build_soap_envelope(NULL,
+ LASSO_PROVIDER(LASSO_PROFILE(profile)->server)->ProviderID));
return res;
}
@@ -240,10 +229,10 @@ lasso_idwsf2_profile_process_soap_response_msg(LassoIdWsf2Profile *profile, cons
/* Get soap response */
envelope = lasso_soap_envelope_new_from_message(message);
- profile->soap_envelope_response = envelope;
+ lasso_assign_new_gobject(profile->soap_envelope_response, envelope);
if (envelope != NULL && envelope->Body != NULL && envelope->Body->any != NULL) {
- LASSO_PROFILE(profile)->response = LASSO_NODE(envelope->Body->any->data);
+ lasso_assign_gobject(LASSO_PROFILE(profile)->response, LASSO_NODE(envelope->Body->any->data));
} else {
res = LASSO_SOAP_ERROR_MISSING_BODY;
}
@@ -265,15 +254,9 @@ dispose(GObject *object)
{
LassoIdWsf2Profile *profile = LASSO_IDWSF2_PROFILE(object);
- if (profile->soap_envelope_request) {
- lasso_node_destroy(LASSO_NODE(profile->soap_envelope_request));
- profile->soap_envelope_request = NULL;
- }
+ lasso_release_gobject(profile->soap_envelope_request);
+ lasso_release_gobject(profile->soap_envelope_response);
- if (profile->soap_envelope_response) {
- lasso_node_destroy(LASSO_NODE(profile->soap_envelope_response));
- profile->soap_envelope_response = NULL;
- }
G_OBJECT_CLASS(parent_class)->dispose(object);
}