Mercurial > trustbridge
view common/logging.h @ 1395:a2574a029322
Fix Base 64 signature size calculation.
If the signature byte size is not equally dividable
by three the base 64 encoding needs three additional bytes.
The value is now fixed to avoid such errors in the future.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 26 Jan 2015 13:17:32 +0100 |
parents | 318e8c5c4f85 |
children |
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik * Software engineering by Intevation GmbH * * This file is Free Software under the GNU GPL (v>=2) * and comes with ABSOLUTELY NO WARRANTY! * See LICENSE.txt for details. */ #ifndef COMMON_LOGGING_H #define COMMON_LOGGING_H #ifdef __cplusplus extern "C" { #endif /* * @file * @brief Logging and debugging functions */ #include <stdio.h> #include <stdbool.h> /** @def Maximum length of log messages */ #define MAX_LOG 511 /** @def The name used for logging */ #define LOG_NAME "TrustBridge" extern bool g_debug; #ifdef WIN32 #include <windows.h> /** @brief Gets the localized error message for the last error * returned by GetLastError * * @returns utf8 error message that needs to be freed by the caller. **/ char *getLastErrorMsg(); #endif /** * @def DEBUGOUTPUT * @brief If defined code for extra debugging output will be generated. */ #define DEBUGOUTPUT /** * @def DEBUGPREFIX * @brief A string prepended to debug output. * * Should be defined to indicate which module created the output. */ #ifndef DEBUGPREFIX #define DEBUGPREFIX "" #endif /** * @def DEBUGPRINTF(fmt, ...) * @brief Debug printf * * Prints to stderr if DEBUGOUTPUT is defined. */ #ifdef DEBUGOUTPUT # ifndef WIN32 # define DEBUGPRINTF(fmt, ...) if (g_debug) fprintf(stderr, DEBUGPREFIX "DEBUG: " fmt, ##__VA_ARGS__); # else /* WIN32 */ # define DEBUGPRINTF(fmt, ...) \ if (g_debug) \ { \ char buf[512]; \ snprintf(buf, 511, "DEBUG: " fmt, ##__VA_ARGS__); \ buf[511] = '\0'; \ OutputDebugStringA(buf); \ } # endif /* WIN32 */ #else # define DEBUGPRINTF(fmt, ...) #endif /** * @def ERRORPRINTF(fmt, ...) * @brief Debug printf * * Prints an error to stderr */ #ifdef WIN32 # define ERRORPRINTF(fmt, ...) \ { \ char buf[512]; \ snprintf(buf, 511, "ERROR: " fmt, ##__VA_ARGS__); \ buf[511] = '\0'; \ OutputDebugStringA(buf); \ } #else # define ERRORPRINTF(fmt, ...) fprintf(stderr, DEBUGPREFIX "ERROR: " fmt, ##__VA_ARGS__); #endif /** * @def PRINTLASTERROR(msg) * @brief Prints the last windows error with a custom message * * Prints an error to stderr */ #define PRINTLASTERROR(msg) \ char *my_error = getLastErrorMsg(); \ if (my_error) { \ ERRORPRINTF(msg" : %s\n", my_error); \ free (my_error); \ } else \ ERRORPRINTF ("Failed to get error information\n"); /** * @brief log an informational message into the syslog / event log * * The message length is limited to MAX_LOG characters. Log messages * are expected to be in UTF-8 encoding. * * Function paramters are the same as for the printf familiy. */ void syslog_info_printf(const char *format, ...); /** * @brief log an error message into the syslog / event log * * The message length is limited to MAX_LOG characters. Log messages * are expected to be in UTF-8 encoding. * * Function paramters are the same as for the printf familiy. */ void syslog_error_printf(const char *format, ...); /** * @brief log a certificate install / remove event from base64 data. * * Logs a message in the event / syslog to mark a certificate * installation or removal. * * @param[in] store name of the certificate store. * @param[in] b64cert base64 encoded certificate. * @param[in] install weather to log this as installation or removal */ void log_certificate(const char *store, char *b64cert, bool install); /** * @brief log a certificate install / remove event from der data. * * Logs a message in the event / syslog to mark a certificate * installation or removal. * * @param[in] store name of the certificate store. * @param[in] der_data pointer to der data of the certificate. * @param[in] der_size size of the der_data * @param[in] install weather to log this as installation or removal */ void log_certificate_der(const char *store, unsigned char *der_data, size_t der_size, bool install); #ifdef __cplusplus } #endif #endif /* COMMON_LOGGING_H */