You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rampart-dev@ws.apache.org by sh...@apache.org on 2008/02/15 03:54:17 UTC

svn commit: r627934 - in /webservices/rampart/trunk/c: samples/sct_provider/sct_provider_stored_key.c src/omxmlsec/derivation.c src/util/rampart_sec_header_builder.c src/util/rampart_signature.c

Author: shankar
Date: Thu Feb 14 18:54:16 2008
New Revision: 627934

URL: http://svn.apache.org/viewvc?rev=627934&view=rev
Log:
memory leak fix

Modified:
    webservices/rampart/trunk/c/samples/sct_provider/sct_provider_stored_key.c
    webservices/rampart/trunk/c/src/omxmlsec/derivation.c
    webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c
    webservices/rampart/trunk/c/src/util/rampart_signature.c

Modified: webservices/rampart/trunk/c/samples/sct_provider/sct_provider_stored_key.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/samples/sct_provider/sct_provider_stored_key.c?rev=627934&r1=627933&r2=627934&view=diff
==============================================================================
--- webservices/rampart/trunk/c/samples/sct_provider/sct_provider_stored_key.c (original)
+++ webservices/rampart/trunk/c/samples/sct_provider/sct_provider_stored_key.c Thu Feb 14 18:54:16 2008
@@ -146,6 +146,7 @@
 {
     security_context_token_t* sct = NULL;
     oxs_buffer_t* key_buffer = NULL;
+    axis2_bool_t *free_sctid = AXIS2_FALSE;
    
     sct = security_context_token_create(env);
     if(!sct)
@@ -159,9 +160,15 @@
     security_context_token_set_secret(sct, env, key_buffer);
 
     if(!sct_id)
+    {
         sct_id = oxs_util_generate_id(env,"urn:uuid:");
+        free_sctid = AXIS2_TRUE;
+    }
     security_context_token_set_global_identifier(sct, env, axutil_strdup(env, sct_id));
     security_context_token_set_local_identifier(sct, env, axutil_strdup(env, "#sctId-29530019"));
+    
+    if(free_sctid)
+        AXIS2_FREE(env->allocator, sct_id);
 
     return sct;
 }

Modified: webservices/rampart/trunk/c/src/omxmlsec/derivation.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/derivation.c?rev=627934&r1=627933&r2=627934&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/derivation.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/derivation.c Thu Feb 14 18:54:16 2008
@@ -136,7 +136,8 @@
 
     uri = axutil_stracat(env, "#", stref_uri);
     str_token = oxs_token_build_security_token_reference_element(env, NULL); 
-    ref_token = oxs_token_build_reference_element(env, str_token, uri, stref_val_type);   
+    ref_token = oxs_token_build_reference_element(env, str_token, uri, stref_val_type); 
+    AXIS2_FREE(env->allocator, uri);
     return oxs_derivation_build_derived_key_token_with_stre(env, derived_key, parent, str_token); 
 }
 

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=627934&r1=627933&r2=627934&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 Thu Feb 14 18:54:16 2008
@@ -497,6 +497,7 @@
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][shb] SAML Supporting token build failed. ERROR");
+            axutil_array_list_free(sign_parts_list, env);
 			axiom_namespace_free(sec_ns_obj, env);
             return AXIS2_FAILURE;
         }
@@ -509,6 +510,7 @@
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][shb] Issued supporting token build failed. ERROR");
+            axutil_array_list_free(sign_parts_list, env);
 			axiom_namespace_free(sec_ns_obj, env);
             return AXIS2_FAILURE;
         }
@@ -541,8 +543,10 @@
                 rampart_create_fault_envelope(env, RAMPART_FAULT_INVALID_SECURITY,
                                   " Asymmetric Binding failed. Check configurations ", RAMPART_FAULT_IN_POLICY, msg_ctx);
             }
+            axutil_array_list_free(sign_parts_list, env);
             return AXIS2_FAILURE;
         }else{
+            axutil_array_list_free(sign_parts_list, env);
             return AXIS2_SUCCESS;
         }
 
