Author: shankar
Date: Mon Aug 25 21:31:10 2008
New Revision: 688959
URL: http://svn.apache.org/viewvc?rev=688959&view=rev
Log:
Changing the encryption type as #Content for body encryption. Fix for issue
RAMPARTC-118
Modified:
webservices/rampart/trunk/c/src/util/rampart_encryption.c
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=688959&r1=688958&r2=688959&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_encryption.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_encryption.c Mon Aug 25
21:31:10 2008
@@ -184,11 +184,18 @@
rp_property_type_t token_type;
rampart_saml_token_t *saml = NULL;
oxs_key_t *derived_key = NULL;
+ axiom_soap_body_t *body = NULL;
+ axiom_node_t *body_node = NULL;
+ axiom_node_t *body_child_node = NULL;
axis2_bool_t signature_protection = AXIS2_FALSE;
int i = 0;
int j = 0;
+ body = axiom_soap_envelope_get_body(soap_envelope, env);
+ body_node = axiom_soap_body_get_base_node(body, env);
+ body_child_node = axiom_node_get_first_element(body_node, env);
+
/*Get nodes to be encrypted*/
nodes_to_encrypt = axutil_array_list_create(env, 0);
status = rampart_enc_get_nodes_to_encrypt(
@@ -466,8 +473,16 @@
if(parent_of_node_to_enc || enc_data_id)
{
+ axis2_char_t *enc_type = OXS_TYPE_ENC_ELEMENT;
+
+ if(body_child_node == node_to_enc)
+ {
+ /* we have to use #Content for body encryption */
+ enc_type = OXS_TYPE_ENC_CONTENT;
+ }
+
enc_data_node = oxs_token_build_encrypted_data_element(env,
- parent_of_node_to_enc, OXS_TYPE_ENC_ELEMENT,
enc_data_id );
+ parent_of_node_to_enc, enc_type, enc_data_id );
status = oxs_xml_enc_encrypt_node(env, enc_ctx,
node_to_enc, &enc_data_node,
key_reference_node);
/*Add Ids to the list. We will create reference list*/
@@ -736,6 +751,13 @@
int i = 0;
axis2_bool_t signature_protection = AXIS2_FALSE;
axiom_node_t *sig_node = NULL;
+ axiom_soap_body_t *body = NULL;
+ axiom_node_t *body_node = NULL;
+ axiom_node_t *body_child_node = NULL;
+
+ body = axiom_soap_envelope_get_body(soap_envelope, env);
+ body_node = axiom_soap_body_get_base_node(body, env);
+ body_child_node = axiom_node_get_first_element(body_node, env);
/*Get nodes to be encrypted*/
@@ -888,8 +910,16 @@
if(parent_of_node_to_enc || id)
{
+ axis2_char_t *enc_type = OXS_TYPE_ENC_ELEMENT;
+
+ if(body_child_node == node_to_enc)
+ {
+ /* we have to use #Content for body encryption */
+ enc_type = OXS_TYPE_ENC_CONTENT;
+ }
+
enc_data_node = oxs_token_build_encrypted_data_element(env,
- parent_of_node_to_enc, OXS_TYPE_ENC_ELEMENT, id );
+ parent_of_node_to_enc, enc_type, id );
enc_status = oxs_xml_enc_encrypt_node(env, enc_ctx,
node_to_enc, &enc_data_node,
NULL);
axutil_array_list_add(id_list, env, id);