diff options
-rw-r--r-- | source3/include/tldap.h | 15 | ||||
-rw-r--r-- | source3/lib/tldap.c | 32 |
2 files changed, 47 insertions, 0 deletions
diff --git a/source3/include/tldap.h b/source3/include/tldap.h index c79a142654..d57484c5f8 100644 --- a/source3/include/tldap.h +++ b/source3/include/tldap.h @@ -145,6 +145,21 @@ const char *tldap_ctx_diagnosticmessage(struct tldap_context *ctx); const char *tldap_ctx_referral(struct tldap_context *ctx); const char *tldap_err2string(int rc); +/* DEBUG */ +enum tldap_debug_level { + TLDAP_DEBUG_FATAL, + TLDAP_DEBUG_ERROR, + TLDAP_DEBUG_WARNING, + TLDAP_DEBUG_TRACE +}; + +void tldap_set_debug(struct tldap_context *ld, + void (*log_fn)(void *log_private, + enum tldap_debug_level level, + const char *fmt, + va_list ap) PRINTF_ATTRIBUTE(3,0), + void *log_private); + /* * "+ 0x60" is from ASN1_APPLICATION */ diff --git a/source3/lib/tldap.c b/source3/lib/tldap.c index df86f95e2c..c823f88d04 100644 --- a/source3/lib/tldap.c +++ b/source3/lib/tldap.c @@ -59,6 +59,11 @@ struct tldap_context { char *res_matcheddn; char *res_diagnosticmessage; char *res_referral; + + /* debug */ + void (*log_fn)(void *context, enum tldap_debug_level level, + const char *fmt, va_list ap); + void *log_private; }; struct tldap_message { @@ -72,6 +77,33 @@ struct tldap_message { struct tldap_attribute *attribs; }; +void tldap_set_debug(struct tldap_context *ld, + void (*log_fn)(void *log_private, + enum tldap_debug_level level, + const char *fmt, + va_list ap) PRINTF_ATTRIBUTE(3,0), + void *log_private) +{ + ld->log_fn = log_fn; + ld->log_private = log_private; +} + +static void tldap_debug(struct tldap_context *ld, + enum tldap_debug_level level, + const char *fmt, ...) +{ + va_list ap; + if (!ld) { + return; + } + if (ld->log_fn == NULL) { + return; + } + va_start(ap, fmt); + ld->log_fn(ld->log_private, level, fmt, ap); + va_end(ap); +} + static int tldap_next_msgid(struct tldap_context *ld) { int result; |