view common/logging.h @ 1071:fc4e1fe4e4d4

(issue116) Sign binaries with test certificate if RELESE_BUILD option is not used
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 10 Sep 2014 17:52:11 +0200
parents 317ee9dc4684
children 318e8c5c4f85
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.
 *
 * Will be defined if current build is not an RELEASE_BUILD.
 */
#ifndef RELEASE_BUILD
#define DEBUGOUTPUT
#endif

/**
 * @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 */

http://wald.intevation.org/projects/trustbridge/