]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Implement build and install of bpipe-fd.so plugin.
authorKern Sibbald <kern@sibbald.com>
Sat, 27 Sep 2008 16:46:55 +0000 (16:46 +0000)
committerKern Sibbald <kern@sibbald.com>
Sat, 27 Sep 2008 16:46:55 +0000 (16:46 +0000)
kes  Rework the interface that passes packets to the plugin
     so that the packet is started and ended by the packet size.
     This allows the driver to do a sanity check.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@7656 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/Makefile.in
bacula/autoconf/Make.common.in
bacula/src/filed/fd_plugins.c
bacula/src/filed/fd_plugins.h
bacula/src/plugins/fd/Makefile
bacula/src/plugins/fd/Makefile.in
bacula/src/plugins/fd/bpipe-fd.c
bacula/src/version.h
bacula/technotes-2.5

index 6fba576ecb2db9047c19e0bfa45e1f77cd3f24cf..16958259e3137685f604d7747b2d314962705164 100755 (executable)
@@ -21,7 +21,7 @@ dummy:
 # --client-only directories
 fd_subdirs = src scripts src/lib src/findlib src/filed \
        @READLINE_SRC@ @BAT_DIR@ @GNOME_DIR@ @TRAY_MONITOR_DIR@ @WX_DIR@ \
-       src/console
+       src/console src/plugins/fd
 
 # Non-client-only directores
 subdirs =    src/cats @DIRD_DIR@ @STORED_DIR@ src/tools
index baee082c4cb4c6e92a9899520f0ba826d37ab111..a1155fb8ce8893c21bfa460d0e7d13fb1781f847 100644 (file)
@@ -26,6 +26,7 @@ manprefix =
 datarootdir = @datarootdir@
 sbindir = @sbindir@
 sysconfdir = @sysconfdir@
+plugindir = @plugindir@
 scriptdir = @scriptdir@
 mandir = @mandir@
 manext = 8
index 8bcf51d17c5aa486b8a98e197f85f239b570a208..b0bc92ff1e341b1a2d0bf7c3ce2fe9729ec19dc2 100644 (file)
@@ -172,7 +172,8 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
       /* Loop getting filenames to backup then saving them */
       while (!job_canceled(jcr)) { 
          memset(&sp, 0, sizeof(sp));
-         sp.type = FT_REG;
+         sp.pkt_size = sizeof(sp);
+         sp.pkt_end = sizeof(sp);
          sp.portable = true;
          sp.cmd = cmd;
          Dmsg3(dbglvl, "startBackup st_size=%p st_blocks=%p sp=%p\n", &sp.statp.st_size, &sp.statp.st_blocks,
@@ -181,6 +182,11 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
          if (plug_func(plugin)->startBackupFile(&plugin_ctx_list[i], &sp) != bRC_OK) {
             goto bail_out;
          }
+         if (sp.type == 0 || sp.fname == NULL) {
+            Jmsg1(jcr, M_FATAL, 0, _("Command plugin \"%s\" returned bad startBackupFile packet.\n"),
+               cmd);
+            goto bail_out;
+         }
          jcr->plugin_ctx = &plugin_ctx_list[i];
          jcr->plugin = plugin;
          jcr->plugin_sp = &sp;
@@ -190,9 +196,11 @@ int plugin_save(JCR *jcr, FF_PKT *ff_pkt, bool top_level)
          memcpy(&ff_pkt->statp, &sp.statp, sizeof(ff_pkt->statp));
          Dmsg1(dbglvl, "Save_file: file=%s\n", ff_pkt->fname);
          save_file(jcr, ff_pkt, true);
-         if (plug_func(plugin)->endBackupFile(&plugin_ctx_list[i]) != bRC_More) {
-            goto bail_out;
+         bRC rc = plug_func(plugin)->endBackupFile(&plugin_ctx_list[i]);
+         if (rc == bRC_More) {
+            continue;
          }
+         goto bail_out;
       }
    }
    Jmsg1(jcr, M_ERROR, 0, "Command plugin \"%s\" not found.\n", cmd);
@@ -332,6 +340,8 @@ int plugin_create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
    if (!set_cmd_plugin(bfd, jcr)) {
       return CF_ERROR;
    }
+   rp.pkt_size = sizeof(rp);
+   rp.pkt_end = sizeof(rp);
    rp.stream = attr->stream;
    rp.data_stream = attr->data_stream;
    rp.type = attr->type;
@@ -348,6 +358,8 @@ int plugin_create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
    if (plug_func(plugin)->createFile(plugin_ctx, &rp) != bRC_OK) {
       return CF_ERROR;
    }
+   io.pkt_size = sizeof(io);
+   io.pkt_end = sizeof(io);
    io.func = IO_OPEN;
    io.count = 0;
    io.buf = NULL;
@@ -404,7 +416,6 @@ void load_fd_plugins(const char *plugin_dir)
       Dmsg1(dbglvl, "Loaded plugin: %s\n", plugin->file);
 
    }
