You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rampart-dev@ws.apache.org by su...@apache.org on 2007/10/14 12:44:14 UTC
svn commit: r584526 - in /webservices/rampart/scratch/c/saml: include/SAML.h
include/saml_req.h saml_test.vcproj src/auth_des_stmt.c src/auth_smt.c
src/condition.c src/saml_request.c src/saml_responce.c src/stmt.c
src/subject.c test/ test/test_main.c
Author: supun
Date: Sun Oct 14 03:44:13 2007
New Revision: 584526
URL: http://svn.apache.org/viewvc?rev=584526&view=rev
Log:
Applied the 3rd patch from Prasad and add API methods to the assertions
Added:
webservices/rampart/scratch/c/saml/saml_test.vcproj
webservices/rampart/scratch/c/saml/test/
webservices/rampart/scratch/c/saml/test/test_main.c
Modified:
webservices/rampart/scratch/c/saml/include/SAML.h
webservices/rampart/scratch/c/saml/include/saml_req.h
webservices/rampart/scratch/c/saml/src/auth_des_stmt.c
webservices/rampart/scratch/c/saml/src/auth_smt.c
webservices/rampart/scratch/c/saml/src/condition.c
webservices/rampart/scratch/c/saml/src/saml_request.c
webservices/rampart/scratch/c/saml/src/saml_responce.c
webservices/rampart/scratch/c/saml/src/stmt.c
webservices/rampart/scratch/c/saml/src/subject.c
Modified: webservices/rampart/scratch/c/saml/include/SAML.h
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/include/SAML.h?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/include/SAML.h (original)
+++ webservices/rampart/scratch/c/saml/include/SAML.h Sun Oct 14 03:44:13 2007
@@ -64,6 +64,7 @@
#define SAML_AUDIENCE "Audience"
#define SAML_AUDIENCE_RESTRICTION_CONDITION_TYPE "AudienceRestrictionConditionType"
+#define SAML_AUDIENCE_RESTRICTION_CONDITION "AudienceRestrictionCondition"
#define SAML_AUTHENTICATION_METHOD "AuthenticationMethod"
#define SAML_AUTHENTICATION_INSTANT "AuthenticationInstant"
@@ -118,7 +119,7 @@
typedef struct saml_audi_restriction_cond_s
{
- axutil_array_list_t *audiences;
+ axutil_array_list_t *audiences;
} saml_audi_restriction_cond_t;
typedef struct saml_advise_s
@@ -355,7 +356,7 @@
AXIS2_EXTERN saml_stmt_t * AXIS2_CALL saml_stmt_create(axutil_env_t *env);
AXIS2_EXTERN void AXIS2_CALL saml_stmt_free(saml_stmt_t *stmt, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_stmt_build(saml_stmt_t *stmt, axiom_node_t *node, axutil_env_t *env);
-AXIS2_EXTERN int AXIS2_CALL saml_stmt_to_om(saml_stmt_t *stmt, axiom_node_t *parent, axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_stmt_to_om(saml_stmt_t *stmt, axiom_node_t *parent, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_id_init(saml_id_t *id, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_id_generate_random_bytes(saml_id_t *id, axutil_env_t *env);
@@ -400,4 +401,14 @@
AXIS2_EXTERN void AXIS2_CALL saml_condition_free(saml_condition_t *cond, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_condition_build(saml_condition_t *cond, axiom_node_t *node, axutil_env_t *env);
AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_condition_to_om(saml_condition_t *cond, axiom_node_t *parent, axutil_env_t * env);
+
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_build(saml_audi_restriction_cond_t *arc, axiom_node_t *node, axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL saml_audi_restriction_cond_to_om(saml_audi_restriction_cond_t *cond, axiom_node_t *parent, axutil_env_t * env);
+AXIS2_EXTERN void AXIS2_CALL saml_audi_restriction_cond_free(saml_audi_restriction_cond_t *arc, axutil_env_t * env);
+AXIS2_EXTERN saml_audi_restriction_cond_t * AXIS2_CALL saml_audi_restriction_cond_create(axutil_env_t *env);
+
+AXIS2_EXTERN saml_action_t * AXIS2_CALL saml_action_create(axutil_env_t *env);
+AXIS2_EXTERN void AXIS2_CALL saml_action_free(saml_action_t *action, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_action_build(saml_action_t *action, axiom_node_t *node, axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_action_to_om(saml_action_t *action, axiom_node_t *parent, axutil_env_t *env);
#endif
Modified: webservices/rampart/scratch/c/saml/include/saml_req.h
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/include/saml_req.h?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/include/saml_req.h (original)
+++ webservices/rampart/scratch/c/saml/include/saml_req.h Sun Oct 14 03:44:13 2007
@@ -14,11 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+#ifndef SAML_REQ_H
+#define SAML_REQ_H
+
#include <SAML.h>
#define SAML_REQUEST_ID "RequestID"
#define SAML_SIGNATURE "Signature"
#define SAML_SUBJECT_QUERY "SubjectQuery"
+#define SAML_ATTRIBUTE_QUERY "AttributeQuery"
#define SAML_AUTHENTICATION_QUERY "AuthenticationQuery"
#define SAML_AUTHORIZATION_DECISION_QUERY "AuthorizationDecisionQuery"
#define SAML_ASSERTION_ID_REF "AssertionIDReference"
@@ -33,17 +38,27 @@
#define SAML_STATUS_DETAIL "StatusDetail"
#define SAML_STATUS_VALUE "Value"
#define SAML_STATUS "Status"
-
+#define SAML_PROTOCOL_NMSP "urn:oasis:names:tc:SAML:1.0:protocol"
+#define SAML_PROTOCOL_PREFIX "samlp"
+#define SAML_REQUEST "Request"
+#define SAML_RESPONSE "Response"
/*A code representing the status of the corresponding request*/
typedef struct saml_status
{
axutil_qname_t *status_value;
axis2_char_t *status_code;
axis2_char_t *status_msg;
- axis2_char_t *status_detail;
+ axutil_array_list_t *status_detail;
+
}saml_status_t;
+typedef struct saml_query
+{
+ axis2_char_t *type;
+ void *query;
+}saml_query_t;
+
typedef struct saml_subject_query
{
saml_subject_t *subject;
@@ -96,19 +111,13 @@
axutil_array_list_t *saml_asserion_id_ref;
axutil_array_list_t *saml_artifacts;
-
- saml_subject_query_t *subject_query;
-
- saml_authentication_query_t *authentication_query;
-
- saml_autho_decision_query_t *autho_decision_query;
-
- saml_attr_query_t *attribute_query;
+
+ saml_query_t *query;
}saml_request_t;
typedef struct saml_response
{
- saml_id_t responce_id;
+ saml_id_t response_id;
axis2_char_t *major_version;
@@ -116,7 +125,7 @@
axis2_char_t *recepient;
- saml_id_t request_responce_id;
+ axis2_char_t *request_response_id;
axutil_date_time_t *issue_instant;
@@ -125,38 +134,55 @@
saml_status_t *status;
axutil_array_list_t *saml_assertions;
-}saml_responce_t;
+}saml_response_t;
AXIS2_EXTERN int AXIS2_CALL saml_request_init(saml_request_t *request, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_request_uninit(saml_request_t *request, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_request_build(saml_request_t *request, axiom_node_t *node, axutil_env_t *env);
-AXIS2_EXTERN int AXIS2_CALL saml_responce_init(saml_responce_t *responce, axutil_env_t *env);
-AXIS2_EXTERN int AXIS2_CALL saml_responce_uninit(saml_responce_t *responce, axutil_env_t *env);
-AXIS2_EXTERN int AXIS2_CALL saml_responce_build(saml_responce_t *responce, axiom_node_t *node, axutil_env_t *env);
-
+AXIS2_EXTERN int AXIS2_CALL saml_response_init(saml_response_t *response, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_response_uninit(saml_response_t *response, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_response_build(saml_response_t *response, axiom_node_t *node, axutil_env_t *env);
+
+AXIS2_EXTERN int AXIS2_CALL saml_query_init(saml_query_t *query, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_query_uninit(saml_query_t *query, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_query_build(saml_query_t *query, axiom_node_t *node, axutil_env_t *env);
+AXIS2_EXTERN saml_query_t* AXIS2_CALL saml_query_create(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_query_to_om(saml_query_t *query, axiom_node_t *parent, axutil_env_t *env);
AXIS2_EXTERN saml_subject_query_t* AXIS2_CALL saml_subject_query_create(axutil_env_t *env);
-AXIS2_EXTERN saml_authentication_query_t* AXIS2_CALL saml_authentication_query_create(axutil_env_t *env);
-AXIS2_EXTERN saml_attr_query_t* AXIS2_CALL saml_attr_query_create(axutil_env_t *env);
-AXIS2_EXTERN saml_autho_decision_query_t* AXIS2_CALL saml_autho_decision_query_create(axutil_env_t *env);
-
AXIS2_EXTERN int AXIS2_CALL saml_subject_query_init(saml_subject_query_t* subject_query, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_subject_query_build(saml_subject_query_t* subject_query, axiom_node_t *node, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_subject_query_uninit(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_subject_query_to_om(saml_subject_query_t *subject_query,
+ axiom_node_t *parent,
+ axutil_env_t *env);
+AXIS2_EXTERN saml_authentication_query_t* AXIS2_CALL saml_authentication_query_create(axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_authentication_query_init(saml_authentication_query_t *authentication_query, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_authentication_query_build(saml_authentication_query_t* authentication_query, axiom_node_t *node, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_authentication_query_uninit(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_authentication_query_to_om(saml_authentication_query_t *authentication_query,
+ axiom_node_t *parent,
+ axutil_env_t *env);
+AXIS2_EXTERN saml_attr_query_t* AXIS2_CALL saml_attr_query_create(axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_attr_query_init(saml_attr_query_t* attribute_query, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_attr_query_build(saml_attr_query_t* attribute_query, axiom_node_t *node, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_attr_query_uninit(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_attr_query_to_om(saml_attr_query_t *attribute_query,
+ axiom_node_t *parent,
+ axutil_env_t *env);
+AXIS2_EXTERN saml_autho_decision_query_t* AXIS2_CALL saml_autho_decision_query_create(axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_autho_decision_query_init(saml_autho_decision_query_t* autho_decision_query, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_autho_decision_query_build(saml_autho_decision_query_t* autho_decision_query, axiom_node_t *node, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_autho_decision_query_uninit(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_autho_decision_query_to_om(saml_autho_decision_query_t *autho_decision_query,
+ axiom_node_t *parent,
+ axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_status_init(saml_status_t *status, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_status_uninit(saml_status_t *status, axutil_env_t *env);
AXIS2_EXTERN int AXIS2_CALL saml_status_build(saml_status_t *status, axiom_node_t *node, axutil_env_t *env);
+#endif
Added: webservices/rampart/scratch/c/saml/saml_test.vcproj
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/saml_test.vcproj?rev=584526&view=auto
==============================================================================
--- webservices/rampart/scratch/c/saml/saml_test.vcproj (added)
+++ webservices/rampart/scratch/c/saml/saml_test.vcproj Sun Oct 14 03:44:13 2007
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="saml_test"
+ ProjectGUID="{10D44647-66E0-4DCF-A465-4CD1923D9A47}"
+ RootNamespace="saml_test"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\test_main.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Modified: webservices/rampart/scratch/c/saml/src/auth_des_stmt.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/auth_des_stmt.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/auth_des_stmt.c (original)
+++ webservices/rampart/scratch/c/saml/src/auth_des_stmt.c Sun Oct 14 03:44:13 2007
@@ -18,14 +18,18 @@
#include <SAML.h>
-AXIS2_EXTERN int AXIS2_CALL saml_action_init(saml_action_t *action, axutil_env_t *env)
+AXIS2_EXTERN saml_action_t * AXIS2_CALL saml_action_create(axutil_env_t *env)
{
- action->data = NULL;
- action->name_space = NULL;
- return AXIS2_SUCCESS;
+ saml_action_t *action = AXIS2_MALLOC(env->allocator, sizeof(saml_action_t));
+ if (action)
+ {
+ action->data = NULL;
+ action->name_space = NULL;
+ }
+ return action;
}
-AXIS2_EXTERN int AXIS2_CALL saml_action_uninit(saml_action_t *action, axutil_env_t *env)
+AXIS2_EXTERN void AXIS2_CALL saml_action_free(saml_action_t *action, axutil_env_t *env)
{
if (action->data)
{
@@ -35,7 +39,7 @@
{
AXIS2_FREE(env->allocator, action->name_space);
}
- return AXIS2_SUCCESS;
+ AXIS2_FREE(env->allocator, action);
}
AXIS2_EXTERN int AXIS2_CALL saml_action_build(saml_action_t *action, axiom_node_t *node, axutil_env_t *env)
@@ -233,7 +237,7 @@
action = axutil_array_list_get(auth_des_stmt->action, env, i);
if (action)
{
- saml_action_uninit(action, env);
+ saml_action_free(action, env);
}
}
axutil_array_list_free(auth_des_stmt->action, env);
@@ -250,6 +254,7 @@
axiom_element_t *fce = NULL;
axiom_node_t *fcn = NULL;
axiom_child_element_iterator_t *ci = NULL;
+ saml_action_t *action = NULL;
if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT || (element = (axiom_element_t *)axiom_node_get_data_element(node, env)) == NULL)
{
return AXIS2_FAILURE;
@@ -287,7 +292,9 @@
}
else if (strcmp(axiom_element_get_localname(fce, env), SAML_ACTION) == 0)
{
- axutil_array_list_add(auth_des_stmt->action, env, axiom_element_get_text(fce, env, fcn));
+ action = saml_action_create(env);
+ saml_action_build(action, fcn, env);
+ axutil_array_list_add(auth_des_stmt->action, env, action);
}
else if (strcmp(axiom_element_get_localname(fce, env), SAML_EVIDENCE) == 0)
{
@@ -350,4 +357,92 @@
}
}
return NULL;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_desicion_stmt_get_resource(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env)
+{
+ return auth_des_stmt->resource;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_desicion_stmt_get_desicion(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env)
+{
+ return auth_des_stmt->decision;
+}
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL saml_auth_desicion_stmt_get_actions(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env)
+{
+ return auth_des_stmt->action;
+}
+
+AXIS2_EXTERN saml_evidence_t * AXIS2_CALL saml_auth_desicion_stmt_get_evidence(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env)
+{
+ return auth_des_stmt->evidence;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_set_resource(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env, axis2_char_t *resource)
+{
+ if (auth_des_stmt->resource)
+ {
+ AXIS2_FREE(env->allocator, auth_des_stmt->resource);
+ }
+ auth_des_stmt->resource = resource;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_set_desicion(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env, axis2_char_t *desicion)
+{
+ if (auth_des_stmt->decision)
+ {
+ AXIS2_FREE(env->allocator, auth_des_stmt->decision);
+ }
+ auth_des_stmt->decision = desicion;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_set_actions(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t * env, axutil_array_list_t *list)
+{
+ int i = 0, size = 0;
+ saml_action_t *action = NULL;
+ if (auth_des_stmt->action)
+ {
+ size = axutil_array_list_size(auth_des_stmt->action, env);
+ for (i = 0; i <size; i++)
+ {
+ action = axutil_array_list_get(auth_des_stmt->action, env, i);
+ if (action)
+ {
+ AXIS2_FREE(env->allocator, action);
+ }
+ }
+ }
+ auth_des_stmt->action = list;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_remove_action(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t * env, int index)
+{
+ saml_action_t *action = NULL;
+ if (auth_des_stmt->action && axutil_array_list_size(auth_des_stmt->action, env) > index)
+ {
+ action = axutil_array_list_remove(auth_des_stmt->action, env, index);
+ if (action)
+ {
+ AXIS2_FREE(env->allocator, action);
+ }
+ return AXIS2_SUCCESS;
+ }
+ else
+ {
+ return AXIS2_FAILURE;
+ }
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_add_action(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t * env, saml_action_t *action)
+{
+ if (!auth_des_stmt->action)
+ {
+ auth_des_stmt->action = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+ }
+ axutil_array_list_add(auth_des_stmt->action, env, action);
+ return AXIS2_SUCCESS;
}
Modified: webservices/rampart/scratch/c/saml/src/auth_smt.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/auth_smt.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/auth_smt.c (original)
+++ webservices/rampart/scratch/c/saml/src/auth_smt.c Sun Oct 14 03:44:13 2007
@@ -181,6 +181,127 @@
return n;
}
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_subject_stmt_get_auth_method(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+ return auth_stmt->auth_method;
+}
+
+AXIS2_EXTERN axutil_date_time_t * AXIS2_CALL saml_subject_stmt_get_auth_instant(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+ return auth_stmt->auth_instanse;
+}
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL saml_subject_stmt_get_auth_bindings(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+ return auth_stmt->auth_binding;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_subject_stmt_get_subject_ip(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+ if (auth_stmt->sub_locality)
+ {
+ return auth_stmt->sub_locality->ip;
+ }
+ return NULL;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_subject_stmt_get_subject_dns(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+ if (auth_stmt->sub_locality)
+ {
+ return auth_stmt->sub_locality->dns;
+ }
+ return NULL;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_auth_method(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axis2_char_t *method)
+{
+ if (auth_stmt->auth_method)
+ {
+ AXIS2_FREE(env->allocator, auth_stmt->auth_method);
+ }
+ auth_stmt->auth_method = method;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_auth_instant(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axutil_date_time_t *dt)
+{
+ if (auth_stmt->auth_instanse)
+ {
+ axutil_date_time_free(auth_stmt->auth_instanse, env);
+ }
+ auth_stmt->auth_instanse = dt;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_auth_bindings(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axutil_array_list_t *list)
+{
+ int i = 0, size = 0;
+ saml_auth_binding_t *bind = NULL;
+ if (auth_stmt->auth_binding)
+ {
+ size = axutil_array_list_size(auth_stmt->auth_binding, env);
+ for (i = 0; i <size; i++)
+ {
+ bind = axutil_array_list_get(auth_stmt->auth_binding, env, i);
+ if (bind)
+ {
+ saml_auth_binding_free(bind, env);
+ }
+ }
+ }
+ auth_stmt->auth_binding = list;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_add_auth_binding(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, saml_auth_binding_t *bind)
+{
+ if (!auth_stmt->auth_binding)
+ {
+ auth_stmt->auth_binding = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+ }
+ axutil_array_list_add(auth_stmt->auth_binding, env, bind);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_remove_auth_binding(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, int index)
+{
+ saml_auth_binding_t *bind = NULL;
+ if (auth_stmt->auth_binding && axutil_array_list_size(auth_stmt->auth_binding, env) > index)
+ {
+ bind = axutil_array_list_remove(auth_stmt->auth_binding, env, index);
+ if (bind)
+ {
+ saml_auth_binding_free(bind, env);
+ }
+ return AXIS2_SUCCESS;
+ }
+ else
+ {
+ return AXIS2_FAILURE;
+ }
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_subject_ip(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axis2_char_t *ip)
+{
+ if (auth_stmt->sub_locality && auth_stmt->sub_locality->ip)
+ {
+ AXIS2_FREE(env->allocator, auth_stmt->sub_locality->ip);
+ }
+ auth_stmt->sub_locality->ip = ip;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_subject_dns(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axis2_char_t *dns)
+{
+ if (auth_stmt->sub_locality && auth_stmt->sub_locality->dns)
+ {
+ AXIS2_FREE(env->allocator, auth_stmt->sub_locality->dns);
+ }
+ auth_stmt->sub_locality->dns = dns;
+ return AXIS2_SUCCESS;
+}
+
AXIS2_EXTERN saml_subject_locality_t * AXIS2_CALL saml_subject_locality_create(axutil_env_t *env)
{
@@ -203,8 +324,7 @@
if (sub_locality->ip)
{
AXIS2_FREE(env->allocator, sub_locality->ip);
- }
-
+ }
AXIS2_FREE(env->allocator, sub_locality);
}
@@ -266,11 +386,6 @@
attr = axiom_attribute_create(env, SAML_IP_ADDRESS, sub_locality->ip, NULL);
axiom_element_add_attribute(e, env, attr, n);
}
- else
- {
- axiom_element_free(e, env);
- return NULL;
- }
}
return n;
}
@@ -350,4 +465,49 @@
}
}
return n;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_binding_get_authoity_kind(saml_auth_binding_t *auth_binding, axutil_env_t *env)
+{
+ return auth_binding->auth_kind;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_binding_get_binding(saml_auth_binding_t *auth_binding, axutil_env_t *env)
+{
+ return auth_binding->binding;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_binding_get_location(saml_auth_binding_t *auth_binding, axutil_env_t *env)
+{
+ return auth_binding->location;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_binding_set_authority_kind(saml_auth_binding_t *auth_binding, axutil_env_t *env, axis2_char_t *auth_kind)
+{
+ if (auth_binding->auth_kind)
+ {
+ AXIS2_FREE(env->allocator, auth_binding->auth_kind);
+ }
+ auth_binding->auth_kind = auth_kind;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_binding_set_binding(saml_auth_binding_t *auth_binding, axutil_env_t *env, axis2_char_t *binding)
+{
+ if (auth_binding->binding)
+ {
+ AXIS2_FREE(env->allocator, auth_binding->binding);
+ }
+ auth_binding->binding = binding;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_binding_set_location(saml_auth_binding_t *auth_binding, axutil_env_t *env, axis2_char_t *location)
+{
+ if (auth_binding->location)
+ {
+ AXIS2_FREE(env->allocator, auth_binding->location);
+ }
+ auth_binding->location = location;
+ return AXIS2_SUCCESS;
}
Modified: webservices/rampart/scratch/c/saml/src/condition.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/condition.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/condition.c (original)
+++ webservices/rampart/scratch/c/saml/src/condition.c Sun Oct 14 03:44:13 2007
@@ -52,7 +52,7 @@
}
-AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_build(saml_audi_restriction_cond_t *arc, axiom_node_t *node, axutil_env_t *env)
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_build(saml_audi_restriction_cond_t *arc, axiom_node_t *node, axutil_env_t *env)
{
axiom_element_t *element = NULL;
axiom_child_element_iterator_t *ci = NULL;
@@ -104,6 +104,59 @@
return n;
}
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL saml_audi_restriction_cond_get_audiences(saml_audi_restriction_cond_t *cond, axutil_env_t * env)
+{
+ return cond->audiences;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_set_audiences(saml_audi_restriction_cond_t *cond, axutil_env_t * env, axutil_array_list_t *list)
+{
+ int i = 0, size = 0;
+ char *val = NULL;
+ if (cond->audiences)
+ {
+ size = axutil_array_list_size(cond->audiences, env);
+ for (i = 0; i <size; i++)
+ {
+ val = axutil_array_list_get(cond->audiences, env, i);
+ if (val)
+ {
+ AXIS2_FREE(env->allocator, val);
+ }
+ }
+ }
+ cond->audiences = list;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_remove_audiences(saml_audi_restriction_cond_t *cond, axutil_env_t * env, int index)
+{
+ axis2_char_t *val = NULL;
+ if (cond->audiences && axutil_array_list_size(cond->audiences, env) > index)
+ {
+ val = axutil_array_list_remove(cond->audiences, env, index);
+ if (cond)
+ {
+ AXIS2_FREE(env->allocator, val);
+ }
+ return AXIS2_SUCCESS;
+ }
+ else
+ {
+ return AXIS2_FAILURE;
+ }
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_add_audience(saml_audi_restriction_cond_t *cond, axutil_env_t * env, axis2_char_t *audience)
+{
+ if (!cond->audiences)
+ {
+ cond->audiences = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+ }
+ axutil_array_list_add(cond->audiences, env, audience);
+ return AXIS2_SUCCESS;
+}
+
AXIS2_EXTERN saml_condition_t * AXIS2_CALL saml_condition_create(axutil_env_t *env)
{
saml_condition_t *cond = AXIS2_MALLOC(env->allocator, sizeof(saml_condition_t));
@@ -124,24 +177,20 @@
AXIS2_FREE(env->allocator, cond);
}
-AXIS2_EXTERN int AXIS2_CALL saml_condition_get_type(saml_condition_t *cond, axiom_node_t *node, axutil_env_t *env)
-{
- return cond->type;
-}
-
AXIS2_EXTERN int AXIS2_CALL saml_condition_build(saml_condition_t *cond, axiom_node_t *node, axutil_env_t *env)
{
- axiom_element_t *element = NULL;
- axiom_child_element_iterator_t *ci = NULL;
- axis2_char_t *type_val = NULL;
- axutil_qname_t *type = NULL;
+ axiom_element_t *element = NULL;
+ axis2_char_t *locname = NULL;
if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT || (element = (axiom_element_t *)axiom_node_get_data_element(node, env)) == NULL)
{
return AXIS2_FAILURE;
}
- type = axutil_qname_create(env, SAML_XML_TYPE, SAML_XSI_NS, SAML_XSI);
- type_val = axiom_element_get_attribute_value(element, env, type);
- return AXIS2_SUCCESS;
+ locname = axiom_element_get_localname(element, env);
+ if (axutil_strcmp(locname, SAML_AUDIENCE_RESTRICTION_CONDITION))
+ {
+ return saml_audi_restriction_cond_build(cond->cond, node, env);
+ }
+ return AXIS2_FAILURE;
}
AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_condition_to_om(saml_condition_t *cond, axiom_node_t *parent, axutil_env_t * env)
@@ -151,4 +200,31 @@
return saml_audi_restriction_cond_to_om(cond->cond, parent, env);
}
return NULL;
+}
+
+AXIS2_EXTERN saml_cond_type_t AXIS2_CALL saml_condition_get_type(saml_condition_t *cond, axutil_env_t *env)
+{
+ return cond->type;
+}
+
+AXIS2_EXTERN void * AXIS2_CALL saml_condition_get_condition(saml_condition_t *cond, axutil_env_t *env)
+{
+ return cond->cond;
+}
+
+AXIS2_EXTERN int saml_condition_set_type(saml_condition_t *cond, axutil_env_t *env, saml_cond_type_t type)
+{
+ cond->type = type;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int saml_condition_set_condition(saml_condition_t *cond, axutil_env_t *env, void * condition, saml_cond_type_t type)
+{
+ if (cond->type == SAML_COND_AUDI_RESTRICTION)
+ {
+ saml_audi_restriction_cond_free(cond->cond, env);
+ }
+ cond->type = type;
+ cond->cond = condition;
+ return AXIS2_SUCCESS;
}
Modified: webservices/rampart/scratch/c/saml/src/saml_request.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/saml_request.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/saml_request.c (original)
+++ webservices/rampart/scratch/c/saml/src/saml_request.c Sun Oct 14 03:44:13 2007
@@ -31,8 +31,8 @@
AXIS2_EXTERN int AXIS2_CALL saml_subject_query_init(saml_subject_query_t *subject_query, axutil_env_t *env)
{
- subject_query->subject = NULL:
- return AXIS2_SUCESS;
+ subject_query->subject = NULL;
+ return AXIS2_SUCCESS;
}
@@ -68,7 +68,7 @@
sizeof(saml_subject_t));
saml_subject_init(attribute_query->subject, env);
- attribute_query->attr_desigs = axutil_array_list_create(env, ARRAY_DEF);
+ attribute_query->attr_desigs = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
}
return attribute_query;
@@ -94,12 +94,9 @@
saml_subject_init(autho_decision_query->subject, env);
autho_decision_query->resource = NULL;
- autho_decision_query->saml_actions = axutil_array_list_create(env, ARRAY_DEF);
-
- autho_decision_query->evidence = (saml_evidence_t*)AXIS2_MALLOC(env->allocator,
- sizeof(saml_evidence_t));
+ autho_decision_query->saml_actions = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
- saml_evidence_init(autho_decision_query->evidence, env);
+ autho_decision_query->evidence = saml_evidence_create(env);
}
return autho_decision_query;
@@ -148,7 +145,7 @@
if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
SAML_SUBJECT)))
{
- return saml_subject_build(subject_query->subject, element, env);
+ return saml_subject_build(subject_query->subject, child_node, env);
}
}
}
@@ -157,6 +154,27 @@
}
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_subject_query_to_om(saml_subject_query_t *subject_query,
+ axiom_node_t *parent,
+ axutil_env_t *env)
+{
+
+ axiom_element_t *e = NULL;
+ axiom_node_t *n = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_attribute_t *attr = NULL;
+ saml_assertion_t *assertion = NULL;
+
+ ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+ e = axiom_element_create(env, parent, SAML_SUBJECT_QUERY, ns, &n);
+
+ if(e)
+ {
+ saml_subject_to_om(subject_query->subject, n, env);
+ }
+ return n;
+}
+
AXIS2_EXTERN int AXIS2_CALL saml_authentication_query_build(saml_authentication_query_t* authentication_query,
axiom_node_t *node,
axutil_env_t *env)
@@ -210,7 +228,7 @@
if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
SAML_SUBJECT)))
{
- saml_subject_build(authentication_query->subject, element, env);
+ saml_subject_build(authentication_query->subject, child_node, env);
}
}
@@ -221,6 +239,33 @@
}
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_authentication_query_to_om(saml_authentication_query_t *authentication_query,
+ axiom_node_t *parent,
+ axutil_env_t *env)
+{
+ int size = 0, i = 0;
+ axiom_element_t *e = NULL, *ce = NULL;
+ axiom_node_t *n = NULL, *cn = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_attribute_t *attr = NULL;
+
+ ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+ e = axiom_element_create(env, parent, SAML_AUTHENTICATION_QUERY, ns, &n);
+
+ if(e)
+ {
+ saml_subject_to_om(authentication_query->subject, n, env);
+
+ if(authentication_query->auth_method)
+ {
+ attr = axiom_attribute_create(env, SAML_AUTHENTICATION_METHOD, authentication_query->auth_method, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+ }
+ }
+ return n;
+
+}
+
AXIS2_EXTERN int AXIS2_CALL saml_autho_decision_query_build(saml_autho_decision_query_t* autho_decision_query,
axiom_node_t *node,
axutil_env_t *env)
@@ -274,7 +319,7 @@
if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
SAML_SUBJECT)))
{
- saml_subject_build(autho_decision_query->subject, element, env);
+ saml_subject_build(autho_decision_query->subject, child_node, env);
}
else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
@@ -282,13 +327,13 @@
{
action = (saml_action_t*)AXIS2_MALLOC(env->allocator, sizeof(saml_action_t));
saml_action_init(action, env);
- saml_action_build(action, element, env);
+ saml_action_build(action, child_node, env);
axutil_array_list_add(autho_decision_query->saml_actions, env, action);
}
else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
SAML_EVIDENCE)))
{
- saml_evidence_build(autho_decision_query->evidence, element, env);
+ saml_evidence_build(autho_decision_query->evidence, child_node, env);
}
}
}
@@ -300,6 +345,50 @@
}
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_autho_decision_query_to_om(saml_autho_decision_query_t *autho_decision_query,
+ axiom_node_t *parent,
+ axutil_env_t *env)
+{
+ int size = 0, i = 0;
+ axiom_element_t *e = NULL, *ce = NULL;
+ axiom_node_t *n = NULL, *cn = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_attribute_t *attr = NULL;
+ saml_action_t *action;
+
+ ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+ e = axiom_element_create(env, parent, SAML_AUTHORIZATION_DECISION_QUERY, ns, &n);
+
+ if(e)
+ {
+ saml_subject_to_om(autho_decision_query->subject, n, env);
+
+ if(autho_decision_query->resource)
+ {
+ attr = axiom_attribute_create(env, SAML_RESOURCE, autho_decision_query->resource, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+ }
+ if(autho_decision_query->saml_actions)
+ {
+ size = axutil_array_list_size(autho_decision_query->saml_actions, env);
+
+ for( i ; i < size ; i++)
+ {
+ action = (saml_action_t*)axutil_array_list_get(autho_decision_query->saml_actions, env, i);
+ saml_action_to_om(action, n, env);
+ }
+ }
+ if(autho_decision_query->evidence)
+ {
+ saml_evidence_to_om(autho_decision_query->evidence, n, env);
+ }
+ }
+ return n;
+
+
+
+}
+
AXIS2_EXTERN int AXIS2_CALL saml_attr_query_build(saml_attr_query_t* attribute_query,
axiom_node_t *node,
axutil_env_t *env)
@@ -310,7 +399,7 @@
axiom_child_element_iterator_t *iterator = NULL;
axiom_node_t *child_node;
axutil_qname_t *qname;
-
+ saml_attr_desig_t *attr_desig = NULL;
if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT)
{
return AXIS2_FAILURE;
@@ -354,7 +443,7 @@
if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
SAML_SUBJECT)))
{
- saml_subject_build(attribute_query->subject, element, env);
+ saml_subject_build(attribute_query->subject, child_node, env);
}
else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
@@ -363,7 +452,7 @@
saml_attr_desig_t *attr_desig = (saml_attr_desig_t*)AXIS2_MALLOC(env->allocator,
sizeof(saml_attr_desig_t));
saml_attr_desig_init(attr_desig, env);
- if( AXIS2_SUCCESS == saml_attr_desig_build(attr_desig, element, env))
+ if( AXIS2_SUCCESS == saml_attr_desig_build(attr_desig, child_node, env))
{
axutil_array_list_add(attribute_query->attr_desigs,env, attr_desig);
}
@@ -377,12 +466,155 @@
}
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_attr_query_to_om(saml_attr_query_t *attribute_query,
+ axiom_node_t *parent,
+ axutil_env_t *env)
+{
+ int size = 0, i = 0;
+ axiom_element_t *e = NULL, *ce = NULL;
+ axiom_node_t *n = NULL, *cn = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_attribute_t *attr = NULL;
+ saml_attr_desig_t *attr_desig = NULL;
+
+ ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+ e = axiom_element_create(env, parent, SAML_ATTRIBUTE_QUERY, ns, &n);
+
+ if(e)
+ {
+ saml_subject_to_om(attribute_query->subject, n, env);
+
+ if(attribute_query->resource)
+ {
+ attr = axiom_attribute_create(env, SAML_RESOURCE, attribute_query->resource, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+ }
+ if(attribute_query->attr_desigs)
+ {
+ size = axutil_array_list_size(attribute_query->attr_desigs, env);
+
+ for( i ; i < size ; i++)
+ {
+ attr_desig = (saml_attr_desig_t*)axutil_array_list_get(attribute_query->attr_desigs, env, i);
+ saml_attr_desig_to_om(attr_desig, n, env);
+ }
+ }
+ }
+ return n;
+
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_query_init(saml_query_t *query, axutil_env_t *env)
+{
+ if(query)
+ {
+ query->query = NULL;
+ query->type = NULL;
+ return AXIS2_SUCCESS;
+ }
+ return AXIS2_FAILURE;
+
+}
+AXIS2_EXTERN int AXIS2_CALL saml_query_uninit(saml_query_t *query, axutil_env_t *env)
+{
+ if(query->query)
+ {
+ AXIS2_FREE(env->allocator, query->query);
+ }
+ if(query->type)
+ {
+ AXIS2_FREE(env->allocator, query->type);
+ }
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_query_build(saml_query_t *query, axiom_node_t *node, axutil_env_t *env)
+{
+ if(!axutil_strcmp(query->type,SAML_SUBJECT_QUERY))
+ {
+ query->query = saml_subject_query_create(env);
+ if(query->query)
+ {
+ saml_subject_query_build((saml_subject_query_t*)query->query, node, env);
+ return AXIS2_SUCCESS;
+ }
+ else
+ return AXIS2_FAILURE;
+ }
+ if(!axutil_strcmp(query->type, SAML_AUTHENTICATION_QUERY))
+ {
+ query->query = saml_authentication_query_create(env);
+ if(query->query)
+ {
+ saml_authentication_query_build((saml_authentication_query_t*)query->query, node, env);
+ return AXIS2_SUCCESS;
+ }
+ else
+ return AXIS2_FAILURE;
+ }
+ if(!axutil_strcmp(query->type, SAML_ATTRIBUTE_QUERY))
+ {
+ query->query = saml_attr_query_create(env);
+ if(query->query)
+ {
+ saml_attr_query_build((saml_attr_query_t*)query->query, node, env);
+ return AXIS2_SUCCESS;
+ }
+ else
+ return AXIS2_FAILURE;
+ }
+ if(!axutil_strcmp(query->type, SAML_AUTHORIZATION_DECISION_QUERY))
+ {
+ query->query = saml_autho_decision_query_create(env);
+ if(query->query)
+ {
+ saml_autho_decision_query_build((saml_autho_decision_query_t*)query->query, node, env);
+ return AXIS2_SUCCESS;
+ }
+ else
+ return AXIS2_FAILURE;
+ }
+}
+
+AXIS2_EXTERN saml_query_t* AXIS2_CALL saml_query_create(axutil_env_t *env)
+{
+ saml_query_t* query = NULL;
+ AXIS2_MALLOC(env->allocator, sizeof(saml_query_t));
+ return query;
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_query_to_om(saml_query_t *query, axiom_node_t *parent, axutil_env_t *env)
+{
+ axiom_node_t *node;
+
+ if(!axutil_strcmp(query->type,SAML_SUBJECT_QUERY))
+ {
+ node = saml_subject_query_to_om((saml_subject_query_t*)query->query, parent, env);
+ return node;
+ }
+ if(!axutil_strcmp(query->type, SAML_AUTHENTICATION_QUERY))
+ {
+ node = saml_authentication_query_to_om((saml_authentication_query_t*)query->query, parent, env);
+ return node;
+
+ }
+ if(!axutil_strcmp(query->type, SAML_ATTRIBUTE_QUERY))
+ {
+ node = saml_attr_query_to_om((saml_attr_query_t*)query->query, parent, env);
+ return node;
+
+ }
+ if(!axutil_strcmp(query->type, SAML_AUTHORIZATION_DECISION_QUERY))
+ {
+ node = saml_autho_decision_query_to_om((saml_autho_decision_query_t*)query->query, parent, env);
+ return node;
+ }
+
+}
+
AXIS2_EXTERN int AXIS2_CALL saml_request_init(saml_request_t *request, axutil_env_t *env)
{
- request->attribute_query = NULL;
- request->authentication_query = NULL;
- request->autho_decision_query = NULL;
- request->subject_query = NULL;
+ request->query = NULL;
request->issue_instant = NULL;
request->major_version = NULL;
request->minor_version = NULL;
@@ -396,23 +628,9 @@
AXIS2_EXTERN int AXIS2_CALL saml_request_uninit(saml_request_t *request, axutil_env_t *env)
{
- if(request->attribute_query)
- {
- AXIS2_FREE(env->allocator, request->attribute_query);
- }
- if(request->authentication_query)
- {
- AXIS2_FREE(env->allocator, request->authentication_query);
-
- }
- if(request->autho_decision_query)
- {
- AXIS2_FREE(env->allocator, request->autho_decision_query);
-
- }
- if(request->subject_query)
+ if(request->query)
{
- AXIS2_FREE(env->allocator, request->subject_query);
+ AXIS2_FREE(env->allocator, request->query);
}
if(request->issue_instant)
{
@@ -438,7 +656,7 @@
{
axutil_array_list_free(request->saml_asserion_id_ref, env);
}
-
+ return AXIS2_SUCCESS;
}
AXIS2_EXTERN int AXIS2_CALL saml_request_build(saml_request_t *request,
@@ -451,6 +669,7 @@
axiom_child_element_iterator_t *iterator = NULL;
axiom_node_t *child_node;
axutil_qname_t *qname;
+ axis2_char_t *element_local_name = NULL;
if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT)
{
return AXIS2_FAILURE;
@@ -500,10 +719,7 @@
}
}
-
-
// Request elements
-
iterator = axiom_element_get_child_elements(element, env, node);
if(iterator)
@@ -513,9 +729,8 @@
child_node = axiom_child_element_iterator_next(iterator, env);
element = (axiom_element_t *)axiom_node_get_data_element(child_node, env);
-
- if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
- SAML_RESPOND_WITH)))
+ element_local_name = axiom_element_get_localname(element, env);
+ if(element != NULL && !(axutil_strcmp(element_local_name, SAML_RESPOND_WITH)))
{
axutil_array_list_add(request->saml_responds,
@@ -523,38 +738,55 @@
axiom_element_get_qname(element, env, child_node));
}
- else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
- SAML_SIGNATURE)))
+ else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_SIGNATURE)))
{
//To do
}
- else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
- SAML_SUBJECT_QUERY)))
+ else if(element != NULL && !(axutil_strcmp(element_local_name, SAML_SUBJECT_QUERY)))
{
- request->subject_query = saml_subject_query_create(env);
- saml_subject_query_build(request->subject_query, child_node, env);
+ request->query = saml_query_create(env);
+ if(request->query)
+ {
+ request->query->type = element_local_name;
+ saml_query_build(request->query, child_node, env);
+
+ }
}
- else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
- SAML_AUTHENTICATION_QUERY)))
+ else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_AUTHENTICATION_QUERY)))
{
- request->authentication_query = saml_authentication_query_create(env);
- saml_authentication_query_build(request->authentication_query, child_node, env);
+ request->query = saml_query_create(env);
+ if(request->query)
+ {
+ request->query->type = element_local_name;
+ saml_query_build(request->query, child_node, env);
+ }
}
- else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
- SAML_AUTHORIZATION_DECISION_QUERY)))
+ else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_AUTHORIZATION_DECISION_QUERY)))
{
- request->autho_decision_query = saml_autho_decision_query_create(env);
- saml_autho_decision_query_build(request->autho_decision_query, child_node, env);
+ request->query = saml_query_create(env);
+ if(request->query)
+ {
+ request->query->type = element_local_name;
+ saml_query_build(request->query, child_node, env);
+ }
}
- else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
- SAML_ASSERTION_ID_REF)))
+ else if(element != NULL && !(axutil_strcmp(element_local_name, SAML_ATTRIBUTE_QUERY)))
{
- //To do
+ request->query = saml_query_create(env);
+ if(request->query)
+ {
+ request->query->type = element_local_name;
+ saml_query_build(request->query, child_node, env);
+ }
}
- else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
- SAML_ASSERTION_ARTIFACT)))
+ else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_ASSERTION_ID_REFERENCE)))
+ {
+ axutil_array_list_add(request->saml_asserion_id_ref,
+ env,
+ axiom_element_get_text(element, env, child_node));
+ }
+ else if(element != NULL && !(axutil_strcmp(element_local_name, SAML_ASSERTION_ARTIFACT)))
{
- //To do
axutil_array_list_add(request->saml_artifacts,
env,
axiom_element_get_text(element, env, child_node));
@@ -565,6 +797,103 @@
return AXIS2_SUCCESS;
+
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_request_to_om(saml_request_t *request,
+ axiom_node_t *parent,
+ axutil_env_t *env)
+{
+ int size = 0, i = 0;
+ axiom_element_t *e = NULL, *ce = NULL;
+ axiom_node_t *n = NULL, *cn = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_attribute_t *attr = NULL;
+ saml_assertion_t *assertion = NULL;
+ axutil_qname_t *qname;
+ axis2_char_t *artifact;
+
+ ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+ e = axiom_element_create(env, parent, SAML_REQUEST, ns, &n);
+
+ if(e)
+ {
+ if(request->request_id.id && request->major_version && request->minor_version && request->issue_instant)
+ {
+ attr = axiom_attribute_create(env, SAML_REQUEST_ID, request->request_id.id, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+
+ attr = axiom_attribute_create(env, SAML_MAJORVERSION, request->major_version, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+
+ attr = axiom_attribute_create(env, SAML_MINORVERSION, request->major_version, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+
+ attr = axiom_attribute_create(env, SAML_ISSUE_INSTANT, axutil_date_time_serialize_date_time(request->issue_instant, env), NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+ }
+ else
+ {
+ axiom_element_free(e, env);
+ return NULL;
+ }
+
+ if(request->saml_responds)
+ {
+ size = axutil_array_list_size(request->saml_responds, env);
+
+ for (i = 0 ; i < size ; i++)
+ {
+ qname = (axutil_qname_t*) axutil_array_list_get(request->saml_responds, env, i);
+ /////////
+ ce = axiom_element_create(env, n, SAML_RESPOND_WITH, NULL, &cn);
+ if(ce)
+ {
+ axiom_element_set_text(ce, env, axutil_qname_to_string(qname, env), cn);
+ }
+ }
+ }
+ if(request->signature)
+ {
+ //To do
+ }
+ if(request->query)
+ {
+ saml_query_to_om(request->query, n, env);
+ }
+ if(request->saml_artifacts)
+ {
+ size = axutil_array_list_size(request->saml_artifacts, env);
+
+ for(i = 0; i < size ; i++)
+ {
+ artifact = (axis2_char_t*) axutil_array_list_get(request->saml_artifacts, env, i);
+
+ ce = axiom_element_create(env, n, SAML_ASSERTION_ARTIFACT, NULL, &cn);
+ if(ce)
+ {
+ axiom_element_set_text(ce, env, artifact, cn);
+ }
+ }
+ }
+ if(request->saml_asserion_id_ref)
+ {
+ size = axutil_array_list_size(request->saml_asserion_id_ref, env);
+
+ for(i = 0; i < size ; i++)
+ {
+ artifact = (axis2_char_t*) axutil_array_list_get(request->saml_asserion_id_ref, env, i);
+
+ ce = axiom_element_create(env, n, SAML_ASSERTION_ID_REFERENCE, NULL, &cn);
+ if(ce)
+ {
+ axiom_element_set_text(ce, env, artifact, cn);
+ }
+ }
+ }
+
+ }
+ return n;
}
Modified: webservices/rampart/scratch/c/saml/src/saml_responce.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/saml_responce.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/saml_responce.c (original)
+++ webservices/rampart/scratch/c/saml/src/saml_responce.c Sun Oct 14 03:44:13 2007
@@ -65,8 +65,7 @@
else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
SAML_STATUS_DETAIL)))
{
- /////
- status->status_detail = axiom_element_get_text(element, env, child_node);
+ axutil_array_list_add(status->status_detail, env, axiom_element_get_text(element, env, child_node));
}
}
}
@@ -74,9 +73,59 @@
}
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_status_to_om(saml_status_t *status,
+ axiom_node_t *parent,
+ axutil_env_t *env)
+{ int size = 0, i = 0;
+ axiom_element_t *e = NULL, *ce = NULL;
+ axiom_node_t *n = NULL, *cn = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_attribute_t *attr = NULL;
+ saml_assertion_t *assertion = NULL;
+ axutil_qname_t *qname;
+ axis2_char_t *artifact;
+ ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+ e = axiom_element_create(env, parent, SAML_STATUS, ns, &n);
+
+ if(e)
+ {
+ if(status->status_detail)
+ {
+ size = axutil_array_list_size(status->status_detail, env);
+ for(i = 0 ; i < size ; i++)
+ {
+ ce = axiom_element_create(env, n, SAML_STATUS_DETAIL, ns, &cn);
+ if(ce)
+ {
+ axiom_element_set_text(ce, env, (axis2_char_t*)axutil_array_list_get(status->status_detail, env, i), cn);
+ }
+ }
+ }
+ if(status->status_msg)
+ {
+ ce = axiom_element_create(env, n, SAML_STATUS_MESSAGE, ns, &cn);
+ if(ce)
+ {
+ axiom_element_set_text(ce, env, status->status_msg, cn);
+ }
+ }
+ if(status->status_code)
+ {
+ ce = axiom_element_create(env, n, SAML_STATUS_CODE, ns, &cn);
+ if(ce)
+ {
+ axiom_element_set_text(ce, env, status->status_code, cn);
+ attr = axiom_attribute_create(env, SAML_STATUS_VALUE,axutil_qname_to_string(status->status_value, env), ns);
+ axiom_element_add_attribute(ce, env, attr, cn);
+ }
+ }
+ }
+ return n;
+
+}
-AXIS2_EXTERN int AXIS2_CALL saml_responce_build(saml_responce_t *responce,
+AXIS2_EXTERN int AXIS2_CALL saml_response_build(saml_response_t *response,
axiom_node_t *node,
axutil_env_t *env)
{
@@ -113,29 +162,29 @@
if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_RESPONCE_ID))
{
//to do
- responce->responce_id.id = attr_val;
+ response->response_id.id = attr_val;
}
if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_IN_RESPONSE_TO))
{
//to do
- responce->request_responce_id.id = attr_val;
+ response->request_response_id = attr_val;
}
else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_MAJORVERSION))
{
- responce->major_version = attr_val;
+ response->major_version = attr_val;
}
else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_MINORVERSION))
{
- responce->minor_version = attr_val;
+ response->minor_version = attr_val;
}
else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_ISSUE_INSTANT))
{
- responce->issue_instant = axutil_date_time_create(env);
- axutil_date_time_deserialize_date(responce->issue_instant, env, attr_val);
+ response->issue_instant = axutil_date_time_create(env);
+ axutil_date_time_deserialize_date(response->issue_instant, env, attr_val);
}
else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_RECEPIENT))
{
- responce->recepient = attr_val;
+ response->recepient = attr_val;
}
else
{
@@ -166,11 +215,11 @@
else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
SAML_STATUS)))
{
- responce->status = (saml_status_t*)AXIS2_MALLOC(env->allocator,
+ response->status = (saml_status_t*)AXIS2_MALLOC(env->allocator,
sizeof(saml_status_t));
- if(responce->status)
+ if(response->status)
{
- saml_status_build(responce->status, child_node, env);
+ saml_status_build(response->status, child_node, env);
}
}
else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env),
@@ -180,7 +229,7 @@
sizeof(saml_assertion_t));
saml_assertion_init(assertion, env);
saml_assertion_build(assertion, child_node, env);
- axutil_array_list_add(responce->saml_assertions, env, assertion);
+ axutil_array_list_add(response->saml_assertions, env, assertion);
}
}
@@ -191,4 +240,74 @@
-}
\ No newline at end of file
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_response_to_om(saml_response_t *response,
+ axiom_node_t *parent,
+ axutil_env_t *env)
+{
+ int size = 0, i = 0;
+ axiom_element_t *e = NULL, *ce = NULL;
+ axiom_node_t *n = NULL, *cn = NULL;
+ axiom_namespace_t *ns = NULL;
+ axiom_attribute_t *attr = NULL;
+ saml_assertion_t *assertion = NULL;
+ axutil_qname_t *qname;
+ axis2_char_t *artifact;
+
+ ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+ e = axiom_element_create(env, parent, SAML_RESPONSE, ns, &n);
+
+ if(e)
+ {
+ if(response->request_response_id && response->major_version && response->minor_version && response->issue_instant)
+ {
+ attr = axiom_attribute_create(env, SAML_RESPONCE_ID, response->request_response_id, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+
+ attr = axiom_attribute_create(env, SAML_MAJORVERSION, response->major_version, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+
+ attr = axiom_attribute_create(env, SAML_MINORVERSION, response->major_version, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+
+ attr = axiom_attribute_create(env, SAML_ISSUE_INSTANT, axutil_date_time_serialize_date_time(response->issue_instant, env), NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+
+ }
+ else
+ {
+ axiom_element_free(e, env);
+ return NULL;
+ }
+ if(response->request_response_id && response->recepient)
+ {
+ attr = axiom_attribute_create(env, SAML_IN_RESPONSE_TO, response->request_response_id, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+ attr = axiom_attribute_create(env, SAML_RECEPIENT, response->recepient, NULL);
+ axiom_element_add_attribute(e, env, attr, n);
+
+ }
+ if(response->saml_assertions)
+ {
+ size = axutil_array_list_size(response->saml_assertions, env);
+
+ for(i = 0 ; i < size ; i++)
+ {
+ saml_assertion_to_om((saml_assertion_t*)axutil_array_list_get(response->saml_assertions, env, i), n, env);
+
+ }
+ }
+ if(response->status)
+ {
+ saml_status_to_om(response->status, n, env);
+ }
+
+
+ }
+ return n;
+
+
+}
+
+
Modified: webservices/rampart/scratch/c/saml/src/stmt.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/stmt.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/stmt.c (original)
+++ webservices/rampart/scratch/c/saml/src/stmt.c Sun Oct 14 03:44:13 2007
@@ -50,14 +50,94 @@
saml_subject_stmt_free(stmt->stmt, env);
stmt->type = SAML_STMT_UNSPECIFED;
}
+ AXIS2_FREE(env->allocator, stmt);
}
AXIS2_EXTERN int AXIS2_CALL saml_stmt_build(saml_stmt_t *stmt, axiom_node_t *node, axutil_env_t *env)
{
+ axis2_char_t *locname = NULL;
+ axiom_element_t *element = NULL;
+ axiom_child_element_iterator_t *ci = NULL;
+ if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT || (element = (axiom_element_t *)axiom_node_get_data_element(node, env)) == NULL)
+ {
+ return AXIS2_FAILURE;
+ }
+ locname = axiom_element_get_localname(element, env);
+ if (strcmp(locname, SAML_AUTHENTICATION_STATEMENT))
+ {
+ return saml_auth_stmt_build(stmt->stmt, node, env);
+ }
+ else if (strcmp(locname, SAML_AUTHORIZATION_DECISION_STATEMENT))
+ {
+ return saml_auth_desicion_stmt_build(stmt->stmt, node,env);
+ }
+ else if (strcmp(locname, SAML_ATTRIBUTE_STATEMENT))
+ {
+ return saml_attr_stmt_build(stmt->stmt, node, env);
+ }
+ else if (strcmp(locname, SAML_SUBJECT_STATEMENT))
+ {
+ return saml_subject_stmt_build(stmt->stmt, node, env);
+ }
return AXIS2_SUCCESS;
}
-AXIS2_EXTERN int AXIS2_CALL saml_stmt_to_om(saml_stmt_t *stmt, axiom_node_t *parent, axutil_env_t *env)
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_stmt_to_om(saml_stmt_t *stmt, axiom_node_t *parent, axutil_env_t *env)
{
+ if (stmt->type == SAML_STMT_AUTHENTICATIONSTATEMENT)
+ {
+ return saml_auth_stmt_to_om(stmt->stmt, parent, env);
+ }
+ else if (stmt->type == SAML_STMT_AUTHORIZATIONDECISIONSTATEMENT)
+ {
+ return saml_auth_desicion_stmt_to_om(stmt->stmt, parent,env);
+ }
+ else if (stmt->type == SAML_STMT_ATTRIBUTESTATEMENT)
+ {
+ return saml_attr_stmt_to_om(stmt->stmt, parent, env);
+ }
+ else if (stmt->type == SAML_STMT_SUBJECTSTATEMENT)
+ {
+ saml_subject_stmt_to_om(stmt->stmt, parent, env);
+ }
+ return NULL;
+}
+
+AXIS2_EXTERN saml_stmt_type_t AXIS2_CALL saml_stmt_get_type(saml_stmt_t *stmt, axutil_env_t *env)
+{
+ return stmt->type;
+}
+
+AXIS2_EXTERN saml_stmt_t * AXIS2_CALL saml_stmt_get_stmt(saml_stmt_t *stmt, axutil_env_t *env)
+{
+ return stmt->stmt;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_stmt_set_type(saml_stmt_t *stmt, axutil_env_t *env, saml_stmt_type_t type)
+{
+ stmt->type = type;
return AXIS2_SUCCESS;
}
+
+AXIS2_EXTERN int AXIS2_CALL saml_stmt_set_stmt(saml_stmt_t *stmt, axutil_env_t *env, void *st, saml_stmt_type_t type)
+{
+ if (stmt->type == SAML_STMT_AUTHENTICATIONSTATEMENT)
+ {
+ saml_auth_stmt_free(stmt->stmt, env);
+ }
+ else if (stmt->type == SAML_STMT_AUTHORIZATIONDECISIONSTATEMENT)
+ {
+ saml_auth_desicion_stmt_free(stmt->stmt, env);
+ }
+ else if (stmt->type == SAML_STMT_ATTRIBUTESTATEMENT)
+ {
+ saml_attr_stmt_free(stmt->stmt, env);
+ }
+ else if (stmt->type == SAML_STMT_SUBJECTSTATEMENT)
+ {
+ saml_subject_stmt_free(stmt->stmt, env);
+ }
+ stmt->stmt = st;
+ stmt->type = type;
+ return AXIS2_SUCCESS;
+}
\ No newline at end of file
Modified: webservices/rampart/scratch/c/saml/src/subject.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/subject.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/subject.c (original)
+++ webservices/rampart/scratch/c/saml/src/subject.c Sun Oct 14 03:44:13 2007
@@ -88,6 +88,7 @@
return AXIS2_SUCCESS;
}
+
AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_named_id_to_om(saml_named_id_t *id, axiom_node_t *parent, axutil_env_t *env)
{
axiom_element_t *e = NULL;
@@ -117,8 +118,55 @@
return n;
}
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_named_id_get_name(saml_named_id_t *id, axutil_env_t *env)
+{
+ return id->name;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_named_id_get_format(saml_named_id_t *id, axutil_env_t *env)
+{
+ return id->format;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_named_id_get_name_qualifier(saml_named_id_t *id, axutil_env_t *env)
+{
+ return id->name_qualifier;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_named_id_set_name(saml_named_id_t *id, axutil_env_t *env, axis2_char_t *name)
+{
+ if (id->name)
+ {
+ AXIS2_FREE(env->allocator, id->name);
+ }
+ id->name = name;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_named_id_set_format(saml_named_id_t *id, axutil_env_t *env, axis2_char_t *format)
+{
+ if (id->format)
+ {
+ AXIS2_FREE(env->allocator, id->format);
+ }
+ id->format = format;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_named_id_set_name_qualifier(saml_named_id_t *id, axutil_env_t *env, axis2_char_t *qualifier)
+{
+ if (id->name_qualifier)
+ {
+ AXIS2_FREE(env->allocator, id->name_qualifier);
+ }
+ id->name_qualifier = qualifier;
+ return AXIS2_SUCCESS;
+}
+
+
AXIS2_EXTERN int AXIS2_CALL saml_subject_init(saml_subject_t *subject, axutil_env_t *env)
{
+ saml_named_id_init(&subject->named_id, env);
subject->confirmation_data = NULL;
subject->confirmation_methods = NULL;
subject->key_info = NULL;
@@ -266,6 +314,97 @@
return n;
}
+AXIS2_EXTERN saml_named_id_t * AXIS2_CALL saml_subject_get_named_id(saml_subject_t *subject, axutil_env_t *env)
+{
+ return &subject->named_id;
+}
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL saml_subject_get_confirmation_methods(saml_subject_t *subject, axutil_env_t *env)
+{
+ return subject->confirmation_methods;
+}
+
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_subject_get_confirmation_data(saml_subject_t *subject, axutil_env_t *env)
+{
+ return subject->confirmation_data;
+}
+
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_subject_get_key_info(saml_subject_t *subject, axutil_env_t *env)
+{
+ return subject->key_info;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_set_named_id(saml_subject_t *subject, axutil_env_t *env, saml_named_id_t *named_id)
+{
+ saml_named_id_uninit(&subject->named_id, env);
+ subject->named_id = *named_id;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_set_confirmation_methods(saml_subject_t *subject, axutil_env_t *env, axutil_array_list_t *list)
+{
+ int i = 0, size = 0;
+ axis2_char_t *val = NULL;
+ if (subject->confirmation_methods)
+ {
+ size = axutil_array_list_size(subject->confirmation_methods, env);
+ for (i = 0; i < size; i++)
+ {
+ val = axutil_array_list_get(subject->confirmation_methods, env, i);
+ if (val)
+ {
+ AXIS2_FREE(env->allocator, env);
+ }
+ }
+ axutil_array_list_free(subject->confirmation_methods, env);
+ subject->confirmation_methods = list;
+ }
+ else
+ {
+ subject->confirmation_methods = list;
+ }
+ return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_add_confirmation(saml_subject_t *subject, axutil_env_t *env, axis2_char_t *sub_confirmation)
+{
+ if (!subject->confirmation_methods)
+ {
+ subject->confirmation_methods = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF * 2);
+ }
+ axutil_array_list_add(subject->confirmation_methods, env, sub_confirmation);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_remove_subject_confiirmation(saml_subject_t *subject, axutil_env_t *env, int index)
+{
+ axis2_char_t *val = NULL;
+ if (subject->confirmation_methods && axutil_array_list_size(subject->confirmation_methods, env) > index)
+ {
+ val = axutil_array_list_remove(subject->confirmation_methods, env, index);
+ if (val)
+ {
+ AXIS2_FREE(env->allocator, val);
+ }
+ return AXIS2_SUCCESS;
+ }
+ else
+ {
+ return AXIS2_FAILURE;
+ }
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_set_key_info(saml_subject_t *subject, axutil_env_t *env, axiom_node_t *node)
+{
+ if (subject->key_info)
+ {
+ axiom_node_free_tree(subject->key_info, env);
+ }
+ subject->key_info = node;
+ return AXIS2_SUCCESS;
+}
+
AXIS2_EXTERN saml_subject_stmt_t * AXIS2_CALL saml_subject_stmt_create(axutil_env_t *env)
{
saml_subject_stmt_t *stmt = AXIS2_MALLOC(env->allocator, sizeof(saml_subject_stmt_t));
@@ -316,3 +455,15 @@
}
return n;
}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_subject(saml_subject_stmt_t *subject_stmt, axutil_env_t *env, saml_subject_t *subject)
+{
+ saml_subject_uninit(&subject_stmt->subject, env);
+ subject_stmt->subject = *subject;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN saml_subject_t * AXIS2_CALL saml_subject_stmt_get_subject(saml_subject_stmt_t *subject_stmt, axutil_env_t *env)
+{
+ return &subject_stmt->subject;
+}
\ No newline at end of file
Added: webservices/rampart/scratch/c/saml/test/test_main.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/test/test_main.c?rev=584526&view=auto
==============================================================================
--- webservices/rampart/scratch/c/saml/test/test_main.c (added)
+++ webservices/rampart/scratch/c/saml/test/test_main.c Sun Oct 14 03:44:13 2007
@@ -0,0 +1,6 @@
+
+int main()
+{
+
+ return 0;
+}
\ No newline at end of file