Author: shankar
Date: Wed Jul  2 04:35:15 2008
New Revision: 673365

URL: http://svn.apache.org/viewvc?rev=673365&view=rev
Log:
key manager bug fixes.

Modified:
    webservices/rampart/trunk/c/include/axis2_key_type.h
    webservices/rampart/trunk/c/include/oxs_key_mgr.h
    webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c
    webservices/rampart/trunk/c/src/secconv/sct_provider_utility.c
    webservices/rampart/trunk/c/src/util/rampart_sec_header_processor.c
    webservices/rampart/trunk/c/src/util/rampart_signature.c

Modified: webservices/rampart/trunk/c/include/axis2_key_type.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/axis2_key_type.h?rev=673365&r1=673364&r2=673365&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/axis2_key_type.h (original)
+++ webservices/rampart/trunk/c/include/axis2_key_type.h Wed Jul  2 04:35:15 
2008
@@ -41,6 +41,7 @@
     {
         AXIS2_KEY_TYPE_UNKNOWN = 0,
         AXIS2_KEY_TYPE_PEM,
+        AXIS2_KEY_TYPE_CERT,
         AXIS2_KEY_TYPE_DER,
                AXIS2_KEY_TYPE_OTHER
     }axis2_key_type_t;

Modified: webservices/rampart/trunk/c/include/oxs_key_mgr.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/oxs_key_mgr.h?rev=673365&r1=673364&r2=673365&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/oxs_key_mgr.h (original)
+++ webservices/rampart/trunk/c/include/oxs_key_mgr.h Wed Jul  2 04:35:15 2008
@@ -343,6 +343,11 @@
             void *key_store_buf,
             int len);
 
+        AXIS2_EXTERN axis2_status_t AXIS2_CALL
+        oxs_key_mgr_increment_ref(
+            oxs_key_mgr_t *key_mgr, 
+            const axutil_env_t *env);
+
        
     /** @} */
 #ifdef __cplusplus

Modified: webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c?rev=673365&r1=673364&r2=673365&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c (original)
+++ webservices/rampart/trunk/c/src/omxmlsec/key_mgr.c Wed Jul  2 04:35:15 2008
@@ -66,6 +66,9 @@
        
     /* Format of the current key */
     oxs_key_mgr_format_t format;
+
+    /* ref count to monitor when to free */
+    int ref;
 }; 
 
 AXIS2_EXTERN oxs_key_mgr_t * AXIS2_CALL
@@ -89,6 +92,7 @@
             key_mgr->pem_buf = NULL;
             key_mgr->format = -1;
             key_mgr->pkcs12_buf = NULL;
+            key_mgr->ref = 1;
        }
        return key_mgr; 
 }
@@ -97,17 +101,34 @@
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 oxs_key_mgr_free(oxs_key_mgr_t *key_mgr, const axutil_env_t *env)
 {
-    if(key_mgr->certificate)
-       {
-        oxs_x509_cert_free(key_mgr->certificate, env);
-        key_mgr->certificate = NULL;
-    }
-    if(key_mgr->receiver_certificate)
-       {
-        oxs_x509_cert_free(key_mgr->receiver_certificate, env);
-        key_mgr->receiver_certificate = NULL;
+    if(--(key_mgr->ref) < 1)
+    {
+        if(key_mgr->certificate)
+           {
+            if(key_mgr->certificate_type == AXIS2_KEY_TYPE_PEM)
+            {
+                AXIS2_FREE(env->allocator, key_mgr->certificate);
+            }
+            else
+            {
+                oxs_x509_cert_free(key_mgr->certificate, env);
+            }
+            key_mgr->certificate = NULL;
+        }
+        if(key_mgr->receiver_certificate)
+           {
+            if(key_mgr->receiver_certificate_type == AXIS2_KEY_TYPE_PEM)
+            {
+                AXIS2_FREE(env->allocator, key_mgr->receiver_certificate);
+            }
+            else
+            {
+                oxs_x509_cert_free(key_mgr->receiver_certificate, env);
+            }
+            key_mgr->receiver_certificate = NULL;
+        }
+        AXIS2_FREE(env->allocator, key_mgr);
     }
-    AXIS2_FREE(env->allocator, key_mgr);
     return AXIS2_SUCCESS;
 }
 
@@ -233,9 +254,14 @@
             else
             {
                                key_mgr->certificate = cert;
+                key_mgr->certificate_type = AXIS2_KEY_TYPE_CERT;
                 return cert;
             }
                }
+        else if(key_mgr->certificate_type == AXIS2_KEY_TYPE_CERT)
+        {
+            return key_mgr->certificate;
+        }
                else 
                {
                        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
@@ -390,9 +416,14 @@
                else
                {
                                key_mgr->receiver_certificate = oxs_cert;
+                key_mgr->receiver_certificate_type = AXIS2_KEY_TYPE_CERT;
                        return oxs_cert;
                }
                }
+        else if(key_mgr->receiver_certificate_type == AXIS2_KEY_TYPE_CERT)
+        {
+            return key_mgr->receiver_certificate;
+        }
                else
                {
                        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
@@ -968,4 +999,11 @@
     return NULL;
 }
 
-
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+oxs_key_mgr_increment_ref(
+    oxs_key_mgr_t *key_mgr, 
+    const axutil_env_t *env)
+{
+    key_mgr->ref++;
+    return AXIS2_SUCCESS;
+}

