From e362c356eafb49a9d90a4f20c6668682d4f50222 Mon Sep 17 00:00:00 2001 From: Greg Hudson Date: Sat, 27 Jun 2020 01:40:21 -0400 Subject: [PATCH] Trace plugin module loading errors Add trace messages when dlopen() or dlsym() fails when loading a plugin module. ticket: 8922 (new) --- src/include/k5-trace.h | 5 +++++ src/lib/krb5/krb/plugin.c | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/include/k5-trace.h b/src/include/k5-trace.h index 1da53dbb10..853a367f28 100644 --- a/src/include/k5-trace.h +++ b/src/include/k5-trace.h @@ -299,6 +299,11 @@ void krb5int_trace(krb5_context context, const char *fmt, ...); #define TRACE_NEGOEX_OUTGOING(c, seqnum, typestr, info) \ TRACE(c, "NegoEx sending [{int}]{str}: {str}", (int)seqnum, typestr, info) +#define TRACE_PLUGIN_LOAD_FAIL(c, modname, err) \ + TRACE(c, "Error loading plugin module {str}: {kerr}", modname, err) +#define TRACE_PLUGIN_LOOKUP_FAIL(c, modname, err) \ + TRACE(c, "Error initializing module {str}: {kerr}", modname, err) + #define TRACE_PREAUTH_CONFLICT(c, name1, name2, patype) \ TRACE(c, "Preauth module {str} conflicts with module {str} for pa " \ "type {patype}", name1, name2, patype) diff --git a/src/lib/krb5/krb/plugin.c b/src/lib/krb5/krb/plugin.c index 5761de0094..3bb7a38d44 100644 --- a/src/lib/krb5/krb/plugin.c +++ b/src/lib/krb5/krb/plugin.c @@ -352,6 +352,7 @@ static void load_if_needed(krb5_context context, struct plugin_mapping *map, const char *iname) { + krb5_error_code ret; char *symname = NULL; struct plugin_file_handle *handle = NULL; void (*initvt_fn)(); @@ -360,10 +361,19 @@ load_if_needed(krb5_context context, struct plugin_mapping *map, return; if (asprintf(&symname, "%s_%s_initvt", iname, map->modname) < 0) return; - if (krb5int_open_plugin(map->dyn_path, &handle, &context->err)) + + ret = krb5int_open_plugin(map->dyn_path, &handle, &context->err); + if (ret) { + TRACE_PLUGIN_LOAD_FAIL(context, map->modname, ret); goto err; - if (krb5int_get_plugin_func(handle, symname, &initvt_fn, &context->err)) + } + + ret = krb5int_get_plugin_func(handle, symname, &initvt_fn, &context->err); + if (ret) { + TRACE_PLUGIN_LOOKUP_FAIL(context, map->modname, ret); goto err; + } + free(symname); map->dyn_handle = handle; map->module = (krb5_plugin_initvt_fn)initvt_fn; -- 2.47.2