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 ka...@apache.org on 2007/09/17 06:33:34 UTC

svn commit: r576251 - in /webservices/rampart/trunk/c/src: omxmlsec/ omxmlsec/c14n/ omxmlsec/openssl/ omxmlsec/tokens/ util/

Author: kaushalye
Date: Sun Sep 16 21:33:30 2007
New Revision: 576251

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

Modified:
    webservices/rampart/trunk/c/src/omxmlsec/axiom.c
    webservices/rampart/trunk/c/src/omxmlsec/buffer.c
    webservices/rampart/trunk/c/src/omxmlsec/c14n/c14n.c
    webservices/rampart/trunk/c/src/omxmlsec/cipher.c
    webservices/rampart/trunk/c/src/omxmlsec/encryption.c
    webservices/rampart/trunk/c/src/omxmlsec/key.c
    webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c
    webservices/rampart/trunk/c/src/omxmlsec/openssl/x509.c
    webservices/rampart/trunk/c/src/omxmlsec/signature.c
    webservices/rampart/trunk/c/src/omxmlsec/tokens/token_reference_list.c
    webservices/rampart/trunk/c/src/omxmlsec/utility.c
    webservices/rampart/trunk/c/src/omxmlsec/x509_cert.c
    webservices/rampart/trunk/c/src/omxmlsec/xml_signature.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_engine.c
    webservices/rampart/trunk/c/src/util/rampart_handler_util.c
    webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c
    webservices/rampart/trunk/c/src/util/rampart_signature.c
    webservices/rampart/trunk/c/src/util/rampart_timestamp_token.c
    webservices/rampart/trunk/c/src/util/rampart_util.c

