Author: manjula
Date: Mon Jun  4 23:13:57 2007
New Revision: 544400

URL: http://svn.apache.org/viewvc?view=rev&rev=544400
Log:
Modifying Rampart engine to handle policy and other extensions.

Modified:
    webservices/rampart/trunk/c/include/rampart_constants.h
    webservices/rampart/trunk/c/src/util/rampart_engine.c

Modified: webservices/rampart/trunk/c/include/rampart_constants.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/rampart_constants.h?view=diff&rev=544400&r1=544399&r2=544400
==============================================================================
--- webservices/rampart/trunk/c/include/rampart_constants.h (original)
+++ webservices/rampart/trunk/c/include/rampart_constants.h Mon Jun  4 23:13:57 
2007
@@ -70,7 +70,7 @@
 #define OUT_MESSAGE_SECURITY                         "OutMessageSEcurity"
 #define RAMPART_PASSWORD_TEXT                       "plainText"
 #define RAMPART_PASSWORD_DIGEST                     "Digest"
-
+#define RAMPART_CONFIGURATION                       "RampartConfiguration"
 
     /************fault codes***************/
 #define RAMPART_FAULT_UNSUPPORTED_SECURITY_TOKEN    
"wsse:UnsupportedSecurityToken"

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?view=diff&rev=544400&r1=544399&r2=544400
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_engine.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_engine.c Mon Jun  4 23:13:57 
2007
@@ -33,11 +33,26 @@
 #include <rampart_replay_detector.h>
 #include <axis2_msg.h>
 #include <axis2_conf_ctx.h>
+#include <rampart_handler_util.h>
 
 /*This method sets all the configurations
  loads required modules and start rampart.*/
 
 
