From: Howard Chu Date: Tue, 9 Mar 2021 00:30:56 +0000 (+0000) Subject: ITS#9513 Intercept liblber error printer X-Git-Tag: OPENLDAP_REL_ENG_2_5_3BETA~2^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ac3909eadaea27ded6ab76567c488a17f73759f;p=thirdparty%2Fopenldap.git ITS#9513 Intercept liblber error printer And add time and thread ID prefix to all debug output --- diff --git a/libraries/liblber/options.c b/libraries/liblber/options.c index 3452138bca..d2c1039208 100644 --- a/libraries/liblber/options.c +++ b/libraries/liblber/options.c @@ -66,6 +66,10 @@ ber_get_option( case LBER_OPT_LOG_PRINT_FILE: *((FILE**)outvalue) = (FILE*)ber_pvt_err_file; return LBER_OPT_SUCCESS; + + case LBER_OPT_LOG_PRINT_FN: + *(BER_LOG_PRINT_FN *)outvalue = ber_pvt_log_print; + return LBER_OPT_SUCCESS; } ber_errno = LBER_ERROR_PARAM; diff --git a/servers/slapd/main.c b/servers/slapd/main.c index 0c886efeee..98a67247d7 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -377,6 +377,19 @@ usage( char *name ) ); } +typedef void (BER_logger)(const char *buf); +static BER_logger *ber_logger; +static void debug_print( const char *data ) +{ + char buf[4136]; /* 4096 + 40 */ + struct timeval tv; + + gettimeofday( &tv, NULL ); + buf[sizeof(buf)-1] = '\0'; + snprintf( buf, sizeof(buf)-1, "%lx.%05x %p %s", + (long)tv.tv_sec, tv.tv_usec, (void *)ldap_pvt_thread_self(), data ); + ber_logger( buf ); +} #ifdef HAVE_NT_SERVICE_MANAGER void WINAPI ServiceMain( DWORD argc, LPTSTR *argv ) @@ -720,6 +733,8 @@ unhandled_option:; if ( optind != argc ) goto unhandled_option; + ber_get_option(NULL, LBER_OPT_LOG_PRINT_FN, &ber_logger); + ber_set_option(NULL, LBER_OPT_LOG_PRINT_FN, debug_print); ber_set_option(NULL, LBER_OPT_DEBUG_LEVEL, &slap_debug); ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, &slap_debug); ldif_debug = slap_debug; @@ -843,6 +858,8 @@ unhandled_option:; debug_unknowns = NULL; if ( rc ) goto destroy; + ber_set_option( NULL, LBER_OPT_DEBUG_LEVEL, &slap_debug ); + ldap_set_option( NULL, LDAP_OPT_DEBUG_LEVEL, &slap_debug ); } if ( syslog_unknowns ) { rc = parse_debug_unknowns( syslog_unknowns, &ldap_syslog );