@@ -562,8 +566,10 @@
                 rampart_create_fault_envelope(env, RAMPART_FAULT_INVALID_SECURITY,
                                   " Symmetric Binding failed. Check configurations ", RAMPART_FAULT_IN_POLICY, msg_ctx);
             }
+            axutil_array_list_free(sign_parts_list, env);
             return AXIS2_FAILURE;
         }else{
+            axutil_array_list_free(sign_parts_list, env);
             return AXIS2_SUCCESS;
         }
     }
@@ -571,8 +577,10 @@
     {
         AXIS2_LOG_INFO(env->log, "[rampart][shb]  Using transport binding");
 		axiom_namespace_free(sec_ns_obj, env);
+        axutil_array_list_free(sign_parts_list, env);
         return AXIS2_SUCCESS;
     }else{
+        axutil_array_list_free(sign_parts_list, env);
 		axiom_namespace_free(sec_ns_obj, env);
         return AXIS2_FAILURE;
     }

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=627934&r1=627933&r2=627934&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_signature.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_signature.c Thu Feb 14 18:54:16 2008
@@ -641,10 +641,10 @@
     }
 
     sign_ctx = oxs_sign_ctx_create(env);
-    /* Create the sign parts */
-    rampart_sig_create_sign_parts(env, rampart_context, nodes_to_sign, server_side, sign_parts_list);
+
     /* Set which parts to be signed*/
-    oxs_sign_ctx_set_sign_parts(sign_ctx, env, sign_parts_list);
+    oxs_sign_ctx_set_sign_parts(sign_ctx, env, 
+        rampart_sig_create_sign_parts(env, rampart_context, nodes_to_sign, server_side, sign_parts_list));
 
     /*Get the binding type. Either symmetric or asymmetric for signature*/
     binding_type = rampart_context_get_binding_type(rampart_context,env);
@@ -876,7 +876,24 @@
     oxs_transform_t *tr = NULL;
     axutil_array_list_t *tr_list = NULL;
 
-    digest_method = rampart_context_get_digest_mtd(rampart_context, env);    
+    /*content of sign_parts + sign parts created from nodes_to_sign will be copied to 
+    this list. We can put everything to sign_parts, but hard to keep track of who has to delete
+    sign_parts in case if there is an error. Since it is copied, sign_parts can be deleted in 
+    rampart_shb_build_message retardless of return status. Modified due to SAML modifications*/
+    axutil_array_list_t *new_sign_parts = NULL;
+    new_sign_parts = axutil_array_list_create(env, 0);
+
+    digest_method = rampart_context_get_digest_mtd(rampart_context, env);   
+
+    /*copy the content of sign_parts to new_sign_parts*/
+    for(i = 0; i < axutil_array_list_size(sign_parts, env); i++)
+    {
+        sign_part = (oxs_sign_part_t*)axutil_array_list_get(sign_parts, env, i);
+        if(sign_part)
+        {
+            axutil_array_list_add(new_sign_parts, env, sign_part);
+        }
+    }
 
     /*Now we should create sign part for each node in the arraylist.*/
     for (i=0 ; i < axutil_array_list_size(nodes_to_sign, env); i++)
@@ -896,7 +913,7 @@
                                     RAMPART_WSU, RAMPART_WSU_XMLNS,OXS_ATTR_ID, id);
             oxs_sign_part_set_node(sign_part, env, node_to_sign);
             oxs_sign_part_set_digest_mtd(sign_part, env, digest_method);
-            axutil_array_list_add(sign_parts, env, sign_part);
+            axutil_array_list_add(new_sign_parts, env, sign_part);
             AXIS2_FREE(env->allocator, id);
             id = NULL;
         }
@@ -940,6 +957,6 @@
     /*Free array list*/
     axutil_array_list_free(nodes_to_sign, env);
     nodes_to_sign = NULL;
-    return sign_parts;
+    return new_sign_parts;
 }