-
 }
 
 /*
@@ -470,6 +481,8 @@ static int my_plugin_bopen(BFILE *bfd, const char *fname, int flags, mode_t mode
    bpContext *plugin_ctx = (bpContext *)jcr->plugin_ctx;
    struct io_pkt io;
    Dmsg0(dbglvl, "plugin_bopen\n");
+   io.pkt_size = sizeof(io);
+   io.pkt_end = sizeof(io);
    io.func = IO_OPEN;
    io.count = 0;
    io.buf = NULL;
@@ -496,6 +509,8 @@ static int my_plugin_bclose(BFILE *bfd)
    bpContext *plugin_ctx = (bpContext *)jcr->plugin_ctx;
    struct io_pkt io;
    Dmsg0(dbglvl, "plugin_bclose\n");
+   io.pkt_size = sizeof(io);
+   io.pkt_end = sizeof(io);
    io.func = IO_CLOSE;
    io.count = 0;
    io.buf = NULL;
@@ -519,6 +534,8 @@ static ssize_t my_plugin_bread(BFILE *bfd, void *buf, size_t count)
    bpContext *plugin_ctx = (bpContext *)jcr->plugin_ctx;
    struct io_pkt io;
    Dmsg0(dbglvl, "plugin_bread\n");
+   io.pkt_size = sizeof(io);
+   io.pkt_end = sizeof(io);
    io.func = IO_READ;
    io.count = count;
    io.buf = (char *)buf;
@@ -542,6 +559,8 @@ static ssize_t my_plugin_bwrite(BFILE *bfd, void *buf, size_t count)
    bpContext *plugin_ctx = (bpContext *)jcr->plugin_ctx;
    struct io_pkt io;
    Dmsg0(dbglvl, "plugin_bwrite\n");
+   io.pkt_size = sizeof(io);
+   io.pkt_end = sizeof(io);
    io.func = IO_WRITE;
    io.count = count;
    io.buf = (char *)buf;
@@ -565,6 +584,8 @@ static boffset_t my_plugin_blseek(BFILE *bfd, boffset_t offset, int whence)
    bpContext *plugin_ctx = (bpContext *)jcr->plugin_ctx;
    struct io_pkt io;
    Dmsg0(dbglvl, "plugin_bseek\n");
+   io.pkt_size = sizeof(io);
+   io.pkt_end = sizeof(io);
    io.func = IO_SEEK;
    io.offset = offset;
    io.whence = whence;
index ae96109d9439f5f37bb87c414fd0abdc331f13ad..0370ee29e739f62a0fcc5b7e87741556babb4913 100644 (file)
@@ -71,6 +71,7 @@
  * This packet is used for file save info transfer.
 */
 struct save_pkt {
+  int32_t pkt_size;                   /* size of this packet */
   char *fname;                        /* Full path and filename */
   char *link;                         /* Link name if any */
   struct stat statp;                  /* System stat() packet for file */
@@ -78,12 +79,14 @@ struct save_pkt {
   uint32_t flags;                     /* Bacula internal flags */
   bool portable;                      /* set if data format is portable */
   char *cmd;                          /* command */
+  int32_t pkt_end;                    /* end packet sentinel */
 };
 
 /*
  * This packet is used for file restore info transfer.
 */
 struct restore_pkt {
+   int32_t pkt_size;                  /* size of this packet */
    int32_t stream;                    /* attribute stream id */
    int32_t data_stream;               /* id of data stream to follow */
    int32_t type;                      /* file type FT */
@@ -97,6 +100,7 @@ struct restore_pkt {
    const char *where;                 /* where */
    const char *RegexWhere;            /* regex where */
    int replace;                       /* replace flag */
+   int32_t pkt_end;                   /* end packet sentinel */
 };
 
 enum {
@@ -108,6 +112,7 @@ enum {
 };
 
 struct io_pkt {
+   int32_t pkt_size;                  /* Size of this packet */
    int32_t func;                      /* Function code */
    int32_t count;                     /* read/write count */
    int32_t flags;                     /* Open flags */
@@ -120,6 +125,7 @@ struct io_pkt {
    int32_t whence;                    /* lseek argument */
    boffset_t offset;                  /* lseek argument */
    bool win32;                        /* Win32 GetLastError returned */
+   int32_t pkt_end;                   /* end packet sentinel */
 };
 
 /****************************************************************************
index 00a4efe051babcf2cf764f379932148a990b42b3..2e61bf293029f306e9a837fbe281113412588dab 100644 (file)
@@ -8,9 +8,9 @@
 #   so it has all the "common" definitions
 #
 
-DATE="25 September 2008"
-LSMDATE=25Sep08
-VERSION=2.5.4
+DATE="26 September 2008"
+LSMDATE=26Sep08
+VERSION=2.5.5
 VERNAME=bacula-$(VERSION)#
 MAINT=Kern Sibbald#
 MAINTEMAIL=<kern@sibbald.com>#
@@ -31,6 +31,7 @@ manprefix =
 datarootdir = ${prefix}/share
 sbindir = /home/kern/bacula/bin
 sysconfdir = /home/kern/bacula/bin
+plugindir = /home/kern/bacula/bin
 scriptdir = /home/kern/bacula/bin
 mandir = /home/kern/bacula/bin
 manext = 8
@@ -125,5 +126,16 @@ bpipe-fd.o: bpipe-fd.c ${FDDIR}/fd_plugins.h
 bpipe-fd.so: bpipe-fd.o 
        $(CXX) $(LDFLAGS) -shared bpipe-fd.o -o bpipe-fd.so
 
+install: all
+       $(INSTALL_PROGRAM) bpipe-fd.so $(DESTDIR)$(plugindir)/bpipe-fd.so
+
 clean:
        rm -f main *.so *.o 1 2 3
+
+distclean: clean
+       rm -f Makefile
+
+uninstall:
+       $(RMF) $(DESTDIR)$(plugindir)/bpipe-fd.so
+
+depend:
index 8305b6a5dbf7cddc1dc87cf75e8ed3457ddfd54a..eef99a58aad3f4cf10e9d3b4ad96a616fd4197db 100644 (file)
@@ -38,5 +38,16 @@ bpipe-fd.o: bpipe-fd.c ${FDDIR}/fd_plugins.h
 bpipe-fd.so: bpipe-fd.o 
        $(CXX) $(LDFLAGS) -shared bpipe-fd.o -o bpipe-fd.so
 
+install: all
+       $(INSTALL_PROGRAM) bpipe-fd.so $(DESTDIR)$(plugindir)/bpipe-fd.so
+
 clean:
        rm -f main *.so *.o 1 2 3
+
+distclean: clean
+       rm -f Makefile
+
+uninstall:
+       $(RMF) $(DESTDIR)$(plugindir)/bpipe-fd.so
+
+depend:
index fa2488a6ada153445dbc92f38ecf3966013da501..35e891314c78d49d3cc35f2715bac7f46347b8a8 100644 (file)
@@ -279,6 +279,7 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp)
    struct plugin_ctx *p_ctx = (struct plugin_ctx *)ctx->pContext;
    time_t now = time(NULL);
    sp->fname = p_ctx->fname;
+   sp->type = FT_REG;
    sp->statp.st_mode = 0700 | S_IFREG;
    sp->statp.st_ctime = now;
    sp->statp.st_mtime = now;
index 3256ff42560f5c08e6457cc3765712ebf5ee8e74..d0a7c8c77a6e5503efafec4db4b2945fa40b0fa7 100644 (file)
@@ -3,9 +3,9 @@
  */
 
 #undef  VERSION
-#define VERSION "2.5.5"
-#define BDATE   "26 September 2008"
-#define LSMDATE "26Sep08"
+#define VERSION "2.5.6"
+#define BDATE   "27 September 2008"
+#define LSMDATE "27Sep08"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2008 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2008"       /* year for copyright messages in progs */
index 1a38a8a623d62661cb11a2e6bb24e29792152dc1..43a9bfe2b27ecda71f2077635a78bc1ff80156ed 100644 (file)
@@ -17,6 +17,11 @@ dbdriver
 remove reader/writer in FOPTS????
 
 General:
+27Sep08
+kes  Implement build and install of bpipe-fd.so plugin.
+kes  Rework the interface that passes packets to the plugin
+     so that the packet is started and ended by the packet size.
+     This allows the driver to do a sanity check.
 26Sep08
 kes  Rework the pluginIO Bacula internal code to enable   
      proper handling of Win32 error codes from GetLastError.