diff options
| author | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2008-12-01 17:30:35 +0000 |
|---|---|---|
| committer | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2008-12-01 17:30:35 +0000 |
| commit | 47641f88bf9531cd51b818aabe46368a7b08ad2e (patch) | |
| tree | b9011f25c77d12860dc84d6750baa25ed2d0527c | |
| parent | 6d12685ed63de044d020279e2f14fed3b2629356 (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.c | 26 | ||||
| -rw-r--r-- | lasso/id-wsf-2.0/discovery.c | 17 | ||||
| -rw-r--r-- | lasso/id-wsf-2.0/profile.c | 47 |
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); } |
