Author: kaushalye Date: Wed Nov 28 04:12:37 2007 New Revision: 598978 URL: http://svn.apache.org/viewvc?rev=598978&view=rev Log: memory leak fixes
Modified: webservices/rampart/trunk/c/samples/authn_provider/authn_provider.c webservices/rampart/trunk/c/src/omxmlsec/axiom.c webservices/rampart/trunk/c/src/util/rampart_context.c webservices/rampart/trunk/c/src/util/rampart_encryption.c webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c webservices/rampart/trunk/c/src/util/rampart_signature.c webservices/rampart/trunk/c/src/util/rampart_username_token.c Modified: webservices/rampart/trunk/c/samples/authn_provider/authn_provider.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/samples/authn_provider/authn_provider.c?rev=598978&r1=598977&r2=598978&view=diff ============================================================================== --- webservices/rampart/trunk/c/samples/authn_provider/authn_provider.c (original) +++ webservices/rampart/trunk/c/samples/authn_provider/authn_provider.c Wed Nov 28 04:12:37 2007 @@ -168,11 +168,11 @@ axis2_remove_instance(rampart_authn_provider_t *inst, const axutil_env_t *env) { - axis2_status_t status = AXIS2_FAILURE; if (inst) { - status = AXIS2_SVC_SKELETON_FREE(inst, env); + AXIS2_FREE(env->allocator, inst->ops); + AXIS2_FREE(env->allocator, inst); } - return status; + return AXIS2_SUCCESS; } Modified: webservices/rampart/trunk/c/src/omxmlsec/axiom.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/axiom.c?rev=598978&r1=598977&r2=598978&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/omxmlsec/axiom.c (original) +++ webservices/rampart/trunk/c/src/omxmlsec/axiom.c Wed Nov 28 04:12:37 2007 @@ -49,8 +49,11 @@ ele = axiom_node_get_data_element(node, env); attr = axiom_attribute_create(env, attribute , value, ns); + if(!attr && ns) + { + axiom_namespace_free(ns, env); + } status = axiom_element_add_attribute(ele, env, attr, node); - return status; } Modified: webservices/rampart/trunk/c/src/util/rampart_context.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_context.c?rev=598978&r1=598977&r2=598978&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/util/rampart_context.c (original) +++ webservices/rampart/trunk/c/src/util/rampart_context.c Wed Nov 28 04:12:37 2007 @@ -230,16 +230,17 @@ { axutil_param_t *param = NULL; param = rampart_context->authn_provider->param; + /*User specific free logic*/ + RAMPART_AUTHN_PROVIDER_FREE(rampart_context->authn_provider, env); + rampart_context->authn_provider = NULL; if(param){ /*We actually free the dll_desc, which is set as the value of the axutil parameter.*/ - axutil_dll_desc_t *dll_desc_l = NULL; + axutil_param_free(param, env); + /*axutil_dll_desc_t *dll_desc_l = NULL; dll_desc_l = axutil_param_get_value(param, env); status = axutil_class_loader_delete_dll(env, dll_desc_l); - dll_desc_l = NULL; + dll_desc_l = NULL;*/ } - /*User specific free logic*/ - /*RAMPART_AUTHN_PROVIDER_FREE(rampart_context->authn_provider, env);*/ - rampart_context->authn_provider = NULL; } if(rampart_context->session_key) Modified: webservices/rampart/trunk/c/src/util/rampart_encryption.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_encryption.c?rev=598978&r1=598977&r2=598978&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/util/rampart_encryption.c (original) +++ webservices/rampart/trunk/c/src/util/rampart_encryption.c Wed Nov 28 04:12:37 2007 @@ -222,10 +222,12 @@ axutil_array_list_t *dk_list = NULL; axis2_char_t *enc_sym_algo = NULL; axis2_char_t *asym_key_id = NULL; + axis2_bool_t free_asym_key_id = AXIS2_FALSE; axiom_node_t *encrypted_key_node = NULL; axiom_node_t *sig_node = NULL; axiom_node_t *data_ref_list_node = NULL; axis2_bool_t use_derived_keys = AXIS2_TRUE; + axis2_bool_t free_session_key = AXIS2_FALSE; axis2_bool_t server_side = AXIS2_FALSE; rp_property_t *token = NULL; axis2_bool_t signature_protection = AXIS2_FALSE; @@ -283,6 +285,7 @@ session_key = oxs_key_create(env); status = oxs_key_for_algo(session_key, env, enc_sym_algo); rampart_context_set_session_key(rampart_context, env, session_key); + free_session_key = AXIS2_TRUE; } id_list = axutil_array_list_create(env, 5); @@ -352,6 +355,20 @@ { AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][rampart_encryption] Cannot encrypt the node " ); + if(free_session_key) + { + oxs_key_free(session_key, env); + session_key = NULL; + } + for(j=0 ; j < axutil_array_list_size(id_list, env); j++) + { + axis2_char_t *id = NULL; + id = (axis2_char_t *)axutil_array_list_get(id_list, env, j); + AXIS2_FREE(env->allocator, id); + } + axutil_array_list_free(id_list, env); + id_list = NULL; + return AXIS2_FAILURE; } @@ -376,6 +393,19 @@ if(AXIS2_FAILURE == status){ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][rampart_encryption] Cannot encrypt the session key " ); + if(free_session_key) + { + oxs_key_free(session_key, env); + session_key = NULL; + } + for(j=0 ; j < axutil_array_list_size(id_list, env); j++) + { + axis2_char_t *id = NULL; + id = (axis2_char_t *)axutil_array_list_get(id_list, env, j); + AXIS2_FREE(env->allocator, id); + } + axutil_array_list_free(id_list, env); + id_list = NULL; return AXIS2_FAILURE; } /*Now we have en EncryptedKey Node*/ @@ -386,9 +416,23 @@ { AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][rampart_encryption]Encrypting signature, EncryptedKey Not found"); + if(free_session_key) + { + oxs_key_free(session_key, env); + session_key = NULL; + } + for(j=0 ; j < axutil_array_list_size(id_list, env); j++) + { + axis2_char_t *id = NULL; + id = (axis2_char_t *)axutil_array_list_get(id_list, env, j); + AXIS2_FREE(env->allocator, id); + } + axutil_array_list_free(id_list, env); + id_list = NULL; return AXIS2_FAILURE; } asym_key_id = oxs_util_generate_id(env, (axis2_char_t*)OXS_ENCKEY_ID); + free_asym_key_id = AXIS2_TRUE; if(asym_key_id) { oxs_axiom_add_attribute(env, encrypted_key_node, NULL, @@ -424,9 +468,26 @@ dk_list = NULL; /*Free derrived Id list*/ + for(j=0 ; j < axutil_array_list_size(id_list, env); j++) + { + axis2_char_t *id = NULL; + id = (axis2_char_t *)axutil_array_list_get(id_list, env, j); + AXIS2_FREE(env->allocator, id); + } axutil_array_list_free(id_list, env); id_list = NULL; + if(free_session_key && session_key) + { + oxs_key_free(session_key, env); + session_key = NULL; + } + + if(free_asym_key_id && asym_key_id) + { + AXIS2_FREE(env->allocator, asym_key_id); + } + return status; } Modified: webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c?rev=598978&r1=598977&r2=598978&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c (original) +++ webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c Wed Nov 28 04:12:37 2007 @@ -326,6 +326,7 @@ tmp_node = axiom_node_detach(dk_node, env); axiom_node_insert_sibling_after(enc_key_node, env, tmp_node); } + axutil_array_list_free(dk_list, env); return AXIS2_SUCCESS; } Modified: webservices/rampart/trunk/c/src/util/rampart_signature.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_signature.c?rev=598978&r1=598977&r2=598978&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/util/rampart_signature.c (original) +++ webservices/rampart/trunk/c/src/util/rampart_signature.c Wed Nov 28 04:12:37 2007 @@ -246,6 +246,7 @@ rp_property_t *token = NULL; axis2_bool_t use_derived_keys = AXIS2_FALSE; axis2_bool_t server_side = AXIS2_FALSE; + axis2_bool_t free_session_key = AXIS2_FALSE; /*We are trying to reuse the same session key which is used for encryption*/ session_key = rampart_context_get_session_key(rampart_context, env); @@ -254,6 +255,7 @@ session_key = oxs_key_create(env); oxs_key_for_algo(session_key, env, OXS_HREF_HMAC_SHA1); rampart_context_set_session_key(rampart_context, env, session_key); + free_session_key = AXIS2_TRUE; } /*If we need to use derrived keys, we must sign using a derived key of the session key*/ server_side = axis2_msg_ctx_get_server_side(msg_ctx, env); @@ -274,6 +276,10 @@ oxs_sign_ctx_set_c14n_mtd(sign_ctx, env, OXS_HREF_XML_EXC_C14N); oxs_sign_ctx_set_operation(sign_ctx, env, OXS_SIGN_OPERATION_SIGN); + if(free_session_key) + { + oxs_key_free(session_key, env); + } return AXIS2_SUCCESS; } @@ -668,6 +674,7 @@ oxs_key_t *signed_key = NULL; oxs_key_t *session_key = NULL; axis2_char_t *enc_key_id = NULL; + axis2_bool_t free_enc_key_id = AXIS2_FALSE; signed_key = oxs_sign_ctx_get_secret(sign_ctx, env); session_key = rampart_context_get_session_key(rampart_context, env); @@ -684,6 +691,7 @@ encrypted_key_node = oxs_axiom_get_node_by_local_name(env, sec_node, OXS_NODE_ENCRYPTED_KEY); /*Add Id attribute*/ enc_key_id = oxs_util_generate_id(env, (axis2_char_t*)OXS_ENCKEY_ID); + free_enc_key_id = AXIS2_TRUE; oxs_axiom_add_attribute(env, encrypted_key_node, NULL, NULL, OXS_ATTR_ID, enc_key_id); /*And we have to make sure that we place this newly generated EncryptedKey node above the Signature node*/ oxs_axiom_interchange_nodes(env, encrypted_key_node, sig_node); @@ -706,6 +714,10 @@ /*We need to make DerivedKeyToken to appear before the sginature node*/ oxs_axiom_interchange_nodes(env, dk_token, sig_node); } + if (free_enc_key_id) + { + AXIS2_FREE(env->allocator, enc_key_id); + } } /*If we have used derived keys, then we need to free the key in sign_ctx*/ Modified: webservices/rampart/trunk/c/src/util/rampart_username_token.c URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_username_token.c?rev=598978&r1=598977&r2=598978&view=diff ============================================================================== --- webservices/rampart/trunk/c/src/util/rampart_username_token.c (original) +++ webservices/rampart/trunk/c/src/util/rampart_username_token.c Wed Nov 28 04:12:37 2007 @@ -230,6 +230,7 @@ rampart_authn_provider_t *authn_provider = NULL; axis2_char_t *password_from_svr = NULL; axis2_char_t *password_to_compare = NULL; + axis2_bool_t free_password_to_compare = AXIS2_FALSE; axis2_ctx_t *ctx = NULL; rampart_authn_provider_status_t auth_status= RAMPART_AUTHN_PROVIDER_GENERAL_ERROR ; axiom_element_t *ut_ele = NULL; @@ -541,6 +542,7 @@ created, password_from_svr); rampart_set_security_processed_result(env, msg_ctx, RAMPART_SPR_UT_PASSWORD_TYPE, RAMPART_PASSWORD_DIGEST_URI); + free_password_to_compare = AXIS2_TRUE; } else { @@ -556,6 +558,10 @@ "[rampart][rampart_usernametoken] Password comparison SUCCESS"); rampart_set_security_processed_result(env, msg_ctx, RAMPART_SPR_UT_CHECKED, RAMPART_YES); + if(free_password_to_compare) + { + AXIS2_FREE(env->allocator, password_to_compare); + } return AXIS2_SUCCESS; } else @@ -563,6 +569,10 @@ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][rampart_usernametoken] Password is not valid for user %s", username); + if(free_password_to_compare) + { + AXIS2_FREE(env->allocator, password_to_compare); + } return AXIS2_FAILURE; } }