Overview
Comment: | More work on improving wrapper |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | better-wrapping |
Files: | files | file ages | folders |
SHA1: |
3fdad997851d2257c862d949d78bb579 |
User & Date: | rkeene on 2018-06-29 18:58:27 |
Other Links: | branch diff | manifest | tags |
Context
2018-06-29
| ||
18:58 | More work on improving wrapper Leaf check-in: 3fdad99785 user: rkeene tags: better-wrapping | |
2017-12-28
| ||
01:32 | More work on improving the wrapper check-in: 3b7b2eddb4 user: rkeene tags: better-wrapping | |
Changes
Modified build/libcackey_wrap.c.in from [98f3aad3ae] to [8cdc000c32].
1 2 3 4 5 | #define _GNU_SOURCE #include <dlfcn.h> #include "config.h" | | | | > > > > > > > > | > > > | | | | > > | > > | > | > > | | > | > > | > > > | | | > > > > > > > > > > > > > < < | | < < | < < < < < < | | | | < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #define _GNU_SOURCE #include <dlfcn.h> #include "config.h" #include <string.h> #include <stdio.h> #include <time.h> #define CK_PTR * #define CK_DEFINE_FUNCTION(returnType, name) returnType name #define CK_DECLARE_FUNCTION(returnType, name) returnType name #define CK_DECLARE_FUNCTION_POINTER(returnType, name) returnType (* name) #define CK_CALLBACK_FUNCTION(returnType, name) returnType (* name) #ifndef NULL_PTR # define NULL_PTR 0 #endif #include "./pkcs11/pkcs11.h" #ifndef CACKEY_LIBRARY_FILE #define CACKEY_LIBRARY_FILE "libcackey_g.so" #endif void abort(void); void free(void *ptr); static void *libcackey_wrap_handle = NULL_PTR; typedef enum { LIBCACKEY_WRAP_MUTEX_UNINIT = 0, LIBCACKEY_WRAP_MUTEX_INIT, LIBCACKEY_WRAP_MUTEX_UNLOCKED, LIBCACKEY_WRAP_MUTEX_LOCKED, } libcackey_wrap_mutexes_states_t; static libcackey_wrap_mutexes_states_t libcackey_wrap_mutexes[16] = {LIBCACKEY_WRAP_MUTEX_UNINIT}; typedef libcackey_wrap_mutexes_states_t *pthread_mutex_t; typedef int pthread_mutexattr_t; int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr) { libcackey_wrap_mutexes_states_t *mutex_; int idx; for (idx = 0; idx < (sizeof(libcackey_wrap_mutexes) / sizeof(libcackey_wrap_mutexes[0])); idx++) { if (libcackey_wrap_mutexes[idx] == LIBCACKEY_WRAP_MUTEX_UNINIT) { libcackey_wrap_mutexes[idx] = LIBCACKEY_WRAP_MUTEX_INIT; mutex_ = &libcackey_wrap_mutexes[idx]; break; } } if (!mutex_) { return(1); } *mutex = mutex_; return(0); } int pthread_mutex_destroy(pthread_mutex_t *mutex) { **mutex = LIBCACKEY_WRAP_MUTEX_UNINIT; return(0); } int pthread_mutex_lock(pthread_mutex_t *mutex) { struct timespec sleeptime; while (**mutex == LIBCACKEY_WRAP_MUTEX_LOCKED) { sleeptime.tv_sec = 0; sleeptime.tv_nsec = 1000000; nanosleep(&sleeptime, NULL); fprintf(stderr, "mutex %p is locked\n", mutex); fflush(stderr); /* Do nothing */ } fprintf(stderr, "locking mutex %p\n", mutex); fflush(stderr); **mutex = LIBCACKEY_WRAP_MUTEX_LOCKED; fprintf(stderr, "locked mutex %p\n", mutex); fflush(stderr); return(CKR_OK); } int pthread_mutex_unlock(pthread_mutex_t *mutex) { fprintf(stderr, "unlocking mutex %p\n", mutex); fflush(stderr); **mutex = LIBCACKEY_WRAP_MUTEX_UNLOCKED; fprintf(stderr, "unlocked mutex %p\n", mutex); fflush(stderr); return(CKR_OK); } static void libcackey_wrap_init(void) { Dl_info libinfo; int dladdr_ret; char *library, *libraryDir, *libraryDirLastSlash; if (libcackey_wrap_handle) { |
︙ | ︙ | |||
104 105 106 107 108 109 110 111 112 113 114 115 116 117 | return; } *libraryDirLastSlash = '\0'; asprintf(&library, "%s/" CACKEY_LIBRARY_FILE, libraryDir); libcackey_wrap_handle = dlmopen(LM_ID_NEWLM, library, RTLD_LOCAL | RTLD_NOW); if (!libcackey_wrap_handle) { fprintf(stderr, "Unable to load \"%s\": %s\n", library, dlerror()); abort(); return; | > | 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | return; } *libraryDirLastSlash = '\0'; asprintf(&library, "%s/" CACKEY_LIBRARY_FILE, libraryDir); libcackey_wrap_handle = dlmopen(LM_ID_NEWLM, library, RTLD_LOCAL | RTLD_NOW); libcackey_wrap_handle = dlmopen(LM_ID_NEWLM, , RTLD_LOCAL | RTLD_NOW); if (!libcackey_wrap_handle) { fprintf(stderr, "Unable to load \"%s\": %s\n", library, dlerror()); abort(); return; |
︙ | ︙ |
Modified build/make-libcackey_wrap from [f1fa196b14] to [d43bff44b6].
︙ | ︙ | |||
37 38 39 40 41 42 43 | echo '' echo "${line}" echo $'\t'"CK_RV (*func)($(echo "${args}" | tr $'\n' ',' | sed 's@,*$@@;s@,@, @g'));" case "${function}" in C_Finalize) echo $'\t''CK_RV retval;' ;; | < < < < < < < < < < < < < < < < < < < | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | echo '' echo "${line}" echo $'\t'"CK_RV (*func)($(echo "${args}" | tr $'\n' ',' | sed 's@,*$@@;s@,@, @g'));" case "${function}" in C_Finalize) echo $'\t''CK_RV retval;' ;; C_GetFunctionList) echo $'\t''CK_RV retval;' echo $'\t''CK_FUNCTION_LIST_PTR pFunctionList;' ;; esac echo '' echo $'\t''libcackey_wrap_init();' echo '' echo $'\t'"func = dlsym(libcackey_wrap_handle, \"${function}\");" echo '' if [ "${function}" = 'C_Finalize' ]; then echo $'\t'"retval = func($argNamesList);" echo '' echo $'\t''libcackey_wrap_fini();' |
︙ | ︙ |
Modified test.c from [b3c16cba8c] to [b9686fc1be].
︙ | ︙ | |||
553 554 555 556 557 558 559 | if ((tokenInfo.flags & CKF_SO_PIN_TO_BE_CHANGED) == CKF_SO_PIN_TO_BE_CHANGED) { printf("CKF_SO_PIN_TO_BE_CHANGED "); } printf("\n"); } } | | | | 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 | if ((tokenInfo.flags & CKF_SO_PIN_TO_BE_CHANGED) == CKF_SO_PIN_TO_BE_CHANGED) { printf("CKF_SO_PIN_TO_BE_CHANGED "); } printf("\n"); } } chk_rv = C_OpenSession(slots[1], CKF_SERIAL_SESSION, NULL, NULL, &hSession); if (chk_rv == CKR_OK) { chk_rv = C_GetTokenInfo(slots[1], &tokenInfo); if (chk_rv != CKR_OK) { return(1); } if ((tokenInfo.flags & CKF_LOGIN_REQUIRED) == CKF_LOGIN_REQUIRED && (tokenInfo.flags & CKF_PROTECTED_AUTHENTICATION_PATH) == 0) { fgets_ret = NULL; |
︙ | ︙ |