+neethi_policy_t *AXIS2_CALL
+build_policy(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        axis2_bool_t is_inflow);
+
+
+axis2_status_t AXIS2_CALL
+set_rampart_user_properties(
+        const axutil_env_t *env,
+        rampart_context_t *rampart_context);
+
+
+
 AXIS2_EXTERN rampart_context_t *AXIS2_CALL 
 rampart_engine_build_configuration(
         const axutil_env_t *env,
@@ -45,56 +60,125 @@
         axis2_bool_t is_inflow)
 {
 
-    axis2_svc_t *svc = NULL;
-    axis2_desc_t *desc = NULL;
-    axis2_policy_include_t *policy_include = NULL;
-    neethi_policy_t *service_policy = NULL;
     rp_secpolicy_t *secpolicy = NULL;
     rampart_context_t *rampart_context = NULL;
-    rampart_callback_t* password_callback_module = NULL;
-    rampart_authn_provider_t *authn_provider = NULL;
-    axis2_char_t *pwcb_module_name = NULL;
-    axis2_char_t *authn_provider_name = NULL;
     axis2_status_t status = AXIS2_SUCCESS;
-    axis2_op_t *op = NULL;
-    axis2_msg_t *msg = NULL;
     axis2_conf_ctx_t *conf_ctx = NULL;
     axis2_ctx_t *ctx = NULL;
+    axis2_bool_t is_server_side = AXIS2_TRUE;
+    neethi_policy_t *policy = NULL;
     axutil_property_t *property = NULL;
+    void *value = NULL;
+
+    is_server_side = axis2_msg_ctx_get_server_side(msg_ctx, env);
 
-    conf_ctx =  axis2_msg_ctx_get_conf_ctx(msg_ctx,env);
-    if(!conf_ctx)
+    if(is_server_side || !is_inflow)
     {
-        AXIS2_LOG_INFO(env->log, "[rampart][engine] Conf context is NULL ");
-        return NULL;
+        policy = build_policy(env, msg_ctx, is_inflow);
+        if(!policy)   
+        {
+            AXIS2_LOG_INFO(env->log, "[rampart][engine] Policy Creation 
failed. ");
+            return NULL;
+        } 
     }
-    ctx = axis2_conf_ctx_get_base(conf_ctx,env);
-    if(!ctx)
+    else
+    {
+        property = axis2_msg_ctx_get_property(msg_ctx, env, RAMPART_CONTEXT);
+        if(property)
+            return (rampart_context_t *)axutil_property_get_value(property, 
env);
+        else
+        {
+            AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Cannot get 
saved rampart_context");
+            return NULL;
+        }
+    }    
+    
+    secpolicy = rp_secpolicy_builder_build(env, policy);
+    if(!secpolicy)
     {
-        AXIS2_LOG_INFO(env->log, "[rampart][engine] axis2 context is NULL ");
+        AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Cannot create 
security policy from policy.");
         return NULL;
     }
+
+    value = rampart_get_rampart_configuration(env, msg_ctx, 
RAMPART_CONFIGURATION);
+    if(value)
+    {
+        rampart_context = (rampart_context_t *)value;
+        rampart_context_set_secpolicy(rampart_context, env, secpolicy);
+    }
+    else
+    {
+        rampart_context = rampart_context_create(env);
+        rampart_context_set_secpolicy(rampart_context, env, secpolicy);
+
+        status = set_rampart_user_properties(env, rampart_context);
+        if(status != AXIS2_SUCCESS)
+        {
+            AXIS2_LOG_INFO(env->log, "[rampart][engine] User property creation 
fails ");
+            return NULL;
+        } 
+    }
     
-    svc =  axis2_msg_ctx_get_svc(msg_ctx,env);
-    if(!svc)
+    if(!is_server_side)
     {
-        property = axis2_ctx_get_property(ctx, env, RAMPART_CONTEXT);
-        if(property)
-            return (rampart_context_t 
*)axutil_property_get_value(property,env);
-        else
+        conf_ctx =  axis2_msg_ctx_get_conf_ctx(msg_ctx,env);
+        if(!conf_ctx)
+        {
+            AXIS2_LOG_INFO(env->log, "[rampart][engine] Conf context is NULL 
");
+            return NULL;
+        }
+
+        ctx = axis2_conf_ctx_get_base(conf_ctx,env);
+        if(!ctx)
         {
-            AXIS2_LOG_INFO(env->log, "[rampart][rampart_neethi] Service is 
NULL.");
+            AXIS2_LOG_INFO(env->log, "[rampart][engine] axis2 context is NULL 
");
             return NULL;
         }
+        property = axutil_property_create_with_args(env, 
AXIS2_SCOPE_APPLICATION,
+                                            AXIS2_FALSE, (void 
*)rampart_context_free, rampart_context);
+        axis2_ctx_set_property(ctx, env, RAMPART_CONTEXT, property);
+
+    }
+    else
+    { /*Server side only*/
+      /*We set our default impl of replay detection function*/
+        if(is_inflow)
+        {
+            rampart_context_set_replay_detect_function(rampart_context, env, 
rampart_replay_detector_with_linked_list/*rampart_replay_detector_default*/);
+        }
+    }
+    return rampart_context;
+}
+
+
+neethi_policy_t *AXIS2_CALL 
+build_policy(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        axis2_bool_t is_inflow)
+{
+
+    axis2_svc_t *svc = NULL;
+    axis2_desc_t *desc = NULL;
+    axis2_policy_include_t *policy_include = NULL;
+    neethi_policy_t *service_policy = NULL;
+    axis2_op_t *op = NULL;
+    axis2_msg_t *msg = NULL;
+
+    svc =  axis2_msg_ctx_get_svc(msg_ctx,env);
+    if(!svc)
+    {
+        AXIS2_LOG_INFO(env->log, "[rampart][rampart_neethi] Service is NULL.");
+        return NULL;
     }
-                        
+
     op = axis2_msg_ctx_get_op(msg_ctx, env);
     if(!op)
     {
         AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Operation is 
NULL.");
         return NULL;
-    }        
-    
+    }
+
     if(is_inflow)
     {
         msg = axis2_op_get_msg(op, env, "in");
@@ -102,14 +186,14 @@
     else
     {
         msg = axis2_op_get_msg(op, env, "out");
-    }        
+    }
 
     if(!msg)
     {
         AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Message is NULL.");
         return NULL;
     }
-    
+
     /*desc = axis2_svc_get_base(svc, env);*/
     desc = axis2_msg_get_base(msg, env);
     if(!desc)
@@ -117,8 +201,8 @@
         AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] axis2 description 
is NULL.");
         return NULL;
     }
-    policy_include = axis2_desc_get_policy_include(desc, env);        
     
+    policy_include = axis2_desc_get_policy_include(desc, env);
     if(!policy_include)
     {
         AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Policy include is 
NULL.");
@@ -126,38 +210,53 @@
     }
     /*service_policy = axis2_policy_include_get_policy(policy_include, env);*/
     service_policy = axis2_policy_include_get_effective_policy(policy_include, 
env);
-    
+
     if(!service_policy)
     {
         AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Policy is NULL.");
         return NULL;
-    }    
-    secpolicy = rp_secpolicy_builder_build(env, service_policy);
-
-    if(!secpolicy)
-    {
-        AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] security policy is 
NULL.");
-        return NULL;
     }
-    rampart_context = rampart_context_create(env);
     
-    rampart_context_set_secpolicy(rampart_context, env, secpolicy);
+    return service_policy;
+
+}
+
 
+axis2_status_t AXIS2_CALL 
+set_rampart_user_properties(
+        const axutil_env_t *env,
+        rampart_context_t *rampart_context)
+{
+
+    rampart_callback_t* password_callback_module = NULL;
+    rampart_authn_provider_t *authn_provider = NULL;
+    axis2_char_t *pwcb_module_name = NULL;
+    axis2_char_t *authn_provider_name = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+    
     status = rampart_context_set_user_from_file(rampart_context,env);
     if(status!=AXIS2_SUCCESS)
-        return NULL;
-
+    {
+        return AXIS2_FAILURE;
+    }
+    
     status = rampart_context_set_ttl_from_file(rampart_context,env);
     if(status!=AXIS2_SUCCESS)
-        return NULL;
+    {
+        return AXIS2_FAILURE;
+    }
 
     status = rampart_context_set_rd_val_from_file(rampart_context,env);
     if(status!=AXIS2_SUCCESS)
-        return NULL;
+    {
+        return AXIS2_FAILURE;
+    }
 
     status = rampart_context_set_password_type_from_file(rampart_context,env);
     if(status!=AXIS2_SUCCESS)
-        return NULL;
+    {
+        return AXIS2_FAILURE;
+    }
 
     pwcb_module_name = 
rampart_context_get_password_callback_class(rampart_context,env);
 
@@ -175,19 +274,5 @@
         if(authn_provider)
             
rampart_context_set_authn_provider(rampart_context,env,authn_provider);
     }
-    
-
-    if(!axis2_msg_ctx_get_server_side(msg_ctx, env))
-    {
-        property = axutil_property_create_with_args(env, 
AXIS2_SCOPE_APPLICATION,
-                                            AXIS2_FALSE, (void 
*)rampart_context_free, rampart_context);
-        axis2_ctx_set_property(ctx, env, RAMPART_CONTEXT, property);
-    }else{ /*Server side only*/
-         /*We set our default impl of replay detection function*/
-        if(is_inflow){
-            rampart_context_set_replay_detect_function(rampart_context, env, 
rampart_replay_detector_with_linked_list/*rampart_replay_detector_default*/);
-        }
-    }
-    return rampart_context;
+    return status;
 }
-


Reply via email to