krb5 commit: Trace plugin module loading errors

Greg Hudson <[email protected]>
Newsgroups gmane.comp.encryption.kerberos.cvs
Message-ID <[email protected]>
https://github.com/krb5/krb5/commit/e362c356eafb49a9d90a4f20c6668682d4f50222
commit e362c356eafb49a9d90a4f20c6668682d4f50222
Author: Greg Hudson <[email protected]>
Date:   Sat Jun 27 01:40:21 2020 -0400

    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 1da53db..853a367 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 5761de0..3bb7a38 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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.