Modified: webservices/rampart/trunk/c/src/omxmlsec/axiom.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/axiom.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/axiom.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/axiom.c Sun Sep 16 21:33:30 2007
@@ -1,411 +1,413 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <stdio.h>
-#include <axis2_util.h>
-#include <oxs_constants.h>
-#include <oxs_error.h>
-#include <oxs_axiom.h>
-#include <axiom_node.h>
-#include <axiom_namespace.h>
-#include <axiom_attribute.h>
-#include <axiom_element.h>
-#include <axiom_document.h>
-#include <axiom_stax_builder.h>
-#include <axiom_util.h>
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-oxs_axiom_add_attribute(const axutil_env_t *env,
-                        axiom_node_t* node,
-                        axis2_char_t* attribute_ns,
-                        axis2_char_t* attribute_ns_uri,
-                        axis2_char_t* attribute,
-                        axis2_char_t* value)
-{
-    axiom_attribute_t *attr = NULL;
-    axiom_element_t *ele = NULL;
-    axis2_status_t status = AXIS2_FAILURE;
-    axiom_namespace_t *ns = NULL;
-
-    if(attribute_ns_uri)
-    {    
-        ns =  axiom_namespace_create(env, attribute_ns_uri, attribute_ns);
-    }    
-
-    ele =  axiom_node_get_data_element(node, env);
-    attr =  axiom_attribute_create(env, attribute , value, ns);
-    status = axiom_element_add_attribute(ele, env, attr, node);
-
-    return status;
-}
-
-AXIS2_EXTERN int AXIS2_CALL
-oxs_axiom_get_number_of_children_with_qname(const axutil_env_t *env,
-        axiom_node_t* parent,
-        axis2_char_t* local_name,
-        axis2_char_t* ns_uri,
-        axis2_char_t* prefix)
-{
-
-    axutil_qname_t *qname = NULL;
-    axiom_element_t *parent_ele = NULL;
-    axiom_children_qname_iterator_t *qname_iter = NULL;
-    axiom_node_t *temp_node = NULL;
-    int counter = 0;
-
-    qname = axutil_qname_create(env, local_name, ns_uri, prefix);
-    parent_ele = axiom_node_get_data_element(parent, env);
-    if (!parent_ele)
-    {
-        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
-                  "Cannot find %s element", local_name);
-        return -1;
-    }
-
-    qname_iter = axiom_element_get_children_with_qname(parent_ele, env, qname, parent);
-    while (AXIS2_TRUE == axiom_children_qname_iterator_has_next(qname_iter , env))
-    {
-
-        counter++;
-        temp_node = axiom_children_qname_iterator_next(qname_iter, env);
-    }
-    axutil_qname_free(qname, env);
-    qname = NULL;
-
-    return counter;
-}
-
-/**
- * Traverse thru the node and its children. Check if the localname is equal to the given name
- * */
-AXIS2_EXTERN axiom_node_t* AXIS2_CALL
-oxs_axiom_get_node_by_local_name(const axutil_env_t *env,
-                                 axiom_node_t *node,
-                                 axis2_char_t *local_name)
-{
-    axis2_char_t *temp_name = NULL;
-
-    if(!node){return NULL;}
-
-    if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT){return NULL;}
-
-    temp_name = axiom_util_get_localname(node, env);
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[rampart][axiom] Checking node %s for %s", temp_name, local_name );
-
-    if(0 == axutil_strcmp(temp_name, local_name) ){
-        /*Gottcha.. return this node*/
-        return node;
-    }else{
-        /*Doesn't match? Get the first child*/
-        axiom_node_t *temp_node = NULL;
-
-        temp_node = axiom_node_get_first_element(node, env);
-        while (temp_node)
-        {
-            axiom_node_t *res_node = NULL;
-            res_node = oxs_axiom_get_node_by_local_name(env, temp_node, local_name);
-            if(res_node){
-                return res_node;
-            }
-            temp_node = axiom_node_get_next_sibling(temp_node, env);
-        }
-
-    }
-    return NULL;
-}
-
-/**
- * Traverse thru the node and its children. Check if the id attribute is equal to the given value
- * */
-AXIS2_EXTERN axiom_node_t* AXIS2_CALL
-oxs_axiom_get_node_by_id(const axutil_env_t *env,
-                         axiom_node_t *node,
-                         axis2_char_t *attr,
-                         axis2_char_t *val,
-                         axis2_char_t *ns)
-{
-    axis2_char_t *attribute_value = NULL;
-    axis2_char_t *localname = NULL;
-
-    if(!node){return NULL;}
-
-    if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT){return NULL;}
-
-    localname = axiom_util_get_localname(node, env);
-    /*AXIS2_LOG_INFO(env->log, "[rampart][axiom] Checking node %s for the attribute %s with value = %s", localname, attr, val);*/
-
-    attribute_value = oxs_axiom_get_attribute_value_of_node_by_name(env, node, attr, ns);
-    if(0 == axutil_strcmp(val, attribute_value) ){
-        /*Gottcha.. return this node*/
-        return node;
-    }else{
-        /*Doesn't match? Get the first child*/
-        axiom_node_t *temp_node = NULL;
-
-        temp_node = axiom_node_get_first_element(node, env);
-        while (temp_node)
-        {
-            axiom_node_t *res_node = NULL;
-            res_node = oxs_axiom_get_node_by_id(env, temp_node, attr, val, ns);
-            if(res_node){
-                return res_node;
-            }
-            temp_node = axiom_node_get_next_sibling(temp_node, env);
-        }
-
-    }
-    return NULL;
-}
-
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-oxs_axiom_get_attribute_value_of_node_by_name(const axutil_env_t *env,
-        axiom_node_t *node,
-        axis2_char_t *attribute_name,
-        axis2_char_t *ns)
-{
-    axis2_char_t *attribute_value = NULL;
-    axiom_element_t *ele = NULL;
-    axutil_qname_t *qname = NULL;
-
-    ele = axiom_node_get_data_element(node, env);
-    qname = axutil_qname_create(env, attribute_name, ns , NULL);
-    attribute_value = oxs_axiom_get_attribute_val_of_node_by_qname(env, node, qname);
-    axutil_qname_free(qname, env);
-    qname = NULL;
-    return attribute_value;
-}
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-oxs_axiom_get_attribute_val_of_node_by_qname(const axutil_env_t *env,
-        axiom_node_t *node,
-        axutil_qname_t *qname)
-{
-    /*Qname might NOT contain the prefix*/
-    axiom_element_t *ele = NULL;
-    axutil_hash_t *attr_list = NULL;
-    axutil_hash_index_t *hi = NULL;
-    axis2_char_t *local_name = NULL;
-    axis2_char_t *ns_uri = NULL;
-    axis2_char_t *found_val = NULL;
-
-    ele = axiom_node_get_data_element(node, env);
-
-    /*Get attribute list of the element*/
-    attr_list = axiom_element_extract_attributes(ele, env, node);
-    if(!attr_list){
-        return NULL;
-    }
-    /*Get localname of the qname*/
-    local_name =  axutil_qname_get_localpart(qname, env);
-    /*Get nsuri of the qname*/
-    ns_uri = axutil_qname_get_uri(qname, env);
-    if(!ns_uri){
-        ns_uri = "";
-    }
-    /*Traverse thru all the attributes. If both localname and the nsuri matches return the val*/
-    for (hi = axutil_hash_first(attr_list, env); hi; hi = axutil_hash_next(env, hi))
-    {
-        void *attr = NULL;
-        axiom_attribute_t *om_attr = NULL;
-        axutil_hash_this(hi, NULL, NULL, &attr);
-        if (attr)
-        {
-            axis2_char_t *this_attr_name = NULL;
-            axis2_char_t *this_attr_ns_uri = NULL;
-            axiom_namespace_t *attr_ns = NULL;
-
-            om_attr = (axiom_attribute_t*)attr;
-            this_attr_name = axiom_attribute_get_localname(om_attr, env);
-            attr_ns = axiom_attribute_get_namespace(om_attr, env);
-            if(attr_ns){
-                this_attr_ns_uri = axiom_namespace_get_uri(attr_ns, env);
-            }else{
-                this_attr_ns_uri = "";
-            }
-            if(0 == axutil_strcmp(local_name, this_attr_name) && 0 == axutil_strcmp(ns_uri, this_attr_ns_uri))
-            {
-                /*Got it !!!*/
-                found_val = axiom_attribute_get_value(om_attr, env);
-                break;
-            }
-        }
-    }
-
-    for(hi = axutil_hash_first(attr_list, env); hi; hi = axutil_hash_next(env, hi))
-    {
-        void *val = NULL;
-        axutil_hash_this(hi, NULL, NULL, &val);
-        if (val)
-        {
-            axiom_attribute_free((axiom_attribute_t *)val, env);
-            val = NULL;
-        }
-    }
-    axutil_hash_free(attr_list, env);
-    attr_list = NULL;
-
-    return found_val;
-}
-
-
-AXIS2_EXTERN axiom_node_t* AXIS2_CALL
-oxs_axiom_get_first_child_node_by_name(const axutil_env_t *env,
-                                       axiom_node_t* parent,
-                                       axis2_char_t* local_name,
-                                       axis2_char_t* ns_uri,
-                                       axis2_char_t* prefix)
-{
-    axutil_qname_t *qname = NULL;
-    axiom_node_t *node = NULL;
-    axiom_element_t *parent_ele = NULL;
-    axiom_element_t *ele = NULL;
-    axis2_char_t *parent_name = NULL;
-
-    qname = axutil_qname_create(env, local_name, ns_uri, prefix);
-    parent_ele = axiom_node_get_data_element(parent, env);
-    if (!parent_ele)
-    {
-        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
-                  "Cannot find %s element", local_name);
-        return NULL;
-    }
-    /*Get the child*/
-    ele = axiom_element_get_first_child_with_qname(parent_ele, env, qname, parent, &node);
-
-    axutil_qname_free(qname, env);
-    qname = NULL;
-
-    parent_name = axiom_node_to_string(parent, env);
-    if (!node)
-    {
-        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
-                  "Cannot find child %s of %s", local_name, parent_name);
-        return NULL;
-    }
-    AXIS2_FREE(env->allocator, parent_name);
-    parent_name = NULL;
-    return node;
-}
-
-
-AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-oxs_axiom_get_node_content(const axutil_env_t *env, axiom_node_t* node)
-{
-    axiom_element_t *ele = NULL;
-    axis2_char_t *content = NULL;
-
-    ele = axiom_node_get_data_element(node, env);
-    if (!ele) return NULL;
-
-    content = axiom_element_get_text(ele, env, node);
-    if (!content) return NULL;
-
-    return content;
-}
-
-AXIS2_EXTERN axiom_node_t *AXIS2_CALL
-oxs_axiom_deserialize_node(const axutil_env_t *env,  axis2_char_t* buffer)
-{
-    axiom_document_t *doc = NULL;
-    axiom_stax_builder_t *builder = NULL;
-    axiom_xml_reader_t *reader = NULL;
-    axiom_node_t *node = NULL;
-
-    if (!buffer)
-    {
-        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
-                  "buffer is NULL");
-        return NULL;
-    }
-    reader = axiom_xml_reader_create_for_memory(env,
-             (void*)buffer, axutil_strlen(buffer), "utf-8", AXIS2_XML_PARSER_TYPE_BUFFER);
-
-    if (!reader)
-    {
-        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
-                  "axiom_xml_reader is NULL");
-        return NULL;
-    }
-
-    builder = axiom_stax_builder_create(env, reader);
-    if (!builder)
-    {
-        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
-                  "axiom_stax_builder is NULL");
-        return NULL;
-    }
-
-    doc = axiom_document_create(env, NULL, builder);
-    if (!doc)
-    {
-        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
-                  "axiom_document is NULL");
-        return NULL;
-    }
-    node = axiom_document_build_all(doc, env);
-    if (!node)
-    {
-        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
-                  "Building node failed");
-        return NULL;
-    }
-    axiom_stax_builder_free_self(builder, env);
-    builder = NULL;
-
-    /*The stax builder will free the reader.*/
-    /*axiom_xml_reader_free(reader, env);
-    reader = NULL;*/
-
-    return node;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-oxs_axiom_check_node_name(const axutil_env_t *env, axiom_node_t* node, axis2_char_t* name, axis2_char_t* ns)
-{
-    int ret_name, ret_ns;
-    axiom_element_t * ele = NULL;
-    axis2_char_t* namestr = NULL;
-    axis2_char_t* ns_str = NULL;
-    axutil_qname_t* qname = NULL;
-
-    ele = axiom_node_get_data_element(node, env);
-    qname = axiom_element_get_qname(ele, env, node);
-
-    namestr = axutil_qname_get_localpart(qname, env);
-    ret_name =  axutil_strcmp(namestr, name) ;
-
-
-    if (ret_name < 0) return 0;
-
-    if (ns)
-    {
-        ns_str = axutil_qname_get_uri(qname, env);
-        ret_ns =  axutil_strcmp(ns_str, ns) ;
-        if (ret_ns < 0) return AXIS2_FAILURE;
-        else   return AXIS2_SUCCESS;
-
-    }
-    else
-    {
-        return AXIS2_SUCCESS;
-    }
-
-
-}
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include <axis2_util.h>
+#include <oxs_constants.h>
+#include <oxs_error.h>
+#include <oxs_axiom.h>
+#include <axiom_node.h>
+#include <axiom_namespace.h>
+#include <axiom_attribute.h>
+#include <axiom_element.h>
+#include <axiom_document.h>
+#include <axiom_stax_builder.h>
+#include <axiom_util.h>
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_axiom_add_attribute(const axutil_env_t *env,
+                        axiom_node_t* node,
+                        axis2_char_t* attribute_ns,
+                        axis2_char_t* attribute_ns_uri,
+                        axis2_char_t* attribute,
+                        axis2_char_t* value)
+{
+    axiom_attribute_t *attr = NULL;
+    axiom_element_t *ele = NULL;
+    axis2_status_t status = AXIS2_FAILURE;
+    axiom_namespace_t *ns = NULL;
+
+    if(attribute_ns_uri)
+    {    
+        ns =  axiom_namespace_create(env, attribute_ns_uri, attribute_ns);
+    }    
+
+    ele =  axiom_node_get_data_element(node, env);
+    attr =  axiom_attribute_create(env, attribute , value, ns);
+    status = axiom_element_add_attribute(ele, env, attr, node);
+
+    return status;
+}
+
+AXIS2_EXTERN int AXIS2_CALL
+oxs_axiom_get_number_of_children_with_qname(const axutil_env_t *env,
+        axiom_node_t* parent,
+        axis2_char_t* local_name,
+        axis2_char_t* ns_uri,
+        axis2_char_t* prefix)
+{
+
+    axutil_qname_t *qname = NULL;
+    axiom_element_t *parent_ele = NULL;
+    axiom_children_qname_iterator_t *qname_iter = NULL;
+    axiom_node_t *temp_node = NULL;
+    int counter = 0;
+
+    qname = axutil_qname_create(env, local_name, ns_uri, prefix);
+    parent_ele = axiom_node_get_data_element(parent, env);
+    if (!parent_ele)
+    {
+        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
+                  "Cannot find %s element", local_name);
+        return -1;
+    }
+
+    qname_iter = axiom_element_get_children_with_qname(parent_ele, env, qname, parent);
+    while (AXIS2_TRUE == axiom_children_qname_iterator_has_next(qname_iter , env))
+    {
+
+        counter++;
+        temp_node = axiom_children_qname_iterator_next(qname_iter, env);
+    }
+    axutil_qname_free(qname, env);
+    qname = NULL;
+
+    return counter;
+}
+
+/**
+ * Traverse thru the node and its children. Check if the localname is equal to the given name
+ * */
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+oxs_axiom_get_node_by_local_name(const axutil_env_t *env,
+                                 axiom_node_t *node,
+                                 axis2_char_t *local_name)
+{
+    axis2_char_t *temp_name = NULL;
+
+    if(!node){return NULL;}
+
+    if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT){return NULL;}
+
+    temp_name = axiom_util_get_localname(node, env);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[rampart][axiom] Checking node %s for %s", temp_name, local_name );
+
+    if(0 == axutil_strcmp(temp_name, local_name) ){
+        /*Gottcha.. return this node*/
+        return node;
+    }else{
+        /*Doesn't match? Get the first child*/
+        axiom_node_t *temp_node = NULL;
+
+        temp_node = axiom_node_get_first_element(node, env);
+        while (temp_node)
+        {
+            axiom_node_t *res_node = NULL;
+            res_node = oxs_axiom_get_node_by_local_name(env, temp_node, local_name);
+            if(res_node){
+                return res_node;
+            }
+            temp_node = axiom_node_get_next_sibling(temp_node, env);
+        }
+
+    }
+    return NULL;
+}
+
+/**
+ * Traverse thru the node and its children. Check if the id attribute is equal to the given value
+ * */
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+oxs_axiom_get_node_by_id(const axutil_env_t *env,
+                         axiom_node_t *node,
+                         axis2_char_t *attr,
+                         axis2_char_t *val,
+                         axis2_char_t *ns)
+{
+    axis2_char_t *attribute_value = NULL;
+    axis2_char_t *localname = NULL;
+
+    if(!node){return NULL;}
+
+    if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT){return NULL;}
+
+    localname = axiom_util_get_localname(node, env);
+    /*AXIS2_LOG_INFO(env->log, "[rampart][axiom] Checking node %s for the attribute %s with value = %s", localname, attr, val);*/
+
+    attribute_value = oxs_axiom_get_attribute_value_of_node_by_name(env, node, attr, ns);
+    if(0 == axutil_strcmp(val, attribute_value) ){
+        /*Gottcha.. return this node*/
+        return node;
+    }else{
+        /*Doesn't match? Get the first child*/
+        axiom_node_t *temp_node = NULL;
+
+        temp_node = axiom_node_get_first_element(node, env);
+        while (temp_node)
+        {
+            axiom_node_t *res_node = NULL;
+            res_node = oxs_axiom_get_node_by_id(env, temp_node, attr, val, ns);
+            if(res_node){
+                return res_node;
+            }
+            temp_node = axiom_node_get_next_sibling(temp_node, env);
+        }
+
+    }
+    return NULL;
+}
+
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+oxs_axiom_get_attribute_value_of_node_by_name(const axutil_env_t *env,
+        axiom_node_t *node,
+        axis2_char_t *attribute_name,
+        axis2_char_t *ns)
+{
+    axis2_char_t *attribute_value = NULL;
+    axiom_element_t *ele = NULL;
+    axutil_qname_t *qname = NULL;
+
+    ele = axiom_node_get_data_element(node, env);
+    qname = axutil_qname_create(env, attribute_name, ns , NULL);
+    attribute_value = oxs_axiom_get_attribute_val_of_node_by_qname(env, node, qname);
+    axutil_qname_free(qname, env);
+    qname = NULL;
+    return attribute_value;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+oxs_axiom_get_attribute_val_of_node_by_qname(const axutil_env_t *env,
+        axiom_node_t *node,
+        axutil_qname_t *qname)
+{
+    /*Qname might NOT contain the prefix*/
+    axiom_element_t *ele = NULL;
+    axutil_hash_t *attr_list = NULL;
+    axutil_hash_index_t *hi = NULL;
+    axis2_char_t *local_name = NULL;
+    axis2_char_t *ns_uri = NULL;
+    axis2_char_t *found_val = NULL;
+
+    ele = axiom_node_get_data_element(node, env);
+
+    /*Get attribute list of the element*/
+    attr_list = axiom_element_extract_attributes(ele, env, node);
+    if(!attr_list){
+        return NULL;
+    }
+    /*Get localname of the qname*/
+    local_name =  axutil_qname_get_localpart(qname, env);
+    /*Get nsuri of the qname*/
+    ns_uri = axutil_qname_get_uri(qname, env);
+    if(!ns_uri){
+        ns_uri = "";
+    }
+    /*Traverse thru all the attributes. If both localname and the nsuri matches return the val*/
+    for (hi = axutil_hash_first(attr_list, env); hi; hi = axutil_hash_next(env, hi))
+    {
+        void *attr = NULL;
+        axiom_attribute_t *om_attr = NULL;
+        axutil_hash_this(hi, NULL, NULL, &attr);
+        if (attr)
+        {
+            axis2_char_t *this_attr_name = NULL;
+            axis2_char_t *this_attr_ns_uri = NULL;
+            axiom_namespace_t *attr_ns = NULL;
+
+            om_attr = (axiom_attribute_t*)attr;
+            this_attr_name = axiom_attribute_get_localname(om_attr, env);
+            attr_ns = axiom_attribute_get_namespace(om_attr, env);
+            if(attr_ns){
+                this_attr_ns_uri = axiom_namespace_get_uri(attr_ns, env);
+            }else{
+                this_attr_ns_uri = "";
+            }
+            if(0 == axutil_strcmp(local_name, this_attr_name) && 0 == axutil_strcmp(ns_uri, this_attr_ns_uri))
+            {
+                /*Got it !!!*/
+                found_val = axiom_attribute_get_value(om_attr, env);
+				if (env)
+					AXIS2_FREE(env->allocator, hi);
+                break;
+            }
+        }
+    }
+
+    for(hi = axutil_hash_first(attr_list, env); hi; hi = axutil_hash_next(env, hi))
+    {
+        void *val = NULL;
+        axutil_hash_this(hi, NULL, NULL, &val);
+        if (val)
+        {
+            axiom_attribute_free((axiom_attribute_t *)val, env);
+            val = NULL;
+        }
+    }
+    axutil_hash_free(attr_list, env);
+    attr_list = NULL;
+
+    return found_val;
+}
+
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+oxs_axiom_get_first_child_node_by_name(const axutil_env_t *env,
+                                       axiom_node_t* parent,
+                                       axis2_char_t* local_name,
+                                       axis2_char_t* ns_uri,
+                                       axis2_char_t* prefix)
+{
+    axutil_qname_t *qname = NULL;
+    axiom_node_t *node = NULL;
+    axiom_element_t *parent_ele = NULL;
+    axiom_element_t *ele = NULL;
+    axis2_char_t *parent_name = NULL;
+
+    qname = axutil_qname_create(env, local_name, ns_uri, prefix);
+    parent_ele = axiom_node_get_data_element(parent, env);
+    if (!parent_ele)
+    {
+        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
+                  "Cannot find %s element", local_name);
+        return NULL;
+    }
+    /*Get the child*/
+    ele = axiom_element_get_first_child_with_qname(parent_ele, env, qname, parent, &node);
+
+    axutil_qname_free(qname, env);
+    qname = NULL;
+
+    parent_name = axiom_node_to_string(parent, env);
+    if (!node)
+    {
+        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
+                  "Cannot find child %s of %s", local_name, parent_name);
+        return NULL;
+    }
+    AXIS2_FREE(env->allocator, parent_name);
+    parent_name = NULL;
+    return node;
+}
+
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+oxs_axiom_get_node_content(const axutil_env_t *env, axiom_node_t* node)
+{
+    axiom_element_t *ele = NULL;
+    axis2_char_t *content = NULL;
+
+    ele = axiom_node_get_data_element(node, env);
+    if (!ele) return NULL;
+
+    content = axiom_element_get_text(ele, env, node);
+    if (!content) return NULL;
+
+    return content;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+oxs_axiom_deserialize_node(const axutil_env_t *env,  axis2_char_t* buffer)
+{
+    axiom_document_t *doc = NULL;
+    axiom_stax_builder_t *builder = NULL;
+    axiom_xml_reader_t *reader = NULL;
+    axiom_node_t *node = NULL;
+
+    if (!buffer)
+    {
+        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
+                  "buffer is NULL");
+        return NULL;
+    }
+    reader = axiom_xml_reader_create_for_memory(env,
+             (void*)buffer, axutil_strlen(buffer), "utf-8", AXIS2_XML_PARSER_TYPE_BUFFER);
+
+    if (!reader)
+    {
+        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
+                  "axiom_xml_reader is NULL");
+        return NULL;
+    }
+
+    builder = axiom_stax_builder_create(env, reader);
+    if (!builder)
+    {
+        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
+                  "axiom_stax_builder is NULL");
+        return NULL;
+    }
+
+    doc = axiom_document_create(env, NULL, builder);
+    if (!doc)
+    {
+        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
+                  "axiom_document is NULL");
+        return NULL;
+    }
+    node = axiom_document_build_all(doc, env);
+    if (!node)
+    {
+        oxs_error(env, ERROR_LOCATION, OXS_ERROR_INVALID_DATA,
+                  "Building node failed");
+        return NULL;
+    }
+    axiom_stax_builder_free_self(builder, env);
+    builder = NULL;
+
+    /*The stax builder will free the reader.*/
+    /*axiom_xml_reader_free(reader, env);
+    reader = NULL;*/
+
+    return node;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_axiom_check_node_name(const axutil_env_t *env, axiom_node_t* node, axis2_char_t* name, axis2_char_t* ns)
+{
+    int ret_name, ret_ns;
+    axiom_element_t * ele = NULL;
+    axis2_char_t* namestr = NULL;
+    axis2_char_t* ns_str = NULL;
+    axutil_qname_t* qname = NULL;
+
+    ele = axiom_node_get_data_element(node, env);
+    qname = axiom_element_get_qname(ele, env, node);
+
+    namestr = axutil_qname_get_localpart(qname, env);
+    ret_name =  axutil_strcmp(namestr, name) ;
+
+
+    if (ret_name < 0) return 0;
+
+    if (ns)
+    {
+        ns_str = axutil_qname_get_uri(qname, env);
+        ret_ns =  axutil_strcmp(ns_str, ns) ;
+        if (ret_ns < 0) return AXIS2_FAILURE;
+        else   return AXIS2_SUCCESS;
+
+    }
+    else
+    {
+        return AXIS2_SUCCESS;
+    }
+
+
+}
+

