skip all modules in plugin if init function fails
authorKevin Coffman <kwc@citi.umich.edu>
Wed, 29 Nov 2006 00:17:52 +0000 (00:17 +0000)
committerKevin Coffman <kwc@citi.umich.edu>
Wed, 29 Nov 2006 00:17:52 +0000 (00:17 +0000)
If the plugin initialization function fails, skip all modules in
the plugin, not just the first.  Also, print the error message from
the plugin if supplied.

ticket: new
Target_Version: 1.6
Tags: pullup
Component: krb5-kdc

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@18873 dc483132-0cff-0310-8789-dd5450dbe970

src/kdc/kdc_preauth.c

index 9994ae3ea8aac25706ab5347e17d76bdcd2c24b9..6c362d9e61ac2935f3515aa37f937c3780175f5c 100644 (file)
@@ -394,10 +394,22 @@ load_preauth_plugins(krb5_context context)
                 * from the list of modules we'll be using. */
                if (j == 0) {
                    server_init_proc = ftable->init_proc;
-                   if ((server_init_proc != NULL) &&
-                       ((*server_init_proc)(context, &plugin_context) != 0)) {
-                       memset(&preauth_systems[k], 0, sizeof(preauth_systems[k]));
-                       continue;
+                   if (server_init_proc != NULL) {
+                       krb5_error_code initerr;
+                       initerr = (*server_init_proc)(context, &plugin_context);
+                       if (initerr) {
+                           const char *emsg;
+                           emsg = krb5_get_error_message(context, initerr);
+                           if (emsg) {
+                               krb5_klog_syslog(LOG_ERR,
+                                       "preauth %s failed to initialize: %s",
+                                       ftable->name, emsg);
+                               krb5_free_error_message(context, emsg);
+                           }
+                           memset(&preauth_systems[k], 0, sizeof(preauth_systems[k]));
+
+                           break;      /* skip all modules in this plugin */
+                       }
                    }
                }
                preauth_systems[k].name = ftable->name;