1*549b59edSchristos /* $NetBSD: ldap_log.h,v 1.3 2021/08/14 16:14:55 christos Exp $ */ 24e6df137Slukem 3d11b170bStron /* $OpenLDAP$ */ 42de962bdSlukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>. 52de962bdSlukem * 6*549b59edSchristos * Copyright 1998-2021 The OpenLDAP Foundation. 72de962bdSlukem * All rights reserved. 82de962bdSlukem * 92de962bdSlukem * Redistribution and use in source and binary forms, with or without 102de962bdSlukem * modification, are permitted only as authorized by the OpenLDAP 112de962bdSlukem * Public License. 122de962bdSlukem * 132de962bdSlukem * A copy of this license is available in file LICENSE in the 142de962bdSlukem * top-level directory of the distribution or, alternatively, at 152de962bdSlukem * <http://www.OpenLDAP.org/license.html>. 162de962bdSlukem */ 172de962bdSlukem /* Portions Copyright (c) 1990 Regents of the University of Michigan. 182de962bdSlukem * All rights reserved. 192de962bdSlukem * 202de962bdSlukem * Redistribution and use in source and binary forms are permitted 212de962bdSlukem * provided that this notice is preserved and that due credit is given 222de962bdSlukem * to the University of Michigan at Ann Arbor. The name of the University 232de962bdSlukem * may not be used to endorse or promote products derived from this 242de962bdSlukem * software without specific prior written permission. This software 252de962bdSlukem * is provided ``as is'' without express or implied warranty. 262de962bdSlukem */ 272de962bdSlukem 282de962bdSlukem #ifndef LDAP_LOG_H 292de962bdSlukem #define LDAP_LOG_H 302de962bdSlukem 312de962bdSlukem #include <stdio.h> 322de962bdSlukem #include <ldap_cdefs.h> 332de962bdSlukem 342de962bdSlukem LDAP_BEGIN_DECL 352de962bdSlukem 362de962bdSlukem /* 372de962bdSlukem * debug reporting levels. 382de962bdSlukem * 392de962bdSlukem * They start with the syslog levels, and 402de962bdSlukem * go down in importance. The normal 412de962bdSlukem * debugging levels begin with LDAP_LEVEL_ENTRY 422de962bdSlukem * 432de962bdSlukem */ 442de962bdSlukem 452de962bdSlukem /* 462de962bdSlukem * The "OLD_DEBUG" means that all logging occurs at LOG_DEBUG 472de962bdSlukem */ 482de962bdSlukem 492de962bdSlukem #ifdef OLD_DEBUG 502de962bdSlukem /* original behavior: all logging occurs at the same severity level */ 512de962bdSlukem #if defined(LDAP_DEBUG) && defined(LDAP_SYSLOG) 522de962bdSlukem #define LDAP_LEVEL_EMERG ldap_syslog_level 532de962bdSlukem #define LDAP_LEVEL_ALERT ldap_syslog_level 542de962bdSlukem #define LDAP_LEVEL_CRIT ldap_syslog_level 552de962bdSlukem #define LDAP_LEVEL_ERR ldap_syslog_level 562de962bdSlukem #define LDAP_LEVEL_WARNING ldap_syslog_level 572de962bdSlukem #define LDAP_LEVEL_NOTICE ldap_syslog_level 582de962bdSlukem #define LDAP_LEVEL_INFO ldap_syslog_level 592de962bdSlukem #define LDAP_LEVEL_DEBUG ldap_syslog_level 602de962bdSlukem #else /* !LDAP_DEBUG || !LDAP_SYSLOG */ 612de962bdSlukem #define LDAP_LEVEL_EMERG (7) 622de962bdSlukem #define LDAP_LEVEL_ALERT (7) 632de962bdSlukem #define LDAP_LEVEL_CRIT (7) 642de962bdSlukem #define LDAP_LEVEL_ERR (7) 652de962bdSlukem #define LDAP_LEVEL_WARNING (7) 662de962bdSlukem #define LDAP_LEVEL_NOTICE (7) 672de962bdSlukem #define LDAP_LEVEL_INFO (7) 682de962bdSlukem #define LDAP_LEVEL_DEBUG (7) 692de962bdSlukem #endif /* !LDAP_DEBUG || !LDAP_SYSLOG */ 702de962bdSlukem 712de962bdSlukem #else /* ! OLD_DEBUG */ 722de962bdSlukem /* map syslog onto LDAP severity levels */ 732de962bdSlukem #ifdef LOG_DEBUG 742de962bdSlukem #define LDAP_LEVEL_EMERG LOG_EMERG 752de962bdSlukem #define LDAP_LEVEL_ALERT LOG_ALERT 762de962bdSlukem #define LDAP_LEVEL_CRIT LOG_CRIT 772de962bdSlukem #define LDAP_LEVEL_ERR LOG_ERR 782de962bdSlukem #define LDAP_LEVEL_WARNING LOG_WARNING 792de962bdSlukem #define LDAP_LEVEL_NOTICE LOG_NOTICE 802de962bdSlukem #define LDAP_LEVEL_INFO LOG_INFO 812de962bdSlukem #define LDAP_LEVEL_DEBUG LOG_DEBUG 822de962bdSlukem #else /* ! LOG_DEBUG */ 832de962bdSlukem #define LDAP_LEVEL_EMERG (0) 842de962bdSlukem #define LDAP_LEVEL_ALERT (1) 852de962bdSlukem #define LDAP_LEVEL_CRIT (2) 862de962bdSlukem #define LDAP_LEVEL_ERR (3) 872de962bdSlukem #define LDAP_LEVEL_WARNING (4) 882de962bdSlukem #define LDAP_LEVEL_NOTICE (5) 892de962bdSlukem #define LDAP_LEVEL_INFO (6) 902de962bdSlukem #define LDAP_LEVEL_DEBUG (7) 912de962bdSlukem #endif /* ! LOG_DEBUG */ 922de962bdSlukem #endif /* ! OLD_DEBUG */ 932de962bdSlukem #if 0 942de962bdSlukem /* in case we need to reuse the unused bits of severity */ 952de962bdSlukem #define LDAP_LEVEL_MASK(s) ((s) & 0x7) 962de962bdSlukem #else 972de962bdSlukem #define LDAP_LEVEL_MASK(s) (s) 982de962bdSlukem #endif 992de962bdSlukem 1002de962bdSlukem /* (yet) unused */ 1012de962bdSlukem #define LDAP_LEVEL_ENTRY (0x08) /* log function entry points */ 1022de962bdSlukem #define LDAP_LEVEL_ARGS (0x10) /* log function call parameters */ 1032de962bdSlukem #define LDAP_LEVEL_RESULTS (0x20) /* Log function results */ 1042de962bdSlukem #define LDAP_LEVEL_DETAIL1 (0x40) /* log level 1 function operational details */ 1052de962bdSlukem #define LDAP_LEVEL_DETAIL2 (0x80) /* Log level 2 function operational details */ 1062de962bdSlukem /* end of (yet) unused */ 1072de962bdSlukem 1082de962bdSlukem /* original subsystem selection mechanism */ 1092de962bdSlukem #define LDAP_DEBUG_TRACE 0x0001 1102de962bdSlukem #define LDAP_DEBUG_PACKETS 0x0002 1112de962bdSlukem #define LDAP_DEBUG_ARGS 0x0004 1122de962bdSlukem #define LDAP_DEBUG_CONNS 0x0008 1132de962bdSlukem #define LDAP_DEBUG_BER 0x0010 1142de962bdSlukem #define LDAP_DEBUG_FILTER 0x0020 1152de962bdSlukem #define LDAP_DEBUG_CONFIG 0x0040 1162de962bdSlukem #define LDAP_DEBUG_ACL 0x0080 1172de962bdSlukem #define LDAP_DEBUG_STATS 0x0100 1182de962bdSlukem #define LDAP_DEBUG_STATS2 0x0200 1192de962bdSlukem #define LDAP_DEBUG_SHELL 0x0400 1202de962bdSlukem #define LDAP_DEBUG_PARSE 0x0800 1212de962bdSlukem #if 0 /* no longer used (nor supported) */ 1222de962bdSlukem #define LDAP_DEBUG_CACHE 0x1000 1232de962bdSlukem #define LDAP_DEBUG_INDEX 0x2000 1242de962bdSlukem #endif 1252de962bdSlukem #define LDAP_DEBUG_SYNC 0x4000 1262de962bdSlukem 1272de962bdSlukem #define LDAP_DEBUG_NONE 0x8000 1284e6df137Slukem #define LDAP_DEBUG_ANY (-1) 1292de962bdSlukem 1302de962bdSlukem /* debugging stuff */ 1312de962bdSlukem #ifdef LDAP_DEBUG 1322de962bdSlukem /* 1332de962bdSlukem * This is a bogus extern declaration for the compiler. No need to ensure 1342de962bdSlukem * a 'proper' dllimport. 1352de962bdSlukem */ 1362de962bdSlukem #ifndef ldap_debug 1372de962bdSlukem extern int ldap_debug; 1382de962bdSlukem #endif /* !ldap_debug */ 1392de962bdSlukem 1402de962bdSlukem #ifdef LDAP_SYSLOG 1412de962bdSlukem extern int ldap_syslog; 1422de962bdSlukem extern int ldap_syslog_level; 1432de962bdSlukem 1442de962bdSlukem #ifdef HAVE_EBCDIC 1452de962bdSlukem #define syslog eb_syslog 1462de962bdSlukem extern void eb_syslog(int pri, const char *fmt, ...); 1472de962bdSlukem #endif /* HAVE_EBCDIC */ 1482de962bdSlukem 1492de962bdSlukem #endif /* LDAP_SYSLOG */ 150*549b59edSchristos #endif /* LDAP_DEBUG */ 1512de962bdSlukem 152*549b59edSchristos /* we keep libldap working with preprocessors that can't do variadic macros */ 153*549b59edSchristos #ifndef LDAP_INT_DEBUG 1542de962bdSlukem /* this doesn't below as part of ldap.h */ 155*549b59edSchristos #ifdef LDAP_DEBUG 1562de962bdSlukem #ifdef LDAP_SYSLOG 157*549b59edSchristos 1582de962bdSlukem #define LogTest(level) ( ( ldap_debug | ldap_syslog ) & (level) ) 159*549b59edSchristos #define Log(level, severity, ...) \ 160*549b59edSchristos do { \ 161*549b59edSchristos if ( ldap_debug & (level) ) \ 162*549b59edSchristos lutil_debug( ldap_debug, (level), __VA_ARGS__ ); \ 163*549b59edSchristos if ( ldap_syslog & (level) ) \ 164*549b59edSchristos syslog( LDAP_LEVEL_MASK((severity)), __VA_ARGS__ ); \ 165*549b59edSchristos } while ( 0 ) 1662de962bdSlukem 1672de962bdSlukem #else /* ! LDAP_SYSLOG */ 168*549b59edSchristos 1692de962bdSlukem #define LogTest(level) ( ldap_debug & (level) ) 170*549b59edSchristos #define Log(level, severity, ...) \ 171*549b59edSchristos do { \ 172*549b59edSchristos if ( ldap_debug & (level) ) \ 173*549b59edSchristos lutil_debug( ldap_debug, (level), __VA_ARGS__ ); \ 174*549b59edSchristos } while ( 0 ) 175*549b59edSchristos 1762de962bdSlukem #endif /* ! LDAP_SYSLOG */ 1772de962bdSlukem #else /* ! LDAP_DEBUG */ 178*549b59edSchristos 1792de962bdSlukem /* TODO: in case LDAP_DEBUG is undefined, make sure logs with appropriate 1802de962bdSlukem * severity gets thru anyway */ 1812de962bdSlukem #define LogTest(level) ( 0 ) 182*549b59edSchristos #define Log(level, severity, ...) ((void) 0) 183*549b59edSchristos 1842de962bdSlukem #endif /* ! LDAP_DEBUG */ 1852de962bdSlukem 186*549b59edSchristos #define Debug(level, ...) \ 187*549b59edSchristos Log((level), ldap_syslog_level, __VA_ARGS__ ) 188*549b59edSchristos #endif /* ! LDAP_INT_DEBUG */ 189*549b59edSchristos 190d11b170bStron /* Actually now in liblber/debug.c */ 1912de962bdSlukem LDAP_LUTIL_F(int) lutil_debug_file LDAP_P(( FILE *file )); 1922de962bdSlukem 1932de962bdSlukem LDAP_LUTIL_F(void) lutil_debug LDAP_P(( 1942de962bdSlukem int debug, int level, 1952de962bdSlukem const char* fmt, ... )) LDAP_GCCATTR((format(printf, 3, 4))); 1962de962bdSlukem 197d11b170bStron #ifdef LDAP_DEFINE_LDAP_DEBUG 198d11b170bStron /* This struct matches the head of ldapoptions in <ldap-int.h> */ 199d11b170bStron struct ldapoptions_prefix { 200d11b170bStron short ldo_valid; 201d11b170bStron int ldo_debug; 202d11b170bStron }; 203d11b170bStron #define ldap_debug \ 204d11b170bStron (*(int *) ((char *)&ldap_int_global_options \ 205d11b170bStron + offsetof(struct ldapoptions_prefix, ldo_debug))) 206d11b170bStron 207d11b170bStron struct ldapoptions; 208d11b170bStron LDAP_V ( struct ldapoptions ) ldap_int_global_options; 209d11b170bStron #endif /* LDAP_DEFINE_LDAP_DEBUG */ 210d11b170bStron 2112de962bdSlukem LDAP_END_DECL 2122de962bdSlukem 2132de962bdSlukem #endif /* LDAP_LOG_H */ 214