Modified: webservices/rampart/trunk/c/src/omxmlsec/buffer.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/buffer.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/buffer.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/buffer.c Sun Sep 16 21:33:30 2007
@@ -376,6 +376,8 @@
 
         /*Copy to newdata*/
         new_data = memcpy(new_data, buffer->data, buffer->size);
+		AXIS2_FREE(env->allocator, buffer->data);
+		buffer->data = NULL;
 
 #endif
     }

Modified: webservices/rampart/trunk/c/src/omxmlsec/c14n/c14n.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/c14n/c14n.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/c14n/c14n.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/c14n/c14n.c Sun Sep 16 21:33:30 2007
@@ -1558,6 +1558,8 @@
                     if (axutil_strcmp(attr_pfx, pfx) == 0)
                     {
                         vu = AXIS2_TRUE;
+						if (ctx->env)
+							AXIS2_FREE(ctx->env->allocator, hi);
                         break;
                     }
                     /*}*/

Modified: webservices/rampart/trunk/c/src/omxmlsec/cipher.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/cipher.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/cipher.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/cipher.c Sun Sep 16 21:33:30 2007
@@ -38,6 +38,8 @@
     if((!cipher_name) || (0 == axutil_strcmp(cipher_name, ""))){
         oxs_error(env, ERROR_LOCATION,
                   OXS_ERROR_INVALID_DATA, "Cannot populate cipher property");
+		openssl_cipher_property_free(cprop, env);
+		cprop = NULL;
         return NULL;
     }
     ret = openssl_cipher_property_set_name(cprop, env , cipher_name);
