* file named AUTHORS, in the root directory of this distribution.
*/
/*
- * $Id: sendbackup-dump.c,v 1.90.2.2 2006/11/24 18:10:38 martinea Exp $
+ * $Id: sendbackup-dump.c,v 1.90 2006/07/25 18:10:07 martinea Exp $
*
* send backup data using BSD dump
*/
#include "sendbackup.h"
#include "getfsent.h"
#include "clock.h"
-#include "version.h"
#define LEAF_AND_DIRS "sed -e \'\ns/^leaf[ \t]*[0-9]*[ \t]*\\.//\nt\n/^dir[ \t]/ {\ns/^dir[ \t]*[0-9]*[ \t]*\\.//\ns%$%/%\nt\n}\nd\n\'"
/* the various encodings of dump size */
/* this should also match BSDI pre-3.0's buggy dump program, that
produced doubled DUMP: DUMP: messages */
- AM_SIZE_RE("DUMP: [0-9][0-9]* tape blocks", 1024),
- AM_SIZE_RE("dump: Actual: [0-9][0-9]* tape blocks", 1024),
+ AM_SIZE_RE("DUMP: [0-9][0-9]* tape blocks", 1024, 1),
+ AM_SIZE_RE("dump: Actual: [0-9][0-9]* tape blocks", 1024, 1),
AM_SIZE_RE("backup: There are [0-9][0-9]* tape blocks on [0-9][0-9]* tapes",
- 1024),
+ 1024, 1),
AM_SIZE_RE("backup: [0-9][0-9]* tape blocks on [0-9][0-9]* tape\\(s\\)",
- 1024),
+ 1024, 1),
AM_SIZE_RE("backup: [0-9][0-9]* 1k blocks on [0-9][0-9]* volume\\(s\\)",
- 1024),
+ 1024, 1),
AM_SIZE_RE("DUMP: [0-9][0-9]* blocks \\([0-9][0-9]*KB\\) on [0-9][0-9]* volume",
- 512),
+ 512, 1),
AM_SIZE_RE("DUMP: [0-9][0-9]* blocks \\([0-9][0-9]*\\.[0-9][0-9]*MB\\) on [0-9][0-9]* volume",
- 512),
- AM_SIZE_RE("DUMP: [0-9][0-9]* blocks", 1024),
- AM_SIZE_RE("DUMP: [0-9][0-9]* bytes were dumped", 1),
+ 512, 1),
+ AM_SIZE_RE("DUMP: [0-9][0-9]* blocks \\([0-9][0-9]*KB\\)",
+ 1024, 2),
+ AM_SIZE_RE("DUMP: [0-9][0-9]* blocks \\([0-9][0-9]*\\.[0-9][0-9]*MB\\)",
+ 1048576, 2),
+ AM_SIZE_RE("DUMP: [0-9][0-9]* blocks", 512, 1),
+ AM_SIZE_RE("DUMP: [0-9][0-9]* bytes were dumped", 1, 1),
/* OSF's vdump */
- AM_SIZE_RE("vdump: Dumped [0-9][0-9]* of [0-9][0-9]* bytes", 1),
+ AM_SIZE_RE("vdump: Dumped [0-9][0-9]* of [0-9][0-9]* bytes", 1, 1),
/* DU 4.0a dump */
- AM_SIZE_RE("dump: Actual: [0-9][0-9]* blocks output to pipe", 1024),
+ AM_SIZE_RE("dump: Actual: [0-9][0-9]* blocks output to pipe", 1024, 1),
/* DU 4.0 vdump */
- AM_SIZE_RE("dump: Dumped [0-9][0-9]* of [0-9][0-9]* bytes", 1),
+ AM_SIZE_RE("dump: Dumped [0-9][0-9]* of [0-9][0-9]* bytes", 1, 1),
/* HPUX dump */
- AM_SIZE_RE("DUMP: [0-9][0-9]* KB actual output", 1024),
+ AM_SIZE_RE("DUMP: [0-9][0-9]* KB actual output", 1024, 1),
/* HPUX 10.20 and above vxdump */
- AM_SIZE_RE("vxdump: [0-9][0-9]* tape blocks", 1024),
+ AM_SIZE_RE("vxdump: [0-9][0-9]* tape blocks", 1024, 1),
/* UnixWare vxdump */
- AM_SIZE_RE("vxdump: [0-9][0-9]* blocks", 1024),
+ AM_SIZE_RE("vxdump: [0-9][0-9]* blocks", 1024, 1),
/* SINIX vxdump */
- AM_SIZE_RE(" VXDUMP: [0-9][0-9]* blocks", 512),
+ AM_SIZE_RE(" VXDUMP: [0-9][0-9]* blocks", 512, 1),
/* SINIX ufsdump */
- AM_SIZE_RE(" UFSDUMP: [0-9][0-9]* blocks", 512),
+ AM_SIZE_RE(" UFSDUMP: [0-9][0-9]* blocks", 512, 1),
/* Irix 6.2 xfs dump */
- AM_SIZE_RE("xfsdump: media file size [0-9][0-9]* bytes", 1),
+ AM_SIZE_RE("xfsdump: media file size [0-9][0-9]* bytes", 1, 1),
/* NetApp dump */
- AM_SIZE_RE("DUMP: [0-9][0-9]* KB", 1024),
+ AM_SIZE_RE("DUMP: [0-9][0-9]* KB", 1024, 1),
/* strange dump lines */
AM_STRANGE_RE("should not happen"),
AM_STRANGE_RE(NULL)
};
-static void start_backup(char *host, char *disk, char *amdevice, int level,
- char *dumpdate, int dataf, int mesgf, int indexf);
-static void end_backup(int status);
+static void start_backup(dle_t *dle, char *host,
+ int dataf, int mesgf, int indexf);
+static void end_backup(dle_t *dle, int status);
/*
* doing similar to $ dump | compression | encryption
static void
start_backup(
- char * host,
- char * disk,
- char * amdevice,
- int level,
- char * dumpdate,
+ dle_t *dle,
+ char *host,
int dataf,
int mesgf,
int indexf)
char *encryptopt = skip_argument;
char *qdisk;
char *config;
+ level_t *alevel = (level_t *)dle->levellist->data;
+ int level = alevel->level;
- (void)dumpdate; /* Quiet unused parameter warning */
+ g_snprintf(level_str, SIZEOF(level_str), "%d", level);
- snprintf(level_str, SIZEOF(level_str), "%d", level);
+ qdisk = quote_string(dle->disk);
+ dbprintf(_("start: %s:%s lev %d\n"), host, qdisk, level);
- qdisk = quote_string(disk);
- dbprintf(("%s: start: %s:%s lev %d\n",
- get_pname(), host, qdisk, level));
-
- fprintf(stderr, "%s: start [%s:%s level %d]\n",
+ g_fprintf(stderr, _("%s: start [%s:%s level %d]\n"),
get_pname(), host, qdisk, level);
amfree(qdisk);
/* apply client-side encryption here */
- if ( options->encrypt == ENCRYPT_CUST ) {
- encpid = pipespawn(options->clnt_encrypt, STDIN_PIPE,
- &compout, &dataf, &mesgf,
- options->clnt_encrypt, encryptopt, NULL);
- dbprintf(("%s: pid %ld: %s\n",
- debug_prefix_time("-gnutar"), (long)encpid, options->clnt_encrypt));
+ if (dle->encrypt == ENCRYPT_CUST ) {
+ encpid = pipespawn(dle->clnt_encrypt, STDIN_PIPE, 0,
+ &compout, &dataf, &mesgf,
+ dle->clnt_encrypt, encryptopt, NULL);
+ dbprintf(_("gnutar: pid %ld: %s\n"), (long)encpid, dle->clnt_encrypt);
} else {
compout = dataf;
encpid = -1;
/* now do the client-side compression */
- if(options->compress == COMPR_FAST || options->compress == COMPR_BEST) {
+ if(dle->compress == COMP_FAST || dle->compress == COMP_BEST) {
compopt = skip_argument;
#if defined(COMPRESS_BEST_OPT) && defined(COMPRESS_FAST_OPT)
- if(options->compress == COMPR_BEST) {
+ if(dle->compress == COMP_BEST) {
compopt = COMPRESS_BEST_OPT;
} else {
compopt = COMPRESS_FAST_OPT;
}
#endif
- comppid = pipespawn(COMPRESS_PATH, STDIN_PIPE,
+ comppid = pipespawn(COMPRESS_PATH, STDIN_PIPE, 0,
&dumpout, &compout, &mesgf,
COMPRESS_PATH, compopt, NULL);
- dbprintf(("%s: pid %ld: %s",
- debug_prefix_time("-dump"), (long)comppid, COMPRESS_PATH));
+ dbprintf(_("dump: pid %ld: %s"), (long)comppid, COMPRESS_PATH);
if(compopt != skip_argument) {
- dbprintf((" %s", compopt));
+ dbprintf(" %s", compopt);
}
- dbprintf(("\n"));
- } else if (options->compress == COMPR_CUST) {
+ dbprintf("\n");
+ } else if (dle->compress == COMP_CUST) {
compopt = skip_argument;
- comppid = pipespawn(options->clntcompprog, STDIN_PIPE,
+ comppid = pipespawn(dle->compprog, STDIN_PIPE, 0,
&dumpout, &compout, &mesgf,
- options->clntcompprog, compopt, NULL);
- dbprintf(("%s: pid %ld: %s",
- debug_prefix_time("-gnutar-cust"), (long)comppid, options->clntcompprog));
+ dle->compprog, compopt, NULL);
+ dbprintf(_("gnutar-cust: pid %ld: %s"),
+ (long)comppid, dle->compprog);
if(compopt != skip_argument) {
- dbprintf((" %s", compopt));
+ dbprintf(" %s", compopt);
}
- dbprintf(("\n"));
+ dbprintf("\n");
} else {
dumpout = compout;
comppid = -1;
}
/* invoke dump */
- device = amname_to_devname(amdevice);
- fstype = amname_to_fstype(amdevice);
+ device = amname_to_devname(dle->device);
+ fstype = amname_to_fstype(dle->device);
- dbprintf(("%s: dumping device '%s' with '%s'\n",
- debug_prefix_time(NULL), device, fstype));
+ dbprintf(_("dumping device '%s' with '%s'\n"), device, fstype);
#if defined(USE_RUNDUMP) || !defined(DUMP)
- cmd = vstralloc(libexecdir, "/", "rundump", versionsuffix(), NULL);
+ cmd = vstralloc(amlibexecdir, "/", "rundump", NULL);
cmdX = cmd;
if (g_options->config)
config = g_options->config;
/* normal dump */
#ifdef XFSDUMP /* { */
#ifdef DUMP /* { */
- if (strcmp(amname_to_fstype(amdevice), "xfs") == 0)
+ if (strcmp(amname_to_fstype(dle->device), "xfs") == 0)
#else /* } { */
if (1)
#endif /* } */
{
- char *progname = cmd = newvstralloc(cmd, libexecdir, "/", "rundump",
- versionsuffix(), NULL);
+ char *progname = cmd = newvstralloc(cmd, amlibexecdir, "/", "rundump",
+ NULL);
cmdX = cmd;
if (g_options->config)
config = g_options->config;
" | sed",
" -e", " \'s/^/\\//\'",
NULL);
- info_tapeheader();
+ info_tapeheader(dle);
- start_index(options->createindex, dumpout, mesgf, indexf, indexcmd);
+ start_index(dle->create_index, dumpout, mesgf, indexf, indexcmd);
dumpkeys = stralloc(level_str);
- dumppid = pipespawn(progname, STDIN_PIPE,
+ dumppid = pipespawn(progname, STDIN_PIPE, 0,
&dumpin, &dumpout, &mesgf,
cmdX, config,
"xfsdump",
- options->no_record ? "-J" : skip_argument,
+ !dle->record ? "-J" : skip_argument,
"-F",
"-l", dumpkeys,
"-",
#endif /* } */
#ifdef VXDUMP /* { */
#ifdef DUMP
- if (strcmp(amname_to_fstype(amdevice), "vxfs") == 0)
+ if (strcmp(amname_to_fstype(dle->device), "vxfs") == 0)
#else
if (1)
#endif
{
#ifdef USE_RUNDUMP
- char *progname = cmd = newvstralloc(cmd, libexecdir, "/", "rundump",
- versionsuffix(), NULL);
+ char *progname = cmd = newvstralloc(cmd, amlibexecdir, "/", "rundump",
+ NULL);
cmdX = cmd;
if (g_options->config)
config = g_options->config;
program->restore_name = VXRESTORE;
dumpkeys = vstralloc(level_str,
- options->no_record ? "" : "u",
+ !dle->record ? "" : "u",
"s",
"f",
NULL);
" | ",
LEAF_AND_DIRS,
NULL);
- info_tapeheader();
+ info_tapeheader(dle);
- start_index(options->createindex, dumpout, mesgf, indexf, indexcmd);
+ start_index(dle->create_index, dumpout, mesgf, indexf, indexcmd);
- dumppid = pipespawn(progname, STDIN_PIPE,
+ dumppid = pipespawn(progname, STDIN_PIPE, 0,
&dumpin, &dumpout, &mesgf,
cmdX, config,
"vxdump",
#ifdef VDUMP /* { */
#ifdef DUMP
- if (strcmp(amname_to_fstype(amdevice), "advfs") == 0)
+ if (strcmp(amname_to_fstype(dle->device), "advfs") == 0)
#else
if (1)
#endif
{
- char *progname = cmd = newvstralloc(cmd, libexecdir, "/", "rundump",
- versionsuffix(), NULL);
+ cmd = newvstralloc(cmd, amlibexecdir, "/", "rundump", NULL);
cmdX = cmd;
if (g_options->config)
config = g_options->config;
else
config = "NOCONFIG";
- device = newstralloc(device, amname_to_dirname(amdevice));
+ device = newstralloc(device, amname_to_dirname(dle->device));
program->backup_name = VDUMP;
program->restore_name = VRESTORE;
dumpkeys = vstralloc(level_str,
- options->no_record ? "" : "u",
+ !dle->record ? "" : "u",
"b",
"f",
NULL);
" | ",
"sed -e \'\n/^\\./ {\ns/^\\.//\ns/, [0-9]*$//\ns/^\\.//\ns/ @-> .*$//\nt\n}\nd\n\'",
NULL);
- info_tapeheader();
+ info_tapeheader(dle);
- start_index(options->createindex, dumpout, mesgf, indexf, indexcmd);
+ start_index(dle->create_index, dumpout, mesgf, indexf, indexcmd);
- dumppid = pipespawn(cmd, STDIN_PIPE,
+ dumppid = pipespawn(cmd, STDIN_PIPE, 0,
&dumpin, &dumpout, &mesgf,
cmdX, config,
"vdump",
#else
# define PARAM_HONOR_NODUMP ""
#endif
+
+#ifdef __FreeBSD__
+# if defined(__FreeBSD_version) && (__FreeBSD_version >= 500043)
+# define FREEBSD_EXTRA_KEYS "bL"
+# else
+# define FREEBSD_EXTRA_KEYS "b"
+# endif
+#else
+# define FREEBSD_EXTRA_KEYS ""
+#endif
+
dumpkeys = vstralloc(level_str,
- options->no_record ? "" : "u",
+ !dle->record ? "" : "u",
+ FREEBSD_EXTRA_KEYS,
"s",
PARAM_HONOR_NODUMP,
"f",
" | ",
LEAF_AND_DIRS,
NULL);
- info_tapeheader();
+ info_tapeheader(dle);
- start_index(options->createindex, dumpout, mesgf, indexf, indexcmd);
+ start_index(dle->create_index, dumpout, mesgf, indexf, indexcmd);
- dumppid = pipespawn(cmd, STDIN_PIPE,
+ dumppid = pipespawn(cmd, STDIN_PIPE, 0,
&dumpin, &dumpout, &mesgf,
cmdX, config,
"dump",
dumpkeys,
+#ifdef __FreeBSD__
+ "64",
+#endif
"1048576",
#ifdef HAVE_HONOR_NODUMP
"0",
/* AIX backup program */
dumpkeys = vstralloc("-",
level_str,
- options->no_record ? "" : "u",
+ !dle->record ? "" : "u",
"f",
NULL);
" | ",
LEAF_AND_DIRS,
NULL);
- info_tapeheader();
+ info_tapeheader(dle);
- start_index(options->createindex, dumpout, mesgf, indexf, indexcmd);
+ start_index(dle->create_index, dumpout, mesgf, indexf, indexcmd);
- dumppid = pipespawn(cmd, STDIN_PIPE,
+ dumppid = pipespawn(cmd, STDIN_PIPE, 0,
&dumpin, &dumpout, &mesgf,
cmdX, config,
"backup",
aclose(compout);
aclose(dataf);
aclose(mesgf);
- if (options->createindex)
+ if (dle->create_index)
aclose(indexf);
}
static void
end_backup(
+ dle_t *dle,
int status)
{
+ (void)dle;
(void)status; /* Quiet unused parameter warning */
/* don't need to do anything for dump */