]> git.sur5r.net Git - bacula/bacula/commitdiff
Ensure that two plugins starting with the same name won't share events
authorEric Bollengier <eric@eb.homelinux.org>
Tue, 23 Nov 2010 17:36:39 +0000 (18:36 +0100)
committerEric Bollengier <eric@eb.homelinux.org>
Thu, 25 Nov 2010 14:06:47 +0000 (15:06 +0100)
bacula/src/filed/fd_plugins.c
bacula/src/lib/plugins.c
bacula/src/lib/plugins.h

index f4e490538bb371253a65e8e230ec5b82c802214e..181a4158218d003ca6f6fb5422a0c428ae4eeb1c 100644 (file)
@@ -327,8 +327,8 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
 
    /* Note, we stop the loop on the first plugin that matches the name */
    foreach_alist(plugin, plugin_list) {
-      Dmsg3(dbglvl, "plugin=%s cmd=%s len=%d\n", plugin->file, cmd, len);
-      if (strncmp(plugin->file, cmd, len) != 0) {
+      Dmsg4(0, "plugin=%s plen=%d cmd=%s len=%d\n", plugin->file, plugin->len, cmd, len);
+      if ((plugin->len != len) || (strncmp(plugin->file, cmd, len) != 0)) {
          i++;
          continue;
       }
index de0819dd7a411811d6e991e5e379ba05b5439b7b..cd1071929e38718e3adb4b4fbf35b4d80adb0364 100644 (file)
@@ -155,6 +155,7 @@ bool load_plugins(void *binfo, void *bfuncs, const char *plugin_dir,
 
       plugin = new_plugin();
       plugin->file = bstrdup(result->d_name);
+      plugin->len = strstr(plugin->file, "-fd.") - plugin->file;
       plugin->pHandle = dlopen(fname.c_str(), RTLD_NOW);
       if (!plugin->pHandle) {
          Jmsg(NULL, M_ERROR, 0, _("Plugin load %s failed: ERR=%s\n"), 
index 5ab1603ba0d45b392e53d52bf34293c655c20ae9..7c10a1f99e7d04973368834246efd2dbd70f7d60 100644 (file)
@@ -71,6 +71,7 @@ typedef bRC (*t_unloadPlugin)(void);
 class Plugin {
 public:
    char *file;
+   int32_t len;
    t_unloadPlugin unloadPlugin;
    void *pinfo;
    void *pfuncs;