@@ -47,6 +49,8 @@
     {
         oxs_error(env, ERROR_LOCATION,
                   OXS_ERROR_INVALID_DATA, "Cannot populate cipher property");
+		openssl_cipher_property_free(cprop, env);
+		cprop = NULL;
         return NULL;
     }
     return cprop;

Modified: webservices/rampart/trunk/c/src/omxmlsec/encryption.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/encryption.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/encryption.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/encryption.c Sun Sep 16 21:33:30 2007
@@ -270,7 +270,7 @@
                 (const char *)oxs_buffer_get_data(out_buf, env), enclen);
 
         status = oxs_buffer_populate(result, env, 
-                    (unsigned char*)axutil_strdup(env, encoded_str),
+                    (unsigned char*)encoded_str,
                     encodedlen);
 
         /*Free*/

Modified: webservices/rampart/trunk/c/src/omxmlsec/key.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/key.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/key.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/key.c Sun Sep 16 21:33:30 2007
@@ -139,7 +139,7 @@
     oxs_key_populate_with_buf(new_key,
                               env,
                               oxs_key_get_buffer(key, env),
-                              axutil_strdup(env, key->name),
+                              key->name,
                               key->usage);
     return new_key;
 }
@@ -265,6 +265,8 @@
     }
 
     size = openssl_cipher_property_get_key_size(cprop, env);
