aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2016-09-05 16:26:29 -0700
committerGuy Harris <guy@alum.mit.edu>2016-09-05 23:27:02 +0000
commit2a38dc74ede3eba69f0d73b61f1735a4036528c1 (patch)
treec03b1f72dcd66c54907d546a45c28315ba35fd27
parentae877942ea507128d3191e17075a26b86e52615d (diff)
Have scan_plugins() take an argument specify what to do on load failures.
That's a less gross hack to suppress load failures due to not having libwiretap than providing a no-op failure-message routine, as it at least allows other code using a failure-message routine, such as cmdarg_err() and routines that call it, to be used. We really should put libwiretap and libwireshark plugins into separate subdirectories of the plugin directories, and avoid even looking at libwireshark plugins in programs that don't use libwireshark. Change-Id: I0a6ec01ecb4e718ed36233cfaf638a317f839a73 Reviewed-on: https://code.wireshark.org/review/17506 Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r--capinfos.c18
-rw-r--r--captype.c18
-rw-r--r--dftest.c2
-rw-r--r--editcap.c17
-rw-r--r--mergecap.c18
-rw-r--r--randpkt.c19
-rw-r--r--reordercap.c18
-rw-r--r--tfshark.c2
-rw-r--r--tshark.c2
-rw-r--r--ui/gtk/main.c2
-rw-r--r--wireshark-qt.cpp2
-rw-r--r--wsutil/plugins.c29
-rw-r--r--wsutil/plugins.h6
13 files changed, 98 insertions, 55 deletions
diff --git a/capinfos.c b/capinfos.c
index 4b8debab94..9d0901da4d 100644
--- a/capinfos.c
+++ b/capinfos.c
@@ -1375,14 +1375,14 @@ print_usage(FILE *output)
#ifdef HAVE_PLUGINS
/*
- * Don't report failures to load plugins because most (non-wiretap) plugins
- * *should* fail to load (because we're not linked against libwireshark and
- * dissector plugins need libwireshark).
+ * General errors are reported with an console message in capinfos.
*/
static void
-failure_message(const char *msg_format _U_, va_list ap _U_)
+failure_message(const char *msg_format, va_list ap)
{
- return;
+ fprintf(stderr, "capinfos: ");
+ vfprintf(stderr, msg_format, ap);
+ fprintf(stderr, "\n");
}
#endif
@@ -1466,8 +1466,12 @@ main(int argc, char *argv[])
init_report_err(failure_message, NULL, NULL, NULL);
/* Scan for plugins. This does *not* call their registration routines;
- that's done later. */
- scan_plugins();
+ that's done later.
+
+ Don't report failures to load plugins because most (non-wiretap)
+ plugins *should* fail to load (because we're not linked against
+ libwireshark and dissector plugins need libwireshark). */
+ scan_plugins(DONT_REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/captype.c b/captype.c
index 942bc59695..d83b21485c 100644
--- a/captype.c
+++ b/captype.c
@@ -70,14 +70,14 @@ print_usage(FILE *output)
#ifdef HAVE_PLUGINS
/*
- * Don't report failures to load plugins because most (non-wiretap) plugins
- * *should* fail to load (because we're not linked against libwireshark and
- * dissector plugins need libwireshark).
+ * General errors are reported with an console message in captype.
*/
static void
-failure_message(const char *msg_format _U_, va_list ap _U_)
+failure_message(const char *msg_format, va_list ap)
{
- return;
+ fprintf(stderr, "captype: ");
+ vfprintf(stderr, msg_format, ap);
+ fprintf(stderr, "\n");
}
#endif
@@ -141,8 +141,12 @@ main(int argc, char *argv[])
init_report_err(failure_message,NULL,NULL,NULL);
/* Scan for plugins. This does *not* call their registration routines;
- that's done later. */
- scan_plugins();
+ that's done later.
+
+ Don't report failures to load plugins because most (non-wiretap)
+ plugins *should* fail to load (because we're not linked against
+ libwireshark and dissector plugins need libwireshark). */
+ scan_plugins(DONT_REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/dftest.c b/dftest.c
index 9b4276ecac..888bfd1fad 100644
--- a/dftest.c
+++ b/dftest.c
@@ -88,7 +88,7 @@ main(int argc, char **argv)
/* Scan for plugins. This does *not* call their registration routines;
that's done later. */
- scan_plugins();
+ scan_plugins(REPORT_LOAD_FAILURE);
#endif
/* Register all dissectors; we must do this before checking for the
diff --git a/editcap.c b/editcap.c
index 70d0823199..da9c76d3c3 100644
--- a/editcap.c
+++ b/editcap.c
@@ -894,13 +894,14 @@ framenum_compare(gconstpointer a, gconstpointer b, gpointer user_data _U_)
#ifdef HAVE_PLUGINS
/*
- * Don't report failures to load plugins because most (non-wiretap) plugins
- * *should* fail to load (because we're not linked against libwireshark and
- * dissector plugins need libwireshark).
+ * General errors are reported with an console message in editcap.
*/
static void
-failure_message(const char *msg_format _U_, va_list ap _U_)
+failure_message(const char *msg_format, va_list ap)
{
+ fprintf(stderr, "editcap: ");
+ vfprintf(stderr, msg_format, ap);
+ fprintf(stderr, "\n");
}
#endif
@@ -1011,8 +1012,12 @@ main(int argc, char *argv[])
init_report_err(failure_message,NULL,NULL,NULL);
/* Scan for plugins. This does *not* call their registration routines;
- that's done later. */
- scan_plugins();
+ that's done later.
+
+ Don't report failures to load plugins because most (non-wiretap)
+ plugins *should* fail to load (because we're not linked against
+ libwireshark and dissector plugins need libwireshark). */
+ scan_plugins(DONT_REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/mergecap.c b/mergecap.c
index c6c97619ef..089ef0254d 100644
--- a/mergecap.c
+++ b/mergecap.c
@@ -129,14 +129,14 @@ string_elem_print(gpointer data, gpointer not_used _U_)
#ifdef HAVE_PLUGINS
/*
- * Don't report failures to load plugins because most (non-wiretap) plugins
- * *should* fail to load (because we're not linked against libwireshark and
- * dissector plugins need libwireshark).
+ * General errors are reported with an console message in mergecap.
*/
static void
-failure_message(const char *msg_format _U_, va_list ap _U_)
+failure_message(const char *msg_format, va_list ap)
{
- return;
+ fprintf(stderr, "mergecap: ");
+ vfprintf(stderr, msg_format, ap);
+ fprintf(stderr, "\n");
}
#endif
@@ -310,8 +310,12 @@ main(int argc, char *argv[])
init_report_err(failure_message,NULL,NULL,NULL);
/* Scan for plugins. This does *not* call their registration routines;
- that's done later. */
- scan_plugins();
+ that's done later.
+
+ Don't report failures to load plugins because most (non-wiretap)
+ plugins *should* fail to load (because we're not linked against
+ libwireshark and dissector plugins need libwireshark).*/
+ scan_plugins(DONT_REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/randpkt.c b/randpkt.c
index f604e77812..4346afb52c 100644
--- a/randpkt.c
+++ b/randpkt.c
@@ -49,14 +49,14 @@
#ifdef HAVE_PLUGINS
/*
- * Don't report failures to load plugins because most (non-wiretap) plugins
- * *should* fail to load (because we're not linked against libwireshark and
- * dissector plugins need libwireshark).
+ * General errors are reported with an console message in randpkt.
*/
static void
-failure_message(const char *msg_format _U_, va_list ap _U_)
+failure_message(const char *msg_format, va_list ap)
{
- return;
+ fprintf(stderr, "randpkt: ");
+ vfprintf(stderr, msg_format, ap);
+ fprintf(stderr, "\n");
}
#endif
@@ -141,8 +141,13 @@ main(int argc, char **argv)
init_report_err(failure_message,NULL,NULL,NULL);
/* Scan for plugins. This does *not* call their registration routines;
- that's done later. */
- scan_plugins();
+ that's done later.
+
+ Don't report failures to load plugins because most
+ (non-wiretap) plugins *should* fail to load (because
+ we're not linked against libwireshark and dissector
+ plugins need libwireshark). */
+ scan_plugins(DONT_REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/reordercap.c b/reordercap.c
index 206a4888c8..e01f43c5fd 100644
--- a/reordercap.c
+++ b/reordercap.c
@@ -148,14 +148,14 @@ frames_compare(gconstpointer a, gconstpointer b)
#ifdef HAVE_PLUGINS
/*
- * Don't report failures to load plugins because most (non-wiretap) plugins
- * *should* fail to load (because we're not linked against libwireshark and
- * dissector plugins need libwireshark).
+ * General errors are reported with an console message in reordercap.
*/
static void
-failure_message(const char *msg_format _U_, va_list ap _U_)
+failure_message(const char *msg_format, va_list ap)
{
- return;
+ fprintf(stderr, "reordercap: ");
+ vfprintf(stderr, msg_format, ap);
+ fprintf(stderr, "\n");
}
#endif
@@ -231,8 +231,12 @@ main(int argc, char *argv[])
init_report_err(failure_message,NULL,NULL,NULL);
/* Scan for plugins. This does *not* call their registration routines;
- that's done later. */
- scan_plugins();
+ that's done later.
+
+ Don't report failures to load plugins because most (non-wiretap)
+ plugins *should* fail to load (because we're not linked against
+ libwireshark and dissector plugins need libwireshark). */
+ scan_plugins(DONT_REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/tfshark.c b/tfshark.c
index 4bea91c727..49cb26ab06 100644
--- a/tfshark.c
+++ b/tfshark.c
@@ -509,7 +509,7 @@ main(int argc, char *argv[])
/* Scan for plugins. This does *not* call their registration routines;
that's done later. */
- scan_plugins();
+ scan_plugins(REPORT_LOAD_FAILURE);
#endif
diff --git a/tshark.c b/tshark.c
index 7a8c2d4d63..bb61320a0d 100644
--- a/tshark.c
+++ b/tshark.c
@@ -791,7 +791,7 @@ main(int argc, char *argv[])
/* Scan for plugins. This does *not* call their registration routines;
that's done later. */
- scan_plugins();
+ scan_plugins(REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/ui/gtk/main.c b/ui/gtk/main.c
index 01de65a40c..5c17338400 100644
--- a/ui/gtk/main.c
+++ b/ui/gtk/main.c
@@ -2292,7 +2292,7 @@ main(int argc, char *argv[])
/* Scan for plugins. This does *not* call their registration routines;
that's done later. */
- scan_plugins();
+ scan_plugins(REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/wireshark-qt.cpp b/wireshark-qt.cpp
index 22ceaa9d64..8a1564af71 100644
--- a/wireshark-qt.cpp
+++ b/wireshark-qt.cpp
@@ -542,7 +542,7 @@ int main(int argc, char *argv[])
/* Scan for plugins. This does *not* call their registration routines;
that's done later. */
- scan_plugins();
+ scan_plugins(REPORT_LOAD_FAILURE);
/* Register all libwiretap plugin modules. */
register_all_wiretap_modules();
diff --git a/wsutil/plugins.c b/wsutil/plugins.c
index 8a390948f5..f2da1f57d2 100644
--- a/wsutil/plugins.c
+++ b/wsutil/plugins.c
@@ -143,7 +143,7 @@ call_plugin_callback(gpointer data, gpointer user_data)
}
static void
-plugins_scan_dir(const char *dirname)
+plugins_scan_dir(const char *dirname, plugin_load_failure_mode mode)
{
#define FILENAME_LEN 1024
WS_DIR *dir; /* scanned directory */
@@ -175,8 +175,21 @@ plugins_scan_dir(const char *dirname)
dirname, name);
if ((handle = g_module_open(filename, G_MODULE_BIND_LOCAL)) == NULL)
{
- report_failure("Couldn't load module %s: %s", filename,
- g_module_error());
+ /*
+ * Only report load failures if we were asked to.
+ *
+ * XXX - we really should put different types of plugins
+ * (libwiretap, libwireshark) in different subdirectories,
+ * give libwiretap and libwireshark init routines that
+ * load the plugins, and have them scan the appropriate
+ * subdirectories so tha we don't even *try* to, for
+ * example, load libwireshark plugins in programs that
+ * only use libwiretap.
+ */
+ if (mode == REPORT_LOAD_FAILURE) {
+ report_failure("Couldn't load module %s: %s", filename,
+ g_module_error());
+ }
continue;
}
@@ -241,7 +254,7 @@ plugins_scan_dir(const char *dirname)
* Scan for plugins.
*/
void
-scan_plugins(void)
+scan_plugins(plugin_load_failure_mode mode)
{
const char *plugin_dir;
const char *name;
@@ -264,7 +277,7 @@ scan_plugins(void)
{
if ((dir = ws_dir_open(plugin_dir, 0, NULL)) != NULL)
{
- plugins_scan_dir(plugin_dir);
+ plugins_scan_dir(plugin_dir, mode);
while ((file = ws_dir_read_name(dir)) != NULL)
{
name = ws_dir_get_name(file);
@@ -290,14 +303,14 @@ scan_plugins(void)
plugin_dir_path = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s",
plugin_dir, name);
}
- plugins_scan_dir(plugin_dir_path);
+ plugins_scan_dir(plugin_dir_path, mode);
g_free(plugin_dir_path);
}
ws_dir_close(dir);
}
}
else
- plugins_scan_dir(plugin_dir);
+ plugins_scan_dir(plugin_dir, mode);
/*
* If the program wasn't started with special privileges,
@@ -310,7 +323,7 @@ scan_plugins(void)
if (!started_with_special_privs())
{
plugins_pers_dir = get_plugins_pers_dir();
- plugins_scan_dir(plugins_pers_dir);
+ plugins_scan_dir(plugins_pers_dir, mode);
g_free(plugins_pers_dir);
}
}
diff --git a/wsutil/plugins.h b/wsutil/plugins.h
index 1d5f0b6fd9..677c6d3f0b 100644
--- a/wsutil/plugins.h
+++ b/wsutil/plugins.h
@@ -34,7 +34,11 @@ extern "C" {
typedef gboolean (*plugin_callback)(GModule *handle);
-WS_DLL_PUBLIC void scan_plugins(void);
+typedef enum {
+ REPORT_LOAD_FAILURE,
+ DONT_REPORT_LOAD_FAILURE
+} plugin_load_failure_mode;
+WS_DLL_PUBLIC void scan_plugins(plugin_load_failure_mode mode);
WS_DLL_PUBLIC void add_plugin_type(const char *type, plugin_callback callback);
typedef void (*plugin_description_callback)(const char *, const char *,
const char *, const char *,