Changes In Branch better-wrapping Through [3b7b2eddb4] Excluding Merge-Ins
This is equivalent to a diff from 9043258dc4 to 3b7b2eddb4
2018-08-24
| ||
21:33 | Updated URL for RPM spec file check-in: 1efa305922 user: rkeene tags: trunk | |
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 | |
01:32 | Updated to support supplying an empty PIN command to be equivelant to unsetting check-in: 9043258dc4 user: rkeene tags: trunk | |
2017-12-27
| ||
18:59 | CACKey 0.7.9 check-in: ac7bd0bf8f user: rkeene tags: trunk | |
Modified Makefile.in from [abdaf2d437] to [0b2c29b908].
︙ | ︙ | |||
46 47 48 49 50 51 52 | libcackey_g.a: cackey_g.o rm -f libcackey_g.a $(AR) rc libcackey_g.a cackey_g.o -$(RANLIB) libcackey_g.a libcackey_wrap.@SHOBJEXT@: libcackey_wrap.o | | | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | libcackey_g.a: cackey_g.o rm -f libcackey_g.a $(AR) rc libcackey_g.a cackey_g.o -$(RANLIB) libcackey_g.a libcackey_wrap.@SHOBJEXT@: libcackey_wrap.o $(CC) $(SHOBJFLAGS) $(SHOBJLDFLAGS) -o libcackey_wrap.@SHOBJEXT@ libcackey_wrap.o -ldl -@WEAKENSYMS@ "libcackey_wrap.@SHOBJEXT@" -@REMOVESYMS@ "libcackey_wrap.@SHOBJEXT@" libcackey_wrap.o: libcackey_wrap.c $(CC) $(SHOBJFLAGS) -o libcackey_wrap.o -c libcackey_wrap.c test: test.c libcackey_g.@SHOBJEXT@ |
︙ | ︙ |
Modified build/libcackey_wrap.c.in from [4c95cbc88b] to [98f3aad3ae].
︙ | ︙ | |||
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #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" static void *libcackey_wrap_handle = NULL_PTR; static void libcackey_wrap_init(void) { Dl_info libinfo; int dladdr_ret; char *library, *libraryDir, *libraryDirLastSlash; if (libcackey_wrap_handle) { return; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | #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 static void *libcackey_wrap_handle = NULL_PTR; static void libcackey_wrap_init(void); static CK_RV libcackey_wrap_createmutex(CK_VOID_PTR_PTR ppMutex) { int (*create_mutex)(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); pthread_mutex_t *pthread_mutex; int pthread_retval; libcackey_wrap_init(); pthread_mutex = malloc(sizeof(*pthread_mutex)); create_mutex = dlsym(libcackey_wrap_handle, "pthread_mutex_init"); pthread_retval = create_mutex(pthread_mutex, NULL); if (pthread_retval != 0) { return(CKR_GENERAL_ERROR); } *ppMutex = pthread_mutex; return(CKR_OK); } #define libcackey_wrap_genericmutexfunc(funcName, pthreadName) \ static CK_RV funcName(CK_VOID_PTR pMutex) { \ int (*func)(pthread_mutex_t *mutex); \ pthread_mutex_t *pthread_mutex; \ int pthread_retval; \ libcackey_wrap_init(); \ pthread_mutex = pMutex; \ func = dlsym(libcackey_wrap_handle, pthreadName); \ pthread_retval = func(pthread_mutex); \ if (pthread_retval != 0) { \ return(CKR_GENERAL_ERROR); \ } \ if (strcmp(pthreadName, "pthread_mutex_destroy") == 0) { \ free(pthread_mutex); \ } \ return(CKR_OK); \ } libcackey_wrap_genericmutexfunc(libcackey_wrap_destroymutex, "pthread_mutex_destroy") libcackey_wrap_genericmutexfunc(libcackey_wrap_lockmutex, "pthread_mutex_lock") libcackey_wrap_genericmutexfunc(libcackey_wrap_unlockmutex, "pthread_mutex_unlock") static void libcackey_wrap_init(void) { Dl_info libinfo; int dladdr_ret; char *library, *libraryDir, *libraryDirLastSlash; if (libcackey_wrap_handle) { return; |
︙ | ︙ | |||
53 54 55 56 57 58 59 | abort(); return; } *libraryDirLastSlash = '\0'; | | > > > > > > > > > > > > | 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | abort(); 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; } free(library); return; } static void libcackey_wrap_fini(void) { if (!libcackey_wrap_handle) { return; } dlclose(libcackey_wrap_handle); libcackey_wrap_handle = NULL_PTR; return; } |
Modified build/make-libcackey_wrap from [833dbdb173] to [f1fa196b14].
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 | #! /usr/bin/env bash cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1 cat libcackey_wrap.c.in grep '^CK_DEFINE_FUNCTION' ../cackey.c | while IFS='' read -r line; do function="$(echo "${line}" | cut -f 2 -d , | cut -f 1 -d ')' | sed 's@ *@@g')" args="$(echo "${line}" | cut -f 3 -d '(' | cut -f 1 -d ')' | tr ',' $'\n' | sed 's@^ *@@')" argNames=() while read argType argName; do argNames=("${argNames[@]}" "${argName}") done <<<"${args}" argNamesList='' for argName in "${argNames[@]}"; do argNamesList="${argNamesList}, ${argName}" done argNamesList="$(echo "${argNamesList}" | cut -c 3-)" echo '' echo "${line}" echo $'\t'"CK_RV (*func)($(echo "${args}" | tr $'\n' ',' | sed 's@,*$@@;s@,@, @g'));" echo '' echo $'\t''libcackey_wrap_init();' | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | 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 | #! /usr/bin/env bash cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1 cat libcackey_wrap.c.in functionList=() while IFS='' read -r line; do function="$(echo "${line}" | cut -f 2 -d , | cut -f 1 -d ')' | sed 's@ *@@g')" if [ "${function}" = 'C_LoginMutexArg' ]; then continue fi functionList=("${functionList[@]}" "${function}") done < <(grep '^CK_DEFINE_FUNCTION' ../cackey.c) grep '^CK_DEFINE_FUNCTION' ../cackey.c | while IFS='' read -r line; do function="$(echo "${line}" | cut -f 2 -d , | cut -f 1 -d ')' | sed 's@ *@@g')" if [ "${function}" = 'C_LoginMutexArg' ]; then continue fi args="$(echo "${line}" | cut -f 3 -d '(' | cut -f 1 -d ')' | tr ',' $'\n' | sed 's@^ *@@')" argNames=() while read argType argName; do argNames=("${argNames[@]}" "${argName}") done <<<"${args}" argNamesList='' for argName in "${argNames[@]}"; do argNamesList="${argNamesList}, ${argName}" done argNamesList="$(echo "${argNamesList}" | cut -c 3-)" 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_Initialize) echo $'\t''CK_C_INITIALIZE_ARGS CK_PTR args, localargs;' ;; C_GetFunctionList) echo $'\t''CK_RV retval;' echo $'\t''CK_FUNCTION_LIST_PTR pFunctionList;' ;; esac echo '' echo $'\t''libcackey_wrap_init();' if [ "${function}" = 'C_Initialize' ]; then echo '' echo $'\t''if (pInitArgs) {' echo $'\t\t''args = pInitArgs;' echo $'\t\t''if ((args->flags & CKF_OS_LOCKING_OK) == CKF_OS_LOCKING_OK) {' #echo 'fprintf(stderr, "replacing=%p\n", pInitArgs); fflush(stderr); abort();' echo $'\t\t\t''memcpy(&localargs, args, sizeof(*args));' echo $'\t\t\t''localargs.CreateMutex = libcackey_wrap_createmutex;' echo $'\t\t\t''localargs.DestroyMutex = libcackey_wrap_destroymutex;' echo $'\t\t\t''localargs.LockMutex = libcackey_wrap_lockmutex;' echo $'\t\t\t''localargs.UnlockMutex = libcackey_wrap_unlockmutex;' echo $'\t\t\t''localargs.flags &= ~CKF_OS_LOCKING_OK;' echo $'\t\t\t''pInitArgs = &localargs;' echo $'\t\t''}' echo $'\t''}' fi 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();' echo '' echo $'\t''return(retval);' elif [ "${function}" = 'C_GetFunctionList' ]; then echo $'\t'"retval = func($argNamesList);" echo '' echo $'\t''if (retval == CKR_OK) {' echo $'\t\t''pFunctionList = *ppFunctionList;' for function in "${functionList[@]}"; do echo $'\t\t'"pFunctionList->${function} = ${function};" done echo $'\t''}' echo '' echo $'\t''return(retval);' else echo $'\t'"return(func($argNamesList));" fi echo '}' done |