+	openssl_cipher_property_free(cprop, env);
+	cprop = NULL;
 
     key_buf = oxs_buffer_create(env);
     /*The actual key generation happens here*/

Modified: webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c Sun Sep 16 21:33:30 2007
@@ -134,25 +134,35 @@
     /*If the X509 certificate is available, populate oxs_x509_cert*/
     if(cert){
         axis2_char_t *x509_cert_data = NULL;
+		axis2_char_t *x509_cert_date = NULL;
+		axis2_char_t *x509_cert_issuer = NULL;
+		axis2_char_t *x509_cert_subject = NULL;
+		axis2_char_t *x509_cert_finger = NULL;
+		axis2_char_t *x509_cert_key_id = NULL;
 
         x509_cert_data = openssl_x509_get_cert_data(env, cert);
+		x509_cert_date = openssl_x509_get_info(env, OPENSSL_X509_INFO_VALID_TO ,cert);
+		x509_cert_issuer = openssl_x509_get_info(env, OPENSSL_X509_INFO_ISSUER ,cert);
+		x509_cert_subject = openssl_x509_get_info(env, OPENSSL_X509_INFO_SUBJECT ,cert);
+		x509_cert_finger = openssl_x509_get_info(env, OPENSSL_X509_INFO_FINGER,cert);
+		x509_cert_key_id = openssl_x509_get_subject_key_identifier(env, cert);
 
         /*Create certificate*/
         oxs_cert = oxs_x509_cert_create(env);
 
         /*And populate it*/
         oxs_x509_cert_set_data(oxs_cert, env, x509_cert_data);
-        oxs_x509_cert_set_date(oxs_cert, env, openssl_x509_get_info(env, OPENSSL_X509_INFO_VALID_TO ,cert));
-        oxs_x509_cert_set_issuer(oxs_cert, env, openssl_x509_get_info(env, OPENSSL_X509_INFO_ISSUER ,cert));
-        oxs_x509_cert_set_subject(oxs_cert, env, openssl_x509_get_info(env, OPENSSL_X509_INFO_SUBJECT ,cert));
-        oxs_x509_cert_set_fingerprint(oxs_cert, env, openssl_x509_get_info(env, OPENSSL_X509_INFO_FINGER,cert));
+        oxs_x509_cert_set_date(oxs_cert, env, x509_cert_date);
+        oxs_x509_cert_set_issuer(oxs_cert, env, x509_cert_issuer);
+        oxs_x509_cert_set_subject(oxs_cert, env, x509_cert_subject);
+        oxs_x509_cert_set_fingerprint(oxs_cert, env, x509_cert_finger);
         oxs_x509_cert_set_serial_number(oxs_cert, env, openssl_x509_get_serial(env, cert));
-        oxs_x509_cert_set_key_identifier(oxs_cert, env, openssl_x509_get_subject_key_identifier(env, cert));
+        oxs_x509_cert_set_key_identifier(oxs_cert, env, x509_cert_key_id);
 
         /*Additionally we need to set the public key*/
         openssl_x509_get_pubkey(env, cert, &pubkey);
         open_pubkey = openssl_pkey_create(env);
-        openssl_pkey_populate(open_pubkey, env, pubkey, openssl_x509_get_info(env, OPENSSL_X509_INFO_FINGER,cert), OPENSSL_PKEY_TYPE_PUBLIC_KEY);
+        openssl_pkey_populate(open_pubkey, env, pubkey, x509_cert_finger, OPENSSL_PKEY_TYPE_PUBLIC_KEY);
         /*Set the public key to the x509 certificate*/
         oxs_x509_cert_set_public_key(oxs_cert, env, open_pubkey);
 
@@ -161,10 +171,19 @@
 
         AXIS2_FREE(env->allocator, x509_cert_data);
         x509_cert_data = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_date);
+        x509_cert_date = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_issuer);
+        x509_cert_issuer = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_subject);
+        x509_cert_subject = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_finger);
+        x509_cert_finger = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_key_id);
+        x509_cert_key_id = NULL;
 
-        X509_free(cert);
+		X509_free(cert);
         cert = NULL;
-
     }
 
     /*If this fails to get anything return failure*/
@@ -173,6 +192,7 @@
                   "Error reading the key");
         return AXIS2_FAILURE;
     }
+
     return AXIS2_SUCCESS;
 }
 
@@ -236,24 +256,34 @@
         EVP_PKEY *pubkey = NULL;
         openssl_pkey_t *open_pubkey = NULL;
         axis2_char_t *x509_cert_data = NULL;
+		axis2_char_t *x509_cert_date = NULL;
+		axis2_char_t *x509_cert_issuer = NULL;
+		axis2_char_t *x509_cert_subject = NULL;
+		axis2_char_t *x509_cert_fingerprint = NULL;
+		axis2_char_t *x509_cert_key_id = NULL;
 
         x509_cert_data = openssl_x509_get_cert_data(env, cert);
+		x509_cert_date = openssl_x509_get_info(env, OPENSSL_X509_INFO_VALID_TO ,cert);
+		x509_cert_issuer = openssl_x509_get_info(env, OPENSSL_X509_INFO_ISSUER ,cert);
+		x509_cert_subject = openssl_x509_get_info(env, OPENSSL_X509_INFO_SUBJECT ,cert);
+		x509_cert_fingerprint = openssl_x509_get_info(env, OPENSSL_X509_INFO_FINGER,cert);
+		x509_cert_key_id = openssl_x509_get_subject_key_identifier(env, cert);
 
         /*Create X509 certificate*/
         oxs_cert = oxs_x509_cert_create(env);
         oxs_x509_cert_set_data(oxs_cert, env, x509_cert_data);
-        oxs_x509_cert_set_date(oxs_cert, env, openssl_x509_get_info(env, OPENSSL_X509_INFO_VALID_TO ,cert));
-        oxs_x509_cert_set_issuer(oxs_cert, env, openssl_x509_get_info(env, OPENSSL_X509_INFO_ISSUER ,cert));
-        oxs_x509_cert_set_subject(oxs_cert, env, openssl_x509_get_info(env, OPENSSL_X509_INFO_SUBJECT ,cert));
-        oxs_x509_cert_set_fingerprint(oxs_cert, env, openssl_x509_get_info(env, OPENSSL_X509_INFO_FINGER,cert));
+        oxs_x509_cert_set_date(oxs_cert, env, x509_cert_date);
+        oxs_x509_cert_set_issuer(oxs_cert, env, x509_cert_issuer);
+        oxs_x509_cert_set_subject(oxs_cert, env, x509_cert_subject);
+        oxs_x509_cert_set_fingerprint(oxs_cert, env, x509_cert_fingerprint);
         oxs_x509_cert_set_serial_number(oxs_cert, env, openssl_x509_get_serial(env, cert));
