X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=client-src%2Fsendbackup-dump.c;h=254d86b128448d8f911852544f736bf30b245249;hb=d28952249e392eb31bc8eecc53f6c477f30c617b;hp=a568fc8b372e2feb359681b74bc10f01542438e3;hpb=71325c297e0436e9930a3e129a26696e78c27f62;p=debian%2Famanda diff --git a/client-src/sendbackup-dump.c b/client-src/sendbackup-dump.c index a568fc8..254d86b 100644 --- a/client-src/sendbackup-dump.c +++ b/client-src/sendbackup-dump.c @@ -1,6 +1,7 @@ /* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 1991-1999 University of Maryland at College Park + * Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved. * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -24,7 +25,7 @@ * file named AUTHORS, in the root directory of this distribution. */ /* - * $Id: sendbackup-dump.c,v 1.90.2.1 2006/09/23 19:19:47 martinea Exp $ + * $Id: sendbackup-dump.c,v 1.90 2006/07/25 18:10:07 martinea Exp $ * * send backup data using BSD dump */ @@ -33,7 +34,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 +41,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", 512), - 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 +116,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 +126,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) @@ -143,26 +144,24 @@ start_backup( 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; @@ -170,50 +169,48 @@ 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; @@ -229,13 +226,13 @@ 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; @@ -253,16 +250,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, cmdX, config, "xfsdump", - options->no_record ? "-J" : skip_argument, + !dle->record ? "-J" : skip_argument, "-F", "-l", dumpkeys, "-", @@ -273,14 +270,14 @@ 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; @@ -295,7 +292,7 @@ start_backup( program->restore_name = VXRESTORE; dumpkeys = vstralloc(level_str, - options->no_record ? "" : "u", + !dle->record ? "" : "u", "s", "f", NULL); @@ -306,11 +303,11 @@ 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, cmdX, config, "vxdump", @@ -325,24 +322,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); @@ -353,11 +349,11 @@ 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, cmdX, config, "vdump", @@ -375,12 +371,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); @@ -391,15 +402,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, cmdX, config, "dump", dumpkeys, +#ifdef __FreeBSD__ + "64", +#endif "1048576", #ifdef HAVE_HONOR_NODUMP "0", @@ -412,7 +426,7 @@ start_backup( /* AIX backup program */ dumpkeys = vstralloc("-", level_str, - options->no_record ? "" : "u", + !dle->record ? "" : "u", "f", NULL); @@ -423,11 +437,11 @@ 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, cmdX, config, "backup", @@ -450,14 +464,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 */