X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=client-src%2Fsendbackup-dump.c;h=14fd27e4b4d3e517ed7fab246e1e4e8d76194449;hb=4f0b86f7a23848c16cfe82fae81e639917fcff27;hp=84a9d1091751bdbc02d66063666a75c5896750bf;hpb=cdbbeef9cde260e429854dd313bc0bf7560e1e24;p=debian%2Famanda diff --git a/client-src/sendbackup-dump.c b/client-src/sendbackup-dump.c index 84a9d10..14fd27e 100644 --- a/client-src/sendbackup-dump.c +++ b/client-src/sendbackup-dump.c @@ -33,7 +33,6 @@ #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\'" @@ -41,40 +40,44 @@ static amregex_t re_table[] = { /* 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"), @@ -112,9 +115,9 @@ static amregex_t re_table[] = { 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 @@ -122,11 +125,8 @@ static void end_backup(int status); 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) @@ -136,32 +136,31 @@ start_backup( char *device = NULL; char *fstype = NULL; char *cmd = NULL; + char *cmdX = NULL; char *indexcmd = NULL; char level_str[NUM_STR_SIZE]; char *compopt = NULL; char *encryptopt = skip_argument; char *qdisk; char *config; + am_level_t *alevel = (am_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; @@ -169,56 +168,56 @@ start_backup( /* 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; else config = "NOCONFIG"; #else cmd = stralloc(DUMP); + cmdX = skip_argument; config = skip_argument; #endif @@ -226,13 +225,14 @@ start_backup( /* 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; else @@ -249,16 +249,16 @@ start_backup( " | 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, - config, /* JLM */ + cmdX, config, "xfsdump", - options->no_record ? "-J" : skip_argument, + !dle->record ? "-J" : skip_argument, "-F", "-l", dumpkeys, "-", @@ -269,27 +269,29 @@ start_backup( #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; else config = "NOCONFIG"; #else char *progname = cmd = newvstralloc(cmd, VXDUMP, NULL); + cmdX = skip_argument; config = skip_argument; #endif program->backup_name = VXDUMP; program->restore_name = VXRESTORE; dumpkeys = vstralloc(level_str, - options->no_record ? "" : "u", + !dle->record ? "" : "u", "s", "f", NULL); @@ -300,13 +302,13 @@ start_backup( " | ", 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, - progname, config, /* JLM */ + cmdX, config, "vxdump", dumpkeys, "1048576", @@ -319,23 +321,23 @@ start_backup( #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); @@ -346,13 +348,13 @@ start_backup( " | ", "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, - cmd, config, + cmdX, config, "vdump", dumpkeys, "60", @@ -368,12 +370,27 @@ start_backup( #define RESTORE "restore" #endif - dumpkeys = vstralloc(level_str, - options->no_record ? "" : "u", - "s", #ifdef HAVE_HONOR_NODUMP - "h", +# define PARAM_HONOR_NODUMP "h" +#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, + !dle->record ? "" : "u", + FREEBSD_EXTRA_KEYS, + "s", + PARAM_HONOR_NODUMP, "f", NULL); @@ -384,15 +401,18 @@ start_backup( " | ", 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, - cmd, config, + cmdX, config, "dump", dumpkeys, +#ifdef __FreeBSD__ + "64", +#endif "1048576", #ifdef HAVE_HONOR_NODUMP "0", @@ -405,7 +425,7 @@ start_backup( /* AIX backup program */ dumpkeys = vstralloc("-", level_str, - options->no_record ? "" : "u", + !dle->record ? "" : "u", "f", NULL); @@ -416,13 +436,13 @@ start_backup( " | ", 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, - cmd, config, + cmdX, config, "backup", dumpkeys, "-", @@ -443,14 +463,16 @@ start_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 */