Author: dumindu
Date: Fri Feb  1 04:41:12 2008
New Revision: 13221

Log:

Allowing the user to validate the certificates in self-issued case. This can be 
done using the validator or by the webapp itself.



Modified:
   trunk/solutions/identity/modules/mod-cspace/mod_cspace.c
   trunk/solutions/identity/modules/mod-cspace/mod_cspace.h
   trunk/solutions/identity/modules/mod-cspace/process_request.c

Modified: trunk/solutions/identity/modules/mod-cspace/mod_cspace.c
==============================================================================
--- trunk/solutions/identity/modules/mod-cspace/mod_cspace.c    (original)
+++ trunk/solutions/identity/modules/mod-cspace/mod_cspace.c    Fri Feb  1 
04:41:12 2008
@@ -45,6 +45,10 @@
 
 #define CARDSPACE_HEADER_PPID 
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier";
 
+void cspace_log_error(const char *msg, pc_log_level_t level, void *cb_ctx)
+{
+            ap_log_error(APLOG_MARK, level, 0, (server_rec *)cb_ctx, msg);
+}
 
 /*static X509 *x509_create_with_buffer(unsigned char *input, int length);
 

Modified: trunk/solutions/identity/modules/mod-cspace/mod_cspace.h
==============================================================================
--- trunk/solutions/identity/modules/mod-cspace/mod_cspace.h    (original)
+++ trunk/solutions/identity/modules/mod-cspace/mod_cspace.h    Fri Feb  1 
04:41:12 2008
@@ -87,10 +87,6 @@
                            void *own_cfg);
 
 
-static void cspace_log_error(const char *msg, pc_log_level_t level,
-                                     void *cb_ctx)
-{
-        ap_log_error(APLOG_MARK, level, 0, (server_rec *)cb_ctx, msg);
-}
+void cspace_log_error(const char *msg, pc_log_level_t level, void *cb_ctx);
 
 #endif /*_MOD_CSPACE_H_*/

Modified: trunk/solutions/identity/modules/mod-cspace/process_request.c
==============================================================================
--- trunk/solutions/identity/modules/mod-cspace/process_request.c       
(original)
+++ trunk/solutions/identity/modules/mod-cspace/process_request.c       Fri Feb 
 1 04:41:12 2008
@@ -47,6 +47,16 @@
 /* "/saml:Assertion/dsig:Signature/dsig:KeyInfo" */
 #define XPATH_KEY_INFO XPATH_SIGNATURE "/" DSIG_PFX ":" KEY_INFO
 
+/* 
"/saml:Assertion/dsig:Signature/dsig:KeyInfo/dsig:KeyValue/dsig:RSAKeyValue" */
+#define XPATH_RSA_KEY_VALUE XPATH_KEY_INFO "/" DSIG_PFX ":" KEY_VALUE "/" \
+                            DSIG_PFX ":" RSA_KEY_VALUE
+
+/* 
"/saml:Assertion/dsig:Signature/dsig:KeyInfo/dsig:KeyValue/dsig:RSAKeyValue/dsig:Modulus"
 */
+#define XPATH_MODULUS XPATH_RSA_KEY_VALUE "/" DSIG_PFX ":" MODULUS
+
+/* 
"/saml:Assertion/dsig:Signature/dsig:KeyInfo/dsig:KeyValue/dsig:RSAKeyValue/dsig:Exponent"
 */
+#define XPATH_EXPONENT XPATH_RSA_KEY_VALUE "/" DSIG_PFX ":" EXPONENT 
+
 /* "/saml:Assertion/dsig:Signature/dsig:KeyInfo/dsig:X509Data" */
 #define XPATH_X509_DATA XPATH_KEY_INFO "/" DSIG_PFX ":" X509_DATA 
 
@@ -61,6 +71,7 @@
 #define XPATH_ATTRIBUTE XPATH_ASSERTION "/" SAML_PFX ":" ATTRIBUTE_STATEMENT \
                         "/" SAML_PFX ":" ATTRIBUTE
 
+
 #define XPATH_OBJ_SIZE(obj) ((obj) ? (((obj)->nodesetval) ? \
                                       ((obj)->nodesetval->nodeNr) : 0) : 0)
 
