Author: kaushalye
Date: Thu Nov 22 21:24:15 2007
New Revision: 597556

URL: http://svn.apache.org/viewvc?rev=597556&view=rev
Log:
Changes to the new sec header processor.
Adding policy validation for the Usernametoken

Modified:
    webservices/rampart/trunk/c/include/rampart_policy_validator.h
    webservices/rampart/trunk/c/include/rampart_sec_header_builder.h
    webservices/rampart/trunk/c/samples/secpolicy/scenario2/client-policy.xml
    webservices/rampart/trunk/c/src/util/rampart_encryption.c
    webservices/rampart/trunk/c/src/util/rampart_policy_validator.c
    webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c
    webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c

Modified: webservices/rampart/trunk/c/include/rampart_policy_validator.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/rampart_policy_validator.h?rev=597556&r1=597555&r2=597556&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/rampart_policy_validator.h (original)
+++ webservices/rampart/trunk/c/include/rampart_policy_validator.h Thu Nov 22 
21:24:15 2007
@@ -46,7 +46,7 @@
     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
     */
     AXIS2_EXTERN axis2_status_t AXIS2_CALL
-    rampiart_pv_validate_sec_header(const axutil_env_t *env,
+    rampart_pv_validate_sec_header(const axutil_env_t *env,
         rampart_context_t *rampart_context,
         axiom_node_t *sec_node,
         axis2_msg_ctx_t *msg_ctx);

Modified: webservices/rampart/trunk/c/include/rampart_sec_header_builder.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/rampart_sec_header_builder.h?rev=597556&r1=597555&r2=597556&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/rampart_sec_header_builder.h (original)
+++ webservices/rampart/trunk/c/include/rampart_sec_header_builder.h Thu Nov 22 
21:24:15 2007
@@ -52,7 +52,15 @@
                               axis2_msg_ctx_t *msg_ctx,
                               rampart_context_t *context,
                               axiom_soap_envelope_t *soap_envelope);
-
+    /**
+     * After building the SOPA message as per the policy,
+     * this function will re-order the header elements of the SOAP message 
+     * to make sure that the processing doesnt fail.
+     * @param env pointer to environment struct
+     * @param msg_ctx message context
+     * @param rampart_context The Rampart Context
+     * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+     */
     AXIS2_EXTERN axis2_status_t AXIS2_CALL
     rampart_shb_ensure_sec_header_order(const axutil_env_t *env,
         axis2_msg_ctx_t *msg_ctx,

Modified: 
webservices/rampart/trunk/c/samples/secpolicy/scenario2/client-policy.xml
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/samples/secpolicy/scenario2/client-policy.xml?rev=597556&r1=597555&r2=597556&view=diff
==============================================================================
    (empty)

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=597556&r1=597555&r2=597556&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_encryption.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_encryption.c Thu Nov 22 
21:24:15 2007
@@ -416,7 +416,7 @@
     
     }/*End of For loop of dk_list iteration*/
     
-    /*Add ReferenceList element to the Security header*/
+    /*Add ReferenceList element to the Security header. Note that we pass the 
sec_node. Not the EncryptedKey*/
     data_ref_list_node = oxs_token_build_data_reference_list(env, sec_node, 
id_list);
     
     /*Free derrived key list*/

Modified: webservices/rampart/trunk/c/src/util/rampart_policy_validator.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_policy_validator.c?rev=597556&r1=597555&r2=597556&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_policy_validator.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_policy_validator.c Thu Nov 22 
21:24:15 2007
@@ -30,7 +30,29 @@
 
 /*Private functions*/
 static axis2_status_t
