]> git.sur5r.net Git - bacula/bacula/commitdiff
FD plugin enhancements
authorKern Sibbald <kern@sibbald.com>
Sun, 3 Feb 2008 13:51:07 +0000 (13:51 +0000)
committerKern Sibbald <kern@sibbald.com>
Sun, 3 Feb 2008 13:51:07 +0000 (13:51 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@6362 91ce42f0-d328-0410-95d8-f526ca767f89

12 files changed:
bacula/src/filed/fd-plugins.c
bacula/src/filed/fd-plugins.h
bacula/src/filed/job.c
bacula/src/findlib/find.c
bacula/src/findlib/find.h
bacula/src/lib/plugins.h
bacula/src/plugins/fd/example-plugin-fd.c
bacula/src/stored/bextract.c
bacula/src/stored/bls.c
bacula/src/tools/Makefile.in
bacula/src/tools/testfind.c
bacula/src/tools/testls.c

index 1547f14a526a526b1212b38d0b92480ad06e6eff..5fd41338db1c7b705bf9713f9da6e01638e75348 100644 (file)
@@ -52,13 +52,13 @@ static bpError baculaDebugMsg(bpContext *ctx, const char *file, int line,
 /* Bacula info */
 static bInfo binfo = {
    sizeof(bFuncs),
-   PLUGIN_INTERFACE,
+   PLUGIN_INTERFACE_VERSION 
 };
 
 /* Bacula entry points */
 static bFuncs bfuncs = {
    sizeof(bFuncs),
-   PLUGIN_INTERFACE,
+   PLUGIN_INTERFACE_VERSION,
    baculaRegisterEvents,
    baculaGetValue,
    baculaSetValue,
@@ -69,7 +69,7 @@ static bFuncs bfuncs = {
 /*
  * Create a plugin event 
  */
-void generate_plugin_event(JCR *jcr, bEventType eventType) 
+void generate_plugin_event(JCR *jcr, bEventType eventType, void *value)     
 {
    bEvent event;
    Plugin *plugin;
@@ -83,7 +83,7 @@ void generate_plugin_event(JCR *jcr, bEventType eventType)
    Dmsg2(dbglvl, "plugin_ctx=%p JobId=%d\n", jcr->plugin_ctx, jcr->JobId);
    event.eventType = eventType;
    foreach_alist(plugin, plugin_list) {
-      plug_func(plugin)->handlePluginEvent(&plugin_ctx[i++], &event);
+      plug_func(plugin)->handlePluginEvent(&plugin_ctx[i++], &event, value);
    }
 }
 
@@ -221,7 +221,6 @@ static bpError baculaDebugMsg(bpContext *ctx, const char *file, int line,
 
 #ifdef TEST_PROGRAM
 
-
 int main(int argc, char *argv[])
 {
    char plugin_dir[1000];
index 550dce40e64590c991fd5a068455788f19089f4b..dc608f557c4218ab0a7d5aad9f7fdff4f1137d52 100644 (file)
 #include "bc_types.h"
 #include "lib/plugins.h"
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
 
 /****************************************************************************
  *                                                                          *
@@ -71,6 +65,16 @@ typedef enum {
 typedef enum {
   bEventJobStart      = 1,
   bEventJobEnd        = 2,
+  bEventBackupStart   = 3,
+  bEventBackupEnd     = 4,
+  bEventRestoreStart  = 5,
+  bEventRestoreEnd    = 6,
+  bEventVerifyStart   = 7,
+  bEventVerifyEnd     = 8,
+  bEventPluginCommand = 9,
+  bEventPluginFile    = 10,
+  bEventLevel         = 11,
+  bEventSince         = 12,
 } bEventType;
 
 typedef struct s_bEvent {
@@ -82,6 +86,16 @@ typedef struct s_baculaInfo {
    uint32_t version;
 } bInfo;
 
+/* Bacula Core Routines -- not used by plugins */
+void load_fd_plugins(const char *plugin_dir);
+void new_plugins(JCR *jcr);
+void free_plugins(JCR *jcr);
+void generate_plugin_event(JCR *jcr, bEventType event, void *value=NULL);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Bacula interface version and function pointers */
 typedef struct s_baculaFuncs {  
    uint32_t size;
@@ -95,11 +109,6 @@ typedef struct s_baculaFuncs {
        int level, const char *msg);
 } bFuncs;
 
-/* Bacula Subroutines */
-void load_fd_plugins(const char *plugin_dir);
-void new_plugins(JCR *jcr);
-void free_plugins(JCR *jcr);
-void generate_plugin_event(JCR *jcr, bEventType event);
 
 
 
@@ -116,7 +125,7 @@ typedef enum {
 
 
 #define PLUGIN_MAGIC     "*PluginData*" 
-#define PLUGIN_INTERFACE  1
+#define PLUGIN_INTERFACE_VERSION  1
 
 typedef struct s_pluginInfo {
    uint32_t size;
@@ -136,7 +145,7 @@ typedef struct s_pluginFuncs {
    bpError (*freePlugin)(bpContext *ctx);
    bpError (*getPluginValue)(bpContext *ctx, pVariable var, void *value);
    bpError (*setPluginValue)(bpContext *ctx, pVariable var, void *value);
-   bpError (*handlePluginEvent)(bpContext *ctx, bEvent *event);
+   bpError (*handlePluginEvent)(bpContext *ctx, bEvent *event, void *value);
 } pFuncs;
 
 #define plug_func(plugin) ((pFuncs *)(plugin->pfuncs))
index 106bff14a8c0cc9cfc4443c9d60e0f884a229a6a..6617d6a58b2db6bffdc7a86973e55805a339dec4 100644 (file)
@@ -465,6 +465,7 @@ static int job_cmd(JCR *jcr)
    jcr->sd_auth_key = bstrdup(sd_auth_key);
    free_pool_memory(sd_auth_key);
    Dmsg2(120, "JobId=%d Auth=%s\n", jcr->JobId, jcr->sd_auth_key);
+   generate_plugin_event(jcr, bEventJobStart, (void *)dir->msg);
    return dir->fsend(OKjob, VERSION, LSMDATE, HOST_OS, DISTNAME, DISTVER);
 }
 
@@ -1283,6 +1284,7 @@ static int level_cmd(JCR *jcr)
       Dmsg2(100, "adj = %d since_time=%d\n", (int)adj, (int)since_time);
       jcr->incremental = 1;           /* set incremental or decremental backup */
       jcr->mtime = (time_t)since_time; /* set since time */
+      generate_plugin_event(jcr, bEventSince, (void *)jcr->mtime);
    } else {
       Jmsg1(jcr, M_FATAL, 0, _("Unknown backup level: %s\n"), level);
       free_memory(level);
@@ -1292,6 +1294,7 @@ static int level_cmd(JCR *jcr)
    if (buf) {
       free_memory(buf);
    }
+   generate_plugin_event(jcr, bEventLevel, (void *)jcr->JobLevel);
    return dir->fsend(OKlevel);
 
 bail_out:
@@ -1437,10 +1440,10 @@ static int backup_cmd(JCR *jcr)
    }
    
    generate_daemon_event(jcr, "JobStart");
-   generate_plugin_event(jcr, bEventJobStart);
+   generate_plugin_event(jcr, bEventBackupStart);
 
 #if defined(WIN32_VSS)
-   /* START VSS ON WIN 32 */
+   /* START VSS ON WIN32 */
    if (jcr->VSS) {      
       if (g_pVSSClient->InitializeForBackup()) {   
         /* tell vss which drives to snapshot */   
@@ -1532,7 +1535,7 @@ static int backup_cmd(JCR *jcr)
 
 cleanup:
 #if defined(WIN32_VSS)
-   /* STOP VSS ON WIN 32 */
+   /* STOP VSS ON WIN32 */
    /* tell vss to close the backup session */
    if (jcr->VSS) {
       if (g_pVSSClient->CloseBackup()) {             
@@ -1550,6 +1553,7 @@ cleanup:
    }
 #endif
 
+   generate_plugin_event(jcr, bEventBackupEnd); 
    return 0;                          /* return and stop command loop */
 }
 
@@ -1587,7 +1591,8 @@ static int verify_cmd(JCR *jcr)
    dir->fsend(OKverify);
 
    generate_daemon_event(jcr, "JobStart");
-   generate_plugin_event(jcr, bEventJobStart);
+   generate_plugin_event(jcr, bEventLevel, (void *)jcr->JobLevel);
+   generate_plugin_event(jcr, bEventVerifyStart);
 
    Dmsg1(110, "bfiled>dird: %s", dir->msg);
 
@@ -1625,7 +1630,7 @@ static int verify_cmd(JCR *jcr)
    }
 
    dir->signal(BNET_EOD);
-
+   generate_plugin_event(jcr, bEventVerifyEnd);
    return 0;                          /* return and terminate command loop */
 }
 
@@ -1703,7 +1708,7 @@ static int restore_cmd(JCR *jcr)
     */
    start_dir_heartbeat(jcr);
    generate_daemon_event(jcr, "JobStart");
-   generate_plugin_event(jcr, bEventJobStart);
+   generate_plugin_event(jcr, bEventRestoreStart);
    do_restore(jcr);
    stop_dir_heartbeat(jcr);
 
@@ -1730,6 +1735,7 @@ bail_out:
    }
 
    Dmsg0(130, "Done in job.c\n");
+   generate_plugin_event(jcr, bEventRestoreEnd);
    return 0;                          /* return and terminate command loop */
 }
 
index d12fcf48ff71974e268280ab6c287790eec455b0..e9e1d94f25ba0bca0e8e048b4b248cd99b7ece15 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -201,6 +201,12 @@ find_files(JCR *jcr, FF_PKT *ff, int callback(FF_PKT *ff_pkt, void *hpkt, bool t
                return 0;                  /* error return */
             }
          }
+         foreach_dlist(node, &incexe->plugin_list) {
+            char *fname = node->c_str();
+            Dmsg1(100, "P %s\n", fname);
+            ff->top_fname = fname;
+            generate_plugin_event(jcr, bEventPluginCommand, (void *)fname);
+         }
       }
    }
    return 1;
index 3dd02c084172746540631636660beb170f65eb10..9860ff5369c01d10fec2e47ee6c5c8ddb7bf11d9 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2001-2007 Free Software Foundation Europe e.V.
+   Copyright (C) 2001-2008 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -36,6 +36,7 @@
 
 #include "jcr.h"
 #include "bfile.h"
+#include "../filed/fd-plugins.h"
 
 #ifdef HAVE_DIRENT_H
 #include <dirent.h>
index 241d34a35fb03feef3cfb3b20d016a32e8b35b1a..032083230981b55941fc0e0a76994c9a30d54bf2 100644 (file)
@@ -57,7 +57,6 @@ int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
 
 extern DLL_IMP_EXP alist *plugin_list;
 
-
 /* Universal return code from all functions */
 typedef int32_t bpError;
 
index 50452936e0484ab6fccbad6f614d7c4b6e5ca91c..044b7594dbe96cf482f571a1877e4ebdd43d9047 100644 (file)
@@ -49,7 +49,7 @@ static bpError newPlugin(bpContext *ctx);
 static bpError freePlugin(bpContext *ctx);
 static bpError getPluginValue(bpContext *ctx, pVariable var, void *value);
 static bpError setPluginValue(bpContext *ctx, pVariable var, void *value);
-static bpError handlePluginEvent(bpContext *ctx, bEvent *event);
+static bpError handlePluginEvent(bpContext *ctx, bEvent *event, void *value);
 
 
 /* Pointers to Bacula functions */
@@ -58,7 +58,7 @@ static bInfo  *binfo = NULL;
 
 static pInfo pluginInfo = {
    sizeof(pluginInfo),
-   PLUGIN_INTERFACE,
+   PLUGIN_INTERFACE_VERSION,
    PLUGIN_MAGIC,
    PLUGIN_LICENSE,
    PLUGIN_AUTHOR,
@@ -69,7 +69,7 @@ static pInfo pluginInfo = {
 
 static pFuncs pluginFuncs = {
    sizeof(pluginFuncs),
-   PLUGIN_INTERFACE,
+   PLUGIN_INTERFACE_VERSION,
 
    /* Entry points into plugin */
    newPlugin,                         /* new plugin instance */
@@ -126,7 +126,7 @@ static bpError setPluginValue(bpContext *ctx, pVariable var, void *value)
    return 0;
 }
 
-static bpError handlePluginEvent(bpContext *ctx, bEvent *event
+static bpError handlePluginEvent(bpContext *ctx, bEvent *event, void *value)
 {
    char *name;
    switch (event->eventType) {
index d3bda67e04ea856197a30b18e9735ad958de7326..b4c9ff1a4419602e706c6919adb6ffcdf22816a6 100644 (file)
@@ -515,3 +515,6 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw  writing)
    Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->VolCatInfo.VolCatName, dcr->VolCatInfo.VolCatParts);
    return 1;
 }
+
+void generate_plugin_event(JCR *jcr, bEventType eventType, void *value)
+{ return; }
index ab36f4af8fec2039a0b5c6d91a7fc319c4393e33..a3a344eeedca0717ea59fc72df7488675231a094 100644 (file)
@@ -472,3 +472,6 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw  writing)
    Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->VolCatInfo.VolCatName, dcr->VolCatInfo.VolCatParts);
    return 1;
 }
+
+void generate_plugin_event(JCR *jcr, bEventType eventType, void *value)
+{ return; }
index 1dc10c8b9f459cd7f225735171269f95921da813..be1ebdd3bbae19f91c6a32af14139e50b02d97ff 100644 (file)
@@ -81,7 +81,7 @@ inc_conf.o: ../dird/inc_conf.c
        $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) $(PYTHON_INC) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) $<
 
 testfind: ../findlib/libfind.a ../lib/libbac.a $(FINDOBJS)