@@ -262,6 +273,14 @@
     xmlXPathObject *attrs_obj = NULL;
     xmlNode *attr_node = NULL;
     xmlNode *text_node = NULL;
+
+    xmlXPathObject *mod_obj = NULL;
+    xmlNode *mod_node = NULL;
+    xmlXPathObject *exp_obj = NULL;
+    xmlNode *exp_node = NULL;
+  
+    xmlXPathObject *assertion_obj = NULL;
+    xmlNode *assertion_node = NULL;
     
     xmlXPathObject *x509_obj = NULL;
     xmlNode *x509_node = NULL;
@@ -270,6 +289,19 @@
     char *attr_val = NULL;
     char *attr_ns = NULL;
     char *x509_data = NULL;
+    char *issuer = NULL;
+    char *modulus = NULL;
+    char *exponent = NULL;
+    char *mod_exp = NULL;
+
+    assertion_obj = cspace_xpath_evaluate(doc, BAD_CAST XPATH_ASSERTION);
+    if (!assertion_obj) {
+        goto done;
+    } else {
+        assertion_node = XPATH_OBJ_TO_NODE(assertion_obj, 0);
+        issuer = (char *) xmlGetProp(assertion_node, BAD_CAST ISSUER);
+    }
+
 
     attrs_obj = cspace_xpath_evaluate(doc, BAD_CAST XPATH_ATTRIBUTE);
     if (!attrs_obj) {
@@ -299,6 +331,53 @@
         
     }
     
+    /* if (self issued) res = SUCC & goto done; */
+    if (strcmp(issuer, ISSUER_SELF) == 0) {
+        char *t = NULL;
+
+        mod_obj = cspace_xpath_evaluate(doc, BAD_CAST XPATH_MODULUS);
+        if (!mod_obj) {
+            goto done;
+        }
+        mod_node = XPATH_OBJ_TO_NODE(mod_obj, 0);
+        mod_node = mod_node->children;
+        if (!mod_node) { /* Modulus not found */
+            goto done;
+        }
+        modulus = (char *) mod_node->content;
+
+        exp_obj = cspace_xpath_evaluate(doc, BAD_CAST XPATH_EXPONENT);
+        if (!exp_obj) {
+            goto done;
+        }
+        exp_node = XPATH_OBJ_TO_NODE(exp_obj, 0);
+        exp_node = exp_node->children;
+        if (!exp_node) {
+            goto done;
+        }
+        exponent = (char *) exp_node->content;
+        
+        mod_exp = pc_malloc(strlen(modulus) + strlen(exponent) + 2, ctx);
+        t = mod_exp;
+
+        cspace_strcpy(t, modulus);
+        t += strlen(modulus);
+        *t = ',';
+        t++;
+        cspace_strcpy(t, exponent);
+        t += strlen(exponent);
+        *t = '\0';
+
+        (*ctx->set_header_fn)(NULL,
+                              cspace_strdup(CARDSPACE_HEADER_CERTIFICATE,
+                                            ctx->allocator),
+                              mod_exp, ctx->header_container, 
ctx->set_header_cb_ctx);
+
+        /* TODO:DONE add the Exp & Mod to headers */
+        res = SUCC;
+        goto done;
+    }
+
     x509_obj = cspace_xpath_evaluate(doc, BAD_CAST XPATH_X509_CERT);
     if (!x509_obj) {
         goto done;
@@ -311,8 +390,10 @@
                                   ctx->allocator);
     }
 
-    (*ctx->set_header_fn)(NULL, cspace_strdup(CARDSPACE_HEADER_CERTIFICATE,
-                                              ctx->allocator), x509_data, 
ctx->header_container,
+    (*ctx->set_header_fn)(NULL,
+                          cspace_strdup(CARDSPACE_HEADER_CERTIFICATE,
+                                        ctx->allocator),
+                          x509_data, ctx->header_container,
                           ctx->set_header_cb_ctx);
 
     res = SUCC;
@@ -324,6 +405,9 @@
     if (x509_obj)
         xmlXPathFreeObject(x509_obj);
 
+    if (assertion_obj)
+        xmlXPathFreeObject(assertion_obj);
+
     return res;
 }
 

_______________________________________________
Identity-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/identity-dev

Reply via email to