Modified: webservices/rampart/trunk/c/src/secconv/sct_provider_utility.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/secconv/sct_provider_utility.c?rev=673365&r1=673364&r2=673365&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/secconv/sct_provider_utility.c (original)
+++ webservices/rampart/trunk/c/src/secconv/sct_provider_utility.c Wed Jul  2 
04:35:15 2008
@@ -776,6 +776,7 @@
 {
     rampart_context_t *in_rampart_ctx = NULL;
     rampart_context_t *out_rampart_ctx = NULL;
+    oxs_key_mgr_t *key_mgr = NULL;
 
     in_rampart_ctx = (rampart_context_t*)rampart_get_rampart_configuration(
         env, msg_ctx, RAMPART_CONFIGURATION);
@@ -797,18 +798,6 @@
     rampart_context_set_ttl(out_rampart_ctx, env, 
rampart_context_get_ttl(in_rampart_ctx, env));
     rampart_context_set_user(out_rampart_ctx, env, 
         axutil_strdup(env, rampart_context_get_user(in_rampart_ctx, env)));
-    rampart_context_set_certificate(out_rampart_ctx, env, 
-        rampart_context_get_certificate(in_rampart_ctx, env));
-    rampart_context_set_certificate_type(out_rampart_ctx, env, 
-        rampart_context_get_certificate_type(in_rampart_ctx, env));
-    rampart_context_set_receiver_certificate(out_rampart_ctx, env, 
-        rampart_context_get_receiver_certificate(in_rampart_ctx, env));
-    rampart_context_set_receiver_certificate_type(out_rampart_ctx, env, 
-        rampart_context_get_receiver_certificate_type(in_rampart_ctx, env));
-    rampart_context_set_prv_key(out_rampart_ctx, env, 
-        rampart_context_get_prv_key(in_rampart_ctx, env));
-    rampart_context_set_prv_key_type(out_rampart_ctx, env, 
-        rampart_context_get_prv_key_type(in_rampart_ctx, env));
     rampart_context_set_password_type(out_rampart_ctx, env, 
         rampart_context_get_password_type(in_rampart_ctx, env));
     rampart_context_set_password(out_rampart_ctx, env, 
@@ -822,5 +811,13 @@
     rampart_context_set_rd_val(out_rampart_ctx, env, 
         rampart_context_get_rd_val(in_rampart_ctx, env));
 
+    /* set key manager as well */
+    key_mgr = rampart_context_get_key_mgr(in_rampart_ctx, env);
+    if(key_mgr)
+    {
+        oxs_key_mgr_increment_ref(key_mgr, env);
+        rampart_context_set_key_mgr(out_rampart_ctx, env, key_mgr);
+    }
+
     return out_rampart_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=673365&r1=673364&r2=673365&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 Wed Jul 
 2 04:35:15 2008
@@ -1728,23 +1728,6 @@
         }
         return AXIS2_SUCCESS;
 }
-#if 0
-static axis2_status_t
-rampart_shp_process_bst(const axutil_env_t *env,
-                            axis2_msg_ctx_t *msg_ctx,
-                            rampart_context_t *rampart_context,
-                            axiom_node_t *sec_node,
-                            axiom_node_t *bst_node)
-{
-    axis2_char_t *cert_buf = NULL;
-
-    cert_buf = (axis2_char_t*)oxs_axiom_get_node_content(env, bst_node);
-    /*Set to Rampart Context*/
-    rampart_context_set_certificate(rampart_context, env, cert_buf);
-    rampart_context_set_certificate_type(rampart_context, env, 
AXIS2_KEY_TYPE_PEM);
-    return AXIS2_SUCCESS;
-}
-#endif
 
 static axis2_status_t
 rampart_shp_process_derived_key(const axutil_env_t *env,

Modified: webservices/rampart/trunk/c/src/util/rampart_signature.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_signature.c?rev=673365&r1=673364&r2=673365&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_signature.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_signature.c Wed Jul  2 
04:35:15 2008
@@ -67,68 +67,6 @@
     axiom_soap_envelope_t *soap_envelope,
     axiom_node_t *sec_node);
 
-
-oxs_x509_cert_t *AXIS2_CALL
-rampart_sig_get_cert(const axutil_env_t *env,
-                     rampart_context_t *rampart_context)
-{
-    void *key_buf = NULL;
-    axis2_key_type_t type = 0;
-    oxs_x509_cert_t *cert = NULL;
-    axis2_char_t *certificate_file = NULL;
-
-    key_buf = rampart_context_get_certificate(rampart_context, env);
-    if(key_buf)
-    {
-        type = rampart_context_get_certificate_type(rampart_context, env);
-        if(type == AXIS2_KEY_TYPE_PEM)
-        {
-            cert = oxs_key_mgr_load_x509_cert_from_string(env,
-                    (axis2_char_t *)key_buf);
-            if(!cert)
-            {
-                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                "[rampart][rampart_signature] Certificate 
cannot be loaded from the buffer.");
-                return NULL;
-            }
-            else
-            {
-                return cert;
-            }
-        }
-        else
-        {
-            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                            "[rampart][rampart_signature] Key file type 
unknown.");
-            return NULL;
-        }
-    }
-    else
-    {
-        certificate_file = 
rampart_context_get_certificate_file(rampart_context, env);
-        if(certificate_file)
-        {
-            cert = oxs_key_mgr_load_x509_cert_from_pem_file(env, 
certificate_file);
-            if(!cert)
-            {
-                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                                "[rampart][rampart_signature] Certificate 
cannot be loaded from the file.");
-                return NULL;
-            }
-            else
-            {
-                return cert;
-            }
-        }
-        else
-        {
-            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
-                            "[rampart][rampart_signature] Public key 
certificate file is not specified.");
-            return NULL;
-        }
-    }
-}
-
 axis2_status_t AXIS2_CALL
 rampart_sig_prepare_key_info_for_sym_binding(const axutil_env_t *env,
                 rampart_context_t *rampart_context,


Reply via email to