Author: milinda
Date: Wed May 21 01:08:48 2008
New Revision: 658586

URL: http://svn.apache.org/viewvc?rev=658586&view=rev
Log:
SAML2.0 implementation initial code added to the JIRA 
https://issues.apache.org/jira/browse/RAMPARTC-100.

Added:
    webservices/rampart/scratch/c/saml2/
    webservices/rampart/scratch/c/saml2/saml2_assertion.c

Added: webservices/rampart/scratch/c/saml2/saml2_assertion.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml2/saml2_assertion.c?rev=658586&view=auto
==============================================================================
--- webservices/rampart/scratch/c/saml2/saml2_assertion.c (added)
+++ webservices/rampart/scratch/c/saml2/saml2_assertion.c Wed May 21 01:08:48 
2008
@@ -0,0 +1,361 @@
+#include "saml2.h"
+
+typedef struct saml2_issuer_s
+{
+    axis2_char_t *format;               /* attribute */
+    axis2_char_t *name_qualifier;       /* attribute */
+    axis2_char_t *sp_name_qualifier;    /* attribute */
+    axis2_char_t *sp_provided_id;       /* attribute */
+    axis2_char_t *value;                /* Actual text value of the element */
+    axis2_bool_t is_encrypted;          /* if true create an EncryptedID */
+    oxs_ctx_t *enc_ctx;                 /* Used to encrypt the element */
+} saml2_issuer_t;
+
+typedef struct saml2_base_id_s
+{
+    axis2_char_t *format;               /* attribute */
+    axis2_char_t *name_qualifier;       /* attribute */
+    axis2_bool_t is_encrypted;          /* if true create an EncryptedID */
+    oxs_ctx_t *enc_ctx;                 /* Used to encrypt the element */
+} saml2_base_id_t;
+
+typedef struct saml2_name_id_s
+{
+    axis2_char_t *format;               /* attribute */
+    axis2_char_t *name_qualifier;       /* attribute */
+    axis2_char_t *sp_name_qualifier;    /* attribute */
+    axis2_char_t *sp_provided_id;       /* attribute */
+    axis2_bool_t is_encrypted;          /* if true create a EncryptedID */
+    oxs_ctx_t *enc_ctx;                 /* Used to encrypt the element */
+} saml2_name_id_t;
+ 
+typedef struct saml2_subject_confirmation_s
+{
+    axis2_char_t *method                /* URI */
+    saml2_base_id_t *base_id;           /* BaseID */
+    saml2_name_id_t *name_id;           /* NameID */
+
+    /* Subject confirmation related data */
+    axutil_date_time_t *not_before      /* Should process after this time */
+    axutil_date_time_t *not_on_or_after /* Should process before this time */
+    axis2_char_t *rcipient              /* URI */
+    axis2_char_t *in_response_to        /* ID */
+    axis2_char_t *address               /* IP */
+    axiom_node_t *key_info              /* Key information, ds:keyinfo*/
+    axutil_array_list_t *attr_list      /* Arbitary attributes */
+    axutil_array_list_t *elements       /* Arbitary elements */
+} saml2_subject_confirmation_t;
+
+typedef struct saml2_subject_s
+{
+    /* Only one of these two can present */
+    saml2_name_id_t *name_id;   
+    saml2_base_id_t *base_id;
+    
+    saml2_subject_confirmation_t *confirmation;     /* Confirmation info */
+} saml2_subject_t;
+
+typedef struct saml2_conditions_s
+{
+    /* AudienceRestriction Condition */
+    axutil_array_list_t *audiences;     /* Intended audiences */
+    /* OneTimeUse condition */
+    axis2_bool_t is_one_time;           /* If true asserion can be used only 
once */    
+    /* ProxyRestriction */
+    int count;                          /* No of indirections */
+    axutil_array_list_t *proxy_audiences;
+} saml2_conditions_t;
+
+typedef struct saml2_advice_s
+{
+    axis2_char_t *assertion_id_ref;
+    axis2_char_t *assertion_uri_ref;
+    axiom_node_t *assertion;
+    axiom_node_t *encrypted_assertion;
+    /* Anything can be added */
+    axutil_array_list_t *elements;
+    axutil_array_list_t *attributes;
+} saml2_advice_t;
+
+typedef struct saml2_authn_stmt_s
+{
+    axutil_date_time_t *authn_instant;
+    axis2_char_t *session_index;
+    axutil_date_time_t *session_not_on_or_after;
+
+    /* Subject locality */
+    axis2_char_t *dns;          /* DNS */
+    axis2_char_t *address;      /* IP */
+
+    /* Authentication context */
+    axis2_char_t *auth_ctx_class_ref;
+    axis2_char_t *auth_ctx_decl;
+    axis2_char_t *auth_ctx_decl_ref;
+    axutil_array_list_t *auth_authority;
+} saml2_authn_stmt_t;
+
+typedef struct saml2_attr_s
+{
+    axis2_char_t *name;                 /* attribute */
+    axis2_char_t *name_format;          /* attribute URI */
+    axis2_char_t *friendly_name;        /* attribute */
+    axutil_array_list_t *attributes;    /* any attribute*/
+
+    axutil_array_list_t *attr_values;   /* AttributeValue elements */
+    axis2_bool_t is_encrypted;          /* if true create a EncryptedID */
+    oxs_ctx_t *enc_ctx;                 /* Used to encrypt the element */
+} saml2_attr_t;
+
+typedef struct saml2_attr_stmt_s
+{
+    axutil_array_list_t *attrs;         /* saml2_attr_s */
+} 
+
+typedef enum saml2_decision_s
+{
+    permit = 0,
+    deny,
+    indeterminate
+} saml2_decision_t;
+
+typedef struct saml2_action_s
+{
+    axis2_char_t *nmsp;                 /* Namespace Attribute */
+    axis2_char_t *value;                /* Action */
+} saml2_action_s;
+
+typedef struct authz_decision_stmt_s
+{
+    axis2_char_t *resource;             /* URI */
+    saml2_decision_t decision;          /* Decision */
+    
+    axutil_array_list_t *actions;       /* Action list */
+    /* Evidence */
+    axutil_array_list_t *assertion_id_ref;  /* Assertion ref's by ID */
+    axutil_array_list_t *assertion_uri_ref; /* Assertion ref's by URI */
+    axutil_array_list_t *assertions;        /* Assertions as om nodes */
+    axutil_array_list_t *enc_assertions;    /* Enc-Assertions as om nodes */
+} authz_decision_stmt_t; 
+
+typedef struct saml2_assertion_s
+{
+    int minor_version;                  /* Defaults to 0*/                    
+    axutil_date_time_t *issuer_instant  /* If not specified will be set to the 
+                                        time at the to_om method call */
+    axis2_char_t *id                    /* Unique identifier */
+    saml2_issuer_t issuer;              /* Issuer */
+
+    /* Conditions for validity of the assertion */
+    axutil_date_time_t *not_before      /* Should process after this time */
+    axutil_date_time_t *not_on_or_after /* Should process before this time */
+
+    saml2_subject_t *subject;           /* Subject */
+    saml2_conditions_t *conditions      /* Conditions */
+
+    /* statements */
+    axutil_array_list_t *auth_stmts;    /* AuthnStatement */   
+    axutil_array_list_t *attr_stmts;    /* Attributes encrypted/non-encrypted 
*/  
+    axutil_array_list_t *authz_dec_stmts; /* AuthzDecisionStatement */
+    oxs_sign_ctx_t *signature;          /* Signature */        
+    axis2_bool_t is_encrypted           /* if true create an 
EncryptedAssertion */
+    oxs_ctx_t *enc_ctx;                 /* Used to encrypt the element */
+} saml2_assertion_t;
+
+
+AXIS2_EXTERN saml2_assertion_t *AXIS2_CALL
+saml2_assertion_create(const axutil_env_t *env)
+{
+    saml2_assertion_t *assertion = NULL;
+    assertion = AXIS2_MALLOC(env->allocator, sizeof(saml2_assertion_t));
+    if (!assertion)
+    {
+        return NULL;
+    }
+    assertion->issuer_instant = NULL;
+    assertion->minor_version = 0;
+    assertion->id = axutil_uuid_gen(env);
+    if (!assertion->id)
+    {
+        AXIS2_FREE(env->allocator, assertion);
+        return NULL;
+    }
+    /* Set issuer to defualts */
+    assertion->issuer.format = NULL;
+    assertion->issuer.name_qualifier = NULL;
+    assertion->issuer.sp_name_qualifier = NULL;
+    assertion->issuer.sp_provided_id = NULL;
+    assertion->issuer.value = NULL;               
+    assertion->issuer.is_encrypted = AXIS2_FALSE;        
+    assertion->issuer.enc_ctx = NULL;
+
+    assertion->not_before = NULL;
+    assertion->not_on_or_after = NULL;
+
+    assertion->subject = NULL;
+    assertion->conditions = NULL;
+
+    assertion->auth_stmts = NULL;
+    assertion->attr_stmts = NULL;
+    assertion->authz_dec_stmts = NULL;
+    assertion->signature = NULL;
+    assertion->is_encrypted = NULL;
+    assertion->enc_ctx = NULL;
+
+    return assertion;
+}   
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_free(saml2_assertion_t *assertion, const axutil_env_t *env)
+{
+
+} 
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_set_id(saml2_assertion_t *assertion, 
+                       const axutil_env_t *env,
+                       axis2_char_t *id)
+{
+    if (assertion->id)
+    {
+        AXIS2_FREE(env->allocator, assertion->id);
+    }
+    assertion->id = axutil_strdup(env, id);
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+saml2_assertion_get_assertion_id(saml2_assertion_t *assertion,
+                              const axutil_env_t *env)
+{
+    return assertion->id;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_set_minor_version(saml2_assertion_t *assertion,
+                                  const axutil_env_t *env,
+                                  int minor_version)
+{
+    assertion->minor_version = minor_version;
+}
+
+AXIS2_EXTERN int AXIS2L_CALL
+saml2_assertion_get_minor_version(saml2_assertion_t *assertion,
+                                  const axutil_env_t *env)
+{
+    return assertion->minor_version;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_set_issue_instant(saml2_assertion_t *assertion,
+                                  const axutil_env_t *env,
+                                  axutil_date_time_t *instant)
+{
+    if (assertion->issuer_instant)
+    {
+        axutil_date_time_free(assertion->issuer_instant, env);
+    }
+    assertion->issuer_instant = instant;
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axutil_date_time_t * AXIS2_CALL
+saml2_assertion_get_issue_instant(saml2_assertion_t *assertion,
+                                  const axutil_env_t *env)
+{
+    return assertion->issue_instant;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_set_issuer_name_qualifier(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env, axis2_char_t 
*qualifier)
+{
+    if (assertion->issuer.name_qualifier)
+    {
+        AXIS2_FREE(env->allocator, assertion->issuer.name_qualifier);
+    }
+    assertion->issuer.name_qualifier = qualifier;
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+saml2_assertion_get_issuer_name_qualifier(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env)
+{
+    return assertion->issuer.name_qualifier;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_set_issuer_format(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env, axis2_char_t 
*format)
+{
+    if (assertion->issuer.format)
+    {
+        AXIS2_FREE(env->allocator, assertion->issuer.format);
+    }
+    assertion->issuer.format = format;
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+saml2_assertion_get_issuer_format(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env)
+{
+    return assertion->issuer.format;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_set_issuer_sp_name_qualifier(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env, axis2_char_t 
*qualifier)
+{
+    if (assertion->issuer.sp_name_qualifier)
+    {
+        AXIS2_FREE(env->allocator, assertion->issuer.sp_name_qualifier);
+    }
+    assertion->issuer.sp_name_qualifier = sp_name_qualifier;
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+saml2_assertion_get_issuer_sp_name_qualifier(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env)
+{
+    return assertion->issuer.sp_name_qualifier;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_set_issuer_sp_provided_id(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env, axis2_char_t *id)
+{
+    if (assertion->issuer.sp_provided_id)
+    {
+        AXIS2_FREE(env->allocator, assertion->issuer.sp_provided_id);
+    }
+    assertion->issuer.sp_provided_id = id;
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+saml2_assertion_get_issuer_sp_provided_id(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env)
+{
+    return assertion->issuer.sp_provided_id;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+saml2_assertion_set_issuer(saml2_assertion_t *assertion,
+                                    const axutil_env_t *env, axis2_char_t 
*issuer)
+{
+    if (assertion->issuer.value)
+    {
+        AXIS2_FREE(env->allocator, assertion->issuer.value);
+    }
+    assertion->issuer.value = issuer;
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+saml2_assertion_get_issuer(saml2_assertion_t *assertion,
+                           const axutil_env_t *env)
+{
+    return assertion->issuer.value;
+}


Reply via email to