xref: /netbsd-src/external/bsd/openldap/dist/include/ldap_log.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
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