]> git.sur5r.net Git - openldap/blob - libraries/liblber/debug.c
Happy New Year (belated)
[openldap] / libraries / liblber / debug.c
1 /* $OpenLDAP$ */
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