-rampiart_pv_validate_signature_confirmation(const axutil_env_t *env,
+rampart_pv_validate_ut(const axutil_env_t *env,
+        rampart_context_t *rampart_context,
+        axis2_msg_ctx_t *msg_ctx)
+{
+    if(rampart_context_is_include_username_token(rampart_context, env)){
+        axis2_char_t *ut_found = NULL;
+        ut_found = (axis2_char_t*)rampart_get_security_processed_result(env, 
msg_ctx, RAMPART_SPR_UT_CHECKED);
+        if(0 == axutil_strcmp(RAMPART_YES, ut_found)){
+            return AXIS2_SUCCESS;
+        }else{
+            /*Error*/
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,"[rampart][rpv] Username 
token required. Not found");
+            rampart_create_fault_envelope(env, RAMPART_FAULT_FAILED_CHECK, 
"Username token required. Cannot find in the security header",
+                        RAMPART_FAULT_INVALID_SECURITY, msg_ctx);
+            return AXIS2_FAILURE;
+        }
+    }else{
+        return AXIS2_SUCCESS;
+    }
+}
+
+static axis2_status_t
+rampart_pv_validate_signature_confirmation(const axutil_env_t *env,
         rampart_context_t *rampart_context,
         axis2_msg_ctx_t *msg_ctx)
 {
@@ -56,7 +78,7 @@
 }
 
 static axis2_status_t
-rampiart_pv_validate_signature_encryption(const axutil_env_t *env,
+rampart_pv_validate_signature_encryption(const axutil_env_t *env,
         rampart_context_t *rampart_context,
         axis2_msg_ctx_t *msg_ctx)
 {
@@ -83,22 +105,24 @@
 
 /*Public functions*/
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
-rampiart_pv_validate_sec_header(const axutil_env_t *env,
+rampart_pv_validate_sec_header(const axutil_env_t *env,
         rampart_context_t *rampart_context,
         axiom_node_t *sec_node,
         axis2_msg_ctx_t *msg_ctx)
 {
     
     /*Check if the signature needed to be encrypted*/ 
-    if(!rampiart_pv_validate_signature_encryption(env, rampart_context, 
msg_ctx)){
+    if(!rampart_pv_validate_signature_encryption(env, rampart_context, 
msg_ctx)){
         return AXIS2_FAILURE;
     } 
     /*Check if the Signature Confirmation is set*/
-    if(!rampiart_pv_validate_signature_confirmation(env, rampart_context, 
msg_ctx)){
+    if(!rampart_pv_validate_signature_confirmation(env, rampart_context, 
msg_ctx)){
+        return AXIS2_FAILURE;
+    }
+    /*Check if Usernametoken found*/
+    if(!rampart_pv_validate_ut(env, rampart_context, msg_ctx)){
         return AXIS2_FAILURE;
     }
-
-    /*NOTE: Uusername tokens and Timestamps policies are checked, while 
security header processing*/
     /*All the policy reqmnts are met. We are good to go*/
     return AXIS2_SUCCESS;
 }

Modified: webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c?rev=597556&r1=597555&r2=597556&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_sec_header_builder.c Thu Nov 
22 21:24:15 2007
@@ -37,6 +37,156 @@
 /*Private functions*/
 
 axis2_status_t AXIS2_CALL
+rampart_shb_do_asymmetric_binding( const axutil_env_t *env,
+                                   axis2_msg_ctx_t *msg_ctx,
+                                   rampart_context_t *rampart_context,
+                                   axiom_soap_envelope_t *soap_envelope,
+                                   axiom_node_t *sec_node,
+                                   axiom_namespace_t *sec_ns_obj)
+{
+    axis2_bool_t signature_protection = AXIS2_FALSE;
+    axis2_bool_t is_encrypt_before_sign = AXIS2_FALSE;
+    axis2_status_t status = AXIS2_SUCCESS;
+    axiom_node_t *sig_node = NULL;
+    axiom_node_t *enc_key_node = NULL;
+    /*Do Asymmetric Binding specific things*/
+    signature_protection = 
rampart_context_is_encrypt_signature(rampart_context, env);
+
+    /*Check the encryption and signature order*/
+    if(rampart_context_is_encrypt_before_sign(rampart_context, env))
+    {
+        is_encrypt_before_sign = AXIS2_TRUE;
+
+        /*If signature_protection=> <sp:EncryptSignature/> is ON*/
+        if(signature_protection)
+        {
+            /*First Encrypt the parts specified in encrypted parts*/
+            status = rampart_enc_encrypt_message(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
+            if(status != AXIS2_SUCCESS)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[rampart][shb] Encryption failed. ERROR");
+                return AXIS2_FAILURE;
+            }
+
+            /*Add a key reference in Encrypted Data in the Body*/
+
+            status = rampart_enc_add_key_info(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
+            if(status != AXIS2_SUCCESS)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[rampart][shb] Cannot add Key information");
+                return AXIS2_FAILURE;
+            }
+            /*Then Sign the message*/
+            status = rampart_sig_sign_message(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
+            if(status != AXIS2_SUCCESS)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[rampart][shb] Signing failed. ERROR");
+                return AXIS2_FAILURE;
+            }
+
+            /*Then encrypt the signature */
+            status = rampart_enc_encrypt_signature(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
+            if(status != AXIS2_SUCCESS)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[rampart][shb] Encrypt signature failed. 
ERROR");
+                return AXIS2_FAILURE;
+            }
+
+        }
+        else /*No Signature protection*/
+        {
+            status = rampart_enc_encrypt_message(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
+            if(status != AXIS2_SUCCESS){
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[rampart][shb] Encryption failed. ERROR");
+                return AXIS2_FAILURE;
+            }
+            /*Then do signature specific things*/
+            status = rampart_sig_sign_message(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
+            if(status != AXIS2_SUCCESS){
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[rampart][shb] Signature failed. ERROR");
+                return AXIS2_FAILURE;
+            }
+        }
+
+        /*Then Handle Supporting token stuff  */
+    }
+    else /*Sign before encrypt*/
+    {
+        is_encrypt_before_sign = AXIS2_FALSE;
+        /*First do signature specific stuff*/
+        status = rampart_sig_sign_message(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
+        if(status != AXIS2_SUCCESS){
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[rampart][shb] Signing failed. ERROR");
+            return AXIS2_FAILURE;
+        }
+        /*Then Handle Encryption stuff*/
+
+        status = rampart_enc_encrypt_message(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
+        if(status!=AXIS2_SUCCESS ){
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[rampart][shb] Encryption failed. ERROR");
+            return AXIS2_FAILURE;
+        }
+    }
+
+    /*If both encryption and signature is done we should interchange them.
+     * because the action done last should appear first in the header. */
+    sig_node = 
oxs_axiom_get_node_by_local_name(env,sec_node,OXS_NODE_SIGNATURE);
+    enc_key_node = 
oxs_axiom_get_node_by_local_name(env,sec_node,OXS_NODE_ENCRYPTED_KEY);
+    if(sig_node && enc_key_node)
+    {
+        if(is_encrypt_before_sign)
+        {
+            status = oxs_axiom_interchange_nodes(env, sig_node, enc_key_node);
+            if(status!=AXIS2_SUCCESS)
+            {
+                AXIS2_LOG_INFO(env->log,"[rampart][shb] Node interchange 
failed.");
+                return status;
+            }
+        }
+        else /*Sign before encryption*/
+        {
+            status = oxs_axiom_interchange_nodes(env, enc_key_node, sig_node);
+            if(status!=AXIS2_SUCCESS)
+            {
+                AXIS2_LOG_INFO(env->log,"[rampart][shb] Node interchange 
failed.");
+                return status;
+            }
+        }
+    }else if(enc_key_node && signature_protection)
+    {
+        if(!is_encrypt_before_sign)
+        {
+            axiom_node_t *enc_data_node = NULL;
+            enc_data_node = oxs_axiom_get_node_by_local_name(env, sec_node, 
OXS_NODE_ENCRYPTED_DATA);
+            if(!enc_data_node)
+            {
+                AXIS2_LOG_ERROR(env->log, 
AXIS2_LOG_SI,"[rampart][shb]Signature is not encrypted,");
+                return AXIS2_FAILURE;
+            }
+            else
+            {
+                status = oxs_axiom_interchange_nodes(env, enc_key_node, 
enc_data_node);
+                if(status != AXIS2_SUCCESS)
+                {
+                    AXIS2_LOG_ERROR(env->log, 
AXIS2_LOG_SI,"[rampart][shb]Cannot interchange enc_key and enc_data nodes");
+                    return AXIS2_FAILURE;
+                }
+            }
+        }
+    }
+
+    return AXIS2_SUCCESS;
+}
+
+axis2_status_t AXIS2_CALL
 rampart_shb_do_symmetric_binding( const axutil_env_t *env,
                                   axis2_msg_ctx_t *msg_ctx,
                                   rampart_context_t *rampart_context,
@@ -65,24 +215,24 @@
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Sym 
binding, Encryption failed in Symmetric binding. ERROR");
             return AXIS2_FAILURE;
         }
-        
+
         /*2. Sign*/
         status = rampart_sig_sign_message(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
         if(status != AXIS2_SUCCESS)
         {
-                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                "[rampart][shb] Signing failed. ERROR");
-                return AXIS2_FAILURE;
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[rampart][shb] Signing failed. ERROR");
+            return AXIS2_FAILURE;
         }
         /*3. Encrypt signature*/
         status = rampart_enc_encrypt_signature(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
         if(status != AXIS2_SUCCESS)
         {
-             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Encrypt 
signature failed. ERROR");
-                    return AXIS2_FAILURE;
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Encrypt 
signature failed. ERROR");
+            return AXIS2_FAILURE;
         }
- 
-        
+
+
     }else{ /*Sign before encrypt*/
         is_encrypt_before_sign = AXIS2_FALSE;
 
@@ -90,9 +240,9 @@
         status = rampart_sig_sign_message(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
         if(status != AXIS2_SUCCESS)
         {
-                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                "[rampart][shb] Signing failed. ERROR");
-                return AXIS2_FAILURE;
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[rampart][shb] Signing failed. ERROR");
+            return AXIS2_FAILURE;
         }
 
         /*Then Handle Encryption stuff*/
@@ -105,12 +255,12 @@
     }
 
     /*Finaly we need to make sure that our security header elements are in 
order*/
-     status = rampart_shb_ensure_sec_header_order(env, msg_ctx, 
rampart_context, sec_node);
-     if(status != AXIS2_SUCCESS)
-     {
-                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,"[rampart][shb] 
Security header ordering failed.");
-                return AXIS2_FAILURE;
-     }
+    status = rampart_shb_ensure_sec_header_order(env, msg_ctx, 
rampart_context, sec_node);
+    if(status != AXIS2_SUCCESS)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,"[rampart][shb] Security header 
ordering failed.");
+        return AXIS2_FAILURE;
+    }
 
     status = AXIS2_SUCCESS;
 
@@ -123,9 +273,9 @@
 /*Public functions*/
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 rampart_shb_ensure_sec_header_order(const axutil_env_t *env,
-    axis2_msg_ctx_t *msg_ctx,
-    rampart_context_t *rampart_context,
-    axiom_node_t* sec_node)
+                                    axis2_msg_ctx_t *msg_ctx,
+                                    rampart_context_t *rampart_context,
+                                    axiom_node_t* sec_node)
 {
     axis2_bool_t signature_protection = AXIS2_FALSE;
     axis2_bool_t is_encrypt_before_sign = AXIS2_FALSE;
@@ -148,22 +298,23 @@
     if(sig_node && ref_list_node){
         if(is_encrypt_before_sign){
             /*Encrypt->Sig         <Sig><RefList>*/
-            oxs_axiom_interchange_nodes(env,  sig_node, ref_list_node );    
+            oxs_axiom_interchange_nodes(env,  sig_node, ref_list_node );
         }else{
             /*Sig->Encrypt         <RefList> <Sig>*/
-            oxs_axiom_interchange_nodes(env, ref_list_node, sig_node );        
     
+            oxs_axiom_interchange_nodes(env, ref_list_node, sig_node );
         }
     }
 
-    /*If there are derived keys, make sure they come after the EncryptedKey
+    /*
+     * If there are derived keys, make sure they come after the EncryptedKey
         1. First we get all the derived keys
         2. Then we attach after the EncryptedKey (hidden sessionkey)
-    */
+     */
     dk_list = axutil_array_list_create(env, 5);
     h_node = axiom_node_get_first_child(sec_node, env);
     while(h_node){
         if(0 == axutil_strcmp(OXS_NODE_DERIVED_KEY_TOKEN, 
axiom_util_get_localname(h_node, env))){
-            axutil_array_list_add(dk_list, env, h_node); 
+            axutil_array_list_add(dk_list, env, h_node);
         }
         h_node = axiom_node_get_next_sibling(h_node, env);
     }
@@ -193,10 +344,6 @@
     axiom_namespace_t *sec_ns_obj = NULL;
     axiom_node_t *sec_node =  NULL;
     axiom_element_t *sec_ele = NULL;
-    axis2_bool_t is_encrypt_before_sign = AXIS2_FALSE;
-    axis2_bool_t signature_protection = AXIS2_FALSE;
-    axiom_node_t *sig_node = NULL;
-    axiom_node_t *enc_key_node = NULL;
 
     AXIS2_ENV_CHECK(env,AXIS2_FAILURE);
     soap_header  = axiom_soap_envelope_get_header(soap_envelope, env);
@@ -232,7 +379,6 @@
         AXIS2_LOG_INFO(env->log, "[rampart][shb] Building Timestamp Token");
         AXIS2_LOG_INFO(env->log, "[rampart][shb] Using default timeToLive 
value %d",
                        RAMPART_TIMESTAMP_TOKEN_DEFAULT_TIME_TO_LIVE);
-        /*ttl = RAMPART_TIMESTAMP_TOKEN_DEFAULT_TIME_TO_LIVE;*/
         ttl = rampart_context_get_ttl(rampart_context,env);
 
         status = rampart_timestamp_token_build(env,
@@ -284,150 +430,24 @@
     /*check the binding*/
     if((rampart_context_get_binding_type(rampart_context,env)) == 
RP_PROPERTY_ASYMMETRIC_BINDING)
     {
-        /*Do Asymmetric Binding specific things*/
-        AXIS2_LOG_INFO(env->log, "[rampart][shb] Using asymmetric binding");
-    
-        signature_protection = 
rampart_context_is_encrypt_signature(rampart_context, env);
-
-        /*Check the encryption and signature order*/
-        if(rampart_context_is_encrypt_before_sign(rampart_context, env))
-        {
-            is_encrypt_before_sign = AXIS2_TRUE;
-
-            /*If signature_protection=> <sp:EncryptSignature/> is ON*/
-            if(signature_protection)
-            {
-                /*First Encrypt the parts specified in encrypted parts*/
-                status = rampart_enc_encrypt_message(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
-                if(status != AXIS2_SUCCESS)
-                {
-                    AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                    "[rampart][shb] Encryption failed. ERROR");
-                    return AXIS2_FAILURE;
-                }
-
-                /*Add a key reference in Encrypted Data in the Body*/
-
-                status = rampart_enc_add_key_info(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
-                if(status != AXIS2_SUCCESS)
-                {
-                    AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                    "[rampart][shb] Cannot add Key 
information");
-                    return AXIS2_FAILURE;
-                }
-                /*Then Sign the message*/
-                status = rampart_sig_sign_message(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
-                if(status != AXIS2_SUCCESS)
-                {
-                    AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                    "[rampart][shb] Signing failed. ERROR");
-                    return AXIS2_FAILURE;
-                }
-
-                /*Then encrypt the signature */
-                status = rampart_enc_encrypt_signature(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
-                if(status != AXIS2_SUCCESS)
-                {
-                    AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                    "[rampart][shb] Encrypt signature failed. 
ERROR");
-                    return AXIS2_FAILURE;
-                }
-
-            }
-            else /*No Signature protection*/
-            {
-                status = rampart_enc_encrypt_message(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
-                if(status != AXIS2_SUCCESS){
-                    AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                    "[rampart][shb] Encryption failed. ERROR");
-                    return AXIS2_FAILURE;
-                }
-                /*Then do signature specific things*/
-                status = rampart_sig_sign_message(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
-                if(status != AXIS2_SUCCESS){
-                    AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                    "[rampart][shb] Signature failed. ERROR");
-                    return AXIS2_FAILURE;
-                }
-            }
-
-            /*Then Handle Supporting token stuff  */
-        }
-        else /*Sign before encrypt*/
-        {
-            is_encrypt_before_sign = AXIS2_FALSE;
-            /*First do signature specific stuff*/
-            status = rampart_sig_sign_message(env, msg_ctx, rampart_context, 
soap_envelope, sec_node);
-            if(status != AXIS2_SUCCESS){
-                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                "[rampart][shb] Signing failed. ERROR");
-                return AXIS2_FAILURE;
-            }
-            /*Then Handle Encryption stuff*/
-
-            status = rampart_enc_encrypt_message(env, msg_ctx, 
rampart_context, soap_envelope, sec_node);
-            if(status!=AXIS2_SUCCESS ){
-                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                "[rampart][shb] Encryption failed. ERROR");
-                return AXIS2_FAILURE;
-            }
-        }
+        axis2_status_t status = AXIS2_FAILURE;
 
-        /*If both encryption and signature is done we should interchange them.
-         * because the action done last should appear first in the header. */
-        sig_node = 
oxs_axiom_get_node_by_local_name(env,sec_node,OXS_NODE_SIGNATURE);
-        enc_key_node = 
oxs_axiom_get_node_by_local_name(env,sec_node,OXS_NODE_ENCRYPTED_KEY);
-        if(sig_node && enc_key_node)
-        {
-            if(is_encrypt_before_sign)
-            {
-                status = oxs_axiom_interchange_nodes(env, sig_node, 
enc_key_node);
-                if(status!=AXIS2_SUCCESS)
-                {
-                    AXIS2_LOG_INFO(env->log,"[rampart][shb] Node interchange 
failed.");
-                    return status;
-                }
-            }
-            else /*Sign before encryption*/
-            {
-                status = oxs_axiom_interchange_nodes(env, enc_key_node, 
sig_node);
-                if(status!=AXIS2_SUCCESS)
-                {
-                    AXIS2_LOG_INFO(env->log,"[rampart][shb] Node interchange 
failed.");
-                    return status;
-                }
-            }
-        }else if(enc_key_node && signature_protection)
-        {
-            if(!is_encrypt_before_sign)
-            {
-                axiom_node_t *enc_data_node = NULL;
-                enc_data_node = oxs_axiom_get_node_by_local_name(env, 
sec_node, OXS_NODE_ENCRYPTED_DATA);
-                if(!enc_data_node)
-                {
-                    AXIS2_LOG_ERROR(env->log, 
AXIS2_LOG_SI,"[rampart][shb]Signature is not encrypted,");
-                    return AXIS2_FAILURE;
-                }
-                else
-                {
-                    status = oxs_axiom_interchange_nodes(env, enc_key_node, 
enc_data_node);
-                    if(status != AXIS2_SUCCESS)
-                    {
-                        AXIS2_LOG_ERROR(env->log, 
AXIS2_LOG_SI,"[rampart][shb]Cannot interchange enc_key and enc_data nodes");
-                        return AXIS2_FAILURE;
-                    }
-                }
-            }
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Asymmetric 
Binding. ");
+        status = rampart_shb_do_asymmetric_binding(env, msg_ctx, 
rampart_context, soap_envelope, sec_node, sec_ns_obj);
+        if(AXIS2_FAILURE == status){
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Asymmetric 
Binding failed");
+            return AXIS2_FAILURE;
+        }else{
+            return AXIS2_SUCCESS;
         }
 
-        return AXIS2_SUCCESS;
     }
     else if((rampart_context_get_binding_type(rampart_context,env)) == 
RP_PROPERTY_SYMMETRIC_BINDING)
     {
         axis2_status_t status = AXIS2_FAILURE;
 
         /*Do Symmetric_binding specific things*/
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Symmetric 
Binding. We do not support yet");
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Symmetric 
Binding. ");
         status = rampart_shb_do_symmetric_binding(env, msg_ctx, 
rampart_context, soap_envelope, sec_node, sec_ns_obj);
         if(AXIS2_FAILURE == status){
             AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Symmetric 
Binding failed");

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=597556&r1=597555&r2=597556&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 Thu Nov 
22 21:24:15 2007
@@ -1414,7 +1414,7 @@
     }
 
     /*Now validate security policies, those cannot be checked on the fly*/
-    status = rampiart_pv_validate_sec_header(env, rampart_context, sec_node, 
msg_ctx);
+    status = rampart_pv_validate_sec_header(env, rampart_context, sec_node, 
msg_ctx);
     if(status != AXIS2_SUCCESS){
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shp] Security 
policy validation failed");
         return AXIS2_FAILURE;


Reply via email to