Changes In Branch better-wrapping Excluding Merge-Ins
This is equivalent to a diff from 9043258dc4 to 3fdad99785
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 [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) { |
︙ | ︙ | |||
53 54 55 56 57 58 59 | abort(); return; } *libraryDirLastSlash = '\0'; | | > > > > > > > > > > > > > | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | abort(); 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; } 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 [d43bff44b6].
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 | #! /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();' echo '' echo $'\t'"func = dlsym(libcackey_wrap_handle, \"${function}\");" echo '' | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | 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 | #! /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_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();' 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 |
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; |
︙ | ︙ |