-        oxs_x509_cert_set_key_identifier(oxs_cert, env, openssl_x509_get_subject_key_identifier(env, cert));
+        oxs_x509_cert_set_key_identifier(oxs_cert, env, x509_cert_key_id);
 
         /*Additionally we need to set the public key*/
         openssl_x509_get_pubkey(env, cert, &pubkey);
         open_pubkey = openssl_pkey_create(env);
         openssl_pkey_populate(open_pubkey, env, pubkey,
-                              openssl_x509_get_info(env, OPENSSL_X509_INFO_FINGER,cert),
+                              x509_cert_fingerprint,
                               OPENSSL_PKEY_TYPE_PUBLIC_KEY);
 
         /*Set the public key to the x509 certificate*/
@@ -262,6 +292,16 @@
         /*Free*/
         AXIS2_FREE(env->allocator, x509_cert_data);
         x509_cert_data = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_date);
+        x509_cert_date = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_issuer);
+        x509_cert_issuer = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_subject);
+        x509_cert_subject = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_fingerprint);
+        x509_cert_fingerprint = NULL;
+		AXIS2_FREE(env->allocator, x509_cert_key_id);
+        x509_cert_key_id = NULL;
         /*Free the certificate*/
         X509_free(cert);
         cert = NULL;

Modified: webservices/rampart/trunk/c/src/omxmlsec/openssl/x509.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/openssl/x509.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/openssl/x509.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/openssl/x509.c Sun Sep 16 21:33:30 2007
@@ -110,10 +110,11 @@
     PEM_read_bio_X509(in, cert, NULL, NULL);
 
     if (-1 == BIO_reset(in) ){
+		BIO_free(in);
         return AXIS2_FAILURE;
     }
 
-    if (-1 == BIO_free(in)  ){
+	if (-1 == BIO_free(in)  ){
         return AXIS2_FAILURE;
     }
 
@@ -327,7 +328,7 @@
     if(OPENSSL_X509_INFO_SUBJECT==type){
         X509_NAME_print_ex(out, X509_get_subject_name(cert), 0, 0);
     }else if(OPENSSL_X509_INFO_ISSUER == type){
-        X509_NAME_print_ex(out,  X509_get_issuer_name(cert), 0, 0);
+        X509_NAME_print_ex(out, X509_get_issuer_name(cert), 0, 0);
     }else if(OPENSSL_X509_INFO_VALID_FROM == type){
         ASN1_TIME_print(out, X509_get_notBefore(cert));
     }else if(OPENSSL_X509_INFO_VALID_TO == type){

Modified: webservices/rampart/trunk/c/src/omxmlsec/signature.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/signature.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/signature.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/signature.c Sun Sep 16 21:33:30 2007
@@ -146,6 +146,8 @@
     status = oxs_buffer_populate(in_buf, env, (unsigned char*)content,
                                  axutil_strlen(content));
 
+	AXIS2_FREE(env->allocator, decoded_data);
+
     /* Get the public key. See.. this method is trickey. It might take the
      * public key from the certificate, only if
      * the public key is not available directly

Modified: webservices/rampart/trunk/c/src/omxmlsec/tokens/token_reference_list.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/tokens/token_reference_list.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/tokens/token_reference_list.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/tokens/token_reference_list.c Sun Sep 16 21:33:30 2007
@@ -68,6 +68,7 @@
         /*We need to prepend # to the id in the list to create the reference*/
         id = axutil_stracat(env, "#",(axis2_char_t*)axutil_array_list_get(id_list, env, i));
         data_ref_node = oxs_token_build_data_reference_element(env, ref_list_node, id);
+		AXIS2_FREE(env->allocator, id);
 
         if(!data_ref_node) {return AXIS2_FAILURE;}
 

Modified: webservices/rampart/trunk/c/src/omxmlsec/utility.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/utility.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/utility.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/utility.c Sun Sep 16 21:33:30 2007
@@ -31,10 +31,13 @@
     axis2_char_t *id = NULL;
     char _id[50];
     axis2_char_t *random ;
+	axis2_char_t *uuid = NULL;
 
-    random =  axutil_strndup(env, axutil_uuid_gen(env),18);
+	uuid = axutil_uuid_gen(env);
+    random =  axutil_strndup(env, uuid,18);
     sprintf(_id, "%s-%s",prefix,random);
     id = (axis2_char_t*)axutil_strdup(env, _id);
+	AXIS2_FREE(env->allocator, uuid);
     AXIS2_FREE(env->allocator, random);
     random = NULL;
     return id;

Modified: webservices/rampart/trunk/c/src/omxmlsec/x509_cert.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/x509_cert.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/x509_cert.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/x509_cert.c Sun Sep 16 21:33:30 2007
@@ -290,12 +290,13 @@
                              const axutil_env_t *env,
                              openssl_pkey_t *public_key)
 {
-    /*if(x509_cert->public_key)
+	openssl_pkey_increment_ref(public_key, env);
+    if(x509_cert->public_key)
     {
         openssl_pkey_free(x509_cert->public_key, env);
         x509_cert->public_key = NULL;
-    }*/
-    openssl_pkey_increment_ref(public_key, env);
+    }
+    
     x509_cert->public_key = public_key;
     return AXIS2_SUCCESS;
 }

Modified: webservices/rampart/trunk/c/src/omxmlsec/xml_signature.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/xml_signature.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/xml_signature.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/xml_signature.c Sun Sep 16 21:33:30 2007
@@ -321,8 +321,12 @@
         oxs_sign_part_set_node(sign_part, env, reffed_node);
     }else{
         oxs_error(env, ERROR_LOCATION, OXS_ERROR_SIG_VERIFICATION_FAILED,"Cannot find node with Id=%s ", ref_id2 );
+		AXIS2_FREE(env->allocator, ref_id2);
+		ref_id2 = NULL;
         return AXIS2_FAILURE; /*No such node. Its an error*/
     }
+	AXIS2_FREE(env->allocator, ref_id2);
+	ref_id2 = NULL;
 
     /*First child is optional Transforms element*/
     child_node = axiom_node_get_first_element(ref_node, env);
@@ -599,6 +603,7 @@
     axis2_char_t *c14n_mtd = NULL;
     axis2_char_t *content = NULL;
     axis2_char_t *signature_val = NULL;
+	axis2_char_t *signed_info_node_value = NULL;
 
     /*Set operation to verify*/
     oxs_sign_ctx_set_operation(sign_ctx, env, OXS_SIGN_OPERATION_VERIFY);
@@ -638,7 +643,10 @@
     c14n_mtd = oxs_sign_ctx_get_c14n_mtd(sign_ctx, env);
     doc = axiom_node_get_document(signed_info_node, env);
 
-    AXIS2_LOG_INFO(env->log, "[oxs][xml_sig] C14N (verif1)= %s ", axiom_node_to_string(signed_info_node, env) );
+	signed_info_node_value = axiom_node_to_string(signed_info_node, env);
+    AXIS2_LOG_INFO(env->log, "[oxs][xml_sig] C14N (verif1)= %s ", signed_info_node_value );
+	AXIS2_FREE(env->allocator, signed_info_node_value);
+	signed_info_node_value = NULL;
     /*    oxs_c14n_apply(env, doc, AXIS2_FALSE, &content, AXIS2_TRUE, NULL, signed_info_node);*/
 
     oxs_c14n_apply_algo(env, doc, &content, NULL, signed_info_node, c14n_mtd);

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=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_context.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_context.c Sun Sep 16 21:33:30 2007
@@ -1046,6 +1046,8 @@
                 }
             }
         }/*eof for*/
+		axutil_array_list_free(soap_header_blocks, env);
+		soap_header_blocks = NULL;
         return AXIS2_SUCCESS;
     }
     else if(axutil_strcmp(local_name,"Security")==0)

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=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_encryption.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_encryption.c Sun Sep 16 21:33:30 2007
@@ -440,8 +440,10 @@
                 key_id_ref = axutil_stracat(env, "#",key_id);
                 reference_node = oxs_token_build_reference_element(
                                      env, str_node, key_id_ref, NULL);
