]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9513 Intercept liblber error printer
authorHoward Chu <hyc@openldap.org>
Tue, 9 Mar 2021 00:30:56 +0000 (00:30 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 31 Mar 2021 18:53:50 +0000 (18:53 +0000)
And add time and thread ID prefix to all debug output

libraries/liblber/options.c
servers/slapd/main.c

index 3452138bcafee99ada3fc559459ecd02fffc3d97..d2c103920819a48a959dd6ec402876e02ce5d604 100644 (file)
@@ -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;
index 0c886efeeec52ff4277376fe684433cd02a12fb9..98a67247d7eb05960f2a844702d3ace6c555ba3e 100644 (file)
@@ -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 );