Changeset 2325 in MondoRescue
- Timestamp:
- Aug 18, 2009, 3:19:15 PM (15 years ago)
- Location:
- branches/2.2.10/mondo/src
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.10/mondo/src/common/libmondo-archive.c
r2324 r2325 561 561 if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { 562 562 mr_asprintf(tape_size_sz, "%ld", bkpinfo->media_size[1]); 563 ntapedev = get_non_rewind_dev(bkpinfo->media_device); 563 if (bkpinfo->media_device) { 564 ntapedev = get_non_rewind_dev(bkpinfo->media_device); 565 } 564 566 if ((bkpinfo->use_obdr) && (ntapedev != NULL)) { 565 strncpy(bkpinfo->media_device,ntapedev,(size_t)(MAX_STR_LEN / 4)); 567 mr_free(bkpinfo->media_device); 568 mr_asprintf(bkpinfo->media_device,"%s",ntapedev); 566 569 } else { 567 570 if (ntapedev == NULL) { … … 569 572 } 570 573 } 571 paranoid_free(ntapedev); 572 mr_asprintf(tape_device, "%s", bkpinfo->media_device); 574 mr_free(ntapedev); 575 if (bkpinfo->media_device) { 576 mr_asprintf(tape_device, "%s", bkpinfo->media_device); 577 } else { 578 mr_asprintf(tape_device, ""); 579 } 573 580 } else { 574 581 mr_asprintf(tape_size_sz, "%ld", 0L);; … … 759 766 fatal_error("Unknown backup_media_type"); 760 767 } 761 if ( bkpinfo->backup_media_type == usb) {768 if ((bkpinfo->backup_media_type == usb) && (bkpinfo->media_device)) { 762 769 mr_asprintf(tmp2, "--usb %s", bkpinfo->media_device); 763 770 } else { … … 1197 1204 mr_free(data_disks_file); 1198 1205 1199 mr_asprintf(command, "rm -f %s/%s/%s-[1-9]*.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix); 1200 paranoid_system(command); 1201 mr_free(command); 1206 if ((bkpinfo->isodir != NULL) && (bkpinfo->prefix != NULL)) { 1207 if (bkpinfo->nfs_remote_dir) { 1208 // NFS 1209 mr_asprintf(command, "rm -f %s/%s/%s-[1-9]*.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix); 1210 } else { 1211 // ISO 1212 mr_asprintf(command, "rm -f %s/%s-[1-9]*.iso", bkpinfo->isodir, bkpinfo->prefix); 1213 } 1214 paranoid_system(command); 1215 mr_free(command); 1216 } 1202 1217 1203 1218 wipe_archives(bkpinfo->scratchdir); … … 1516 1531 log_msg(1, message_to_screen); 1517 1532 1518 mr_asprintf(tmp1, "%s1", bkpinfo->media_device); 1533 if (bkpinfo->media_device) { 1534 mr_asprintf(tmp1, "%s1", bkpinfo->media_device); 1535 } else { 1536 mr_asprintf(tmp1, ""); 1537 } 1519 1538 if (is_this_device_mounted(tmp1)) { 1520 1539 log_msg(1, "USB device mounted. Remounting it at the right place"); … … 1700 1719 } 1701 1720 pause_for_N_seconds(5, "Letting DVD drive settle"); 1702 mr_asprintf(sz_blank_disk, "dvd+rw-format -force %s", bkpinfo->media_device); 1721 if (bkpinfo->media_device) { 1722 mr_asprintf(sz_blank_disk, "dvd+rw-format -force %s", bkpinfo->media_device); 1723 } else { 1724 mr_asprintf(sz_blank_disk, "dvd+rw-format"); 1725 } 1703 1726 log_msg(3, "sz_blank_disk = '%s'", sz_blank_disk); 1704 res = 1705 run_external_binary_with_percentage_indicator_NEW 1706 ("Blanking DVD disk", sz_blank_disk); 1727 res = run_external_binary_with_percentage_indicator_NEW("Blanking DVD disk", sz_blank_disk); 1707 1728 if (res) { 1708 1729 log_to_screen … … 1820 1841 || bkpinfo->backup_media_type == cdrw) { 1821 1842 if (is_this_device_mounted(bkpinfo->media_device)) { 1822 log_msg(2, 1823 "Warning - %s mounted. I'm unmounting it before I burn to it.", 1824 bkpinfo->media_device); 1843 log_msg(2, "Warning - %s mounted. I'm unmounting it before I burn to it.", bkpinfo->media_device); 1825 1844 mr_asprintf(tmp, "umount %s", bkpinfo->media_device); 1826 1845 run_program_and_log_output(tmp, FALSE); … … 2604 2623 /*@ buffers ********************************************* */ 2605 2624 char *tmp = NULL; 2606 char *cdrom_dev ;2625 char *cdrom_dev = NULL; 2607 2626 char *cdrw_dev; 2608 2627 char *our_serial_str = NULL; … … 2616 2635 char *mds = NULL; 2617 2636 2618 malloc_string(cdrom_dev);2619 2637 malloc_string(cdrw_dev); 2620 2638 malloc_string(szcdno); … … 2634 2652 gotos_make_me_puke: 2635 2653 ok_go_ahead_burn_it = TRUE; 2636 if ( !find_cdrom_device(cdrom_dev, FALSE)) {2637 /* When enabled, it made CD eject-and-retract when wrong CD inserted.. Weird2638 2639 2640 */2654 if ((cdrom_dev = find_cdrom_device(FALSE)) != NULL) { 2655 /* When enabled, it made CD eject-and-retract when wrong CD inserted.. Weird 2656 log_msg(2, "paafcd: Retracting CD-ROM drive if possible" ); 2657 retract_CD_tray_and_defeat_autorun(); 2658 */ 2641 2659 mr_asprintf(tmp, "umount %s", cdrom_dev); 2642 2660 run_program_and_log_output(tmp, 1); … … 2718 2736 popup_and_OK(tmp); 2719 2737 mr_free(tmp); 2738 mr_free(cdrom_dev); 2720 2739 goto gotos_make_me_puke; 2721 2740 } else { 2722 2741 log_msg(2, "paafcd: OK, going ahead and burning it."); 2723 2742 } 2743 mr_free(cdrom_dev); 2724 2744 2725 2745 mds = media_descriptor_string(g_backup_media_type); … … 2730 2750 mr_free(mds); 2731 2751 2732 paranoid_free(cdrom_dev);2733 2752 paranoid_free(cdrw_dev); 2734 2753 paranoid_free(mtpt); … … 3187 3206 3188 3207 /*@ buffers ***************************************************** */ 3189 char *tmp ;3190 char *tmp1 ;3208 char *tmp = NULL; 3209 char *tmp1 = NULL; 3191 3210 char *cdno_fname = NULL; 3192 3211 char *lastcd_fname = NULL; … … 3200 3219 /*@ int *********************************************************** */ 3201 3220 int res = 0; 3202 3203 malloc_string(tmp);3204 3221 3205 3222 assert(bkpinfo != NULL); … … 3246 3263 log_to_screen("Warning! CD is too big. It occupies %ld KB, which is more than the %ld KB allowed.", (long) space_occupied_by_cd(bkpinfo->scratchdir), (long) bkpinfo->media_size[g_current_media_number]); 3247 3264 } 3248 mr_asprintf(isofile, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, g_current_media_number); 3265 if (((bkpinfo->isodir == NULL) && (bkpinfo->nfs_remote_dir == NULL)) || (bkpinfo->prefix == NULL)) { 3266 fatal_error("Something wrong in your environement. Report to dev team"); 3267 } 3268 if (bkpinfo->nfs_remote_dir) { 3269 // NFS 3270 mr_asprintf(isofile, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, g_current_media_number); 3271 } else { 3272 // ISO 3273 mr_asprintf(isofile, "%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->prefix, g_current_media_number); 3274 } 3249 3275 for (that_one_was_ok = FALSE; !that_one_was_ok;) { 3250 3276 if (bkpinfo->backup_media_type != usb) { … … 3256 3282 && (bkpinfo->backup_media_type == cdr 3257 3283 || bkpinfo->backup_media_type == cdrw)) { 3258 if ( find_cdrom_device(tmp, FALSE)) // make sure find_cdrom_device() finds, records CD-R's loc3259 {3284 if ((tmp = find_cdrom_device(FALSE)) == NULL) { 3285 // make sure find_cdrom_device() finds, records CD-R's loc 3260 3286 log_msg(3, "*Sigh* Mike, I hate your computer."); 3287 // if it can't be found then force pausing 3261 3288 bkpinfo->manual_cd_tray = TRUE; 3262 } // if it can't be found then force pausing 3263 else { 3289 } else { 3264 3290 log_msg(3, "Great. Found Mike's CD-ROM drive."); 3265 3291 } 3292 mr_free(tmp); 3266 3293 } 3267 3294 if (bkpinfo->verify_data && !res) { 3268 3295 mds = media_descriptor_string(g_backup_media_type); 3269 log_to_screen 3270 ("Please reboot from the 1st %s in Compare Mode, as a precaution.", mds); 3296 log_to_screen("Please reboot from the 1st %s in Compare Mode, as a precaution.", mds); 3271 3297 mr_free(mds); 3272 3298 chdir("/"); … … 3320 3346 3321 3347 bkpinfo->verify_data = orig_vfy_flag_val; 3322 mr_free(tmp);3323 3348 return (0); 3324 3349 } … … 3353 3378 "Verifying archives against live filesystem"); 3354 3379 if (bkpinfo->backup_media_type == cdstream) { 3355 strcpy(bkpinfo->media_device, "/dev/cdrom"); 3380 mr_free(bkpinfo->media_device); 3381 mr_asprintf(bkpinfo->media_device, "/dev/cdrom"); 3356 3382 } 3357 3383 verify_tape_backups(); … … 3368 3394 g_current_media_number = cdno; 3369 3395 if (bkpinfo->backup_media_type != iso) { 3370 find_cdrom_device(bkpinfo->media_device, FALSE); // replace 0,0,0 with /dev/cdrom 3396 mr_free(bkpinfo->media_device); 3397 bkpinfo->media_device = find_cdrom_device(FALSE); // replace 0,0,0 with /dev/cdrom 3371 3398 } 3372 3399 chdir("/"); -
branches/2.2.10/mondo/src/common/libmondo-cli.c
r2324 r2325 114 114 } 115 115 } 116 mr_asprintf(tmp, "rm -Rf %s/tmp.mondo.*", bkpinfo->tmpdir);117 paranoid_system(tmp);118 mr_free(tmp);119 120 mr_asprintf(tmp, "rm -Rf %s/mondo.scratch.*", bkpinfo->scratchdir);121 paranoid_system(tmp);122 mr_free(tmp);123 124 mr_strcat(bkpinfo->scratchdir, "/mondo.scratch.%ld", random() % 32767);125 126 116 mr_asprintf(tmp, "mkdir -p %s/tmpfs", bkpinfo->tmpdir); 127 117 paranoid_system(tmp); … … 889 879 if ((flag_set['t'] && !flag_set['d']) && (! bkpinfo->restore_data)) { 890 880 log_it("Hmm! No tape drive specified. Let's see what we can do."); 891 p = mr_find_tape_device(); 892 if (!p) { 881 if ((tmp1 = find_tape_device_and_size(NULL)) == NULL) { 893 882 fatal_error("Tape device not specified. I couldn't find it either."); 894 883 } 884 strcpy(flag_val['d'], tmp1); 885 mr_free(tmp1); 895 886 flag_set['d'] = TRUE; 896 887 strcpy(flag_val['d'], p); … … 917 908 } 918 909 if (!flag_set['d']) { 919 if (!find_dvd_device(flag_val['d'], FALSE)) { 910 if ((tmp = find_dvd_device(flag_val['d'])) != NULL) { 911 strcpy(flag_val['d'],tmp); 912 mr_free(tmp); 920 913 flag_set['d'] = TRUE; 921 914 log_to_screen("I guess DVD drive is at %s", flag_val['d']); … … 923 916 } 924 917 if (strchr(flag_val['d'], ',')) { 925 fatal_error 926 ("Please don't give a SCSI node. Give a _device_, preferably a /dev entry, for the parameter of the -d flag."); 918 fatal_error("Please don't give a SCSI node. Give a _device_, preferably a /dev entry, for the parameter of the -d flag."); 927 919 } 928 920 if (! bkpinfo->restore_data) { 929 921 if (!find_home_of_exe("growisofs")) { 930 fatal_error 931 ("Please install growisofs (probably part of dvd+rw-tools). If you want DVD support, you need it."); 922 fatal_error("Please install growisofs (probably part of dvd+rw-tools). If you want DVD support, you need it."); 932 923 } 933 924 if (!find_home_of_exe("dvd+rw-format")) { 934 fatal_error 935 ("Please install dvd+rw-format (probably part of dvd+rw-tools). If you want DVD support, you need it."); 925 fatal_error("Please install dvd+rw-format (probably part of dvd+rw-tools). If you want DVD support, you need it."); 936 926 } 937 927 if (!flag_set['s']) { 938 928 sprintf(flag_val['s'], "%d", DEFAULT_DVD_DISK_SIZE); // 4.7 salesman's GB = 4.482 real GB = 4582 MB 939 929 strcat(flag_val['s'], "m"); 940 log_to_screen 941 ("You did not specify a size (-s) for DVD. I'm guessing %s.", 942 flag_val['s']); 930 log_to_screen("You did not specify a size (-s) for DVD. I'm guessing %s.", flag_val['s']); 943 931 flag_set['s'] = 1; 944 932 } … … 948 936 if (flag_set['t'] || flag_set['u']) { /* tape size */ 949 937 if (strchr(flag_val['d'], ',')) { 950 fatal_error 951 ("Please don't give a SCSI node. Give a _device_, preferably a /dev entry, for the parameter of the -d flag."); 938 fatal_error("Please don't give a SCSI node. Give a _device_, preferably a /dev entry, for the parameter of the -d flag."); 952 939 } 953 940 if ((flag_set['O']) && (! bkpinfo->restore_data)) { … … 981 968 982 969 if (flag_set['n']) { 983 strncpy(bkpinfo->nfs_mount, flag_val['n'], MAX_STR_LEN); 970 mr_free(bkpinfo->nfs_mount); 971 mr_asprintf(bkpinfo->nfs_mount, "%s", flag_val['n']); 984 972 if (!flag_set['d']) { 985 strncpy(bkpinfo->nfs_remote_dir, "/", MAX_STR_LEN); 973 mr_free(bkpinfo->nfs_remote_dir); 974 mr_asprintf(bkpinfo->nfs_remote_dir, "/"); 986 975 } 987 976 /* test if we specified a user for the NFS dialog */ … … 989 978 if (p != NULL) { 990 979 /* User found. Store the 2 values */ 980 bkpinfo->nfs_user = bkpinfo->nfs_mount; 991 981 p++; 992 982 /* new NFS mount */ 993 strcpy(tmp,p);983 bkpinfo->nfs_mount = p; 994 984 p--; 995 985 *p = '\0'; 996 mr_asprintf(bkpinfo->nfs_user,"%s",p);997 strcpy(bkpinfo->nfs_mount,tmp);998 986 } 999 987 mr_asprintf(tmp1, "mount | grep -E \"^%s[/]* .*\" | cut -d' ' -f3", bkpinfo->nfs_mount); … … 1221 1209 mr_free(tmp1); 1222 1210 } else if (flag_set['n']) { 1223 strncpy(bkpinfo->nfs_remote_dir, flag_val['d'], MAX_STR_LEN); 1211 mr_free(bkpinfo->nfs_remote_dir); 1212 mr_asprintf(bkpinfo->nfs_remote_dir, "%s", flag_val['d']); 1224 1213 } else { /* backup device (if tape/CD-R/CD-RW) */ 1225 strncpy(bkpinfo->media_device, flag_val['d'], MAX_STR_LEN / 4); 1214 mr_free(bkpinfo->media_device); 1215 mr_asprintf(bkpinfo->media_device, "%s", flag_val['d']); 1226 1216 } 1227 1217 } … … 1245 1235 } 1246 1236 1247 if (!flag_set['d'] 1248 && (flag_set['c'] || flag_set['w'] || flag_set['C'])) { 1237 if (!flag_set['d'] && (flag_set['c'] || flag_set['w'] || flag_set['C'])) { 1249 1238 if (g_kernel_version >= 2.6) { 1250 1239 tmp2 = popup_and_get_string("Device", "Please specify the device", bkpinfo->media_device); 1251 1240 if (tmp2 == NULL) { 1241 fatal_error("User opted to cancel."); 1242 } 1243 bkpinfo->media_device = tmp2; 1244 } else { 1245 bkpinfo->media_device = find_cdrw_device(); 1246 if (bkpinfo->media_device == NULL) { 1252 1247 retval++; 1253 log_to_screen("User opted to cancel."); 1254 } 1255 mr_free(tmp2); 1256 } else if (find_cdrw_device(bkpinfo->media_device)) { 1257 retval++; 1258 log_to_screen 1259 ("Tried and failed to find CD-R[W] drive automatically.\n"); 1260 } else { 1261 flag_set['d'] = TRUE; 1262 strncpy(flag_val['d'], bkpinfo->media_device, MAX_STR_LEN / 4); 1248 log_to_screen("Tried and failed to find CD-R[W] drive automatically.\n"); 1249 } else { 1250 flag_set['d'] = TRUE; 1251 strncpy(flag_val['d'], bkpinfo->media_device, MAX_STR_LEN / 4); 1252 } 1263 1253 } 1264 1254 } … … 1288 1278 1289 1279 if (i) { 1290 retval++;1291 1280 log_to_screen("Please specify a tempdir which I can write to. :)"); 1292 1281 fatal_error("I cannot write to the tempdir you specified."); … … 1467 1456 /*@ ints ** */ 1468 1457 int opt = 0; 1469 char *tmp = NULL;1470 1458 int i = 0; 1471 1459 int len; -
branches/2.2.10/mondo/src/common/libmondo-devices-EXT.h
r2321 r2325 9 9 extern int find_and_mount_actual_cd( 10 10 char *mountpoint); 11 extern int find_cdrom_device(char *output,bool try_to_mount);12 extern int find_dvd_device(char *output, bool try_to_mount);11 extern char *find_cdrom_device(bool try_to_mount); 12 extern char *find_dvd_device(); 13 13 extern long get_phys_size_of_drive(char *drive); 14 14 extern bool is_this_a_valid_disk_format(char *format); … … 16 16 extern int find_device_in_mountlist(struct mountlist_itself *mountlist, 17 17 char *device); 18 extern int mount_CDROM_here(char *device, c har *mountpoint);18 extern int mount_CDROM_here(char *device, const char *mountpoint); 19 19 extern long long size_of_specific_device_in_mountlist(struct 20 20 mountlist_itself … … 28 28 29 29 30 extern int find_cdrw_device(char *cdrw_device);30 extern char *find_cdrw_device(); 31 31 32 32 … … 52 52 53 53 54 extern bool set_dev_to_this_if_rx_OK(char *,char *);54 extern char *set_dev_to_this_if_rx_OK(char *); 55 55 56 56 extern void retract_CD_tray_and_defeat_autorun(void); -
branches/2.2.10/mondo/src/common/libmondo-devices.c
r2324 r2325 64 64 65 65 66 void set_g_cdrom_and_g_dvd_to_bkpinfo_value() 67 { 68 strcpy(g_cdrom_drive_is_here, bkpinfo->media_device); // just in case 69 strcpy(g_dvd_drive_is_here, bkpinfo->media_device); // just in case 66 void set_g_cdrom_and_g_dvd_to_bkpinfo_value() { 67 68 if (bkpinfo->media_device) { 69 strcpy(g_cdrom_drive_is_here, bkpinfo->media_device); // just in case 70 strcpy(g_dvd_drive_is_here, bkpinfo->media_device); // just in case 71 } 70 72 } 71 73 … … 205 207 int res1 = 0, res2 = 0; 206 208 209 if (dev == NULL) { 210 return (1); 211 } 212 207 213 if (IS_THIS_A_STREAMING_BACKUP(g_backup_media_type) 208 214 && g_backup_media_type != udev) { … … 243 249 char *command = NULL; 244 250 int i; 251 252 if (dev == NULL) { 253 return (1); 254 } 245 255 246 256 #ifdef __FreeBSD__ … … 429 439 * Try to mount CD-ROM at @p mountpoint. If the CD-ROM is not found or has 430 440 * not been specified, call find_cdrom_device() to find it. 431 * @param bkpinfo The backup information structure. The only field used is @c bkpinfo->media_device.432 441 * @param mountpoint Where to mount the CD-ROM. 433 442 * @return 0 for success, nonzero for failure. 434 443 * @see mount_CDROM_here 435 444 */ 436 int find_and_mount_actual_cd(char *mountpoint) 437 { 445 int find_and_mount_actual_cd(char *mountpoint) { 446 438 447 /*@ buffers ***************************************************** */ 439 448 440 449 /*@ int's ****************************************************** */ 441 450 int res; 442 char *dev ;451 char *dev = NULL; 443 452 char *p = NULL; 444 453 445 454 /*@ end vars **************************************************** */ 446 455 447 malloc_string(dev);448 456 assert(bkpinfo != NULL); 449 457 assert_string_is_neither_NULL_nor_zerolength(mountpoint); 450 458 451 459 if (g_backup_media_type == dvd) { 452 strcpy(dev, g_dvd_drive_is_here); 453 if (!dev[0]) { 454 find_dvd_device(dev, FALSE); 460 if (g_dvd_drive_is_here[0]) { 461 mr_asprintf(dev, "%s", g_dvd_drive_is_here); 462 } 463 if (dev == NULL) { 464 dev = find_dvd_device(); 455 465 } 456 466 } else { 457 strcpy(dev, g_cdrom_drive_is_here); 458 if (!dev[0]) { 459 find_cdrom_device(dev, FALSE); 467 if (g_cdrom_drive_is_here[0]) { 468 mr_asprintf(dev, "%s", g_cdrom_drive_is_here); 469 } 470 if (dev == NULL) { 471 dev = find_cdrom_device(FALSE); 460 472 } 461 473 } … … 465 477 } 466 478 467 if ( !dev[0]|| (res = mount_CDROM_here(dev, mountpoint))) {479 if ((dev == NULL) || (res = mount_CDROM_here(dev, mountpoint))) { 468 480 p = popup_and_get_string ("CD-ROM device", "Please enter your CD-ROM's /dev device",dev); 469 481 if (p == NULL) { … … 479 491 log_msg(1, "mount succeeded with %s", dev); 480 492 } 481 paranoid_free(dev);493 mr_free(dev); 482 494 return (res); 483 495 } … … 493 505 * @return 0 for success, nonzero for failure. 494 506 */ 495 int find_cdrw_device(char *cdrw_device)507 char *find_cdrw_device() 496 508 { 497 509 /*@ buffers ************************ */ … … 499 511 char *cdr_exe = NULL; 500 512 char *command = NULL; 513 char *cdrw_device = NULL; 501 514 502 515 if (g_cdrw_drive_is_here[0]) { 503 strcpy(cdrw_device, g_cdrw_drive_is_here);516 mr_asprintf(cdrw_device, g_cdrw_drive_is_here); 504 517 log_msg(3, "Been there, done that. Returning %s", cdrw_device); 505 return (0);518 return(cdrw_device); 506 519 } 507 520 if (g_backup_media_type == dvd) { 508 log_msg(1, 509 "This is dumb. You're calling find_cdrw_device() but you're backing up to DVD. WTF?"); 510 return (1); 521 log_msg(1, "This is dumb. You're calling find_cdrw_device() but you're backing up to DVD. WTF?"); 522 return(NULL); 511 523 } 512 524 run_program_and_log_output("insmod ide-scsi", -1); … … 524 536 mr_free(tmp); 525 537 mr_free(cdr_exe); 526 return 1;538 return(NULL); 527 539 } else { 528 strcpy(cdrw_device, tmp);540 cdrw_device = tmp; 529 541 log_it("Found CDRW device - %s", cdrw_device); 530 542 strcpy(g_cdrw_drive_is_here, cdrw_device); 531 mr_free(tmp);532 543 mr_free(cdr_exe); 533 return ( 0);544 return (cdrw_device); 534 545 } 535 546 } … … 545 556 * @return 0 for success, nonzero for failure. 546 557 */ 547 int find_cdrom_device(char *output,bool try_to_mount)558 char *find_cdrom_device(bool try_to_mount) 548 559 { 549 560 /*@ pointers **************************************************** */ … … 552 563 char *q; 553 564 char *r; 554 int retval = 0;555 565 556 566 /*@ bool's ****************************************************** */ … … 558 568 559 569 /*@ buffers ***************************************************** */ 560 char *tmp ;570 char *tmp = NULL; 561 571 char *tmp1 = NULL; 572 char *output = NULL; 562 573 char *cdr_exe = NULL; 563 char *phrase_one ;564 char *phrase_two ;574 char *phrase_one = NULL; 575 char *phrase_two = NULL; 565 576 char *command = NULL; 566 577 #ifndef __FreeBSD__ … … 571 582 572 583 /*@ intialize *************************************************** */ 573 malloc_string(tmp); 574 malloc_string(phrase_one); 575 malloc_string(phrase_two); 576 577 output[0] = '\0'; 578 phrase_one[0] = '\0'; 579 phrase_two[0] = '\0'; 584 585 output = NULL; 580 586 #ifndef __FreeBSD__ 581 587 mr_asprintf(dvd_last_resort, "%s", "");; … … 585 591 586 592 if (g_cdrom_drive_is_here[0] && !isdigit(g_cdrom_drive_is_here[0])) { 587 strcpy(output, g_cdrom_drive_is_here);593 mr_asprintf(output, "%s", g_cdrom_drive_is_here); 588 594 log_msg(3, "Been there, done that. Returning %s", output); 589 retval = 0; 590 goto end_of_find_cdrom_device; 595 return(output); 591 596 } 592 597 if (the_last_place_i_found_it[0] != '\0' && !try_to_mount) { 593 strcpy(output, the_last_place_i_found_it); 594 log_msg(3, 595 "find_cdrom_device() --- returning last found location - '%s'", 596 output); 597 retval = 0; 598 goto end_of_find_cdrom_device; 598 mr_asprintf(output, "%s", the_last_place_i_found_it); 599 log_msg(3, "find_cdrom_device() --- returning last found location - '%s'", output); 600 return(output); 599 601 } 600 602 … … 607 609 mr_asprintf(cdr_exe, "dvdrecord"); 608 610 } 609 tmp[0] = '\0'; 611 610 612 if (!find_home_of_exe(cdr_exe)) { 611 strcpy(output, "/dev/cdrom");613 mr_asprintf(output, "/dev/cdrom"); 612 614 log_msg(4, "Can't find cdrecord; assuming %s", output); 615 mr_free(cdr_exe); 613 616 if (!does_device_exist(output)) { 614 617 log_msg(4, "That didn't work. Sorry."); 615 retval = 1;616 goto end_of_find_cdrom_device;618 mr_free(output); 619 return(output); 617 620 } else { 618 retval = 0; 619 goto end_of_find_cdrom_device; 621 return(output); 620 622 } 621 623 } … … 629 631 log_OS_error("Cannot popen command"); 630 632 mr_free(cdr_exe); 631 return (1); 632 } 633 633 return(NULL); 634 } 635 636 malloc_string(phrase_one); 637 phrase_one[0] = '\0'; 638 malloc_string(phrase_two); 639 phrase_two[0] = '\0'; 640 641 malloc_string(tmp); 642 tmp[0] = '\0'; 634 643 for ((void)fgets(tmp, MAX_STR_LEN, fin); !feof(fin); 635 644 (void)fgets(tmp, MAX_STR_LEN, fin)) { … … 656 665 } 657 666 paranoid_pclose(fin); 667 paranoid_free(phrase_one); 658 668 659 669 #ifndef __FreeBSD__ … … 678 688 mr_free(dvd_last_resort); 679 689 mr_asprintf(dvd_last_resort, "/dev/%s", tmp); 680 log_msg(4, 681 "Ignoring '%s' because it's a DVD drive", 682 tmp); 690 log_msg(4, "Ignoring '%s' because it's a DVD drive", tmp); 683 691 } else { 684 sprintf(output, "/dev/%s", tmp);692 mr_asprintf(output, "/dev/%s", tmp); 685 693 found_it = TRUE; 686 694 } … … 691 699 } 692 700 } 701 paranoid_free(phrase_two); 702 paranoid_free(tmp); 693 703 694 704 #endif … … 696 706 if (!found_it) { 697 707 log_msg(4, "OK, approach 2"); 698 if (!(found_it = set_dev_to_this_if_rx_OK(output, "/dev/cdrom"))) { 699 if (! 700 (found_it = 701 set_dev_to_this_if_rx_OK(output, "/dev/cdrom1"))) { 702 if (! 703 (found_it = 704 set_dev_to_this_if_rx_OK(output, "/dev/dvd"))) { 705 if (! 706 (found_it = 707 set_dev_to_this_if_rx_OK(output, "/dev/acd0"))) { 708 if (! 709 (found_it = 710 set_dev_to_this_if_rx_OK(output, 711 "/dev/cd01"))) { 712 if (! 713 (found_it = 714 set_dev_to_this_if_rx_OK(output, 715 "/dev/acd1"))) { 716 if (! 717 (found_it = 718 set_dev_to_this_if_rx_OK(output, 719 "/dev/cd1"))) 720 { 721 retval = 1; 722 goto end_of_find_cdrom_device; 708 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom"))) { 709 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom1"))) { 710 if (!(output = set_dev_to_this_if_rx_OK("/dev/dvd"))) { 711 if (!(output = set_dev_to_this_if_rx_OK("/dev/acd0"))) { 712 if (!(output = set_dev_to_this_if_rx_OK("/dev/cd01"))) { 713 if (!(output = set_dev_to_this_if_rx_OK("/dev/acd1"))) { 714 if (!(output = set_dev_to_this_if_rx_OK("/dev/cd1"))) { 715 mr_free(cdr_exe); 716 return(NULL); 723 717 } 724 718 } … … 732 726 if (!found_it && strlen(dvd_last_resort) > 0) { 733 727 log_msg(4, "Well, I'll use the DVD - %s - as a last resort", dvd_last_resort); 734 strcpy(output, dvd_last_resort);728 mr_asprintf(output, "%s", dvd_last_resort); 735 729 found_it = TRUE; 736 730 } 737 731 mr_free(dvd_last_resort); 732 738 733 if (found_it) { 739 sprintf(tmp, "grep \"%s=ide-scsi\" /proc/cmdline &> /dev/null", 740 strrchr(output, '/') + 1); 741 if (system(tmp) == 0) { 742 log_msg(4, 743 "%s is not right. It's being SCSI-emulated. Continuing.", 744 output); 734 mr_asprintf(tmp1, "grep \"%s=ide-scsi\" /proc/cmdline &> /dev/null", strrchr(output, '/') + 1); 735 if (system(tmp1) == 0) { 736 log_msg(4, "%s is not right. It's being SCSI-emulated. Continuing.", output); 745 737 found_it = FALSE; 746 output[0] = '\0'; 747 } 738 mr_free(output); 739 } 740 mr_free(tmp1); 748 741 } 749 742 … … 753 746 found_it = FALSE; 754 747 log_msg(4, "OK, I was wrong, I haven't found it... yet."); 748 mr_free(output); 755 749 } 756 750 } … … 758 752 if (!found_it) { 759 753 log_msg(4, "OK, approach 2"); 760 if (!(found_it = set_dev_to_this_if_rx_OK(output, "/dev/scd0"))) { 761 if (!(found_it = set_dev_to_this_if_rx_OK(output, "/dev/sr0"))) { 762 if (! 763 (found_it = 764 set_dev_to_this_if_rx_OK(output, "/dev/cdrom"))) { 765 if (! 766 (found_it = 767 set_dev_to_this_if_rx_OK(output, 768 "/dev/cdrom0"))) { 769 if (! 770 (found_it = 771 set_dev_to_this_if_rx_OK(output, 772 "/dev/cdrom1"))) { 773 if (! 774 (found_it = 775 set_dev_to_this_if_rx_OK(output, 776 "/dev/sr1"))) { 777 if (! 778 (found_it = 779 set_dev_to_this_if_rx_OK(output, 780 "/dev/dvd"))) 781 { 782 if (! 783 (found_it = 784 set_dev_to_this_if_rx_OK(output, 785 g_cdrw_drive_is_here))) 786 { 787 retval = 1; 788 goto end_of_find_cdrom_device; 754 if (!(output = set_dev_to_this_if_rx_OK("/dev/scd0"))) { 755 if (!(output = set_dev_to_this_if_rx_OK("/dev/sr0"))) { 756 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom"))) { 757 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom0"))) { 758 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom1"))) { 759 if (!(output = set_dev_to_this_if_rx_OK("/dev/sr1"))) { 760 if (!(output = set_dev_to_this_if_rx_OK("/dev/dvd"))) { 761 if (!(output = set_dev_to_this_if_rx_OK(g_cdrw_drive_is_here))) { 762 mr_free(cdr_exe); 763 return(NULL); 789 764 } 790 765 } … … 802 777 log_msg(4, "[Cardigans] I've changed my mind"); 803 778 found_it = FALSE; 779 mr_free(output); 804 780 } else { 805 sprintf(tmp, "%s/archives", mountpoint);781 mr_asprintf(tmp1, "%s/archives", mountpoint); 806 782 if (!does_file_exist(tmp)) { 807 783 log_msg(4, "[Cardigans] I'll take it back"); 808 784 found_it = FALSE; 785 mr_free(output); 809 786 } else { 810 787 mr_asprintf(command, "umount %s", output); … … 814 791 log_msg(4, "I'm confident the Mondo CD is in %s", output); 815 792 } 793 mr_free(tmp1); 816 794 } 817 795 } … … 822 800 if (!does_file_exist(output)) { 823 801 log_msg(3, "I still haven't found it."); 824 return (1); 802 mr_free(cdr_exe); 803 mr_free(output); 804 return (NULL); 825 805 } 826 806 log_msg(3, "(find_cdrom_device) --> '%s'", output); 827 807 strcpy(the_last_place_i_found_it, output); 828 808 strcpy(g_cdrom_drive_is_here, output); 829 retval = 0;830 goto end_of_find_cdrom_device;809 mr_free(cdr_exe); 810 return (output); 831 811 } 832 812 833 813 mr_asprintf(command, "%s -scanbus | grep \"[0-9],[0-9],[0-9]\" | grep \"[D|C][V|D]\" | grep -n \"\" | grep \"%s\" | cut -d':' -f2", cdr_exe, g_cdrw_drive_is_here); 814 mr_free(cdr_exe); 815 834 816 log_msg(1, "command=%s", command); 835 817 mr_asprintf(tmp1, "%s", call_program_and_get_last_line_of_output(command)); 836 818 mr_free(command); 837 819 820 mr_free(output); 838 821 if (strlen(tmp1) > 0) { 839 strcpy(output, tmp1);822 mr_asprintf(output, "%s", tmp1); 840 823 log_msg(4, "Finally found it at %s", output); 841 retval = 0;842 824 } else { 843 825 log_msg(4, "Still couldn't find it."); 844 retval = 1;845 826 } 846 827 mr_free(tmp1); 847 828 848 end_of_find_cdrom_device: 849 paranoid_free(tmp); 850 mr_free(cdr_exe); 851 paranoid_free(phrase_one); 852 paranoid_free(phrase_two); 853 return (retval); 854 } 855 856 857 858 859 860 int find_dvd_device(char *output, bool try_to_mount) 829 return (output); 830 } 831 832 833 char *find_dvd_device() 861 834 { 862 835 char *tmp = NULL; 863 int retval = 0, devno = -1; 836 int devno = -1; 837 char *output = NULL; 864 838 865 839 if (g_dvd_drive_is_here[0]) { 866 strcpy(output, g_dvd_drive_is_here);840 mr_asprintf(output, g_dvd_drive_is_here); 867 841 log_msg(3, "Been there, done that. Returning %s", output); 868 return (0); 869 } 870 871 mr_asprintf(tmp, "%s", call_program_and_get_last_line_of_output("dvdrecord -scanbus 2> /dev/null | grep \") '\" | grep -n \"\" | grep DVD | cut -d':' -f1") 872 ); 842 return (output); 843 } 844 845 mr_asprintf(tmp, "%s", call_program_and_get_last_line_of_output("dvdrecord -scanbus 2> /dev/null | grep \") '\" | grep -n \"\" | grep DVD | cut -d':' -f1")); 873 846 log_msg(5, "tmp = '%s'", tmp); 874 847 if (!tmp[0]) … … 882 855 883 856 if (devno >= 0) { 884 retval = 0; 885 sprintf(output, "/dev/scd%d", devno); 857 mr_asprintf(output, "/dev/scd%d", devno); 886 858 strcpy(g_dvd_drive_is_here, output); 887 859 log_msg(2, "I think DVD is at %s", output); 888 860 } else { 889 861 log_msg(2, "I cannot find DVD"); 890 retval = 1; 891 } 892 893 if (try_to_mount) { 894 log_msg(1, "Ignoring the fact that try_to_mount==TRUE"); 895 } 896 return (retval); 862 } 863 864 return (output); 897 865 } 898 866 … … 1079 1047 /*@ end vars **************************************************** */ 1080 1048 1049 if (device_raw == NULL) { 1050 return(FALSE); 1051 } 1052 1081 1053 malloc_string(incoming); 1082 assert(device_raw != NULL);1083 1054 if (device_raw[0] != '/' && !strstr(device_raw, ":/")) { 1084 1055 log_msg(1, "%s needs to have a '/' prefixed - I'll do it", … … 1213 1184 return(1); 1214 1185 } 1215 log_msg(4, "(mount_USB_here --- device=%s, mountpoint=%s", device, 1216 mountpoint); 1186 log_msg(4, "(mount_USB_here --- device=%s, mountpoint=%s", device, mountpoint); 1217 1187 1218 1188 #ifdef __FreeBSD__ … … 1237 1207 * @return 0 for success, nonzero for failure. 1238 1208 */ 1239 int mount_CDROM_here(char *device, c har *mountpoint)1209 int mount_CDROM_here(char *device, const char *mountpoint) 1240 1210 { 1241 1211 /*@ buffer ****************************************************** */ … … 1248 1218 #endif 1249 1219 1250 assert_string_is_neither_NULL_nor_zerolength(device);1251 1220 assert_string_is_neither_NULL_nor_zerolength(mountpoint); 1252 1221 1253 1222 make_hole_for_dir(mountpoint); 1254 1223 1255 if (isdigit(device[0])) { 1256 find_cdrom_device(device, FALSE); 1224 if ((device == NULL) || (isdigit(device[0]))) { 1225 mr_free(device); 1226 device = find_cdrom_device(FALSE); 1257 1227 } 1258 1228 #ifndef __FreeBSD__ … … 1268 1238 fatal_error(command); 1269 1239 } 1270 strcpy(device, dev);1271 paranoid_free(dev);1240 mr_free(device); 1241 device = dev; 1272 1242 #else 1273 1243 mr_strcat(options, ",loop"); … … 1275 1245 1276 1246 } 1277 log_msg(4, "(mount_CDROM_here --- device=%s, mountpoint=%s", device, 1278 mountpoint); 1247 log_msg(4, "(mount_CDROM_here --- device=%s, mountpoint=%s", device, mountpoint); 1279 1248 /*@ end vars *************************************************** */ 1280 1249 … … 1293 1262 retval = system(command); 1294 1263 log_msg(1, "system(%s) returned %d", command, retval); 1295 paranoid_free(command);1264 mr_free(command); 1296 1265 1297 1266 return (retval); … … 1324 1293 /*@ buffers ********************************************************* */ 1325 1294 char *tmp = NULL; 1326 char *p = NULL;1327 1295 char *mds = NULL; 1328 1296 char *request = NULL; … … 1342 1310 mr_free(tmp); 1343 1311 1344 if (g_ISO_restore_mode || bkpinfo->backup_media_type == iso 1345 || bkpinfo->backup_media_type == nfs) { 1312 if (g_ISO_restore_mode || bkpinfo->backup_media_type == iso || bkpinfo->backup_media_type == nfs) { 1313 // BERLIOS --- I'm tempted to do something about this... 1314 // Why unmount and remount again and again? 1346 1315 log_msg(3, "Remounting CD"); 1347 1316 g_ISO_restore_mode = TRUE; 1348 // FIXME --- I'm tempted to do something about this...1349 // Why unmount and remount again and again?1350 1317 if (is_this_device_mounted(MNT_CDROM)) { 1351 1318 run_program_and_log_output("umount " MNT_CDROM, 5); … … 1355 1322 mr_free(tmp); 1356 1323 1357 mr_asprintf(tmp, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, cd_number_i_want); 1324 if (((bkpinfo->isodir == NULL) && (bkpinfo->nfs_remote_dir == NULL)) || (bkpinfo->prefix == NULL)) { 1325 fatal_error("Unable to prepare ISO file name. Please report to dev team"); 1326 } 1327 if (bkpinfo->nfs_remote_dir) { 1328 // NFS 1329 mr_asprintf(tmp, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, cd_number_i_want); 1330 } else { 1331 // ISO 1332 mr_asprintf(tmp, "%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->prefix, cd_number_i_want); 1333 } 1358 1334 if (!does_file_exist(tmp)) { 1359 1335 mr_free(tmp); 1360 mr_asprintf(tmp, "%s/isodir/%s/%s-%d.iso", bkpinfo->tmpdir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, cd_number_i_want); 1336 if (bkpinfo->nfs_remote_dir) { 1337 // NFS 1338 mr_asprintf(tmp, "%s/isodir/%s/%s-%d.iso", bkpinfo->tmpdir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, cd_number_i_want); 1339 } else { 1340 // ISO 1341 mr_asprintf(tmp, "%s/isodir/%s-%d.iso", bkpinfo->tmpdir, bkpinfo->prefix, cd_number_i_want); 1342 } 1361 1343 if (does_file_exist(tmp)) { 1362 1344 log_msg(1, "FIXME - hacking bkpinfo->isodir from '%s' to %s/isodir", bkpinfo->isodir, bkpinfo->tmpdir); … … 1373 1355 } 1374 1356 if ((res = what_number_cd_is_this()) != cd_number_i_want) { 1375 log_msg(3, "Currently, we hold %d but we want %d", res, 1376 cd_number_i_want); 1357 log_msg(3, "Currently, we hold %d but we want %d", res, cd_number_i_want); 1377 1358 mds = media_descriptor_string(bkpinfo->backup_media_type); 1378 1359 log_msg(3, "Insisting on %s #%d", mds, cd_number_i_want); … … 1490 1471 mds = media_descriptor_string(bkpinfo->backup_media_type); 1491 1472 mr_asprintf(comment, "What speed is your %s (re)writer?", mds); 1473 mr_free(bkpinfo->media_device); 1492 1474 if (bkpinfo->backup_media_type == dvd) { 1493 find_dvd_device(bkpinfo->media_device, FALSE);1475 bkpinfo->media_device = find_dvd_device(); 1494 1476 mr_asprintf(tmp, "1"); 1495 1477 mr_asprintf(sz_size, "%d", DEFAULT_DVD_DISK_SIZE); // 4.7 salesman's GB = 4.482 real GB = 4482 MB 1496 1478 log_msg(1, "Setting to DVD defaults"); 1497 1479 } else { 1498 strcpy(bkpinfo->media_device, VANILLA_SCSI_CDROM);1480 mr_asprintf(bkpinfo->media_device, "%s", VANILLA_SCSI_CDROM); 1499 1481 mr_asprintf(tmp, "4"); 1500 1482 mr_asprintf(sz_size, "%d", 650); … … 1542 1524 mds = media_descriptor_string(bkpinfo->backup_media_type); 1543 1525 1526 mr_free(bkpinfo->media_device); 1544 1527 if ((bkpinfo->disaster_recovery) && (bkpinfo->backup_media_type != usb)) { 1545 strcpy(bkpinfo->media_device, "/dev/cdrom"); 1546 log_msg(2, "CD-ROM device assumed to be at %s", 1547 bkpinfo->media_device); 1548 } else if ((bkpinfo->restore_data && (bkpinfo->backup_media_type != usb)) 1549 || bkpinfo->backup_media_type == dvd) { 1550 if (!bkpinfo->media_device[0]) { 1551 strcpy(bkpinfo->media_device, "/dev/cdrom"); 1552 } // just for the heck of it :) 1553 log_msg(1, "bkpinfo->media_device = %s", 1554 bkpinfo->media_device); 1555 if (bkpinfo->backup_media_type == dvd 1556 || find_cdrom_device(bkpinfo->media_device, FALSE)) { 1557 log_msg(1, "bkpinfo->media_device = %s", 1558 bkpinfo->media_device); 1528 mr_asprintf(bkpinfo->media_device, "/dev/cdrom"); 1529 log_msg(2, "CD-ROM device assumed to be at %s", bkpinfo->media_device); 1530 } else if ((bkpinfo->restore_data && (bkpinfo->backup_media_type != usb)) || bkpinfo->backup_media_type == dvd) { 1531 if ((bkpinfo->backup_media_type == dvd) || ((bkpinfo->media_device = find_cdrom_device(FALSE)) != NULL)) { 1559 1532 mr_asprintf(comment, "Please specify your %s drive's /dev entry", mds); 1560 1533 p = popup_and_get_string("Device?", comment, bkpinfo->media_device); … … 1565 1538 finish(1); 1566 1539 } 1567 strcpy(bkpinfo->media_device, p); 1568 mr_free(p); 1569 } 1570 log_msg(2, "%s device found at %s", mds, bkpinfo->media_device); 1540 mr_free(bkpinfo->media_device); 1541 bkpinfo->media_device = p; 1542 } 1543 if (bkpinfo->media_device != NULL) { 1544 log_msg(2, "%s device found at %s", mds, bkpinfo->media_device); 1545 } else { 1546 log_msg(2, "%s device not found (bkpinfo->media_device is NULL)", mds); 1547 } 1571 1548 } else { 1572 if (( find_cdrw_device(bkpinfo->media_device)) && (bkpinfo->backup_media_type != usb)) {1573 bkpinfo->media_device[0] = '\0';1574 } 1575 if (bkpinfo->media_device [0]) {1549 if (((bkpinfo->media_device = find_cdrw_device()) != NULL) && (bkpinfo->backup_media_type != usb)) { 1550 mr_free(bkpinfo->media_device); 1551 } 1552 if (bkpinfo->media_device != NULL) { 1576 1553 if (bkpinfo->backup_media_type == usb) { 1577 1554 mr_asprintf(tmp, "I think your %s media corresponds to %s. Is this correct?", mds, bkpinfo->media_device); … … 1580 1557 } 1581 1558 if (!ask_me_yes_or_no(tmp)) { 1582 bkpinfo->media_device[0] = '\0';1559 mr_free(bkpinfo->media_device); 1583 1560 } 1584 1561 mr_free(tmp); 1585 1562 } 1586 if (!bkpinfo->media_device [0]) {1563 if (!bkpinfo->media_device) { 1587 1564 if (bkpinfo->backup_media_type == usb) { 1588 p = popup_and_get_string("/dev entry?", "What is the /dev entry of your USB Disk/Key, please?", bkpinfo->media_device);1565 p = popup_and_get_string("/dev entry?", "What is the /dev entry of your USB Disk/Key, please?", NULL); 1589 1566 } else { 1590 1567 if (g_kernel_version < 2.6) { 1591 p = popup_and_get_string("Device node?", "What is the SCSI node of your CD (re)writer, please?", bkpinfo->media_device);1568 p = popup_and_get_string("Device node?", "What is the SCSI node of your CD (re)writer, please?", NULL); 1592 1569 } else { 1593 p = popup_and_get_string("/dev entry?", "What is the /dev entry of your CD (re)writer, please?", bkpinfo->media_device);1570 p = popup_and_get_string("/dev entry?", "What is the /dev entry of your CD (re)writer, please?", NULL); 1594 1571 } 1595 1572 } … … 1598 1575 finish(1); 1599 1576 } 1600 strcpy(bkpinfo->media_device, p); 1601 mr_free(p); 1577 bkpinfo->media_device = p; 1602 1578 } 1603 1579 } … … 1618 1594 case tape: 1619 1595 1620 if ((!bkpinfo->restore_mode) && (!mr_find_tape_device())) { 1596 mr_free(bkpinfo->media_device); 1597 if ((!bkpinfo->restore_mode) && ((bkpinfo->media_device = find_tape_device_and_size(NULL)) == NULL)) { 1621 1598 log_msg(3, "Ok, using vanilla scsi tape."); 1622 strcpy(bkpinfo->media_device, VANILLA_SCSI_TAPE);1599 mr_asprintf(bkpinfo->media_device, "%s", VANILLA_SCSI_TAPE); 1623 1600 if ((fin = fopen(bkpinfo->media_device, "r"))) { 1624 1601 paranoid_fclose(fin); 1625 1602 } else { 1626 strcpy(bkpinfo->media_device, "/dev/osst0"); 1627 } 1628 } 1629 if (bkpinfo->media_device[0]) { 1603 mr_free(bkpinfo->media_device); 1604 mr_asprintf(bkpinfo->media_device, "/dev/osst0"); 1605 } 1606 } 1607 if (bkpinfo->media_device != NULL) { 1630 1608 if ((fin = fopen(bkpinfo->media_device, "r"))) { 1631 1609 paranoid_fclose(fin); 1632 1610 } else { 1633 1611 if (does_file_exist("/tmp/mondo-restore.cfg")) { 1634 read_cfg_var("/tmp/mondo-restore.cfg", "media-dev",1635 bkpinfo->media_device);1612 mr_free(bkpinfo->media_device); 1613 bkpinfo->media_device = read_cfg_var("/tmp/mondo-restore.cfg", "media-dev"); 1636 1614 } 1637 1615 } 1638 1616 } 1639 if (bkpinfo->media_device [0]) {1617 if (bkpinfo->media_device != NULL) { 1640 1618 mr_asprintf(tmp, "I think I've found your tape streamer at %s; am I right on the money?", bkpinfo->media_device); 1641 1619 if (!ask_me_yes_or_no(tmp)) { 1642 bkpinfo->media_device[0] = '\0';1620 mr_free(bkpinfo->media_device); 1643 1621 } 1644 1622 mr_free(tmp); 1645 1623 } 1646 if ( !bkpinfo->media_device[0]) {1624 if (bkpinfo->media_device == NULL) { 1647 1625 p = popup_and_get_string("Device name?", "What is the /dev entry of your tape streamer?", bkpinfo->media_device); 1648 1626 if (p == NULL) { … … 1650 1628 finish(1); 1651 1629 } 1652 strcpy(bkpinfo->media_device, p); 1653 mr_free(p); 1630 bkpinfo->media_device = p; 1654 1631 } 1655 1632 mr_asprintf(tmp, "ls -l %s", bkpinfo->media_device); … … 1686 1663 1687 1664 /* Initiate bkpinfo nfs_mount path from running environment if not already done */ 1688 if (!bkpinfo->nfs_mount[0]) { 1689 strcpy(bkpinfo->nfs_mount, 1690 call_program_and_get_last_line_of_output 1691 ("mount | grep \":\" | cut -d' ' -f1 | head -n1")); 1665 if (bkpinfo->nfs_mount == NULL) { 1666 mr_asprintf(bkpinfo->nfs_mount, "%s", call_program_and_get_last_line_of_output("mount | grep \":\" | cut -d' ' -f1 | head -n1")); 1692 1667 } 1693 1668 #ifdef __FreeBSD__ … … 1702 1677 finish(1); 1703 1678 } 1704 strcpy(bkpinfo->nfs_mount, p);1705 mr_free(p);1679 mr_free(bkpinfo->nfs_mount); 1680 bkpinfo->nfs_mount = p; 1706 1681 if (!bkpinfo->restore_data) { 1707 1682 if ((bkpinfo->compression_level = … … 1713 1688 // check whether already mounted - we better remove 1714 1689 // surrounding spaces and trailing '/' for this 1715 strip_spaces(bkpinfo->nfs_mount);1690 mr_strip_spaces(bkpinfo->nfs_mount); 1716 1691 if (bkpinfo->nfs_mount[strlen(bkpinfo->nfs_mount) - 1] == '/') 1717 1692 bkpinfo->nfs_mount[strlen(bkpinfo->nfs_mount) - 1] = '\0'; … … 1752 1727 finish(1); 1753 1728 } 1754 strcpy(bkpinfo->nfs_mount, p);1755 mr_free(p);1729 mr_free(bkpinfo->nfs_mount); 1730 bkpinfo->nfs_mount = p; 1756 1731 } 1757 1732 /* Initiate bkpinfo isodir path from running environment if mount already done */ … … 1782 1757 finish(1); 1783 1758 } 1784 strcpy(bkpinfo->nfs_remote_dir, p);1785 mr_free(p);1759 mr_free(bkpinfo->nfs_remote_dir); 1760 bkpinfo->nfs_remote_dir = p; 1786 1761 1787 1762 // check whether writable - we better remove surrounding spaces for this 1788 strip_spaces(bkpinfo->nfs_remote_dir);1763 mr_strip_spaces(bkpinfo->nfs_remote_dir); 1789 1764 1790 1765 p = popup_and_get_string("Prefix.", "Please enter the prefix that will be prepended to your ISO filename. Example: machine1 to obtain machine1-[1-9]*.iso files", bkpinfo->prefix); … … 1998 1973 } 1999 1974 log_it("isodir = %s", bkpinfo->isodir); 2000 log_it("nfs_mount = '%s'", bkpinfo->nfs_mount); 1975 if (bkpinfo->nfs_mount) { 1976 log_it("nfs_mount = '%s'", bkpinfo->nfs_mount); 1977 } 2001 1978 if (bkpinfo->nfs_user) { 2002 1979 log_it("nfs_user = '%s'", bkpinfo->nfs_user); … … 2135 2112 fatal_error("I couldn't figure out the scratchdir!"); 2136 2113 } 2114 2115 /* Cleaning a potential previous scratchdir */ 2116 if (bkpinfo->scratchdir) { 2117 mr_asprintf(command, "rm -Rf %s", bkpinfo->scratchdir); 2118 paranoid_system(command); 2119 mr_free(command); 2120 } 2137 2121 mr_free(bkpinfo->scratchdir); 2122 2138 2123 mr_asprintf(bkpinfo->scratchdir , "%s/mondo.scratch.%d", tmp, (int) (random() % 32768)); 2139 2124 log_it("bkpinfo->scratchdir is being set to %s", bkpinfo->scratchdir); 2140 2125 2126 /* Cleaning potential previous scratchdir */ 2141 2127 mr_asprintf(command, "rm -Rf %s/mondo.scratch.*", tmp); 2142 2128 mr_free(tmp); … … 2156 2142 */ 2157 2143 /** 2158 * If we can read @p dev, set @ poutput to it.2159 * If @p dev cannot be read, set @p output to "".2144 * If we can read @p dev, set @return output to it. 2145 * If @p dev cannot be read, set @p output to NULL. 2160 2146 * @param dev The device to check for. 2161 * @param output Set to @p dev if @p dev exists, "" otherwise. 2162 * @return TRUE if @p dev exists, FALSE if it doesn't. 2163 */ 2164 bool set_dev_to_this_if_rx_OK(char *output, char *dev) 2147 * @return output Set to @p dev if @p dev exists, NULL otherwise. 2148 */ 2149 char *set_dev_to_this_if_rx_OK(char *dev) 2165 2150 { 2166 2151 char *command = NULL; 2167 bool res;2152 char *output = NULL; 2168 2153 2169 2154 if (!dev || dev[0] == '\0') { 2170 output[0] = '\0'; 2171 return (FALSE); 2155 return(NULL); 2172 2156 } 2173 2157 log_msg(10, "Injecting %s", dev); … … 2175 2159 if (!does_file_exist(dev)) { 2176 2160 log_msg(10, "%s doesn't exist. Returning FALSE.", dev); 2177 return (FALSE);2161 return(NULL); 2178 2162 } 2179 2163 mr_asprintf(command, "dd bs=%ld count=1 if=%s of=/dev/null &> /dev/null", 512L, dev); 2180 2164 if (!run_program_and_log_output(command, FALSE) 2181 2165 && !run_program_and_log_output(command, FALSE)) { 2182 strcpy(output, dev);2166 mr_asprintf(output, "%s", dev); 2183 2167 log_msg(4, "Found it - %s", dev); 2184 res = TRUE;2185 2168 } else { 2186 output[0] = '\0';2187 2169 log_msg(4, "It's not %s", dev); 2188 res = FALSE;2189 2170 } 2190 2171 mr_free(command); 2191 return( res);2172 return(output); 2192 2173 } 2193 2174 … … 2221 2202 } 2222 2203 2223 mr_asprintf(mountdev, "%s", bkpinfo->media_device); 2224 if (!mountdev[0]) { 2204 if (bkpinfo->media_device) { 2205 mr_asprintf(mountdev, "%s", bkpinfo->media_device); 2206 } 2207 if (!mountdev) { 2225 2208 log_it("(what_number_cd_is_this) Warning - media_device unknown. Finding out..."); 2226 find_cdrom_device(bkpinfo->media_device, FALSE); 2209 mr_free(bkpinfo->media_device); 2210 bkpinfo->media_device = find_cdrom_device(FALSE); 2211 mr_asprintf(mountdev, "%s", bkpinfo->media_device); 2227 2212 } 2228 2213 if (!is_this_device_mounted(MNT_CDROM)) { -
branches/2.2.10/mondo/src/common/libmondo-devices.h
r2321 r2325 8 8 bool does_string_exist_in_boot_block(char *dev, char *str); 9 9 int find_and_mount_actual_cd(char *mountpoint); 10 int find_cdrom_device(char *output,bool try_to_mount);11 int find_dvd_device(char *output, bool try_to_mount);10 char *find_cdrom_device(bool try_to_mount); 11 char *find_dvd_device(); 12 12 long get_phys_size_of_drive(char *drive); 13 13 bool is_this_a_valid_disk_format(char *format); 14 int mount_CDROM_here(char *device, c har *mountpoint);14 int mount_CDROM_here(char *device, const char *mountpoint); 15 15 int find_device_in_mountlist(struct mountlist_itself *mountlist, 16 16 char *device); … … 23 23 24 24 25 int find_cdrw_device(char *cdrw_device);25 char *find_cdrw_device(); 26 26 27 27 int interactively_obtain_media_parameters_from_user(bool); … … 44 44 45 45 46 bool set_dev_to_this_if_rx_OK(char *output,char *dev);46 char *set_dev_to_this_if_rx_OK(char *dev); 47 47 48 48 -
branches/2.2.10/mondo/src/common/libmondo-filelist.c
r2324 r2325 693 693 /** 694 694 * Get the number of the last fileset in the backup. 695 * @param bkpinfo The backup information structure. Only the @c bkpinfo->tmpdir field is used.696 695 * @return The last filelist number. 697 696 * @note This function should only be called at restore-time. … … 700 699 { 701 700 /*@ buffers ***************************************************** */ 702 char val_sz[MAX_STR_LEN];701 char *val_sz = NULL; 703 702 char *cfg_fname = NULL; 704 703 … … 710 709 assert(bkpinfo != NULL); 711 710 712 strcpy(val_sz,"");713 711 mr_asprintf(cfg_fname, "%s/mondo-restore.cfg", bkpinfo->tmpdir); 714 read_cfg_var(cfg_fname, "last-filelist-number", val_sz);712 val_sz = read_cfg_var(cfg_fname, "last-filelist-number"); 715 713 mr_free(cfg_fname); 716 714 715 if (val_sz == NULL) { 716 mr_asprintf(val_sz, ""); 717 } 717 718 val_i = atoi(val_sz); 719 mr_free(val_sz); 720 718 721 if (val_i <= 0) { 719 722 val_i = 500; -
branches/2.2.10/mondo/src/common/libmondo-files-EXT.h
r2053 r2325 42 42 43 43 44 extern int make_hole_for_dir(c har *outdir_fname);44 extern int make_hole_for_dir(const char *outdir_fname); 45 45 46 46 extern long size_of_partition_in_mountlist_K(char *tmpdir, char *dev); -
branches/2.2.10/mondo/src/common/libmondo-files.c
r2324 r2325 622 622 * @return The return value of @c mkdir. 623 623 */ 624 int make_hole_for_dir(c har *outdir_fname)624 int make_hole_for_dir(const char *outdir_fname) 625 625 { 626 626 char *tmp = NULL; … … 1097 1097 char *p; 1098 1098 1099 if (! bkpinfo->nfs_mount) { 1100 fatal_error("No nfs_mount found !"); 1101 } 1102 1099 1103 log_it("Storing NFS configuration"); 1100 1104 mr_asprintf(tmp, "%s", bkpinfo->nfs_mount); -
branches/2.2.10/mondo/src/common/libmondo-files.h
r2053 r2325 44 44 45 45 46 int make_hole_for_dir(c har *outdir_fname);46 int make_hole_for_dir(const char *outdir_fname); 47 47 long size_of_partition_in_mountlist_K(char *tmpdir, char *dev); 48 48 int make_grub_install_scriptlet(char *outfile); -
branches/2.2.10/mondo/src/common/libmondo-fork.c
r2324 r2325 355 355 char *command = NULL; 356 356 char *lockfile = NULL; 357 char tmp1[MAX_STR_LEN *2];358 357 359 358 /*@ end vars *************************************************** */ -
branches/2.2.10/mondo/src/common/libmondo-stream-EXT.h
r2321 r2325 5 5 extern int closein_tape(); 6 6 extern int closeout_tape(); 7 extern char * mr_find_tape_device(void);7 extern char *find_tape_device_and_size(char *siz); 8 8 extern void insist_on_this_tape_number(int tapeno); 9 9 extern void log_tape_pos(void); -
branches/2.2.10/mondo/src/common/libmondo-stream.c
r2324 r2325 138 138 paranoid_pclose(g_tape_stream); 139 139 log_it("closein_tape() -- leaving"); 140 /*141 for(i=0; i < g_tapecatalog->entries; i++)142 {143 log_it("i=%d type=%s num=%d aux=%ld", i, (g_tapecatalog->el[i].type==fileset)?"fileset":"bigslice", g_tapecatalog->el[i].number, g_tapecatalog->el[i].aux);144 }145 */146 140 if (!bkpinfo->please_dont_eject) { 147 141 eject_device(bkpinfo->media_device); … … 222 216 g_tapecatalog->el[i].tape_posK); 223 217 } 224 // if (!bkpinfo->please_dont_eject)225 // { eject_device(bkpinfo->media_device); }226 218 paranoid_free(blk); 227 219 paranoid_free(g_tapecatalog); … … 261 253 char *dev = NULL; 262 254 int res; 255 char *dev = NULL; 263 256 264 257 log_to_screen("I am looking for your tape streamer. Please wait."); … … 296 289 mr_free(command); 297 290 298 mr_asprintf(&dev, "%s", VANILLA_SCSI_TAPE); 299 dev[strlen(dev) - 1] = '\0';291 292 mr_asprintf(dev, "%s", "/dev/st"); 300 293 mr_strcat(dev, tmp); // e.g. '/dev/st0' becomes '/dev/stN' 301 294 mr_free(tmp); 302 303 295 res = 0; 304 296 if (!mt_says_tape_exists(dev)) { … … 314 306 mr_asprintf(&dev, "/dev/osst0"); 315 307 if (!mt_says_tape_exists(dev)) { 308 mr_free(dev); 316 309 res++; 317 310 } else { … … 322 315 } 323 316 324 log_it("At this point, dev = %s and res = %d", dev, res); 317 if (dev) { 318 log_it("At this point, dev = %s and res = %d", dev, res); 319 } else { 320 log_it("At this point, dev is NULL and res = %d", dev, res); 321 } 325 322 326 323 mr_asprintf(&tmp, call_program_and_get_last_line_of_output("cdrecord -scanbus 2> /dev/null | tr -s '\t' ' ' | grep \"[0-9]*,[0-9]*,[0-9]*\" | grep -v \"[0-9]*) \\*\" | grep -i TAPE | awk '{for(i=1; i<NF; i++) { if (index($i, \"GB\")>0) { print $i;};};};'")); … … 338 335 res = 0; 339 336 } else { 337 mr_free(dev); 340 338 res++; 341 339 } … … 610 608 int res; 611 609 610 if (bkpinfo->media_device == NULL) { 611 return(1); 612 } 613 612 614 if (strncmp(bkpinfo->media_device, "/dev/", 5)) { 613 log_msg(1, 614 "Not using 'mt setblk'. This isn't an actual /dev entry."); 615 log_msg(1, "Not using 'mt setblk'. This isn't an actual /dev entry."); 615 616 return (0); 616 617 } … … 683 684 int res = 0; 684 685 686 if (bkpinfo->media_device == NULL) { 687 return(1); 688 } 689 685 690 log_it("Skipping OBDR headers"); 686 691 mr_asprintf(command, "mt -f %s rewind",bkpinfo->media_device); … … 708 713 char *command = NULL; 709 714 int res = 0; 715 716 if (bkpinfo->media_device == NULL) { 717 return(1); 718 } 710 719 711 720 log_it("Creating OBDR headers"); … … 770 779 /*@ end vars *************************************************** */ 771 780 772 assert_string_is_neither_NULL_nor_zerolength(bkpinfo->media_device); 773 if (!(g_tapecatalog = malloc(sizeof(struct s_tapecatalog)))) { 774 fatal_error("Cannot alloc mem for tape catalog"); 775 } 781 g_tapecatalog = mr_malloc(sizeof(struct s_tapecatalog)); 776 782 g_tapecatalog->entries = 0; 777 783 g_tape_posK = 0; … … 790 796 if (bkpinfo->media_device == NULL) { 791 797 log_it("Not able to skip OBDR - Restore will have to be done manually"); 798 return (1); 792 799 } 793 800 set_tape_block_size_with_mt(bkpinfo->internal_tape_block_size); … … 798 805 make_hole_for_file(outfname); 799 806 800 // start_buffer_process( bkpinfo->media_device, g_tape_fifo, FALSE);801 807 log_it("Opening IN tape"); 802 if (! 803 (g_tape_stream = 804 open_device_via_buffer(bkpinfo->media_device, 'r', 805 bkpinfo->internal_tape_block_size))) { 808 if (!(g_tape_stream = open_device_via_buffer(bkpinfo->media_device, 'r', bkpinfo->internal_tape_block_size))) { 806 809 log_OS_error(g_tape_fifo); 807 810 log_to_screen("Cannot openin stream device"); … … 884 887 /*@ end vars *************************************************** */ 885 888 889 if (cddev == NULL) { 890 log_to_screen("Failed to openout NULL cddev"); 891 return (1); 892 } 886 893 /* add 'dummy' if testing */ 887 894 mr_asprintf(command, "cdrecord -eject dev=%s speed=%d fs=24m -waiti - >> %s 2>> %s", cddev, speed, MONDO_LOGFILE, MONDO_LOGFILE); … … 923 930 return (0); 924 931 } 925 if (!(g_tapecatalog = malloc(sizeof(struct s_tapecatalog)))) { 926 fatal_error("Cannot alloc mem for tape catalog"); 927 } 932 if (bkpinfo->media_device == NULL) { 933 log_it("Unable to openout NULL dvice"); 934 return(1); 935 } 936 g_tapecatalog = mr_malloc(sizeof(struct s_tapecatalog)); 928 937 g_tapecatalog->entries = 0; 929 938 g_tape_posK = 0; … … 935 944 } 936 945 log_it("Opening OUT tape"); 937 if (! 938 (g_tape_stream = 939 open_device_via_buffer(bkpinfo->media_device, 'w', bkpinfo->internal_tape_block_size))) { 946 if (!(g_tape_stream = open_device_via_buffer(bkpinfo->media_device, 'w', bkpinfo->internal_tape_block_size))) { 940 947 log_OS_error(g_tape_fifo); 941 948 log_to_screen("Cannot openin stream device"); … … 950 957 /** 951 958 * Copy a file from the opened stream (CD or tape) to @p outfile. 952 * @param bkpinfo The backup information structure. @c bkpinfo->media_device is the only field used.953 959 * @param outfile The file to write to. 954 960 * @param size The size of the file in the input stream. … … 1422 1428 /*@ end vars *************************************************** */ 1423 1429 1430 if (bkpinfo->media_device == NULL) { 1431 log_it("Unable to open in from NULL device"); 1432 return (1); 1433 } 1434 1424 1435 paranoid_pclose(g_tape_stream); 1425 1436 sync(); … … 1429 1440 insist_on_this_tape_number(g_current_media_number + 1); // will increment it, too 1430 1441 log_it("Opening IN the next tape"); 1431 if (! 1432 (g_tape_stream = 1433 open_device_via_buffer(bkpinfo->media_device, 'r', 1434 bkpinfo->internal_tape_block_size))) { 1442 if (!(g_tape_stream = open_device_via_buffer(bkpinfo->media_device, 'r', bkpinfo->internal_tape_block_size))) { 1435 1443 log_OS_error(g_tape_fifo); 1436 1444 log_to_screen("Cannot openin stream device"); … … 1464 1472 int res = 0; 1465 1473 char *command = NULL; 1474 1475 if (bkpinfo->media_device == NULL) { 1476 log_it("Unable to open out from NULL device"); 1477 return (1); 1478 } 1466 1479 1467 1480 paranoid_pclose(g_tape_stream); … … 1489 1502 } else { 1490 1503 log_it("Opening OUT to next tape"); 1491 if (! 1492 (g_tape_stream = 1493 open_device_via_buffer(bkpinfo->media_device, 'w', 1494 bkpinfo->internal_tape_block_size))) { 1504 if (!(g_tape_stream = open_device_via_buffer(bkpinfo->media_device, 'w', bkpinfo->internal_tape_block_size))) { 1495 1505 log_OS_error(g_tape_fifo); 1496 1506 log_to_screen("Cannot openin stream device"); -
branches/2.2.10/mondo/src/common/libmondo-stream.h
r2321 r2325 7 7 int closein_tape(); 8 8 int closeout_tape(); 9 char * mr_find_tape_device(void);9 char *find_tape_device_and_size(char *siz); 10 10 void insist_on_this_tape_number(int tapeno); 11 11 void log_tape_pos(void); -
branches/2.2.10/mondo/src/common/libmondo-tools-EXT.h
r2321 r2325 10 10 const char *szFunction, int nLine, 11 11 const char *fmt, ...); 12 extern int read_cfg_var(char *config_file, char *label, char *value);12 extern char *read_cfg_var(char *config_file, char *label); 13 13 extern int write_cfg_var(char *config_file, char *label, char *value); 14 14 extern void init_bkpinfo(); -
branches/2.2.10/mondo/src/common/libmondo-tools.c
r2324 r2325 419 419 char *p = NULL; 420 420 char call_before_iso_user[MAX_STR_LEN] = "\0"; 421 /*422 long avm = 0;423 int rdsiz_MB;424 */425 421 char *iso_dev = NULL; 426 422 char *iso_mnt = NULL; … … 449 445 if (bkpinfo->backup_media_type == tape) { 450 446 log_msg(1, "Bar"); 447 if (bkpinfo->media_device == NULL) { 448 return(1); 449 } 451 450 mr_asprintf(tmp, "mt -f %s status", bkpinfo->media_device); 452 451 log_msg(1, "tmp = '%s'", tmp); … … 526 525 // -m isn't supported by growisofs, BTW... 527 526 } else { 527 if (bkpinfo->media_device == NULL) { 528 return(1); 529 } 528 530 sprintf(bkpinfo->call_make_iso, 529 531 "%s %s -Z %s . 2>> _ERR_", … … 594 596 } 595 597 log_it("bkpinfo->call_before_iso = %s", bkpinfo->call_before_iso); 598 if (bkpinfo->media_device == NULL) { 599 return(1); 600 } 596 601 sprintf(bkpinfo->call_make_iso, 597 602 "%s %s -v %s fs=4m dev=%s speed=%d %s/"MONDO_TMPISOS, … … 667 672 668 673 if (bkpinfo->backup_media_type == nfs) { 669 strcpy(hostname, bkpinfo->nfs_mount); 674 if (bkpinfo->nfs_mount) { 675 strcpy(hostname, bkpinfo->nfs_mount); 676 } else { 677 log_it("nfs_mount is NULL"); 678 retval++; 679 strcpy(hostname, ""); 680 } 670 681 colon = strchr(hostname, ':'); 671 682 if (!colon) { … … 678 689 hent = gethostbyname(hostname); 679 690 if (!hent) { 680 log_it("Can't resolve NFS mount (%s): %s", hostname, 681 hstrerror(h_errno)); 691 log_it("Can't resolve NFS mount (%s): %s", hostname, hstrerror(h_errno)); 682 692 retval++; 683 693 } else { 684 694 mr_asprintf(ip_address, "%s", inet_ntoa((struct in_addr) *((struct in_addr *) hent->h_addr))); 685 695 mr_strcat(ip_address, strchr(bkpinfo->nfs_mount, ':')); 686 strcpy(bkpinfo->nfs_mount, ip_address);687 paranoid_free(ip_address);696 mr_free(bkpinfo->nfs_mount); 697 bkpinfo->nfs_mount = ip_address; 688 698 } 689 699 } … … 746 756 } 747 757 g_current_media_number = 1; 748 bkpinfo->postnuke_tarball[0] = bkpinfo->nfs_mount[0] ='\0';758 bkpinfo->postnuke_tarball[0] = '\0'; 749 759 return (res); 750 760 } … … 787 797 void mr_free_bkpinfo() { 788 798 799 mr_free(bkpinfo->media_device); 800 mr_free(bkpinfo->isodir); 801 mr_free(bkpinfo->prefix); 789 802 mr_free(bkpinfo->scratchdir); 790 803 mr_free(bkpinfo->tmpdir); 791 804 mr_free(bkpinfo->include_paths); 792 805 mr_free(bkpinfo->exclude_paths); 806 mr_free(bkpinfo->nfs_mount); 807 mr_free(bkpinfo->nfs_remote_dir); 793 808 mr_free(bkpinfo->nfs_user); 794 809 … … 804 819 { 805 820 int i; 806 char *p = NULL;807 808 821 log_msg(1, "Hi"); 809 822 810 823 /* Initialized in same order as in the structure declaration to detect errors more easily */ 811 bkpinfo->media_device [0] = '\0';824 bkpinfo->media_device = NULL; 812 825 for (i = 0; i <= MAX_NOOF_MEDIA; i++) { 813 826 bkpinfo->media_size[i] = -1; … … 846 859 bkpinfo->call_after_iso[0] = '\0'; 847 860 bkpinfo->kernel_path[0] = '\0'; 848 bkpinfo->nfs_mount [0] = '\0';849 bkpinfo->nfs_remote_dir [0] = '\0';861 bkpinfo->nfs_mount = NULL; 862 bkpinfo->nfs_remote_dir = NULL; 850 863 bkpinfo->nfs_user = NULL; 851 864 bkpinfo->postnuke_tarball[0] = '\0'; … … 1072 1085 * @return 0 for success, 1 for failure. 1073 1086 */ 1074 int read_cfg_var(char *config_file, char *label, char *value)1087 char *read_cfg_var(char *config_file, char *label) 1075 1088 { 1076 1089 /*@ buffer ****************************************************** */ 1077 1090 char *command = NULL; 1091 char *value = NULL; 1078 1092 1079 1093 /*@ end vars *************************************************** */ … … 1083 1097 if (!does_file_exist(config_file)) { 1084 1098 log_to_screen("(read_cfg_var) Cannot find %s config file", config_file); 1085 value[0] = '\0';1086 return (1);1099 return (NULL); 1100 /* BERLIOS: not sure the sage of this one ? 1087 1101 } else if ((value != NULL) && (strstr(value, "/dev/") && strstr(value, "t0") && !strcmp(label, "media-dev"))) { 1088 1102 log_msg(2, "FYI, I can't read new value for %s - already got %s", label, value); 1089 1103 return (0); 1104 */ 1090 1105 } else { 1091 1106 mr_asprintf(command, "grep '%s .*' %s| cut -d' ' -f2,3,4,5", label, config_file); 1092 strcpy(value, call_program_and_get_last_line_of_output(command));1107 mr_asprintf(value, "%s", call_program_and_get_last_line_of_output(command)); 1093 1108 mr_free(command); 1094 1109 1095 1110 if (strlen(value) == 0) { 1096 return ( 1);1111 return (NULL); 1097 1112 } else { 1098 return ( 0);1113 return (value); 1099 1114 } 1100 1115 } -
branches/2.2.10/mondo/src/common/libmondo-tools.h
r2321 r2325 13 13 const char *szFunction, int nLine, 14 14 const char *fmt, ...); 15 int read_cfg_var(char *config_file, char *label, char *value);15 char *read_cfg_var(char *config_file, char *label); 16 16 int write_cfg_var(char *config_file, char *label, char *value); 17 17 void init_bkpinfo(); -
branches/2.2.10/mondo/src/common/libmondo-verify.c
r2324 r2325 924 924 assert(bkpinfo != NULL); 925 925 926 if (bkpinfo->media_device == NULL) { 927 return(1); 928 } 929 926 930 mr_asprintf(fname, "%s1", bkpinfo->media_device); 927 931 if (is_this_device_mounted(fname)) { … … 1022 1026 assert(bkpinfo != NULL); 1023 1027 1028 if (bkpinfo->media_device == NULL) { 1029 return(1); 1030 } 1031 1024 1032 mr_asprintf(mountpoint, "%s/cdrom", bkpinfo->tmpdir); 1025 mr_asprintf(fname, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, g_current_media_number); 1033 if (((bkpinfo->isodir == NULL) && (bkpinfo->nfs_remote_dir == NULL)) || (bkpinfo->prefix == NULL)) { 1034 fatal_error("No iso filename preparation possible"); 1035 } 1036 if (bkpinfo->nfs_remote_dir) { 1037 // NFS 1038 mr_asprintf(fname, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, g_current_media_number); 1039 } else { 1040 // ISO 1041 mr_asprintf(fname, "%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->prefix, g_current_media_number); 1042 } 1026 1043 1027 1044 mkdir(mountpoint, 1777); … … 1106 1123 mr_free(command); 1107 1124 1108 if (!bkpinfo->please_dont_eject 1109 && eject_device(bkpinfo->media_device)) { 1125 if (!bkpinfo->please_dont_eject && eject_device(bkpinfo->media_device)) { 1110 1126 log_msg(2, "Failed to eject CD-ROM drive"); 1111 1127 } -
branches/2.2.10/mondo/src/common/libmondo-verify.h
r2316 r2325 28 28 extern void fatal_error(char *); 29 29 extern int find_and_mount_actual_cd(char *); 30 extern int find_cdrom_device(char *,bool);30 extern char *find_cdrom_device(bool); 31 31 extern void finish(int); 32 32 extern int get_last_filelist_number(); -
branches/2.2.10/mondo/src/common/mondostructures.h
r2323 r2325 339 339 * If backup_media_type is anything else, this should be blank. 340 340 */ 341 char media_device[MAX_STR_LEN / 4];341 char *media_device; 342 342 343 343 /** … … 553 553 * address form. (Domain names will be resolved in post_param_configuration().) 554 554 */ 555 char nfs_mount[MAX_STR_LEN];555 char *nfs_mount; 556 556 557 557 /** … … 559 559 * the backups in. 560 560 */ 561 char nfs_remote_dir[MAX_STR_LEN];561 char *nfs_remote_dir; 562 562 563 563 /** -
branches/2.2.10/mondo/src/mondoarchive/mondoarchive.c
r2324 r2325 276 276 if (argc > 2 && !strcmp(argv[1], "find-cd")) { 277 277 g_loglevel = 10; 278 malloc_string(tmp); 279 if (find_cdrw_device(tmp)) { 278 if ((tmp = find_cdrw_device()) == NULL) { 280 279 printf("Failed to find CDR-RW drive\n"); 281 280 } else { 282 281 printf("CD-RW is at %s\n", tmp); 283 282 } 284 tmp[0] = '\0';285 if ( find_cdrom_device(tmp, atoi(argv[2]))) {283 mr_free(tmp); 284 if ((tmp = find_cdrom_device(FALSE)) == NULL) { 286 285 printf("Failed to find CD-ROM drive\n"); 287 286 } else { 288 287 printf("CD-ROM is at %s\n", tmp); 289 288 } 290 paranoid_free(tmp);289 mr_free(tmp); 291 290 finish(0); 292 291 } … … 294 293 if (argc > 2 && !strcmp(argv[1], "find-dvd")) { 295 294 g_loglevel = 10; 296 malloc_string(tmp); 297 if (find_dvd_device(tmp, atoi(argv[2]))) { 295 if ((tmp = find_dvd_device()) == NULL) { 298 296 printf("Failed to find DVD drive\n"); 299 297 } else { 300 298 printf("DVD is at %s\n", tmp); 301 299 } 302 paranoid_free(tmp);300 mr_free(tmp); 303 301 finish(0); 304 302 } … … 406 404 if (bkpinfo->backup_media_type == usb) { 407 405 log_msg(1, "Unmounting USB device."); 406 if (bkpinfo->media_device == NULL) { 407 fatal_error("USB device set to NULL"); 408 } 408 409 mr_asprintf(tmp, "umount %s1", bkpinfo->media_device); 409 410 run_program_and_log_output(tmp, TRUE); -
branches/2.2.10/mondo/src/mondorestore/mondo-prep.c
r2324 r2325 448 448 /** buffers **********************************************************/ 449 449 char *incoming; 450 char *tmp = NULL;451 450 452 451 /** pointers *********************************************************/ … … 2330 2329 char *drive_name) 2331 2330 { 2332 /**buffers **********************************************************/2333 char *tmp = NULL;2334 2331 2335 2332 /** int *************************************************************/ -
branches/2.2.10/mondo/src/mondorestore/mondo-rstr-compare.c
r2324 r2325 360 360 /** needs malloc **********/ 361 361 362 char *tarball_fname = NULL; 363 char *progress_str = NULL; 364 char *tmp = NULL; 362 char *tarball_fname, *progress_str; 363 char *tmp = NULL; 365 364 char *mds = NULL; 366 365 long max_val; 367 366 367 malloc_string(tarball_fname); 368 malloc_string(progress_str); 368 369 369 370 assert(bkpinfo != NULL); 370 371 mvaddstr_and_log_it(g_currentY, 0, "Comparing archives"); 371 372 malloc_string(tmp); 373 read_cfg_var(g_mondo_cfg_file, "last-filelist-number", tmp); 372 tmp = read_cfg_var(g_mondo_cfg_file, "last-filelist-number"); 374 373 max_val = atol(tmp); 374 mr_free(tmp); 375 375 376 paranoid_free(tmp); 376 377 … … 442 443 mvaddstr_and_log_it(g_currentY++, 74, "Done."); 443 444 } 445 paranoid_free(tarball_fname); 446 paranoid_free(progress_str); 444 447 return (retval); 445 448 } … … 671 674 0, "Verifying archives against filesystem"); 672 675 676 mr_free(bkpinfo->media_device); 673 677 if (bkpinfo->disaster_recovery && does_file_exist("/tmp/CDROM-LIVES-HERE")) { 674 strcpy(bkpinfo->media_device, 675 last_line_of_file("/tmp/CDROM-LIVES-HERE")); 676 } else { 677 find_cdrom_device(bkpinfo->media_device, FALSE); 678 mr_asprintf(bkpinfo->media_device, "%s", last_line_of_file("/tmp/CDROM-LIVES-HERE")); 679 } else { 680 bkpinfo->media_device = find_cdrom_device(FALSE); 678 681 } 679 682 res = verify_tape_backups(); -
branches/2.2.10/mondo/src/mondorestore/mondo-rstr-newt.c
r2323 r2325 2261 2261 /** 2262 2262 * Get information about the location of ISO images from the user. 2263 * @param isodir_device Where to put the device (e.g. /dev/hda4) the user enters. 2263 * @param isodir_device Where to put the device (e.g. /dev/hda4) the user enters. Allocted by the function 2264 2264 * @param isodir_format Where to put the format (e.g. ext2) the user enters. 2265 2265 * @param isodir_path Where to put the path (e.g. /var/cache/mondo) the user enters. … … 2267 2267 * @return TRUE if OK was pressed, FALSE otherwise. 2268 2268 */ 2269 bool get_isodir_info(char *isodir_device, char *isodir_format, char *isodir_path, bool nuke_me_please) 2270 { 2269 bool get_isodir_info(char *isodir_device, char *isodir_format, char *isodir_path, bool nuke_me_please) { 2271 2270 2272 2271 char *p = NULL; … … 2278 2277 /** initialize ********************************************************/ 2279 2278 2280 assert(isodir_device != NULL);2281 2279 assert(isodir_path != NULL); 2282 2280 2283 2281 log_it("isodir_path = %s", isodir_path); 2284 if (isodir_device [0] == '\0') {2282 if (isodir_device == NULL) { 2285 2283 mr_asprintf(idev, "/dev/"); 2286 2284 } else { … … 2297 2295 2298 2296 /* modify for the caller */ 2299 strcpy(isodir_device, idev); 2297 mr_free(isodir_device); 2298 isodir_device = idev; 2300 2299 if (nuke_me_please) { 2301 2300 ret = TRUE; … … 2316 2315 2317 2316 /* modify for the caller */ 2318 strcpy(isodir_device, p); 2317 mr_free(isodir_device); 2318 isodir_device = p; 2319 2319 mr_free(isodir_path); 2320 2320 isodir_path = r; … … 2327 2327 mr_free(p); 2328 2328 } 2329 mr_free(idev);2330 2329 mr_free(isodir_format); 2331 2330 return(ret); -
branches/2.2.10/mondo/src/mondorestore/mondo-rstr-tools.c
r2324 r2325 94 94 paranoid_free(g_tmpfs_mountpt); 95 95 */ 96 paranoid_free(g_isodir_device);96 mr_free(g_isodir_device); 97 97 98 98 } … … 260 260 char *command = NULL; 261 261 char *mds = NULL; 262 char *p = NULL;263 262 int retval = 0, i; 264 263 bool already_mounted = FALSE; … … 266 265 267 266 g_ISO_restore_mode = TRUE; 268 read_cfg_var(g_mondo_cfg_file, "iso-dev", g_isodir_device); 267 mr_free(g_isodir_device); 268 g_isodir_device = read_cfg_var(g_mondo_cfg_file, "iso-dev"); 269 269 if (bkpinfo->disaster_recovery) { 270 270 /* Patch Conor Daly 26-june-2004 … … 281 281 } 282 282 283 /* g_isodir_device is passed and modified in this function - memory is managed correctly in it */ 283 284 if (!get_isodir_info(g_isodir_device, isodir_format, bkpinfo->isodir, nuke_me_please)) { 284 285 mr_free(isodir_format); … … 570 571 571 572 char *mount_cmd = NULL; 572 char *p = NULL;573 573 int i, res; 574 574 #ifdef __FreeBSD__ … … 585 585 log_msg(2, "mount_media() - media already mounted. Fair enough."); 586 586 return (0); 587 } 588 589 if (bkpinfo->media_device == NULL) { 590 fatal_error("No media device at that point"); 587 591 } 588 592 … … 594 598 mr_asprintf(bkpinfo->isodir, "/tmp/isodir"); 595 599 log_msg(1, "isodir is being set to %s", bkpinfo->isodir); 600 } 601 if ((bkpinfo->isodir == NULL) || (bkpinfo->nfs_remote_dir == NULL) || (bkpinfo->prefix == NULL)) { 602 fatal_error("Unable to prepare the iso filename"); 596 603 } 597 604 #ifdef __FreeBSD__ … … 624 631 #endif 625 632 } else { 626 if (bkpinfo->disaster_recovery 627 && does_file_exist("/tmp/CDROM-LIVES-HERE")) { 628 strcpy(bkpinfo->media_device, 629 last_line_of_file("/tmp/CDROM-LIVES-HERE")); 633 mr_free(bkpinfo->media_device); 634 if (bkpinfo->disaster_recovery && does_file_exist("/tmp/CDROM-LIVES-HERE")) { 635 mr_asprintf(bkpinfo->media_device, "%s", last_line_of_file("/tmp/CDROM-LIVES-HERE")); 630 636 } else { 631 find_cdrom_device(bkpinfo->media_device,TRUE);637 bkpinfo->media_device = find_cdrom_device(TRUE); 632 638 } 633 639 … … 720 726 t_bkptype media_specified_by_user; 721 727 722 malloc_string(iso_mnt);723 malloc_string(iso_path);724 malloc_string(value);725 728 malloc_string(tmp); 726 729 // assert_string_is_neither_NULL_nor_zerolength(cfg_file); … … 735 738 media_specified_by_user = bkpinfo->backup_media_type; // or 'none', if not specified 736 739 737 if (0 == read_cfg_var(cfg_file, "backup-media-type", value)) { 738 if (!strcmp(value, "cdstream")) { 739 bkpinfo->backup_media_type = cdstream; 740 } else if (!strcmp(value, "cdr")) { 741 bkpinfo->backup_media_type = cdr; 742 } else if (!strcmp(value, "cdrw")) { 743 bkpinfo->backup_media_type = cdrw; 744 } else if (!strcmp(value, "dvd")) { 745 bkpinfo->backup_media_type = dvd; 746 } else if (!strcmp(value, "usb")) { 747 bkpinfo->backup_media_type = usb; 748 bkpinfo->please_dont_eject = TRUE; 749 } else if (!strcmp(value, "iso")) { 750 751 // Patch by Conor Daly - 2004/07/12 752 bkpinfo->backup_media_type = iso; 753 if (am_I_in_disaster_recovery_mode()) { 754 /* Check to see if CD is already mounted before mounting it... */ 755 if (!is_this_device_mounted("/dev/cdrom")) { 756 log_msg(2, 757 "NB: CDROM device not mounted, mounting..."); 758 run_program_and_log_output("mount /dev/cdrom " 759 MNT_CDROM, 1); 760 } 761 if (does_file_exist(MNT_CDROM "/archives/filelist.0")) { 762 bkpinfo->backup_media_type = cdr; 763 run_program_and_log_output("umount " MNT_CDROM, 1); 764 log_it 765 ("Re-jigging configuration AGAIN. CD-R, not ISO."); 766 } 767 } 768 mr_free(bkpinfo->prefix); 769 if (read_cfg_var(cfg_file, "iso-prefix", value) == 0) { 770 mr_asprintf(bkpinfo->prefix, "%s", value); 740 if ((value = read_cfg_var(cfg_file, "backup-media-type")) == 0) { 741 if (!strcmp(value, "cdstream")) { 742 bkpinfo->backup_media_type = cdstream; 743 } else if (!strcmp(value, "cdr")) { 744 bkpinfo->backup_media_type = cdr; 745 } else if (!strcmp(value, "cdrw")) { 746 bkpinfo->backup_media_type = cdrw; 747 } else if (!strcmp(value, "dvd")) { 748 bkpinfo->backup_media_type = dvd; 749 } else if (!strcmp(value, "usb")) { 750 bkpinfo->backup_media_type = usb; 751 bkpinfo->please_dont_eject = TRUE; 752 } else if (!strcmp(value, "iso")) { 753 // Patch by Conor Daly - 2004/07/12 754 bkpinfo->backup_media_type = iso; 755 if (am_I_in_disaster_recovery_mode()) { 756 /* Check to see if CD is already mounted before mounting it... */ 757 if (!is_this_device_mounted("/dev/cdrom")) { 758 log_msg(2, "NB: CDROM device not mounted, mounting..."); 759 run_program_and_log_output("mount /dev/cdrom " MNT_CDROM, 1); 760 } 761 if (does_file_exist(MNT_CDROM "/archives/filelist.0")) { 762 bkpinfo->backup_media_type = cdr; 763 run_program_and_log_output("umount " MNT_CDROM, 1); 764 log_it 765 ("Re-jigging configuration AGAIN. CD-R, not ISO."); 766 } 767 } 768 mr_free(bkpinfo->prefix); 769 mr_free(value); 770 if ((value = read_cfg_var(cfg_file, "iso-prefix")) == 0) { 771 mr_asprintf(bkpinfo->prefix, "%s", value); 772 } else { 773 mr_asprintf(bkpinfo->prefix, "%s", STD_PREFIX); 774 } 775 } else if (!strcmp(value, "nfs")) { 776 bkpinfo->backup_media_type = nfs; 777 bkpinfo->please_dont_eject = TRUE; 778 mr_free(bkpinfo->prefix); 779 mr_free(value); 780 if ((value = read_cfg_var(cfg_file, "iso-prefix")) == 0) { 781 mr_asprintf(bkpinfo->prefix, "%s", value); 782 } else { 783 mr_asprintf(bkpinfo->prefix, "%s", STD_PREFIX); 784 } 785 786 if (strstr(call_program_and_get_last_line_of_output("cat /proc/cmdline"), "pxe")) { 787 /* We need to override prefix value in PXE mode as it's 788 * already done in start-nfs */ 789 envtmp1 = getenv("imgname"); 790 if (envtmp1 == NULL) { 791 fatal_error("no imgname variable in environment"); 792 } 793 mr_free(bkpinfo->prefix); 794 mr_asprintf(bkpinfo->prefix, "%s", envtmp1); 795 } 796 797 } else if (!strcmp(value, "tape")) { 798 bkpinfo->backup_media_type = tape; 799 } else if (!strcmp(value, "udev")) { 800 bkpinfo->backup_media_type = udev; 771 801 } else { 772 mr_asprintf(bkpinfo->prefix, "%s", STD_PREFIX); 773 } 774 } else if (!strcmp(value, "nfs")) { 775 bkpinfo->backup_media_type = nfs; 776 bkpinfo->please_dont_eject = TRUE; 777 mr_free(bkpinfo->prefix); 778 if (read_cfg_var(cfg_file, "iso-prefix", value) == 0) { 779 mr_asprintf(bkpinfo->prefix, "%s", value); 780 } else { 781 mr_asprintf(bkpinfo->prefix, "%s", STD_PREFIX); 782 } 783 784 if (strstr(call_program_and_get_last_line_of_output("cat /proc/cmdline"), "pxe")) { 785 /* We need to override prefix value in PXE mode as it's 786 * already done in start-nfs */ 787 envtmp1 = getenv("imgname"); 788 if (envtmp1 == NULL) { 789 fatal_error("no imgname variable in environment"); 790 } 791 mr_free(bkpinfo->prefix); 792 mr_asprintf(bkpinfo->prefix, "%s", envtmp1); 793 } 794 795 } else if (!strcmp(value, "tape")) { 796 bkpinfo->backup_media_type = tape; 797 } else if (!strcmp(value, "udev")) { 798 bkpinfo->backup_media_type = udev; 802 fatal_error("UNKNOWN bkp-media-type"); 803 } 799 804 } else { 800 fatal_error("UNKNOWN bkp-media-type"); 801 } 802 } else { 803 fatal_error("backup-media-type not specified!"); 804 } 805 fatal_error("backup-media-type not specified!"); 806 } 807 mr_free(value); 808 805 809 if (bkpinfo->disaster_recovery) { 806 810 if (bkpinfo->backup_media_type == cdstream) { 807 sprintf(bkpinfo->media_device, "/dev/cdrom");808 // bkpinfo->media_size[0] = -1;811 mr_free(bkpinfo->media_device); 812 mr_asprintf(bkpinfo->media_device, "/dev/cdrom"); 809 813 bkpinfo->media_size[0] = 1999 * 1024; 810 814 bkpinfo->media_size[1] = 650; /* good guess */ … … 812 816 envtmp1 = getenv("MRUSBDEV"); 813 817 if (envtmp1 == NULL) { 814 if ( read_cfg_var(cfg_file, "usb-dev", value)) {818 if ((value = read_cfg_var(cfg_file, "usb-dev")) == NULL) { 815 819 fatal_error("Cannot get USB device name from cfg file"); 816 820 } 817 821 } else { 818 strcpy(value,envtmp1); 819 } 820 sprintf(bkpinfo->media_device, "%s1", value); 822 mr_asprintf(value,"%s", envtmp1); 823 } 824 mr_free(bkpinfo->media_device); 825 mr_asprintf(bkpinfo->media_device, "%s1", value); 826 mr_free(value); 821 827 log_msg(2, "Backup medium is USB --- dev=%s", bkpinfo->media_device); 822 } else if (bkpinfo->backup_media_type == tape 823 || bkpinfo->backup_media_type == udev) { 824 if (read_cfg_var(cfg_file, "media-dev", value)) { 828 } else if (bkpinfo->backup_media_type == tape || bkpinfo->backup_media_type == udev) { 829 if ((value = read_cfg_var(cfg_file, "media-dev")) == NULL) { 825 830 fatal_error("Cannot get tape device name from cfg file"); 826 831 } 827 strcpy(bkpinfo->media_device, value); 828 read_cfg_var(cfg_file, "media-size", value); 829 bkpinfo->media_size[1] = atol(value); 832 mr_free(bkpinfo->media_device); 833 bkpinfo->media_device = value; 834 835 value = read_cfg_var(cfg_file, "media-size"); 836 if (value != NULL) { 837 bkpinfo->media_size[1] = atol(value); 838 mr_free(value); 839 } else { 840 bkpinfo->media_size[1] = 0L; 841 } 830 842 log_msg(2, "Backup medium is TAPE --- dev=%s", bkpinfo->media_device); 831 843 } else { 832 strcpy(bkpinfo->media_device, "/dev/cdrom"); /* we don't really need this var */ 844 mr_free(bkpinfo->media_device); 845 mr_asprintf(bkpinfo->media_device, "/dev/cdrom"); /* we don't really need this var */ 833 846 bkpinfo->media_size[0] = 1999 * 1024; /* 650, probably, but we don't need this var anyway */ 834 847 bkpinfo->media_size[1] = 1999 * 1024; /* 650, probably, but we don't need this var anyway */ … … 836 849 } 837 850 } else { 838 log_msg(2, 839 "Not in Disaster Recovery Mode. No need to derive device name from config file."); 840 } 841 842 read_cfg_var(cfg_file, "use-star", value); 843 if (strstr(value, "yes")) { 851 log_msg(2, "Not in Disaster Recovery Mode. No need to derive device name from config file."); 852 } 853 854 value = read_cfg_var(cfg_file, "use-star"); 855 if (value && strstr(value, "yes")) { 844 856 bkpinfo->use_star = TRUE; 845 857 log_msg(1, "Goody! ... bkpinfo->use_star is now true."); 846 858 } 847 848 read_cfg_var(cfg_file, "obdr", value); 849 if (strstr(value, "TRUE")) { 859 mr_free(value); 860 861 value = read_cfg_var(cfg_file, "obdr"); 862 if (value && strstr(value, "TRUE")) { 850 863 bkpinfo->use_obdr = TRUE; 851 864 log_msg(1, "OBDR mode activated"); 852 865 } 853 854 read_cfg_var(cfg_file, "acl", value); 855 if (strstr(value, "TRUE")) { 866 mr_free(value); 867 868 value = read_cfg_var(cfg_file, "acl"); 869 if (value && strstr(value, "TRUE")) { 856 870 mr_asprintf(g_getfacl,"setfacl"); 857 871 log_msg(1, "We will restore ACLs"); … … 860 874 } 861 875 } 862 read_cfg_var(cfg_file, "xattr", value); 863 if (strstr(value, "TRUE")) { 876 mr_free(value); 877 878 value = read_cfg_var(cfg_file, "xattr"); 879 if (value && strstr(value, "TRUE")) { 864 880 mr_asprintf(g_getfattr,"setfattr"); 865 881 log_msg(1, "We will restore XATTRs"); … … 868 884 } 869 885 } 870 871 if (0 == read_cfg_var(cfg_file, "internal-tape-block-size", value)) { 872 bkpinfo->internal_tape_block_size = atol(value);873 log_msg(1, "Internal tape block size has been custom-set to %ld", 874 bkpinfo->internal_tape_block_size);886 mr_free(value); 887 888 value = read_cfg_var(cfg_file, "internal-tape-block-size"); 889 if (value != NULL) { 890 bkpinfo->internal_tape_block_size = atol(value); 875 891 } else { 876 bkpinfo->internal_tape_block_size = 877 DEFAULT_INTERNAL_TAPE_BLOCK_SIZE; 878 log_msg(1, "Internal tape block size = default (%ld)", 879 DEFAULT_INTERNAL_TAPE_BLOCK_SIZE); 880 } 881 882 read_cfg_var(cfg_file, "use-lzo", value); 883 if (strstr(value, "yes")) { 884 bkpinfo->use_lzo = TRUE; 885 bkpinfo->use_gzip = FALSE; 886 strcpy(bkpinfo->zip_exe, "lzop"); 887 strcpy(bkpinfo->zip_suffix, "lzo"); 888 } else { 889 read_cfg_var(cfg_file, "use-gzip", value); 890 if (strstr(value, "yes")) { 892 bkpinfo->internal_tape_block_size = DEFAULT_INTERNAL_TAPE_BLOCK_SIZE; 893 } 894 log_msg(1, "Internal tape block size set to %ld", bkpinfo->internal_tape_block_size); 895 mr_free(value); 896 897 bkpinfo->zip_exe[0] = bkpinfo->zip_suffix[0] = '\0'; 898 value = read_cfg_var(cfg_file, "use-lzo"); 899 if (value && strstr(value, "yes")) { 900 bkpinfo->use_lzo = TRUE; 901 bkpinfo->use_gzip = FALSE; 902 strcpy(bkpinfo->zip_exe, "lzop"); 903 strcpy(bkpinfo->zip_suffix, "lzo"); 904 } 905 mr_free(value); 906 907 value = read_cfg_var(cfg_file, "use-gzip"); 908 if (value && strstr(value, "yes")) { 891 909 bkpinfo->use_lzo = FALSE; 892 910 bkpinfo->use_gzip = TRUE; 893 911 strcpy(bkpinfo->zip_exe, "gzip"); 894 912 strcpy(bkpinfo->zip_suffix, "gz"); 913 } 914 mr_free(value); 915 916 value = read_cfg_var(cfg_file, "use-comp"); 917 if (value && strstr(value, "yes")) { 918 bkpinfo->use_lzo = FALSE; 919 bkpinfo->use_gzip = FALSE; 920 strcpy(bkpinfo->zip_exe, "bzip2"); 921 strcpy(bkpinfo->zip_suffix, "bz2"); 922 } 923 mr_free(value); 924 925 value = read_cfg_var(cfg_file, "differential"); 926 if (value && (!strcmp(value, "yes") || !strcmp(value, "1"))) { 927 bkpinfo->differential = TRUE; 928 } 929 log_msg(2, "differential var = '%s'", value); 930 mr_free(value); 931 if (bkpinfo->differential) { 932 log_msg(2, "THIS IS A DIFFERENTIAL BACKUP"); 895 933 } else { 896 read_cfg_var(cfg_file, "use-comp", value); 897 if (strstr(value, "yes")) { 898 bkpinfo->use_lzo = FALSE; 899 bkpinfo->use_gzip = FALSE; 900 strcpy(bkpinfo->zip_exe, "bzip2"); 901 strcpy(bkpinfo->zip_suffix, "bz2"); 902 } else { 903 bkpinfo->zip_exe[0] = bkpinfo->zip_suffix[0] = '\0'; 904 } 905 } 906 } 907 908 value[0] = '\0'; 909 read_cfg_var(cfg_file, "differential", value); 910 if (!strcmp(value, "yes") || !strcmp(value, "1")) { 911 bkpinfo->differential = TRUE; 912 } 913 log_msg(2, "differential var = '%s'", value); 914 if (bkpinfo->differential) { 915 log_msg(2, "THIS IS A DIFFERENTIAL BACKUP"); 916 } else { 917 log_msg(2, "This is a regular (full) backup"); 918 } 919 920 read_cfg_var(g_mondo_cfg_file, "please-dont-eject", tmp); 921 if (tmp[0] || strstr(call_program_and_get_last_line_of_output("cat /proc/cmdline"), "donteject")) { 934 log_msg(2, "This is a regular (full) backup"); 935 } 936 937 tmp = read_cfg_var(g_mondo_cfg_file, "please-dont-eject"); 938 if (tmp || strstr(call_program_and_get_last_line_of_output("cat /proc/cmdline"), "donteject")) { 922 939 bkpinfo->please_dont_eject = TRUE; 923 940 log_msg(2, "Ok, I shan't eject when restoring! Groovy."); 924 941 } 942 mr_free(tmp); 925 943 926 944 if (bkpinfo->backup_media_type == nfs) { 927 945 if (!cfgf) { 928 log_msg(2, "nfs_mount remains %s", bkpinfo->nfs_mount); 929 log_msg(2, "nfs_remote_dir remains %s", 930 bkpinfo->nfs_remote_dir); 931 log_msg(2, 932 "...cos it wouldn't make sense to abandon the values that GOT ME to this config file in the first place"); 946 if (bkpinfo->nfs_mount) { 947 log_msg(2, "nfs_mount remains %s", bkpinfo->nfs_mount); 948 } 949 if (bkpinfo->nfs_remote_dir) { 950 log_msg(2, "nfs_remote_dir remains %s", bkpinfo->nfs_remote_dir); 951 } 952 log_msg(2, "...cos it wouldn't make sense to abandon the values that GOT ME to this config file in the first place"); 933 953 } else { 934 read_cfg_var(g_mondo_cfg_file, "nfs-server-mount", 935 bkpinfo->nfs_mount); 936 read_cfg_var(g_mondo_cfg_file, "nfs-server-path", 937 bkpinfo->nfs_remote_dir); 938 log_msg(2, "nfs_mount is %s", bkpinfo->nfs_mount); 939 log_msg(2, "nfs_remote_dir is %s", bkpinfo->nfs_remote_dir); 940 } 941 if (strstr(call_program_and_get_last_line_of_output 942 ("cat /proc/cmdline"), "pxe")) { 954 mr_free(bkpinfo->nfs_mount); 955 bkpinfo->nfs_mount = read_cfg_var(g_mondo_cfg_file, "nfs-server-mount"); 956 957 mr_free(bkpinfo->nfs_remote_dir); 958 bkpinfo->nfs_remote_dir = read_cfg_var(g_mondo_cfg_file, "nfs-server-path"); 959 960 if (bkpinfo->nfs_mount != NULL) { 961 log_msg(2, "nfs_mount is %s", bkpinfo->nfs_mount); 962 } 963 if (bkpinfo->nfs_remote_dir != NULL) { 964 log_msg(2, "nfs_remote_dir is %s", bkpinfo->nfs_remote_dir); 965 } 966 } 967 if (strstr(call_program_and_get_last_line_of_output("cat /proc/cmdline"), "pxe")) { 943 968 /* We need to override values in PXE mode as it's 944 969 * already done in start-nfs */ … … 951 976 fatal_error("no dirimg variable in environment"); 952 977 } 953 strcpy(bkpinfo->nfs_mount,envtmp1); 954 strcpy(bkpinfo->nfs_remote_dir,envtmp2); 978 mr_free(bkpinfo->nfs_mount); 979 mr_asprintf(bkpinfo->nfs_mount, "%s", envtmp1); 980 981 mr_free(bkpinfo->nfs_remote_dir); 982 mr_asprintf(bkpinfo->nfs_remote_dir, "%s", envtmp2); 955 983 } 956 984 } else if (bkpinfo->backup_media_type == iso) { … … 960 988 */ 961 989 mr_asprintf(old_isodir, "%s", bkpinfo->isodir); 962 read_cfg_var(g_mondo_cfg_file, "iso-mnt", iso_mnt);963 read_cfg_var(g_mondo_cfg_file, "isodir", iso_path);990 iso_mnt = read_cfg_var(g_mondo_cfg_file, "iso-mnt"); 991 iso_path = read_cfg_var(g_mondo_cfg_file, "isodir"); 964 992 mr_free(bkpinfo->isodir); 965 993 mr_asprintf(bkpinfo->isodir, "%s%s", iso_mnt, iso_path); 994 mr_free(iso_mnt); 995 966 996 if (!bkpinfo->isodir[0]) { 967 997 mr_free(bkpinfo->isodir); … … 979 1009 } 980 1010 } 981 read_cfg_var(g_mondo_cfg_file, "iso-dev", g_isodir_device); 1011 mr_free(g_isodir_device); 1012 g_isodir_device = read_cfg_var(g_mondo_cfg_file, "iso-dev"); 982 1013 log_msg(2, "isodir=%s; iso-dev=%s", bkpinfo->isodir, g_isodir_device); 983 1014 … … 989 1020 log_it("command = %s", command); 990 1021 log_it("res of it = %s", call_program_and_get_last_line_of_output(command)); 991 sprintf(iso_mnt, "%s", call_program_and_get_last_line_of_output(command));1022 mr_asprintf(iso_mnt, "%s", call_program_and_get_last_line_of_output(command)); 992 1023 mr_free(command); 993 1024 } else { 994 sprintf(iso_mnt, "/tmp/isodir");1025 mr_asprintf(iso_mnt, "/tmp/isodir"); 995 1026 mr_asprintf(tmp1, "mkdir -p %s", iso_mnt); 996 1027 run_program_and_log_output(tmp1, 5); … … 999 1030 mr_asprintf(tmp1, "mount %s %s", g_isodir_device, iso_mnt); 1000 1031 if (run_program_and_log_output(tmp1, 3)) { 1001 log_msg(1, 1002 "Unable to mount isodir. Perhaps this is really a CD backup?"); 1032 log_msg(1, "Unable to mount isodir. Perhaps this is really a CD backup?"); 1003 1033 bkpinfo->backup_media_type = cdr; 1004 strcpy(bkpinfo->media_device, "/dev/cdrom"); /* superfluous */1005 iso_mnt[0] = iso_path[0] = '\0';1034 mr_free(bkpinfo->media_device); 1035 mr_asprintf(bkpinfo->media_device, "/dev/cdrom"); /* superfluous */ 1006 1036 if (mount_media()) { 1007 1037 mr_free(tmp1); … … 1019 1049 bkpinfo->isodir = tmp1; 1020 1050 } 1021 } 1051 mr_free(iso_mnt); 1052 } 1053 mr_free(iso_path); 1022 1054 } 1023 1055 … … 1041 1073 paranoid_free(value); 1042 1074 paranoid_free(tmp); 1043 paranoid_free(iso_mnt);1044 paranoid_free(iso_path);1045 1075 return (0); 1046 1076 … … 1316 1346 1317 1347 /** malloc *******/ 1318 char *device ;1319 char *name ;1348 char *device = NULL; 1349 char *name = NULL; 1320 1350 char *cmd = NULL; 1321 1322 malloc_string(device);1323 malloc_string(name);1324 1351 1325 1352 /* In order to have a working bootloader, we need to have all devices … … 1337 1364 backup_crucial_file(MNT_RESTORING, "/boot/grub/device.map"); 1338 1365 backup_crucial_file(MNT_RESTORING, "/etc/mtab"); 1339 read_cfg_var(g_mondo_cfg_file, "bootloader.device", device);1340 read_cfg_var(g_mondo_cfg_file, "bootloader.name", name);1366 device = read_cfg_var(g_mondo_cfg_file, "bootloader.device"); 1367 name = read_cfg_var(g_mondo_cfg_file, "bootloader.name"); 1341 1368 log_msg(2, "run_boot_loader: device='%s', name='%s'", device, name); 1342 1369 system("sync"); … … 1375 1402 } 1376 1403 #endif 1404 mr_free(device); 1405 mr_free(name); 1406 1377 1407 retval += res; 1378 1408 if (res) { … … 1381 1411 log_to_screen("Your boot loader ran OK"); 1382 1412 } 1383 paranoid_free(device);1384 paranoid_free(name);1385 1413 return (retval); 1386 1414 } … … 1849 1877 malloc_string(g_mountlist_fname); 1850 1878 malloc_string(g_mondo_home); 1851 malloc_string(g_isodir_device);1852 1879 1853 1880 sprintf(g_biggielist_txt, "%s/%s", bkpinfo->tmpdir, BIGGIELIST_TXT_STUB); … … 2180 2207 run_program_and_log_output("mkdir -p tmp", FALSE); 2181 2208 2182 if ( strlen(bkpinfo->media_device) == 0) {2183 strcpy(bkpinfo->media_device, "/dev/st0");2184 log_msg(2, "media_device is blank; assuming %s" );2209 if (! bkpinfo->media_device) { 2210 mr_asprintf(bkpinfo->media_device, "/dev/st0"); 2211 log_msg(2, "media_device is blank; assuming %s", bkpinfo->media_device); 2185 2212 } 2186 2213 mr_asprintf(tmp, "%s", bkpinfo->media_device); 2187 2214 if (extract_cfg_file_and_mountlist_from_tape_dev (bkpinfo->media_device)) { 2188 strcpy(bkpinfo->media_device, "/dev/st0"); 2215 mr_free(bkpinfo->media_device); 2216 mr_asprintf(bkpinfo->media_device, "/dev/st0"); 2189 2217 if (extract_cfg_file_and_mountlist_from_tape_dev (bkpinfo->media_device)) { 2190 strcpy(bkpinfo->media_device, "/dev/osst0"); 2218 mr_free(bkpinfo->media_device); 2219 mr_asprintf(bkpinfo->media_device, "/dev/osst0"); 2191 2220 if (extract_cfg_file_and_mountlist_from_tape_dev (bkpinfo->media_device)) { 2192 strcpy(bkpinfo->media_device, "/dev/ht0"); 2221 mr_free(bkpinfo->media_device); 2222 mr_asprintf(bkpinfo->media_device, "/dev/ht0"); 2193 2223 if (extract_cfg_file_and_mountlist_from_tape_dev (bkpinfo->media_device)) { 2194 2224 log_msg(3, "I tried lots of devices but none worked."); 2195 strcpy(bkpinfo->media_device, tmp); 2225 mr_free(bkpinfo->media_device); 2226 mr_asprintf(bkpinfo->media_device, "%s", tmp); 2196 2227 } 2197 2228 } -
branches/2.2.10/mondo/src/mondorestore/mondorestore.c
r2324 r2325 969 969 interactively_obtain_media_parameters_from_user(FALSE); 970 970 } 971 log_msg(2, "bkpinfo->media_device = %s", bkpinfo->media_device); 972 if (!bkpinfo->media_device[0]) { 973 log_msg(2, "Warning - failed to find media dev"); 971 if (!bkpinfo->media_device) { 972 log_msg(2, "WARNING: failed to find media dev"); 973 } else { 974 log_msg(2, "bkpinfo->media_device = %s", bkpinfo->media_device); 974 975 } 975 976 … … 1999 2000 long noof_biggiefiles, bigfileno = 0, total_slices; 2000 2001 /** malloc **/ 2001 char *tmp;2002 2002 char *tmp1 = NULL; 2003 2003 char *mds = NULL; … … 2009 2009 FILE *fbw = NULL; 2010 2010 2011 malloc_string(tmp);2012 2011 malloc_string(pathname_of_last_biggie_restored); 2013 2012 assert(bkpinfo != NULL); … … 2018 2017 } 2019 2018 2020 read_cfg_var(g_mondo_cfg_file, "total-slices", tmp); 2021 total_slices = atol(tmp); 2019 tmp1 = read_cfg_var(g_mondo_cfg_file, "total-slices"); 2020 total_slices = atol(tmp1); 2021 mr_free(tmp1); 2022 2022 2023 mr_asprintf(tmp1, "Reassembling large files "); 2023 2024 mvaddstr_and_log_it(g_currentY, 0, tmp1); … … 2108 2109 mvaddstr_and_log_it(g_currentY++, 74, "Done."); 2109 2110 } 2110 paranoid_free(tmp);2111 2111 paranoid_free(pathname_of_last_biggie_restored); 2112 2112 return (retval); … … 2138 2138 long max_val; 2139 2139 /**malloc ***/ 2140 char *tmp = NULL;2141 2140 char *mds = NULL; 2142 2141 char *tmp1 = NULL; … … 2145 2144 char *comment; 2146 2145 2147 malloc_string(tmp);2148 2146 malloc_string(comment); 2149 2147 … … 2157 2155 } 2158 2156 insist_on_this_cd_number(g_current_media_number); 2159 read_cfg_var(g_mondo_cfg_file, "last-filelist-number", tmp);2160 max_val = atol(tmp ) + 1;2161 paranoid_free(tmp);2157 tmp1 = read_cfg_var(g_mondo_cfg_file, "last-filelist-number"); 2158 max_val = atol(tmp1) + 1; 2159 mr_free(tmp1); 2162 2160 2163 2161 mds = media_descriptor_string(bkpinfo->backup_media_type); … … 2278 2276 2279 2277 /** malloc add ****/ 2280 char *tmp; 2281 char *tmp1; 2278 char *tmp1 = NULL; 2282 2279 char *biggie_fname; 2283 2280 char *biggie_cksum; … … 2290 2287 FILE *fbw = NULL; 2291 2288 2292 malloc_string(tmp);2293 2289 malloc_string(biggie_fname); 2294 2290 malloc_string(biggie_cksum); … … 2296 2292 assert(bkpinfo != NULL); 2297 2293 2298 read_cfg_var(g_mondo_cfg_file, "total-slices", tmp); 2299 2300 total_slices = atol(tmp); 2294 tmp1 = read_cfg_var(g_mondo_cfg_file, "total-slices"); 2295 total_slices = atol(tmp1); 2296 mr_free(tmp1); 2297 2301 2298 if (g_getfattr) { 2302 2299 mr_asprintf(xattr_fname, XATTR_BIGGLST_FNAME_RAW_SZ, bkpinfo->tmpdir); … … 2408 2405 paranoid_free(biggie_fname); 2409 2406 paranoid_free(biggie_cksum); 2410 paranoid_free(tmp);2411 2407 return (retval); 2412 2408 } … … 2453 2449 assert(bkpinfo != NULL); 2454 2450 mvaddstr_and_log_it(g_currentY, 0, "Restoring from archives"); 2455 read_cfg_var(g_mondo_cfg_file, "last-filelist-number", tmp);2451 tmp = read_cfg_var(g_mondo_cfg_file, "last-filelist-number"); 2456 2452 max_val = atol(tmp) + 1; 2453 mr_free(tmp); 2457 2454 2458 2455 chdir(bkpinfo->restore_path); /* I don't know why this is needed _here_ but it seems to be. -HR, 02/04/2002 */ … … 2595 2592 openin_cdstream(); 2596 2593 } else { 2597 assert_string_is_neither_NULL_nor_zerolength(bkpinfo->media_device);2598 2594 openin_tape(); 2599 2595 } … … 2933 2929 // BCO:To be reviewed 2934 2930 if ((bkpinfo->restore_mode == compare) || (bkpinfo->restore_mode == nuke)) { 2935 if (bkpinfo->backup_media_type == nfs 2936 && !is_this_device_mounted(bkpinfo->nfs_mount)) { 2931 if (bkpinfo->backup_media_type == nfs && bkpinfo->nfs_mount && !is_this_device_mounted(bkpinfo->nfs_mount)) { 2937 2932 log_msg(1, "Mounting nfs dir"); 2938 2933 mr_free(bkpinfo->isodir); -
branches/2.2.10/mondo/src/mondorestore/mr-externs.h
r2321 r2325 62 62 extern void setup_newt_stuff(void); 63 63 extern void init_bkpinfo(); 64 extern int read_cfg_var(char *,char *, char *);64 extern char *read_cfg_var(char *, char *); 65 65 extern int read_file_from_stream_to_file(char *, 66 66 long long);
Note:
See TracChangeset
for help on using the changeset viewer.