Author: kaushalye
Date: Thu Dec 13 01:00:03 2007
New Revision: 603858
URL: http://svn.apache.org/viewvc?rev=603858&view=rev
Log:
Adding a seperate module for rampart errors
Some minor modifications
Added:
webservices/rampart/trunk/c/include/rampart_error.h
webservices/rampart/trunk/c/src/util/rampart_error.c
Modified:
webservices/rampart/trunk/c/include/rampart_constants.h
webservices/rampart/trunk/c/src/core/mod_rampart.c
webservices/rampart/trunk/c/src/util/Makefile.am
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_constants.h
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/rampart_constants.h?rev=603858&r1=603857&r2=603858&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/rampart_constants.h (original)
+++ webservices/rampart/trunk/c/include/rampart_constants.h Thu Dec 13 01:00:03
2007
@@ -29,6 +29,7 @@
* @{
*/
#include <oxs_constants.h>
+#include <rampart_error.h>
#ifdef __cplusplus
extern "C"
@@ -133,6 +134,7 @@
#define RAMPART_SPR_SIG_VERIFIED "SPR_Sig_Verified"
#define RAMPART_SPR_SIG_ENCRYPTED "SPR_Sig_Encrypted"
#define RAMPART_SPR_SIG_CONFIRM_FOUND "SPR_Sig_Confirmation_Found"
+#define RAMPART_SPR_BODY_ENCRYPTED "SPR_Body_Encrypted"
#define RAMPART_YES "YES"
#define RAMPART_NO "NO"
@@ -148,6 +150,7 @@
#define RAMPART_RD_DB_PROP "Rampart_RD_DB_Prop"
#define RAMPART_RD_DEF_VALID_DURATION 60
#define RAMPART_RD_DEF_MAX_RCDS 5
+
#ifdef __cplusplus
}
#endif
Added: webservices/rampart/trunk/c/include/rampart_error.h
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/rampart_error.h?rev=603858&view=auto
==============================================================================
--- webservices/rampart/trunk/c/include/rampart_error.h (added)
+++ webservices/rampart/trunk/c/include/rampart_error.h Thu Dec 13 01:00:03 2007
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+#ifndef RAMPART_ERROR_H
+#define RAMPART_ERROR_H
+
+#include <axutil_error.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ * @defgroup rampart_error
+ * @ingroup rampart Error
+ * @{
+ */
+ /**
+ * \brief rampart error codes
+ *
+ * Set of error codes for rampart
+ */
+ typedef enum rampart_error_codes rampart_error_codes_t;
+ enum rampart_error_codes
+ {
+ /* No error */
+ RAMPART_ERROR_NONE = RAMPART_ERROR_CODES_START,
+ RAMPART_ERROR_UNSUPPORTED_SECURITY_TOKEN,
+ RAMPART_ERROR_INVALID_SECURITY,
+ RAMPART_ERROR_INVALID_SECURITY_TOKEN,
+ RAMPART_ERROR_FAILED_AUTHENTICATION,
+ RAMPART_ERROR_FAILED_CHECK,
+ RAMPART_ERROR_SECURITY_TOKEN_UNAVAILABLE,
+ RAMPART_ERROR_RAMPART_ERROR_LAST,
+ RAMPART_ERROR_IN_TIMESTAMP,
+ RAMPART_ERROR_IN_USERNAMETOKEN ,
+ RAMPART_ERROR_IN_ENCRYPTED_KEY ,
+ RAMPART_ERROR_IN_ENCRYPTED_DATA ,
+ RAMPART_ERROR_IN_SIGNATURE ,
+ RAMPART_ERROR_MSG_REPLAYED ,
+ RAMPART_ERROR_IN_POLICY ,
+ RAMPART_ERROR_LAST
+ };
+
+axis2_status_t AXIS2_CALL
+rampart_error_init();
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*RAMPART_ERROR_H*/
Modified: webservices/rampart/trunk/c/src/core/mod_rampart.c
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/core/mod_rampart.c?rev=603858&r1=603857&r2=603858&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/core/mod_rampart.c (original)
+++ webservices/rampart/trunk/c/src/core/mod_rampart.c Thu Dec 13 01:00:03 2007
@@ -61,6 +61,8 @@
/* Any initialization stuff of Rampart module goes here. At the moment we
have NONE.
* Intialization happens in handlers depending on the message flow and
policies
* */
+ rampart_error_init();
+
AXIS2_LOG_INFO(env->log,"[rampart][rampart_mod] rampart_mod initialized");
return AXIS2_SUCCESS;
}
Modified: webservices/rampart/trunk/c/src/util/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/Makefile.am?rev=603858&r1=603857&r2=603858&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/Makefile.am (original)
+++ webservices/rampart/trunk/c/src/util/Makefile.am Thu Dec 13 01:00:03 2007
@@ -7,7 +7,7 @@
rampart_encryption.c
rampart_sec_header_processor.c rampart_sec_processed_result.c \
rampart_sec_header_builder.c rampart_context.c rampart_token_processor.c
rampart_signature.c \
rampart_token_builder.c
rampart_rd_record.c rampart_replay_detector.c rampart_engine.c \
-
rampart_policy_validator.c
+
rampart_policy_validator.c rampart_error.c
librampart_util_la_LIBADD = -lssl \
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=603858&r1=603857&r2=603858&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_encryption.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_encryption.c Thu Dec 13
01:00:03 2007
@@ -45,7 +45,7 @@
axis2_status_t status1 = AXIS2_SUCCESS;
axis2_status_t status2 = AXIS2_SUCCESS;
-
+
status1 = rampart_context_get_nodes_to_encrypt(
rampart_context, env, soap_envelope, nodes_to_encrypt);
Added: webservices/rampart/trunk/c/src/util/rampart_error.c
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_error.c?rev=603858&view=auto
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_error.c (added)
+++ webservices/rampart/trunk/c/src/util/rampart_error.c Thu Dec 13 01:00:03
2007
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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 <stdlib.h>
+#include <rampart_error.h>
+#include <axutil_error_default.h>
+
+AXIS2_IMPORT extern const axis2_char_t* axutil_error_messages[];
+
+/**
+ * RAMPART_ERROR_NONE = RAMPART_ERROR_CODES_START,
+ RAMPART_ERROR_UNSUPPORTED_SECURITY_TOKEN,
+ RAMPART_ERROR_INVALID_SECURITY,
+ RAMPART_ERROR_INVALID_SECURITY_TOKEN,
+ RAMPART_ERROR_FAILED_AUTHENTICATION,
+ RAMPART_ERROR_FAILED_CHECK,
+ RAMPART_ERROR_SECURITY_TOKEN_UNAVAILABLE,
+ RAMPART_ERROR_IN_TIMESTAMP,
+ RAMPART_ERROR_IN_USERNAMETOKEN ,
+ RAMPART_ERROR_IN_ENCRYPTED_KEY ,
+ RAMPART_ERROR_IN_ENCRYPTED_DATA ,
+ RAMPART_ERROR_IN_SIGNATURE ,
+ RAMPART_ERROR_MSG_REPLAYED ,
+ RAMPART_ERROR_IN_POLICY ,
+ RAMPART_ERROR_LAST
+
+ */
+
+axis2_status_t AXIS2_CALL
+rampart_error_init()
+{
+ /* A namespace that is not supported by Sandesha2 */
+ axutil_error_messages[RAMPART_ERROR_NONE] =
+ "Unidentified error in Rampart";
+
+ axutil_error_messages[RAMPART_ERROR_UNSUPPORTED_SECURITY_TOKEN] =
+ "Unsupported security token";
+
+ axutil_error_messages[RAMPART_ERROR_INVALID_SECURITY]=
+ "Invalid security";
+
+ axutil_error_messages[RAMPART_ERROR_INVALID_SECURITY_TOKEN]=
+ "Invalid security token";
+
+ axutil_error_messages[RAMPART_ERROR_LAST]=
+ "Last error of the stack in rampart";
+
+ axutil_error_messages[RAMPART_ERROR_FAILED_AUTHENTICATION]=
+ "Failed authentication";
+
+ axutil_error_messages[RAMPART_ERROR_FAILED_CHECK]=
+ "Failed check";
+
+ axutil_error_messages[RAMPART_ERROR_SECURITY_TOKEN_UNAVAILABLE]=
+ "Security token unavailable";
+
+ axutil_error_messages[RAMPART_ERROR_IN_TIMESTAMP]=
+ "Error in timestamp";
+
+ axutil_error_messages[RAMPART_ERROR_IN_USERNAMETOKEN]=
+ "Error in username token";
+
+ axutil_error_messages[RAMPART_ERROR_IN_ENCRYPTED_KEY]=
+ "Error in Encrypted Key";
+
+ axutil_error_messages[RAMPART_ERROR_IN_ENCRYPTED_DATA]=
+ "Error in Encrypted Data";
+
+ axutil_error_messages[RAMPART_ERROR_IN_SIGNATURE]=
+ "Error in Signature";
+
+ axutil_error_messages[RAMPART_ERROR_MSG_REPLAYED]=
+ "Message probarbly be replayed";
+
+ axutil_error_messages[RAMPART_ERROR_IN_POLICY]=
+ "Error in security policy";
+
+ axutil_error_messages[RAMPART_ERROR_LAST]=
+ "Error last";
+
+ return AXIS2_SUCCESS;
+}
+
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=603858&r1=603857&r2=603858&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_policy_validator.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_policy_validator.c Thu Dec 13
01:00:03 2007
@@ -65,6 +65,7 @@
}else{
/*Error*/
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,"[rampart][rpv] Username
token required. Not found");
+ AXIS2_ERROR_SET(env->error, RAMPART_ERROR_INVALID_SECURITY ,
AXIS2_FAILURE);
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;
@@ -125,6 +126,65 @@
return AXIS2_SUCCESS;
}
}
+/*We validate only the body encryption*/
+static axis2_status_t
+rampart_pv_validate_encryption(const axutil_env_t *env,
+ rampart_context_t *rampart_context,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ axis2_bool_t body_encryption = AXIS2_FALSE;
+ axis2_status_t status = AXIS2_SUCCESS;
+ axutil_array_list_t *nodes_to_encrypt = NULL;
+ axiom_soap_envelope_t *soap_envelope = NULL;
+ int i = 0;
+
+ nodes_to_encrypt = axutil_array_list_create(env, 0);
+ soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env);
+
+ status = rampart_context_get_nodes_to_encrypt(
+ rampart_context, env, soap_envelope, nodes_to_encrypt);
+
+ status = rampart_context_get_elements_to_encrypt(
+ rampart_context, env, soap_envelope, nodes_to_encrypt);
+
+ /*See if the body need to be encrypted*/
+ if(nodes_to_encrypt && (axutil_array_list_size(nodes_to_encrypt, env) >
0)){
+ for(i=0 ; i < axutil_array_list_size(nodes_to_encrypt, env); i++)
+ {
+ axiom_node_t *node_to_enc = NULL;
+
+ /*Get the node to be encrypted*/
+ node_to_enc = (axiom_node_t *)axutil_array_list_get
+ (nodes_to_encrypt, env, i);
+ if(node_to_enc){
+ if(0 == axutil_strcmp( OXS_NODE_BODY ,
axiom_util_get_localname(node_to_enc, env))){
+ body_encryption = AXIS2_TRUE;
+ break;
+ }
+ }
+ }/*Eof loop*/
+ }else{
+ return AXIS2_SUCCESS;
+ }
+
+ if(AXIS2_TRUE == body_encryption){
+ axis2_char_t* body_encrypted = NULL;
+ body_encrypted =
(axis2_char_t*)rampart_get_security_processed_result(env, msg_ctx,
RAMPART_SPR_BODY_ENCRYPTED);
+ if(0 == axutil_strcmp(RAMPART_YES, body_encrypted)){
+ return AXIS2_SUCCESS;
+ }else{
+ /*Error*/
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,"[rampart][rpv] Body need
to be encrypted.");
+ rampart_create_fault_envelope(env, RAMPART_FAULT_FAILED_CHECK,
"Body need to be encrypted",
+ RAMPART_FAULT_INVALID_SECURITY, msg_ctx);
+ return AXIS2_FAILURE;
+ }
+ }else{
+ return AXIS2_SUCCESS;
+ }
+}
+
+
/*Public functions*/
AXIS2_EXTERN axis2_status_t AXIS2_CALL
@@ -148,6 +208,10 @@
}
/*Check if Timestamp found*/
if(!rampart_pv_validate_ts(env, rampart_context, msg_ctx)){
+ return AXIS2_FAILURE;
+ }
+ /*Check if encryption is valid found*/
+ if(!rampart_pv_validate_encryption(env, rampart_context, msg_ctx)){
return AXIS2_FAILURE;
}
/*All the policy reqmnts are met. We are good to go*/
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=603858&r1=603857&r2=603858&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 Dec
13 01:00:03 2007
@@ -445,6 +445,7 @@
if(AXIS2_FAILURE == status){
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Asymmetric
Binding failed");
if(axis2_msg_ctx_get_server_side(msg_ctx,env)){
+ AXIS2_ERROR_SET(env->error, RAMPART_ERROR_INVALID_SECURITY ,
AXIS2_FAILURE);
rampart_create_fault_envelope(env,
RAMPART_FAULT_INVALID_SECURITY,
" Asymmetric Binding failed. Check
configurations ", RAMPART_FAULT_IN_POLICY, msg_ctx);
}
@@ -465,6 +466,7 @@
if(AXIS2_FAILURE == status){
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][shb] Symmetric
Binding failed");
if(axis2_msg_ctx_get_server_side(msg_ctx,env)){
+ AXIS2_ERROR_SET(env->error, RAMPART_ERROR_INVALID_SECURITY,
AXIS2_FAILURE);
rampart_create_fault_envelope(env,
RAMPART_FAULT_INVALID_SECURITY,
" Symmetric Binding failed. Check
configurations ", RAMPART_FAULT_IN_POLICY, msg_ctx);
}
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=603858&r1=603857&r2=603858&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 Dec
13 01:00:03 2007
@@ -584,6 +584,11 @@
if(0 == axutil_strcmp( OXS_NODE_SIGNATURE ,
axiom_util_get_localname(decrypted_node, env))){
rampart_set_security_processed_result(env, msg_ctx,
RAMPART_SPR_SIG_ENCRYPTED, RAMPART_YES);
}
+ /*Check if the body is encrypted*/
+ if(0 == axutil_strcmp(OXS_NODE_BODY ,
axiom_util_get_localname(decrypted_node, env))){
+ rampart_set_security_processed_result(env, msg_ctx,
RAMPART_SPR_BODY_ENCRYPTED, RAMPART_YES);
+ }
+
/*Free*/
oxs_ctx_free(ctx, env);
ctx = NULL;
@@ -719,6 +724,10 @@
/*Check if the signture is encrypted*/
if(0 == axutil_strcmp( OXS_NODE_SIGNATURE ,
axiom_util_get_localname(decrypted_node, env))){
rampart_set_security_processed_result(env, msg_ctx,
RAMPART_SPR_SIG_ENCRYPTED, RAMPART_YES);
+ }
+ /*Check if the body is encrypted*/
+ if(0 == axutil_strcmp(OXS_NODE_BODY ,
axiom_util_get_localname(decrypted_node, env))){
+ rampart_set_security_processed_result(env, msg_ctx,
RAMPART_SPR_BODY_ENCRYPTED, RAMPART_YES);
}
/*Free*/