From: Greg Hudson Date: Sat, 27 Jun 2020 05:40:21 +0000 (-0400) Subject: Trace plugin module loading errors X-Git-Tag: krb5-1.19-beta1~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F1091%2Fhead;p=thirdparty%2Fkrb5.git Trace plugin module loading errors Add trace messages when dlopen() or dlsym() fails when loading a plugin module. ticket: 8922 (new) --- 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;