-       $(CXX) -g $(LDFLAGS) -L. -L../lib -L../findlib -o $@ $(FINDOBJS) \
+       $(CXX) -g $(LDFLAGS) -o $@ $(FINDOBJS) -L. -L../lib -L../findlib \
          $(DLIB) -lfind -lbac -lm $(LIBS) $(GETTEXT_LIBS) $(OPENSSL_LIBS)
 
 testls: ../findlib/libfind.a ../lib/libbac.a testls.o
index 2c3d5d0f34cc9a6890530eebbcce0f1515799237..c42a9043a36365ccd40361cf63a84cb423e18a99 100644 (file)
@@ -1,13 +1,7 @@
-/*
- * Test program for find files
- *
- *  Kern Sibbald, MM
- *
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ * Test program for find files
+ *
+ *  Kern Sibbald, MM
+ *
+ */
 
 #include "bacula.h"
 #include "dird/dird.h"
 #include "findlib/find.h"
 
-
 #if defined(HAVE_WIN32)
 #define isatty(fd) (fd==0)
 #endif
@@ -44,6 +43,7 @@
 /* Dummy functions */
 int generate_daemon_event(JCR *jcr, const char *event) { return 1; }
 int generate_job_event(JCR *jcr, const char *event) { return 1; }
+void generate_plugin_event(JCR *jcr, bEventType eventType, void *value) { }
 
 /* Global variables */
 static int num_files = 0;
index c28b4c40074c8709dd7cba4026feb4ba1e83081e..22d9a78a6601a712fd4cd24e0f5f2c919e320653 100644 (file)
@@ -1,13 +1,7 @@
-/*
- * Test program for listing files during regression testing
- *
- *  Kern Sibbald, MM
- *
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ * Test program for listing files during regression testing
+ *
+ *  Kern Sibbald, MM
+ *
+ */
 
 #include "bacula.h"
 #include "findlib/find.h"
@@ -38,6 +38,7 @@
 /* Dummy functions */
 int generate_daemon_event(JCR *jcr, const char *event) { return 1; }
 int generate_job_event(JCR *jcr, const char *event) { return 1; }
+void generate_plugin_event(JCR *jcr, bEventType eventType, void *value) { }
 
 
 /* Global variables */