Ignore:
Timestamp:
Jun 2, 2008, 10:49:01 AM (12 years ago)
Author:
Bruno Cornec
Message:

svn merge -r 1938:1976 $SVN_M/branches/2.2.6

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/stable/mondo/src/common/libmondo-cli.c

    r1939 r1977  
    199199/* Reference to global bkpinfo */
    200200extern struct s_bkpinfo *bkpinfo;
     201
     202extern void free_MR_global_filenames(void);
    201203
    202204/**
     
    349351    bkpinfo->internal_tape_block_size = DEFAULT_INTERNAL_TAPE_BLOCK_SIZE;
    350352
    351 /* compulsory */
     353    /* compulsory */
    352354    i = flag_set['c'] + flag_set['i'] + flag_set['n'] +
    353355        flag_set['t'] + flag_set['u'] + flag_set['r'] +
    354356        flag_set['w'] + flag_set['C'] + flag_set['U'];
    355     if (i == 0) {
     357    if ((i == 0) && (! bkpinfo->restore_data)) {
    356358        retval++;
    357359        log_to_screen("You must specify the media type\n");
     
    361363        log_to_screen("Please specify only one media type\n");
    362364    }
     365
    363366    if (flag_set['K']) {
    364367        g_loglevel = atoi(flag_val['K']);
    365             log_msg(1,"Loglevel forced to %s",g_loglevel);
     368            log_msg(1,"Loglevel forced to %d",g_loglevel);
    366369        if (g_loglevel < 3) {
    367370            g_loglevel = 3;
    368371        }
    369372    }
    370     if (flag_set['L'] && flag_set['0']) {
     373
     374    if ((flag_set['L'] && flag_set['0']) && (! bkpinfo->restore_data)) {
    371375        retval++;
    372376        log_to_screen("You cannot have 'no compression' _and_ LZOP.\n");
    373377    }
    374     bkpinfo->backup_data = flag_set['O'];
     378    if (! bkpinfo->restore_data) {
     379        bkpinfo->backup_data = flag_set['O'];
     380    }
    375381    bkpinfo->verify_data = flag_set['V'];
     382
    376383    if (flag_set['I'] && !bkpinfo->backup_data) {
    377384        log_to_screen("-I switch is ignored if just verifying");
     
    401408        }
    402409    }
    403     if (flag_set['W']) {
     410
     411    if ((flag_set['W']) && (! bkpinfo->restore_data)) {
    404412        bkpinfo->nonbootable_backup = TRUE;
    405413        log_to_screen("Warning - you have opted for non-bootable backup");
     
    409417        }
    410418    }
    411     if (flag_set['t'] && flag_set['H']) {
     419
     420    if ((flag_set['t'] && flag_set['H']) && (! bkpinfo->restore_data)) {
    412421        fatal_error
    413422            ("Sorry, you may not nuke w/o warning from tape. Drop -H, please.");
    414423    }
     424
    415425    if (flag_set['I']) {
    416426        if (!strcmp(bkpinfo->include_paths, "/")) {
     
    430440            if (q != NULL) {
    431441                *q = '\0';
    432                 if (stat(p, &buf) != 0) {
     442                if ((stat(p, &buf) != 0) && (! bkpinfo->restore_data)) {
    433443                    log_msg(1, "ERROR ! %s doesn't exist", p);
    434444                    fatal_error("ERROR ! You specified a directory to include which doesn't exist");
     
    436446                p = q+1 ;
    437447            } else {
    438                 if (stat(p, &buf) != 0) {
     448                if ((stat(p, &buf) != 0) && (! bkpinfo->restore_data)) {
    439449                    log_msg(1, "ERROR ! %s doesn't exist", p);
    440450                    fatal_error("ERROR ! You specified a directory to include which doesn't exist");
     
    456466
    457467    if (g_kernel_version >= 2.6 && !flag_set['d']
    458         && (flag_set['c'] || flag_set['w'])) {
     468        && (flag_set['c'] || flag_set['w']) && (! bkpinfo->restore_data)) {
    459469        fatal_error
    460470            ("If you are using the 2.6.x kernel, please specify the CD-R(W) device.");
     
    471481        strcpy(bkpinfo->include_paths, flag_val['J']);
    472482    }
    473     if (flag_set['c'] || flag_set['w'] || flag_set['C'] || flag_set['r']) {
     483
     484    if ((flag_set['c'] || flag_set['w'] || flag_set['C'] || flag_set['r']) && (! bkpinfo->restore_data)) {
    474485        if (!flag_set['r'] && g_kernel_version <= 2.5
    475486            && strstr(flag_val['d'], "/dev/")) {
     
    522533        }
    523534    }
    524     if (flag_set['t'] && !flag_set['d']) {
     535
     536    if ((flag_set['t'] && !flag_set['d']) && (! bkpinfo->restore_data)) {
    525537        log_it("Hmm! No tape drive specified. Let's see what we can do.");
    526538        if (find_tape_device_and_size(flag_val['d'], tmp)) {
     
    540552        if (! flag_set['d']) {
    541553            fatal_error
    542                 ("You need to specify a device file with -d for bootable USB device creation");
    543         }
    544         if (!flag_set['s']) {
     554                ("You need to specify a device file with -d for bootable USB device usage");
     555        }
     556        if ((!flag_set['s']) && (! bkpinfo->restore_data)) {
    545557            fatal_error("You did not specify a size (-s) for your USB device. Aborting");
    546558        }
     
    559571            }
    560572        }
    561         if (!find_home_of_exe("growisofs")) {
    562             fatal_error
    563                 ("Please install growisofs (probably part of dvd+rw-tools). If you want DVD support, you need it.");
    564         }
    565         if (!find_home_of_exe("dvd+rw-format")) {
    566             fatal_error
    567                 ("Please install dvd+rw-format (probably part of dvd+rw-tools). If you want DVD support, you need it.");
    568         }
    569573        if (strchr(flag_val['d'], ',')) {
    570574            fatal_error
    571575                ("Please don't give a SCSI node. Give a _device_, preferably a /dev entry, for the parameter of the -d flag.");
    572576        }
    573         if (!flag_set['s']) {
    574             sprintf(flag_val['s'], "%d", DEFAULT_DVD_DISK_SIZE);    // 4.7 salesman's GB = 4.482 real GB = 4582 MB
    575             strcat(flag_val['s'], "m");
    576             log_to_screen
    577                 ("You did not specify a size (-s) for DVD. I'm guessing %s.",
    578                  flag_val['s']);
    579             flag_set['s'] = 1;
     577        if (! bkpinfo->restore_data) {
     578            if (!find_home_of_exe("growisofs")) {
     579                fatal_error
     580                    ("Please install growisofs (probably part of dvd+rw-tools). If you want DVD support, you need it.");
     581            }
     582            if (!find_home_of_exe("dvd+rw-format")) {
     583                fatal_error
     584                    ("Please install dvd+rw-format (probably part of dvd+rw-tools). If you want DVD support, you need it.");
     585            }
     586            if (!flag_set['s']) {
     587                sprintf(flag_val['s'], "%d", DEFAULT_DVD_DISK_SIZE);    // 4.7 salesman's GB = 4.482 real GB = 4582 MB
     588                strcat(flag_val['s'], "m");
     589                log_to_screen
     590                    ("You did not specify a size (-s) for DVD. I'm guessing %s.",
     591                    flag_val['s']);
     592                flag_set['s'] = 1;
     593            }
    580594        }
    581595/*
     
    591605                ("Please don't give a SCSI node. Give a _device_, preferably a /dev entry, for the parameter of the -d flag.");
    592606        }
    593         if (flag_set['O']) {
     607        if ((flag_set['O']) && (! bkpinfo->restore_data)) {
    594608            if (flag_set['s']) {
    595609                if (flag_set['t']) {
     
    609623            }
    610624        }
    611     } else {                    /* CD|USB size */
     625    } else if (! bkpinfo->restore_data) {           /* CD|USB size */
    612626        if (flag_set['s']) {
    613627            if (process_the_s_switch(flag_val['s'])) {
     
    619633        }                       /* CD-RW */
    620634    }
     635
    621636    if (flag_set['n']) {
    622637        strncpy(bkpinfo->nfs_mount, flag_val['n'], MAX_STR_LEN);
     
    636651        log_msg(3, "isodir= %s", bkpinfo->isodir);
    637652    }
     653
    638654    if (flag_set['c']) {
    639655        bkpinfo->backup_media_type = cdr;
     
    702718                q++;
    703719                /* End of bug fix */
    704                 if (stat(p, &buf) != 0) {
     720                if ((stat(p, &buf) != 0) && (! bkpinfo->restore_data)) {
    705721                    log_msg(1, "WARNING ! %s doesn't exist", p);
    706722                }
    707723                p = q+1 ;
    708724            } else {
    709                 if (stat(p, &buf) != 0) {
     725                if ((stat(p, &buf) != 0) && (! bkpinfo->restore_data)) {
    710726                    log_msg(1, "WARNING ! %s doesn't exist", p);
    711727                }
     
    719735                4*MAX_STR_LEN - strlen(bkpinfo->exclude_paths));
    720736    }
     737
    721738    if (flag_set['e']) {
    722739        bkpinfo->please_dont_eject = TRUE;
    723740    }
    724     if (flag_set['N'])          // exclude NFS mounts & devices
     741
     742    if ((flag_set['N']) && (! bkpinfo->restore_data))       // exclude NFS mounts & devices
    725743    {
    726744//      strncpy(psz, list_of_NFS_devices_and_mounts(), MAX_STR_LEN);
     
    733751                bkpinfo->exclude_paths);
    734752    }
     753
    735754    if (strlen(bkpinfo->exclude_paths) >= 4*MAX_STR_LEN) {
    736755        fatal_error
    737756            ("Your '-E' parameter is too long. Increase MAX_STR_LEN");
    738757    }
     758
    739759    if (flag_set['b']) {
    740760        strcpy(psz, flag_val['b']);
     
    754774        bkpinfo->internal_tape_block_size = itbs;
    755775    }
    756     if (flag_set['D']) {
     776
     777    if ((flag_set['D']) && (! bkpinfo->restore_data)) {
    757778        bkpinfo->differential = 1;
    758779//      bkpinfo->differential = atoi (flag_val['D']);
     
    762783        }
    763784    }
     785
    764786    if (flag_set['x']) {
    765787        strncpy(bkpinfo->image_devs, flag_val['x'], MAX_STR_LEN / 4);
    766         if (run_program_and_log_output("which ntfsclone", 2)) {
     788        if ((run_program_and_log_output("which ntfsclone", 2)) && (! bkpinfo->restore_data)) {
    767789            fatal_error("Please install ntfsprogs package/tarball.");
    768790        }
    769791    }
     792
    770793    if (flag_set['m']) {
    771794        bkpinfo->manual_cd_tray = TRUE;
    772795    }
    773     if (flag_set['k']) {
     796
     797    if ((flag_set['k']) && (! bkpinfo->restore_data)) {
    774798        strncpy(bkpinfo->kernel_path, flag_val['k'], MAX_STR_LEN);
    775799        if (!strcmp(bkpinfo->kernel_path, "failsafe")) {
     
    785809        }
    786810    }
     811
    787812    if (flag_set['p']) {
    788813        strncpy(bkpinfo->prefix, flag_val['p'], MAX_STR_LEN / 4);
    789     }
    790 
     814        log_msg(1,"Prefix forced to %s",bkpinfo->prefix);
     815    }
    791816
    792817    if (flag_set['d']) {        /* backup directory (if ISO/NFS) */
     
    801826            strncpy(bkpinfo->nfs_remote_dir, flag_val['d'], MAX_STR_LEN);
    802827        } else {                /* backup device (if tape/CD-R/CD-RW) */
    803 
    804828            strncpy(bkpinfo->media_device, flag_val['d'], MAX_STR_LEN / 4);
    805829        }
    806830    }
    807831
    808     if (flag_set['n']) {
     832    if ((flag_set['n']) && (! bkpinfo->restore_data)) {
    809833        asprintf(&tmp1,"%s/%s/.dummy.txt", bkpinfo->isodir,bkpinfo->nfs_remote_dir);
    810834        sprintf(tmp, "echo hi > %s", tmp1);
     
    839863    }
    840864
    841     if (!flag_set['d'] && !flag_set['n'] && !flag_set['C']) {
     865    if ((!flag_set['d'] && !flag_set['n'] && !flag_set['C']) && (! bkpinfo->restore_data)) {
    842866        retval++;
    843867        log_to_screen("Please specify the backup device/directory.\n");
     
    845869            ("You didn't use -d to specify the backup device/directory.");
    846870    }
    847 /* optional, obscure */
     871
    848872    for (i = '0'; i <= '9'; i++) {
    849873        if (flag_set[i]) {
     
    851875        }                       /* not '\0' but '0' */
    852876    }
     877
    853878    if (flag_set['S']) {
    854879        sprintf(bkpinfo->scratchdir, "%s/mondo.scratch.%ld", flag_val['S'],
    855880                random() % 32768);
    856881    }
     882
    857883    if (flag_set['T']) {
    858884        setup_tmpdir(flag_val['T']);
     
    872898        }
    873899    }
    874     if (flag_set['A']) {
     900
     901    if ((flag_set['A']) && (! bkpinfo->restore_data)) {
    875902        strncpy(bkpinfo->call_after_iso, flag_val['A'], MAX_STR_LEN);
    876903    }
    877     if (flag_set['B']) {
     904
     905    if ((flag_set['B']) && (! bkpinfo->restore_data)) {
    878906        strncpy(bkpinfo->call_before_iso, flag_val['B'], MAX_STR_LEN);
    879907    }
    880     if (flag_set['H']) {
     908
     909    if ((flag_set['H']) && (! bkpinfo->restore_data)) {
    881910        g_cd_recovery = TRUE;
    882911    }
    883     if (flag_set['l']) {
     912
     913    if ((flag_set['l']) && (! bkpinfo->restore_data)) {
    884914#ifdef __FreeBSD__
    885915#  define BOOT_LOADER_CHARS "GLBMR"
     
    901931#undef BOOT_LOADER_CHARS
    902932    }
     933
    903934    if (flag_set['f']) {
    904935        strncpy(bkpinfo->boot_device,
     
    907938                MAX_STR_LEN / 4);
    908939    }
    909     if (flag_set['P']) {
     940
     941    if ((flag_set['P']) && (! bkpinfo->restore_data)) {
    910942        strncpy(bkpinfo->postnuke_tarball, flag_val['P'], MAX_STR_LEN);
    911943    }
     944
    912945    if (flag_set['Q']) {
    913946        i = which_boot_loader(tmp);
     
    916949        finish(0);
    917950    }
    918     if (flag_set['L']) {
     951
     952    if ((flag_set['L']) && (! bkpinfo->restore_data)) {
    919953        bkpinfo->use_lzo = TRUE;
    920954        if (run_program_and_log_output("which lzop", 2)) {
     
    925959    }
    926960
    927     if (flag_set['G']) {
     961    if ((flag_set['G']) && (! bkpinfo->restore_data)) {
    928962        bkpinfo->use_gzip = TRUE;
    929963        if (run_program_and_log_output("which gzip", 2)) {
     
    934968    }
    935969
    936     if (!flag_set['o']
    937         &&
    938         !run_program_and_log_output
    939         ("grep -Ei suse /etc/issue.net | grep -E '9.0' | grep 64", 2)) {
     970    bkpinfo->use_obdr = FALSE;
     971    if (flag_set['o']) {
     972        if ((!flag_set['t']) && (! bkpinfo->restore_data)) {
     973            log_to_screen("OBDR support is only available for tapes. Use the -t option");
     974            fatal_error("Aborting");
     975        }
     976        bkpinfo->use_obdr = TRUE;
     977    }
     978
     979#ifndef __FreeBSD__
     980    if ((!is_this_a_valid_disk_format("vfat")) && (! bkpinfo->restore_data)) {
    940981        bkpinfo->make_cd_use_lilo = TRUE;
    941982        log_to_screen
    942             ("Forcing you to use LILO. SuSE 9.0 (64-bit) has a broken mkfs.vfat binary.");
    943     }
    944     if (flag_set['o']) {
     983            ("Your kernel appears not to support vfat filesystems. I am therefore");
     984        log_to_screen
     985            ("using LILO instead of SYSLINUX as the media boot loader.");
     986    }
     987    if ((run_program_and_log_output("which mkfs.vfat", 2)) && (! bkpinfo->restore_data)) {
    945988        bkpinfo->make_cd_use_lilo = TRUE;
    946     }
    947 #ifndef __FreeBSD__
    948     else {
    949         if (!is_this_a_valid_disk_format("vfat")) {
    950             bkpinfo->make_cd_use_lilo = TRUE;
    951             log_to_screen
    952                 ("Your kernel appears not to support vfat filesystems. I am therefore");
    953             log_to_screen
    954                 ("using LILO instead of SYSLINUX as the media boot loader.");
    955         }
    956         if (run_program_and_log_output("which mkfs.vfat", 2)) {
    957             bkpinfo->make_cd_use_lilo = TRUE;
    958989#ifdef __IA32__
    959             log_to_screen
    960                 ("Your filesystem is missing 'mkfs.vfat', so I cannot use SYSLINUX as");
    961             log_to_screen
    962                 ("your boot loader. I shall therefore use LILO instead.");
     990        log_to_screen
     991            ("Your filesystem is missing 'mkfs.vfat', so I cannot use SYSLINUX as");
     992        log_to_screen
     993            ("your boot loader. I shall therefore use LILO instead.");
    963994#endif
    964995#ifdef __IA64__
    965             log_to_screen
    966                 ("Your filesystem is missing 'mkfs.vfat', so I cannot prepare the EFI");
    967             log_to_screen("environment correctly. Please install it.");
    968             fatal_error("Aborting");
     996        log_to_screen
     997            ("Your filesystem is missing 'mkfs.vfat', so I cannot prepare the EFI");
     998        log_to_screen("environment correctly. Please install it.");
     999        fatal_error("Aborting");
    9691000#endif
    970         }
     1001    }
    9711002#ifdef __IA64__
    972         /* We force ELILO usage on IA64 */
    973         bkpinfo->make_cd_use_lilo = TRUE;
     1003    /* We force ELILO usage on IA64 */
     1004    bkpinfo->make_cd_use_lilo = TRUE;
    9741005#endif
    975     }
    9761006#endif
    9771007
     
    9801010    }
    9811011
    982     if ( ! bkpinfo->restore_data ) {
     1012    if (! bkpinfo->restore_data) {
    9831013        i = flag_set['O'] + flag_set['V'];
    9841014        if (i == 0) {
    9851015            retval++;
    9861016            log_to_screen("Specify backup (-O), verify (-V) or both (-OV).\n");
     1017        }
     1018    }
     1019
     1020    if ((! bkpinfo->restore_data) && (flag_set['Z'])) {
     1021            fatal_error
     1022                ("The -Z switch is only valid in restore mode");
     1023    }
     1024
     1025    if (flag_set['Z']) {
     1026        if (! strcmp(flag_val['Z'], "nuke")) {
     1027            bkpinfo->restore_mode = nuke;
     1028        } else if (! strcmp(flag_val['Z'], "interactive")) {
     1029            bkpinfo->restore_mode = interactive;
     1030        } else if (! strcmp(flag_val['Z'], "compare")) {
     1031            bkpinfo->restore_mode = compare;
     1032        } else if (! strcmp(flag_val['Z'], "mbr")) {
     1033            bkpinfo->restore_mode = mbr;
     1034        } else if (! strcmp(flag_val['Z'], "iso")) {
     1035            bkpinfo->restore_mode = isoonly;
     1036        } else if (! strcmp(flag_val['Z'], "isonuke")) {
     1037            bkpinfo->restore_mode = isonuke;
     1038        } else {
     1039            bkpinfo->restore_mode = interactive;
    9871040        }
    9881041    }
     
    10821135void help_screen()
    10831136{
    1084     log_msg(1, "Type 'man mondo-archive' for more information\n");
     1137    log_msg(1, "Type 'man mondoarchive' for more information\n");
    10851138    exit(1);
    10861139}
     
    11411194    }
    11421195    kill_buffer();
     1196
     1197    free_MR_global_filenames();
     1198
    11431199    fatal_error
    1144         ("Mondoarchive is terminating in response to a signal from the OS");
     1200        ("MondoRescue is terminating in response to a signal from the OS");
    11451201    finish(254);                // just in case
    11461202}
Note: See TracChangeset for help on using the changeset viewer.