-                AXIS2_FREE(env->allocator, key_id);
-                key_id = NULL;
+                AXIS2_FREE(env->allocator, key_id_ref);
+                key_id_ref = NULL;
+				AXIS2_FREE(env->allocator, key_id);
+				key_id = NULL;
 
                 if(!reference_node)
                 {
@@ -457,18 +459,24 @@
             else{
                 AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                                 "[rampart][rampart_encryption]Encrypting signature, Cannot build the STR node");
+				AXIS2_FREE(env->allocator, key_id);
+				key_id = NULL;
                 return AXIS2_FAILURE;
             }
         }
         else{
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][rampart_encryption] Encrypting signature, cannot build the key indfo node");
+			AXIS2_FREE(env->allocator, key_id);
+			key_id = NULL;
             return AXIS2_FAILURE;
         }
     }
     else{
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                         "[rampart][rampart_encryption]Encrypting signature, Cannot get the encryption data element");
+		AXIS2_FREE(env->allocator, key_id);
+		key_id = NULL;
         return AXIS2_FAILURE;
     }
 }

Modified: webservices/rampart/trunk/c/src/util/rampart_engine.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_engine.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_engine.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_engine.c Sun Sep 16 21:33:30 2007
@@ -140,7 +140,9 @@
                                           "Error in the Internal configuration.", RAMPART_FAULT_IN_POLICY, msg_ctx);
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][rampart_engine] Cannot create security policy from policy.");
-
+			
+			rampart_context_free(rampart_context, env);
+			rampart_context = NULL;
             return NULL;
         }
 
@@ -154,7 +156,9 @@
                                           "Error in the Internal configuration.", RAMPART_FAULT_IN_POLICY, msg_ctx);
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][rampart_engine] rampc policies creation failed.");
-
+			
+			rampart_context_free(rampart_context, env);
+			rampart_context = NULL;
             return NULL;
         }
     }
@@ -166,7 +170,9 @@
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][engine] Conf context is NULL ");
-            return NULL;
+            rampart_context_free(rampart_context, env);
+			rampart_context = NULL;
+			return NULL;
         }
 
         ctx = axis2_conf_ctx_get_base(conf_ctx,env);
@@ -174,7 +180,9 @@
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][engine] axis2 context is NULL ");
-            return NULL;
+            rampart_context_free(rampart_context, env);
+			rampart_context = NULL;
+			return NULL;
         }
         property = axutil_property_create_with_args(env, AXIS2_SCOPE_REQUEST ,
                    AXIS2_TRUE, (void *)rampart_context_free, rampart_context);

Modified: webservices/rampart/trunk/c/src/util/rampart_handler_util.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_handler_util.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_handler_util.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_handler_util.c Sun Sep 16 21:33:30 2007
@@ -135,6 +135,8 @@
         {
             /*Set mustUnderstand = 0*/
             axiom_soap_header_block_set_must_understand_with_bool(header_block, env, AXIS2_FALSE);
+			if (env)
+				AXIS2_FREE(env->allocator, hash_index);
             return header_block_node;
         }
 

Modified: webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c Sun Sep 16 21:33:30 2007
@@ -437,6 +437,8 @@
                         "[rampart][shp] Cannot decrypt the EncryptedKey");
         rampart_create_fault_envelope(env, RAMPART_FAULT_FAILED_CHECK,
                                       "Key decryption failed", RAMPART_FAULT_IN_ENCRYPTED_KEY, msg_ctx);
+		oxs_asym_ctx_free(asym_ctx, env);
+		asym_ctx = NULL;
         return AXIS2_FAILURE;
     }
 
@@ -453,6 +455,8 @@
                                       "Error in the policy. No summetric algo", RAMPART_FAULT_IN_POLICY, msg_ctx);
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                         "[rampart][shp] Symetric enc algorithm not specified in policy.");
+		oxs_asym_ctx_free(asym_ctx, env);
+		asym_ctx = NULL;
         return AXIS2_FAILURE;
     }
 
@@ -492,6 +496,8 @@
 
             rampart_create_fault_envelope(env, RAMPART_FAULT_FAILED_CHECK,
                                           "Cannot find EncryptedData element", RAMPART_FAULT_IN_ENCRYPTED_DATA, msg_ctx);
+			oxs_asym_ctx_free(asym_ctx, env);
+			asym_ctx = NULL;
             return AXIS2_FAILURE;
         }
         /*Create an enc_ctx*/
@@ -504,6 +510,8 @@
                             "Cannot find EncryptionMethod Element");
             rampart_create_fault_envelope(env, RAMPART_FAULT_FAILED_CHECK,
                                           "Cannot find EncryptionMethod Element", RAMPART_FAULT_IN_ENCRYPTED_DATA, msg_ctx);
+			oxs_asym_ctx_free(asym_ctx, env);
+			asym_ctx = NULL;
             return AXIS2_FAILURE;
         }
 
@@ -514,6 +522,8 @@
                             "Cannot get the Symmetric Algorithm from Soap message.");
             rampart_create_fault_envelope(env, RAMPART_FAULT_FAILED_CHECK,
                                           "Cannot find EncryptionMethod Element", RAMPART_FAULT_IN_ENCRYPTED_DATA, msg_ctx);
+			oxs_asym_ctx_free(asym_ctx, env);
+			asym_ctx = NULL;
 
             return AXIS2_FAILURE;
         }
@@ -525,6 +535,8 @@
             rampart_create_fault_envelope(env, RAMPART_FAULT_INVALID_SECURITY,
                                           "The content is encrypted with the wrong algorithm",
                                           RAMPART_FAULT_IN_ENCRYPTED_KEY, msg_ctx);
+			oxs_asym_ctx_free(asym_ctx, env);
+			asym_ctx = NULL;
             return AXIS2_FAILURE;
 
         }
@@ -533,10 +545,13 @@
         oxs_ctx_set_key(ctx, env, decrypted_sym_key);
 
         status = oxs_xml_enc_decrypt_node(env, ctx, enc_data_node, &decrypted_node);
+
         if(AXIS2_FAILURE == status)
         {
             rampart_create_fault_envelope(env, RAMPART_FAULT_FAILED_CHECK,
                                           "Data decryption failed", RAMPART_FAULT_IN_ENCRYPTED_DATA, msg_ctx);
+			oxs_asym_ctx_free(asym_ctx, env);
+			asym_ctx = NULL;
             return AXIS2_FAILURE;
         }
 
@@ -592,6 +607,12 @@
 
     if((!reference_list) || (0 == axutil_array_list_size(reference_list, env)))
     {
+		if (reference_list)
+		{
+			axutil_array_list_free(reference_list, env);
+			reference_list = NULL;
+		}
+
         AXIS2_LOG_INFO(env->log,
                        "[rampart][shp] Nothing Encrypted Outside security header");
         return AXIS2_SUCCESS;
@@ -623,9 +644,16 @@
                             "[rampart][shp] Node with ID=%s cannot be found", id2);
             rampart_create_fault_envelope(env, RAMPART_FAULT_FAILED_CHECK,
                                           "Cannot find EncryptedData element", RAMPART_FAULT_IN_ENCRYPTED_DATA, msg_ctx);
+			axutil_array_list_free(reference_list, env);
+			reference_list = NULL;
+			AXIS2_FREE(env->allocator, id2);
+			id2 = NULL;
             return AXIS2_FAILURE;
         }
 
