The CCA token broke after the recent session/object handlers patches.
This patch replicates some of the changes introduced in the common code,
thus fixing the issue.

The symptom:
libpkcs11_cca.so: undefined symbol: session_mgr_readonly_exists

Signed-off-by: Klaus Heinrich Kiwi <[email protected]>
---
 usr/lib/pkcs11/cca_stdll/globals.c   |    8 ++++----
 usr/lib/pkcs11/cca_stdll/h_extern.h  |   11 +++++------
 usr/lib/pkcs11/cca_stdll/host_defs.h |    6 ++++++
 usr/lib/pkcs11/cca_stdll/new_host.c  |    8 ++++----
 4 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/usr/lib/pkcs11/cca_stdll/globals.c 
b/usr/lib/pkcs11/cca_stdll/globals.c
index ee8080b..74b58d5 100644
--- a/usr/lib/pkcs11/cca_stdll/globals.c
+++ b/usr/lib/pkcs11/cca_stdll/globals.c
@@ -53,14 +53,14 @@ DL_NODE  *publ_token_obj_list = NULL;
 DL_NODE  *priv_token_obj_list = NULL;
 DL_NODE  *object_map     = NULL;
 
+CK_ULONG  ro_session_count = 0;
 
-CK_STATE  global_login_state = 0;
-
+CK_STATE  global_login_state = CKS_RO_PUBLIC_SESSION;
 
 LW_SHM_TYPE *global_shm;
 
-CK_ULONG next_session_handle = 1;
-CK_ULONG next_object_handle = 1;
+//CK_ULONG next_session_handle = 1;
+//CK_ULONG next_object_handle = 1;
 
 TOKEN_DATA  *nv_token_data = NULL;
 
diff --git a/usr/lib/pkcs11/cca_stdll/h_extern.h 
b/usr/lib/pkcs11/cca_stdll/h_extern.h
index 25aa048..ed1a909 100644
--- a/usr/lib/pkcs11/cca_stdll/h_extern.h
+++ b/usr/lib/pkcs11/cca_stdll/h_extern.h
@@ -73,10 +73,11 @@ extern LW_SHM_TYPE *global_shm;
 extern TOKEN_DATA        *nv_token_data;
 extern CK_SLOT_INFO       slot_info;
 
-extern CK_ULONG next_object_handle;
-extern CK_ULONG next_session_handle;
+// extern CK_ULONG next_object_handle;
+// extern CK_ULONG next_session_handle;
+
+extern CK_ULONG  ro_session_count;
 
-// SAB FIXME FIXME
 extern CK_STATE  global_login_state;
 
 
@@ -1559,7 +1560,7 @@ CK_RV  session_mgr_login_all ( CK_USER_TYPE user_type );
 CK_RV  session_mgr_logout_all( void );
 CK_RV  session_mgr_new( CK_ULONG flags, SESSION **sess );
 
-CK_BBOOL  session_mgr_readonly_exists( void );
+CK_BBOOL  session_mgr_readonly_session_exists( void );
 CK_BBOOL  session_mgr_so_session_exists    ( void );
 CK_BBOOL  session_mgr_user_session_exists  ( void );
 CK_BBOOL  session_mgr_public_session_exists( void );
@@ -1659,8 +1660,6 @@ CK_BBOOL object_mgr_purge_token_objects( void );
 
 CK_BBOOL object_mgr_purge_private_token_objects( void );
 
-CK_RV    object_mgr_remove_from_map( CK_OBJECT_HANDLE handle );
-
 CK_RV    object_mgr_restore_obj( CK_BYTE *data, OBJECT *oldObj );
 
 CK_RV    object_mgr_set_attribute_values( SESSION          * sess,
diff --git a/usr/lib/pkcs11/cca_stdll/host_defs.h 
b/usr/lib/pkcs11/cca_stdll/host_defs.h
index ee6209c..20dffb6 100644
--- a/usr/lib/pkcs11/cca_stdll/host_defs.h
+++ b/usr/lib/pkcs11/cca_stdll/host_defs.h
@@ -178,6 +178,10 @@ typedef struct _SESSION
    SIGN_VERIFY_CONTEXT  verify_ctx;
 } SESSION;
 
+/* TODO:
+ * Add compile-time checking that sizeof(void *) == sizeof(CK_SESSION_HANDLE)
+ * */
+
 
 typedef struct _DES_CONTEXT
 {
@@ -261,6 +265,8 @@ typedef struct _OBJECT_MAP
    OBJECT             * ptr;
 } OBJECT_MAP;
 
+/* FIXME: Compile-time check that sizeof(void *) == sizeof(CK_OBJECT_HANDLE) */
+
 
 typedef struct _ATTRIBUTE_PARSE_LIST
 {
diff --git a/usr/lib/pkcs11/cca_stdll/new_host.c 
b/usr/lib/pkcs11/cca_stdll/new_host.c
index bc03b63..93ee886 100644
--- a/usr/lib/pkcs11/cca_stdll/new_host.c
+++ b/usr/lib/pkcs11/cca_stdll/new_host.c
@@ -139,8 +139,8 @@ Fork_Initializer(void)
        // This should clear the entire session list out
        session_mgr_close_all_sessions();
 
-       next_session_handle = 1; // Make is so sessions start with 1
-       next_object_handle = 1;
+       //next_session_handle = 1; // Make is so sessions start with 1
+       //next_object_handle = 1;
 
        // Clean out the global login state variable
        // When implemented...  Although logout_all should clear this up.
@@ -1104,7 +1104,7 @@ CK_RV SC_OpenSession(CK_SLOT_ID             sid,
                st_err_log(152, __FILE__, __LINE__); 
                goto done;
        }
-       *phSession = sess->handle;
+       *phSession = (CK_SESSION_HANDLE_PTR) sess;
        // Set the correct slot ID here. Was hard coded to 1. - KEY
        sess->session_info.slotID = sid;
  done:
@@ -1378,7 +1378,7 @@ CK_RV SC_Login( ST_SESSION_HANDLE   sSession,
                        st_err_log(56, __FILE__, __LINE__);
                        rc = CKR_USER_ALREADY_LOGGED_IN;
                }
-               if (session_mgr_readonly_exists()){
+               if (session_mgr_readonly_session_exists()){
                        st_err_log(142, __FILE__, __LINE__);
                        rc = CKR_SESSION_READ_ONLY_EXISTS;
                }
-- 
1.7.1.1


------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Opencryptoki-tech mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opencryptoki-tech

Reply via email to