diff options
-rw-r--r-- | module/cryptoki-log.c | 91 |
1 files changed, 49 insertions, 42 deletions
diff --git a/module/cryptoki-log.c b/module/cryptoki-log.c index 84e4b7a..7084ae8 100644 --- a/module/cryptoki-log.c +++ b/module/cryptoki-log.c @@ -92,17 +92,45 @@ static pthread_mutex_t global_mutex = PTHREAD_MUTEX_INITIALIZER; static CK_FUNCTION_LIST_PTR module_list = NULL; static FILE* output_file = NULL; +#define LINE_BUF_LEN 4096 +#define PREFIX "PKCS11: " +#define PREFIX_LEN (sizeof(PREFIX) - 1) + +static char win32_line_buf_full[LINE_BUF_LEN + PREFIX_LEN] = { 0, }; +static char* win32_line_buf = win32_line_buf_full + PREFIX_LEN; + +static void +cklog_line(const char* line) +{ + if (output_file && output_file != stderr) { + fputs (line, output_file); + } else { #ifdef _WIN32 + OutputDebugStringA(line); +#else + fputs (line, stderr); +#endif + } -static char win32_line_buf[4096] = { 0, }; + if (output_file) + fflush (output_file); +} static void -cklog_win32(const char* msg, va_list va) +cklog(const char* msg, ...) { + va_list va; size_t l; char* p; char ch; + va_start (va, msg); + + /* Fill in the prefix if necessary */ + if(!win32_line_buf_full[0]) + memcpy(win32_line_buf_full, PREFIX, PREFIX_LEN); + + /* Length of data already present */ l = strlen(win32_line_buf); /* Line is just too long? */ @@ -110,46 +138,21 @@ cklog_win32(const char* msg, va_list va) l = 0; /* Print into the buffer */ - _vsnprintf(win32_line_buf + l, sizeof(win32_line_buf) - l, msg, va); - win32_line_buf[sizeof(win32_line_buf) - 1] = 0; + _vsnprintf(win32_line_buf + l, LINE_BUF_LEN - l, msg, va); + win32_line_buf[LINE_BUF_LEN - 1] = 0; + + va_end (va); /* Now send out all lines from the buffer */ while((p = strchr(win32_line_buf, '\n')) != NULL) { ch = p[1]; p[1] = 0; - OutputDebugStringA(win32_line_buf); + cklog_line(win32_line_buf_full); p[1] = ch; - memmove(win32_line_buf, p + 1, sizeof(win32_line_buf) - ((p + 1) - win32_line_buf)); + memmove(win32_line_buf, p + 1, LINE_BUF_LEN - ((p + 1) - win32_line_buf)); } } -#endif - -static void -cklog (const char* msg, ...) -{ - va_list va; - va_start (va, msg); - - if(output_file && output_file != stderr) - { - vfprintf (output_file, msg, va); - fflush (output_file); - } - else - { -#ifdef _WIN32 - cklog_win32 (msg, va); -#else - vfprintf (stderr, msg, va); - fflush (stderr); -#endif - } - - va_end (va); -} - - #define LOG_FLAG(flags, had, flag) \ if ((flags & flag) == flag) { \ cklog ("%s%s", (had) ? "|" : " = ", #flag); \ @@ -190,7 +193,7 @@ log_some_bytes (CK_BYTE_PTR arr, CK_ULONG num) } else if (ch == '\r') { p[0] = '\\'; p[1] = 'r'; ++p; - } else if (ch >= 32 && ch <= 127) { + } else if (ch >= 32 && ch < 127) { *p = ch; } else { p[0] = '\\'; @@ -247,6 +250,16 @@ log_attribute_array (const char *pref, const char *name, CK_ATTRIBUTE_PTR arr, cklog ("(-1) INVALID"); } else if (arr[i].pValue == NULL) { cklog ("(%d) NULL", arr[i].ulValueLen); + + /* A pretty good guess that 4 == CK_ULONG */ + } else if (arr[i].ulValueLen == 4) { + cklog ("(%d) 0x%08X", arr[i].ulValueLen, *((CK_ULONG_PTR)(arr[i].pValue))); + + /* A pretty good guess that 1 = CK_BBOOL */ + } else if (arr[i].ulValueLen == 1) { + cklog ("(%d) 0x%02X", arr[i].ulValueLen, (CK_ULONG)(*((CK_BBOOL*)(arr[i].pValue)))); + + /* Any other length */ } else { cklog ("(%d) ", arr[i].ulValueLen); log_some_bytes (arr[i].pValue, arr[i].ulValueLen); @@ -775,10 +788,10 @@ CL_C_Initialize (CK_VOID_PTR pInitArgs) } cklog ("INITIALIZE cryptoki-log debugging (%s / %s)\n", - module, output ? output : "stderr"); + module, output ? output : "ods"); #else cklog ("INITIALIZE cryptoki-log debugging (%s / %s)\n", - module, output ? output : "ods"); + module, output ? output : "stderr"); #endif @@ -1647,12 +1660,6 @@ static struct CK_FUNCTION_LIST functionList = { CL_C_WaitForSlotEvent }; -/* #ifdef MSVC -__declspec(dllexport) CK_RV -#if 0 -CK_RV -#endif -*/ __declspec(dllexport) CK_RV C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list) { |