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{