xref: /netbsd-src/external/bsd/openldap/dist/libraries/liblber/debug.c (revision 466a16a118933bd295a8a104f095714fadf9cf68)
1 /* $OpenLDAP: pkg/ldap/libraries/liblber/debug.c,v 1.21.2.3 2008/02/11 23:26:41 kurt Exp $ */
2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3  *
4  * Copyright 1998-2008 The OpenLDAP Foundation.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted only as authorized by the OpenLDAP
9  * Public License.
10  *
11  * A copy of this license is available in the file LICENSE in the
12  * top-level directory of the distribution or, alternatively, at
13  * <http://www.OpenLDAP.org/license.html>.
14  */
15 
16 #include "portable.h"
17 
18 #include <stdio.h>
19 
20 #include <ac/stdarg.h>
21 #include <ac/stdlib.h>
22 #include <ac/string.h>
23 #include <ac/time.h>
24 #include <ac/ctype.h>
25 
26 #ifdef LDAP_SYSLOG
27 #include <ac/syslog.h>
28 #endif
29 
30 #include "ldap_log.h"
31 #include "ldap_defaults.h"
32 #include "lber.h"
33 #include "ldap_pvt.h"
34 
35 static FILE *log_file = NULL;
36 
37 int lutil_debug_file( FILE *file )
38 {
39 	log_file = file;
40 	ber_set_option( NULL, LBER_OPT_LOG_PRINT_FILE, file );
41 
42 	return 0;
43 }
44 
45 void (lutil_debug)( int debug, int level, const char *fmt, ... )
46 {
47 	char buffer[4096];
48 	va_list vl;
49 
50 	if ( !(level & debug ) ) return;
51 
52 #ifdef HAVE_WINSOCK
53 	if( log_file == NULL ) {
54 		log_file = fopen( LDAP_RUNDIR LDAP_DIRSEP "openldap.log", "w" );
55 
56 		if ( log_file == NULL ) {
57 			log_file = fopen( "openldap.log", "w" );
58 			if ( log_file == NULL ) return;
59 		}
60 
61 		ber_set_option( NULL, LBER_OPT_LOG_PRINT_FILE, log_file );
62 	}
63 #endif
64 
65 	va_start( vl, fmt );
66 	vsnprintf( buffer, sizeof(buffer), fmt, vl );
67 	buffer[sizeof(buffer)-1] = '\0';
68 	if( log_file != NULL ) {
69 		fputs( buffer, log_file );
70 		fflush( log_file );
71 	}
72 	fputs( buffer, stderr );
73 	va_end( vl );
74 }
75 
76 #if defined(HAVE_EBCDIC) && defined(LDAP_SYSLOG)
77 #undef syslog
78 void eb_syslog( int pri, const char *fmt, ... )
79 {
80 	char buffer[4096];
81 	va_list vl;
82 
83 	va_start( vl, fmt );
84 	vsnprintf( buffer, sizeof(buffer), fmt, vl );
85 	buffer[sizeof(buffer)-1] = '\0';
86 
87 	/* The syslog function appears to only work with pure EBCDIC */
88 	__atoe(buffer);
89 #pragma convlit(suspend)
90 	syslog( pri, "%s", buffer );
91 #pragma convlit(resume)
92 	va_end( vl );
93 }
94 #endif
95