From c9f7e99fb933706663948efc659937299ec54077 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Wed, 9 Mar 2016 17:14:16 +0100 Subject: [PATCH 1/2] UTIL: Move debug part from util.h -> new debug.h --- src/util/debug.h | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/util/util.h | 119 +--------------------------------------------- 2 files changed, 141 insertions(+), 118 deletions(-) create mode 100644 src/util/debug.h diff --git a/src/util/debug.h b/src/util/debug.h new file mode 100644 index 0000000000000000000000000000000000000000..667021ba1522eac8b4a736aa78b7df24015bb0dd --- /dev/null +++ b/src/util/debug.h @@ -0,0 +1,140 @@ +/* + Authors: + Simo Sorce + + Copyright (C) 2009 Red Hat + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef __SSSD_DEBUG_H__ +#define __SSSD_DEBUG_H__ + +#include "config.h" + +#ifdef HAVE_FUNCTION_ATTRIBUTE_FORMAT +#define SSS_ATTRIBUTE_PRINTF(a1, a2) __attribute__((format (printf, a1, a2))) +#else +#define SSS_ATTRIBUTE_PRINTF(a1, a2) +#endif + +extern const char *debug_prg_name; +extern int debug_level; +extern int debug_timestamps; +extern int debug_microseconds; +extern int debug_to_file; +extern int debug_to_stderr; +extern const char *debug_log_file; +void sss_vdebug_fn(const char *file, + long line, + const char *function, + int level, + const char *format, + va_list ap); +void sss_debug_fn(const char *file, + long line, + const char *function, + int level, + const char *format, ...) SSS_ATTRIBUTE_PRINTF(5, 6); +int debug_convert_old_level(int old_level); +errno_t set_debug_file_from_fd(const int fd); +int get_fd_from_debug_file(void); + +#define SSS_DOM_ENV "_SSS_DOM" + +#define SSSDBG_FATAL_FAILURE 0x0010 /* level 0 */ +#define SSSDBG_CRIT_FAILURE 0x0020 /* level 1 */ +#define SSSDBG_OP_FAILURE 0x0040 /* level 2 */ +#define SSSDBG_MINOR_FAILURE 0x0080 /* level 3 */ +#define SSSDBG_CONF_SETTINGS 0x0100 /* level 4 */ +#define SSSDBG_FUNC_DATA 0x0200 /* level 5 */ +#define SSSDBG_TRACE_FUNC 0x0400 /* level 6 */ +#define SSSDBG_TRACE_LIBS 0x1000 /* level 7 */ +#define SSSDBG_TRACE_INTERNAL 0x2000 /* level 8 */ +#define SSSDBG_TRACE_ALL 0x4000 /* level 9 */ +#define SSSDBG_BE_FO 0x8000 /* level 9 */ +#define SSSDBG_IMPORTANT_INFO SSSDBG_OP_FAILURE + +#define SSSDBG_INVALID -1 +#define SSSDBG_UNRESOLVED 0 +#define SSSDBG_MASK_ALL 0xFFF0 /* enable all debug levels */ +#define SSSDBG_DEFAULT SSSDBG_FATAL_FAILURE + +#define SSSDBG_TIMESTAMP_UNRESOLVED -1 +#define SSSDBG_TIMESTAMP_DEFAULT 1 + +#define SSSDBG_MICROSECONDS_UNRESOLVED -1 +#define SSSDBG_MICROSECONDS_DEFAULT 0 + +#define SSSD_DEBUG_OPTS \ + {"debug-level", 'd', POPT_ARG_INT, &debug_level, 0, \ + _("Debug level"), NULL}, \ + {"debug-to-files", 'f', POPT_ARG_NONE, &debug_to_file, 0, \ + _("Send the debug output to files instead of stderr"), NULL }, \ + {"debug-to-stderr", 0, POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN, &debug_to_stderr, 0, \ + _("Send the debug output to stderr directly."), NULL }, \ + {"debug-timestamps", 0, POPT_ARG_INT, &debug_timestamps, 0, \ + _("Add debug timestamps"), NULL}, \ + {"debug-microseconds", 0, POPT_ARG_INT, &debug_microseconds, 0, \ + _("Show timestamps with microseconds"), NULL}, + +/** \def DEBUG(level, format, ...) + \brief macro to generate debug messages + + \param level the debug level, please use one of the SSSDBG_* macros + \param format the debug message format string, should result in a + newline-terminated message + \param ... the debug message format arguments +*/ +#define DEBUG(level, format, ...) do { \ + int __debug_macro_level = level; \ + if (DEBUG_IS_SET(__debug_macro_level)) { \ + sss_debug_fn(__FILE__, __LINE__, __FUNCTION__, \ + __debug_macro_level, \ + format, ##__VA_ARGS__); \ + } \ +} while (0) + +/** \def DEBUG_IS_SET(level) + \brief checks whether level is set in debug_level + + \param level the debug level, please use one of the SSSDBG*_ macros +*/ +#define DEBUG_IS_SET(level) (debug_level & (level) || \ + (debug_level == SSSDBG_UNRESOLVED && \ + (level & (SSSDBG_FATAL_FAILURE | \ + SSSDBG_CRIT_FAILURE)))) + +#define DEBUG_INIT(dbg_lvl) do { \ + if (dbg_lvl != SSSDBG_INVALID) { \ + debug_level = debug_convert_old_level(dbg_lvl); \ + } else { \ + debug_level = SSSDBG_UNRESOLVED; \ + } \ +\ + talloc_set_log_fn(talloc_log_fn); \ +} while (0) + +/* CLI tools shall debug to stderr even when SSSD was compiled with journald + * support + */ +#define DEBUG_CLI_INIT(dbg_lvl) do { \ + DEBUG_INIT(dbg_lvl); \ + debug_to_stderr = 1; \ +} while (0) + +#define PRINT(fmt, ...) fprintf(stdout, gettext(fmt), ##__VA_ARGS__) +#define ERROR(fmt, ...) fprintf(stderr, gettext(fmt), ##__VA_ARGS__) + +#endif /* __SSSD_DEBUG_H__ */ diff --git a/src/util/util.h b/src/util/util.h index 5df86b4cb084a01f31f3e11aaf3ffcbe79b996a9..477d0b28b9b3a1949b03c6e444698a29d50aa434 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -51,6 +51,7 @@ #include "util/util_errors.h" #include "util/util_safealign.h" #include "util/sss_format.h" +#include "util/debug.h" #define _(STRING) gettext (STRING) @@ -58,130 +59,12 @@ #define CLEAR_MC_FLAG "clear_mc_flag" -#ifdef HAVE_FUNCTION_ATTRIBUTE_FORMAT -#define SSS_ATTRIBUTE_PRINTF(a1, a2) __attribute__ ((format (printf, a1, a2))) -#else -#define SSS_ATTRIBUTE_PRINTF(a1, a2) -#endif - /** Default secure umask */ #define SSS_DFL_UMASK 0177 /** Secure mask with executable bit */ #define SSS_DFL_X_UMASK 0077 -extern const char *debug_prg_name; -extern int debug_level; -extern int debug_timestamps; -extern int debug_microseconds; -extern int debug_to_file; -extern int debug_to_stderr; -extern const char *debug_log_file; -void sss_vdebug_fn(const char *file, - long line, - const char *function, - int level, - const char *format, - va_list ap); -void sss_debug_fn(const char *file, - long line, - const char *function, - int level, - const char *format, ...) SSS_ATTRIBUTE_PRINTF(5, 6); -int debug_convert_old_level(int old_level); -errno_t set_debug_file_from_fd(const int fd); -int get_fd_from_debug_file(void); - -#define SSS_DOM_ENV "_SSS_DOM" - -#define SSSDBG_FATAL_FAILURE 0x0010 /* level 0 */ -#define SSSDBG_CRIT_FAILURE 0x0020 /* level 1 */ -#define SSSDBG_OP_FAILURE 0x0040 /* level 2 */ -#define SSSDBG_MINOR_FAILURE 0x0080 /* level 3 */ -#define SSSDBG_CONF_SETTINGS 0x0100 /* level 4 */ -#define SSSDBG_FUNC_DATA 0x0200 /* level 5 */ -#define SSSDBG_TRACE_FUNC 0x0400 /* level 6 */ -#define SSSDBG_TRACE_LIBS 0x1000 /* level 7 */ -#define SSSDBG_TRACE_INTERNAL 0x2000 /* level 8 */ -#define SSSDBG_TRACE_ALL 0x4000 /* level 9 */ -#define SSSDBG_BE_FO 0x8000 /* level 9 */ -#define SSSDBG_IMPORTANT_INFO SSSDBG_OP_FAILURE - -#define SSSDBG_INVALID -1 -#define SSSDBG_UNRESOLVED 0 -#define SSSDBG_MASK_ALL 0xFFF0 /* enable all debug levels */ -#define SSSDBG_DEFAULT SSSDBG_FATAL_FAILURE - -#define SSSDBG_TIMESTAMP_UNRESOLVED -1 -#define SSSDBG_TIMESTAMP_DEFAULT 1 - -#define SSSDBG_MICROSECONDS_UNRESOLVED -1 -#define SSSDBG_MICROSECONDS_DEFAULT 0 - -#define SSSD_DEBUG_OPTS \ - {"debug-level", 'd', POPT_ARG_INT, &debug_level, 0, \ - _("Debug level"), NULL}, \ - {"debug-to-files", 'f', POPT_ARG_NONE, &debug_to_file, 0, \ - _("Send the debug output to files instead of stderr"), NULL }, \ - {"debug-to-stderr", 0, POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN, &debug_to_stderr, 0, \ - _("Send the debug output to stderr directly."), NULL }, \ - {"debug-timestamps", 0, POPT_ARG_INT, &debug_timestamps, 0, \ - _("Add debug timestamps"), NULL}, \ - {"debug-microseconds", 0, POPT_ARG_INT, &debug_microseconds, 0, \ - _("Show timestamps with microseconds"), NULL}, - -/** \def DEBUG(level, format, ...) - \brief macro to generate debug messages - - \param level the debug level, please use one of the SSSDBG_* macros - \param format the debug message format string, should result in a - newline-terminated message - \param ... the debug message format arguments -*/ -#define DEBUG(level, format, ...) do { \ - int __debug_macro_level = level; \ - if (DEBUG_IS_SET(__debug_macro_level)) { \ - sss_debug_fn(__FILE__, __LINE__, __FUNCTION__, \ - __debug_macro_level, \ - format, ##__VA_ARGS__); \ - } \ -} while (0) - -/** \def DEBUG_IS_SET(level) - \brief checks whether level is set in debug_level - - \param level the debug level, please use one of the SSSDBG*_ macros -*/ -#define DEBUG_IS_SET(level) (debug_level & (level) || \ - (debug_level == SSSDBG_UNRESOLVED && \ - (level & (SSSDBG_FATAL_FAILURE | \ - SSSDBG_CRIT_FAILURE)))) - -#define DEBUG_INIT(dbg_lvl) do { \ - if (dbg_lvl != SSSDBG_INVALID) { \ - debug_level = debug_convert_old_level(dbg_lvl); \ - } else { \ - debug_level = SSSDBG_UNRESOLVED; \ - } \ -\ - talloc_set_log_fn(talloc_log_fn); \ -} while (0) - -/* CLI tools shall debug to stderr even when SSSD was compiled with journald - * support - */ -#define DEBUG_CLI_INIT(dbg_lvl) do { \ - DEBUG_INIT(dbg_lvl); \ - debug_to_stderr = 1; \ -} while (0) - -#define PRINT(fmt, ...) fprintf(stdout, gettext(fmt), ##__VA_ARGS__) -#define ERROR(fmt, ...) fprintf(stderr, gettext(fmt), ##__VA_ARGS__) - -#ifndef discard_const -#define discard_const(ptr) ((void *)((uintptr_t)(ptr))) -#endif - #ifndef NULL #define NULL 0 #endif -- 2.7.2