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;
}
-