+		AXIS2_FREE(env->allocator, id2);
+		id2 = NULL;
+
         key_info_node = oxs_axiom_get_first_child_node_by_name(env, enc_data_node,
                         OXS_NODE_KEY_INFO, OXS_DSIG_NS, NULL);
 
@@ -653,6 +681,8 @@
                         ref_id = axutil_string_substring_starting_at(axutil_strdup(env, ref), 1);
 
                         encrypted_key_node = oxs_axiom_get_node_by_id(env, sec_node, "Id", ref_id, NULL);
+						AXIS2_FREE(env->allocator, ref_id);
+						ref_id = NULL;
                         if(encrypted_key_node)
                         {
                             ref_list_node = axiom_node_detach(ref_list_node, env);
@@ -668,6 +698,8 @@
         }
     }
 
+	axutil_array_list_free(reference_list, env);
+	reference_list = NULL;
     return status;
 }
 

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=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_signature.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_signature.c Sun Sep 16 21:33:30 2007
@@ -182,6 +182,8 @@
     {
         AXIS2_LOG_INFO(env->log,
                        "[rampart][rampart_signature] No parts specified or specified parts can't be found for Signature.");
+		axutil_array_list_free(nodes_to_sign, env);
+        nodes_to_sign = NULL;
         return AXIS2_SUCCESS;
     }
     /*If Timestamp and usernametoken are in the message we should sign them.*/
@@ -195,6 +197,8 @@
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][rampart_signature] Required timestamp cannot be found.");
+			axutil_array_list_free(nodes_to_sign, env);
+			nodes_to_sign = NULL;
             return AXIS2_FAILURE;
         }
         axutil_array_list_add(nodes_to_sign, env, ts_node);
@@ -211,6 +215,8 @@
             {
                 AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                                 "[rampart][rampart_signature] Required username token cannot be found.");
+				axutil_array_list_free(nodes_to_sign, env);
+				nodes_to_sign = NULL;
                 return AXIS2_FAILURE;
             }
             axutil_array_list_add(nodes_to_sign, env, ut_node);
@@ -224,6 +230,8 @@
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                         "[rampart][rampart_signature] Signature Token is not specified");
+		axutil_array_list_free(nodes_to_sign, env);
+		nodes_to_sign = NULL;
         return AXIS2_FAILURE;
     }
     token_type = rp_property_get_type(token, env);
@@ -232,6 +240,8 @@
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                         "[rampart][rampart_signature] Token type %d not supported", token_type);
+		axutil_array_list_free(nodes_to_sign, env);
+		nodes_to_sign = NULL;
         return AXIS2_FAILURE;
     }
 
@@ -239,6 +249,8 @@
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                         "[rampart][rampart_signature] We still do not support derived keys");
+		axutil_array_list_free(nodes_to_sign, env);
+		nodes_to_sign = NULL;
         return AXIS2_FAILURE;
     }
 
@@ -255,6 +267,8 @@
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][rampart_signature] Cannot get certificate");
+			axutil_array_list_free(nodes_to_sign, env);
+			nodes_to_sign = NULL;
             return AXIS2_FAILURE;
         }
         /*This flag will be useful when creating key Info element.*/
@@ -267,6 +281,8 @@
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][rampart_signature] Certificate data cannot be loaded from the cert.");
+			axutil_array_list_free(nodes_to_sign, env);
+			nodes_to_sign = NULL;
             return AXIS2_FAILURE;
         }
 
@@ -276,6 +292,8 @@
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                             "[rampart][rampart_signature] Binary Security Token creation failed.");
+			axutil_array_list_free(nodes_to_sign, env);
+			nodes_to_sign = NULL;
             return AXIS2_FAILURE;
         }
         oxs_x509_cert_free(cert, env);
@@ -291,6 +309,8 @@
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
                         "[rampart][rampart_signature] Cannot attach the token.");
+		axutil_array_list_free(nodes_to_sign, env);
+		nodes_to_sign = NULL;
         return AXIS2_FAILURE;
     }
 
@@ -327,8 +347,14 @@
             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);
+			AXIS2_FREE(env->allocator, id);
+			id = NULL;
         }
     }
+
+	axutil_array_list_free(nodes_to_sign, env);
+	nodes_to_sign = NULL;
+
     sign_ctx = oxs_sign_ctx_create(env);
 
     /*First check whether the private key is set*/
@@ -476,6 +502,8 @@
         cert_id_ref = axutil_stracat(env, "#",cert_id);
         reference_node = oxs_token_build_reference_element(
                              env, str_node, cert_id_ref, OXS_VALUE_X509V3);
+		AXIS2_FREE(env->allocator, cert_id_ref);
+		cert_id_ref = NULL;
         if(!reference_node)
         {
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,

Modified: webservices/rampart/trunk/c/src/util/rampart_timestamp_token.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_timestamp_token.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_timestamp_token.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_timestamp_token.c Sun Sep 16 21:33:30 2007
@@ -149,6 +149,8 @@
     if (validity == AXIS2_SUCCESS)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][ts]Timestamp not valid: Created time is not valid");
+		AXIS2_FREE(env->allocator, current_val);
+		current_val = NULL;
         return AXIS2_FAILURE;
     }
 
@@ -158,6 +160,8 @@
     {
         AXIS2_LOG_INFO(env->log, "[rampart][ts]Cannot find expires in timestamp element. This is not critical. Assume that the message is not expiring");
         /*If the expire element is not present, it means that the message will not be expired.*/
+		AXIS2_FREE(env->allocator, current_val);
+		current_val = NULL;
         return AXIS2_SUCCESS;
     }
     expires_ele  = (axiom_element_t*)axiom_node_get_data_element(expires_node, env);
@@ -166,6 +170,8 @@
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
             "[rampart][ts] Timestamp not valid: The second element of timestamp token (if any) MUST be EXPIRES");
+		AXIS2_FREE(env->allocator, current_val);
+		current_val = NULL;
         return AXIS2_FAILURE;
     }
 
@@ -176,6 +182,8 @@
 
     /*Check whether time has expired or not*/
     validity = rampart_compare_date_time(env, current_val, expires_val);
+	AXIS2_FREE(env->allocator, current_val);
+	current_val = NULL;
     if (validity == AXIS2_FAILURE)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,

Modified: webservices/rampart/trunk/c/src/util/rampart_util.c
URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_util.c?rev=576251&r1=576250&r2=576251&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_util.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_util.c Sun Sep 16 21:33:30 2007
@@ -136,6 +136,11 @@
     if (!cb)
     {
         AXIS2_LOG_INFO(env->log, "[rampart][rampart_util] Unable to identify the callback module %s. ERROR", callback_module_name);
+		if (param)
+		{
+			AXIS2_FREE(env->allocator, param);
+			param = NULL;
+		}
         return AXIS2_FAILURE;
     }
     if(param){
@@ -235,17 +240,23 @@
     status =  axutil_date_time_deserialize_date_time(dt1, env, dt1_str);
     if (status == AXIS2_FAILURE)
     {
+		axutil_date_time_free(dt1, env);
+		axutil_date_time_free(dt2, env);
         return AXIS2_FAILURE;
     }
 
     status =  axutil_date_time_deserialize_date_time(dt2, env, dt2_str);
     if (status == AXIS2_FAILURE)
     {
+		axutil_date_time_free(dt1, env);
+		axutil_date_time_free(dt2, env);
         return AXIS2_FAILURE;
     }
 
     /*dt1<dt2 for SUCCESS*/
     res = axutil_date_time_compare(dt1, env, dt2);
+	axutil_date_time_free(dt1, env);
+	axutil_date_time_free(dt2, env);
     if(AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED == res){
         return AXIS2_SUCCESS;
     }else{