Changeset 3147 in MondoRescue for branches/3.1/mondo
- Timestamp:
- Jun 19, 2013, 8:34:46 AM (11 years ago)
- Location:
- branches/3.1/mondo
- Files:
-
- 1 deleted
- 39 edited
- 8 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/3.1/mondo/COPYING
r30 r3147 3 3 4 4 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 5 675 Mass Ave, Cambridge, MA 02139,USA5 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 6 Everyone is permitted to copy and distribute verbatim copies 7 7 of this license document, but changing it is not allowed. … … 283 283 284 284 END OF TERMS AND CONDITIONS 285 286 287 Appendix: How to Apply These Terms to Your New Programs 288 289 If you develop a new program, and you want it to be of the greatest 290 possible use to the public, the best way to achieve this is to make it 291 free software which everyone can redistribute and change under these terms. 292 293 To do so, attach the following notices to the program. It is safest 294 to attach them to the start of each source file to most effectively 295 convey the exclusion of warranty; and each file should have at least 296 the "copyright" line and a pointer to where the full notice is found. 297 298 <one line to give the program's name and a brief idea of what it does.> 299 Copyright (C) 19yy <name of author> 300 301 This program is free software; you can redistribute it and/or modify 302 it under the terms of the GNU General Public License as published by 303 the Free Software Foundation; either version 2 of the License, or 304 (at your option) any later version. 305 306 This program is distributed in the hope that it will be useful, 307 but WITHOUT ANY WARRANTY; without even the implied warranty of 308 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 309 GNU General Public License for more details. 310 311 You should have received a copy of the GNU General Public License 312 along with this program; if not, write to the Free Software 313 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 314 315 Also add information on how to contact you by electronic and paper mail. 316 317 If the program is interactive, make it output a short notice like this 318 when it starts in an interactive mode: 319 320 Gnomovision version 69, Copyright (C) 19yy name of author 321 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 322 This is free software, and you are welcome to redistribute it 323 under certain conditions; type `show c' for details. 324 325 The hypothetical commands `show w' and `show c' should show the appropriate 326 parts of the General Public License. Of course, the commands you use may 327 be called something other than `show w' and `show c'; they could even be 328 mouse-clicks or menu items--whatever suits your program. 329 330 You should also get your employer (if you work as a programmer) or your 331 school, if any, to sign a "copyright disclaimer" for the program, if 332 necessary. Here is a sample; alter the names: 333 334 Yoyodyne, Inc., hereby disclaims all copyright interest in the program 335 `Gnomovision' (which makes passes at compilers) written by James Hacker. 336 337 <signature of Ty Coon>, 1 April 1989 338 Ty Coon, President of Vice 339 340 This General Public License does not permit incorporating your program into 341 proprietary programs. If your program is a subroutine library, you may 342 consider it more useful to permit linking proprietary applications with the 343 library. If this is what you want to do, use the GNU Library General 344 Public License instead of this License. -
branches/3.1/mondo/bootstrap
r2239 r3147 26 26 fi 27 27 28 autoscan 28 29 make maintainer-clean >/dev/null 2>&1 29 30 libtoolize -f -c --automake … … 31 32 autoheader 32 33 automake --add-missing --copy 33 autoconf 34 autoconf -W all 34 35 rm -rf autom4te.cache -
branches/3.1/mondo/configure.in
r2603 r3147 10 10 define(MONDO_REV,m4_normalize(rPBREV))) 11 11 define(MONDO_TAG,MONDO_VER-MONDO_REV) 12 AC_INIT([Mondo Rescue], MONDO_TAG,[mondo-devel@lists.sourceforge.net])12 AC_INIT([Mondo Rescue],[MONDO_TAG],[mondo-devel@lists.sourceforge.net]) 13 13 AC_CONFIG_SRCDIR([src/mondoarchive/mondoarchive.c]) 14 14 AC_CONFIG_MACRO_DIR([m4]) 15 A M_CONFIG_HEADER(config.h)15 AC_CONFIG_HEADERS([config.h]) 16 16 17 AC_PREREQ([2.68]) 17 18 AC_CANONICAL_HOST 18 19 AC_CANONICAL_TARGET … … 20 21 21 22 AM_INIT_AUTOMAKE([mondo], MONDO_VER) 22 AM_MAINTAINER_MODE23 24 23 LT_INIT 25 24 … … 27 26 AC_PROG_AWK 28 27 AC_PROG_CC 29 #AC_PROG_RANLIB30 28 AC_PROG_LIBTOOL 31 29 AC_PROG_CPP … … 120 118 AC_HEADER_STDC 121 119 AC_HEADER_SYS_WAIT 122 AC_CHECK_HEADERS([fcntl.h stddef.h stdlib.h string.h sys/ioctl.h sys/param.h sys/time.h unistd.h]) 120 AC_HEADER_STDBOOL 121 AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h locale.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h utime.h]) 123 122 124 123 # Checks for typedefs, structures, and compiler characteristics. 125 124 AC_C_CONST 125 AC_C_INLINE 126 AC_PROG_GCC_TRADITIONAL 127 AC_TYPE_MODE_T 126 128 AC_TYPE_OFF_T 127 129 AC_TYPE_PID_T 130 AC_TYPE_SIZE_T 131 AC_TYPE_SSIZE_T 132 AC_STRUCT_ST_BLOCKS 128 133 129 134 # Checks for library functions. 130 135 AC_FUNC_CHOWN 131 136 AC_FUNC_FORK 132 AC_ PROG_GCC_TRADITIONAL137 AC_FUNC_FSEEKO 133 138 AC_FUNC_LSTAT 134 139 AC_FUNC_MALLOC 135 AC_TYPE_SIGNAL136 140 AC_FUNC_VPRINTF 137 AC_CHECK_FUNCS([bzero getcwd memmove memset mkdir mkfifo getopt setenv strcasecmp strchr strerror strrchr strstr mkdtemp])141 AC_CHECK_FUNCS([bzero getcwd gethostbyname inet_ntoa memmove memset mkdir mkdtemp mkfifo getopt setenv strcasecmp strcspn strchr strdup strerror strncasecmp strrchr strspn strstr uname utime]) 138 142 139 AC_OUTPUT([Makefile src/Makefile src/lib/Makefile src/common/Makefile src/mondoarchive/Makefile src/mondorestore/Makefile src/restore-scripts/Makefile src/restore-scripts/mondo/Makefile src/post-nuke.sample/Makefile src/post-nuke.sample/usr/Makefile src/post-nuke.sample/usr/bin/Makefile test/Makefile deplist.d/Makefile]) 143 AC_CONFIG_FILES([Makefile src/Makefile src/lib/Makefile src/common/Makefile src/mondoarchive/Makefile src/mondorestore/Makefile src/restore-scripts/Makefile src/restore-scripts/mondo/Makefile src/post-nuke.sample/Makefile src/post-nuke.sample/usr/Makefile src/post-nuke.sample/usr/bin/Makefile test/Makefile deplist.d/Makefile]) 144 AC_OUTPUT -
branches/3.1/mondo/src/common/libmondo-archive.c
r2937 r3147 213 213 paranoid_free(tmp); 214 214 215 mr_asprintf(command, "star H=exustar list=%s -c " STAR_ACL_SZ " file=%s", filelist, fname);215 mr_asprintf(command, "star H=exustar list=%s -c -sparse " STAR_ACL_SZ " file=%s", filelist, fname); 216 216 if (bkpinfo->use_lzo) { 217 217 mr_free(command); … … 511 511 char *use_star_sz = NULL; 512 512 char *bootldr_str = NULL; 513 char *bootldr_ver = NULL; 513 514 char *tape_device = NULL; 514 515 char *broken_bios_sz = NULL; … … 682 683 run_program_and_log_output("ln -sf /boot/grub/grub.conf /boot/grub/menu.lst", 5); 683 684 } 684 if ((!does_file_exist("/boot/grub/menu.lst")) && (!does_file_exist("/boot/grub/grub.cfg"))) { 685 fatal_error("The de facto standard location for your boot loader's config file is /boot/grub/menu.lst or /boot/grub/grub.cfg but I cannot find it there. What is wrong with your Linux distribution?"); 686 } 685 if ((!does_file_exist("/boot/grub/menu.lst")) && (!does_file_exist("/boot/grub/grub.cfg")) && (!does_file_exist("/boot/grub2/grub.cfg"))) { 686 fatal_error("The de facto standard location for your boot loader's config file is /boot/grub/menu.lst, /boot/grub/grub.cfg, or /boot/grub2/grub.cfg but I cannot find it there. What is wrong with your Linux distribution?"); 687 } 688 mr_asprintf(&bootldr_ver, "%s", call_program_and_get_last_line_of_output("grub --version")); 687 689 } else if (bkpinfo->boot_loader == 'E') { 688 690 mr_asprintf(bootldr_str, "ELILO"); … … 719 721 } 720 722 log_to_screen("Your boot loader is %s and it boots from %s", bootldr_str, bkpinfo->boot_device); 723 if (bootldr_ver != NULL) { 724 mr_asprintf(&tmp, "Boot loader version string: %s", bootldr_ver); 725 log_to_screen(tmp); 726 mr_free(tmp); 727 } 721 728 722 729 mr_asprintf(tmp, "%s/BOOTLOADER.DEVICE", bkpinfo->tmpdir); … … 927 934 char *curr_acl_list_fname = NULL; 928 935 929 struct s_bkpinfo *bkpinfo_bis;930 936 char *tmp = NULL; 931 937 int res = 0, retval = 0; … … 940 946 p_next_set_to_archive = (int *) (inbuf + 8); 941 947 p_list_of_fileset_flags = (char *) (inbuf + 12); 942 bkpinfo_bis = (struct s_bkpinfo *) (inbuf + BKPINFO_LOC_OFFSET);943 948 944 949 mr_asprintf(archiving_filelist_fname, FILELIST_FNAME_RAW_SZ, bkpinfo->tmpdir, 0L); … … 1474 1479 1475 1480 log_msg(2, "make_usb_fs --- scratchdir=%s", bkpinfo->scratchdir); 1476 (void)getcwd(old_pwd, MAX_STR_LEN - 1);1481 tmp1 = getcwd(old_pwd, MAX_STR_LEN - 1); 1477 1482 mr_asprintf(tmp, "chmod 700 %s", bkpinfo->scratchdir); 1478 1483 run_program_and_log_output(tmp, FALSE); 1479 1484 mr_free(tmp); 1480 (void)chdir(bkpinfo->scratchdir); 1485 if (chdir(bkpinfo->scratchdir)) { 1486 // FIXME 1487 } 1481 1488 1482 1489 mds = media_descriptor_string(bkpinfo->backup_media_type); … … 1542 1549 } 1543 1550 1544 (void)chdir(old_pwd); 1551 if (chdir(old_pwd)) { 1552 // FIXME 1553 } 1545 1554 if (retval) { 1546 1555 log_msg(1, "WARNING - make_usb_fs returned an error"); … … 1599 1608 1600 1609 log_msg(2, "make_iso_fs --- scratchdir=%s --- destfile=%s", bkpinfo->scratchdir, destfile); 1601 (void)getcwd(old_pwd, MAX_STR_LEN - 1);1610 tmp2 = getcwd(old_pwd, MAX_STR_LEN - 1); 1602 1611 mr_asprintf(tmp, "chmod 700 %s", bkpinfo->scratchdir); 1603 1612 run_program_and_log_output(tmp, FALSE); 1604 1613 mr_free(tmp); 1605 1614 1606 chdir(bkpinfo->scratchdir); 1615 if (chdir(bkpinfo->scratchdir)) { 1616 // FIXME 1617 } 1607 1618 1608 1619 if (bkpinfo->call_before_iso) { … … 1813 1824 } 1814 1825 1815 chdir(old_pwd); 1826 if (chdir(old_pwd)) { 1827 // FIXME 1828 } 1816 1829 if (retval) { 1817 1830 log_msg(1, "WARNING - make_iso_fs returned an error"); … … 1866 1879 /*@ pointers ******************************************* */ 1867 1880 FILE *fin = NULL; 1881 char *q; 1868 1882 1869 1883 /*@ buffers ******************************************** */ … … 2411 2425 /*@ long long ****************************************************** */ 2412 2426 off_t length_of_incoming_file = (off_t)0; 2413 t_archtype type;2414 2427 va_list ap; 2415 2428 … … 2433 2446 write_header_block_to_stream(length_of_incoming_file, curr_file, 2434 2447 start_chr); 2435 if (strstr(curr_file, ".afio.") || strstr(curr_file, ".star.")) {2436 type = fileset;2437 } else if (strstr(curr_file, "slice")) {2438 type = biggieslice;2439 } else {2440 type = other;2441 }2442 2448 res = write_file_to_stream_from_file(curr_file); 2443 2449 retval += res; … … 2798 2804 mr_free(tmp); 2799 2805 2800 (void) fwrite((void *) &biggiestruct, 1, sizeof(biggiestruct), fout); 2801 fclose(fout); 2802 2806 res = fwrite((void *) &biggiestruct, 1, sizeof(biggiestruct), fout); 2807 if (fout != NULL) { 2808 paranoid_fclose(fout); 2809 } 2803 2810 log_msg(1, "Opening in %s; slicing it and writing to CD/tape", file_to_openin); 2804 2811 if (!(fin = fopen(file_to_openin, "r"))) { … … 2839 2846 if (blksize > 0) { 2840 2847 totalread = totalread + blksize; 2841 (void)fwrite(tempblock, 1, blksize, fout);2848 res = fwrite(tempblock, 1, blksize, fout); 2842 2849 } else { 2843 2850 break; … … 3131 3138 log_to_screen("Please reboot from the 1st %s in Compare Mode, as a precaution.", mds); 3132 3139 mr_free(mds); 3133 chdir("/"); 3140 if (chdir("/")) { 3141 // FIXME 3142 } 3134 3143 log_it("Before calling verification of image()"); 3135 3144 if (bkpinfo->backup_media_type == usb) { … … 3209 3218 assert(bkpinfo != NULL); 3210 3219 if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { 3211 chdir("/"); 3220 if (chdir("/")) { 3221 // FIXME 3222 } 3212 3223 mvaddstr_and_log_it(g_currentY, 0, 3213 3224 "Verifying archives against live filesystem"); … … 3232 3243 bkpinfo->media_device = find_cdrom_device(FALSE); // replace 0,0,0 with /dev/cdrom 3233 3244 } 3234 chdir("/"); 3245 if (chdir("/")) { 3246 // FIXME 3247 } 3235 3248 for (cdno = 1; cdno < 99 && bkpinfo->verify_data; cdno++) { 3236 3249 if (cdno != g_current_media_number) { … … 3253 3266 } 3254 3267 mr_asprintf(tmp, "grep 'afio: ' %s | sed 's/afio: //' | grep -vE '^/dev/.*$' >> %s/changed.files", MONDO_LOGFILE, MONDO_CACHE); 3255 (void)system(tmp);3268 res = system(tmp); 3256 3269 mr_free(tmp); 3257 3270 3258 3271 mr_asprintf(tmp, "grep 'star: ' %s | sed 's/star: //' | grep -vE '^/dev/.*$' >> %s/changed.files", MONDO_LOGFILE, MONDO_CACHE); 3259 (void)system(tmp);3272 res = system(tmp); 3260 3273 mr_free(tmp); 3261 3274 run_program_and_log_output("umount " MNT_CDROM, FALSE); -
branches/3.1/mondo/src/common/libmondo-cli.c
r2937 r3147 20 20 extern int g_loglevel; 21 21 extern bool g_text_mode; 22 extern bool g_fail_immediately; 22 23 extern char g_startdir[MAX_STR_LEN]; ///< ????? @bug ????? 23 24 extern char *MONDO_OPTIONS; … … 53 54 54 55 extern void free_MR_global_filenames(void); 56 57 long g_max_biggie_size = BIGGIEMAXSIZE; 55 58 56 59 /** … … 101 104 mr_free(tmp); 102 105 106 /* Before erasing dirs go into a safe place */ 107 if (chdir("/tmp")) { 108 // FIXME 109 } 110 mr_asprintf(tmp, "rm -Rf %s/tmp.mondo.*", bkpinfo->tmpdir); 111 paranoid_system(tmp); 112 mr_free(tmp); 113 103 114 mr_asprintf(tmp, "mkdir -p %s", bkpinfo->scratchdir); 104 115 paranoid_system(tmp); … … 162 173 int i = 0; 163 174 int retval = 0; 164 int percent = 0;165 int lastpos = 0;166 175 167 176 /*@ buffers ** */ … … 355 364 mr_free(p); 356 365 log_to_screen("You didn't specify a tape streamer device. I'm assuming %s", flag_val['d']); 357 percent = 0;358 366 } 359 367 … … 498 506 if (strstr(bkpinfo->netfs_proto, "sshfs")) { 499 507 mr_asprintf(tmp1, "sshfs %s@%s", bkpinfo->netfs_user, bkpinfo->netfs_mount); 508 } else if (strstr(bkpinfo->netfs_proto, "smbfs")) { 509 sprintf(tmp, "mount -t cifs %s -o user=%s", bkpinfo->netfs_mount, bkpinfo->netfs_user); 500 510 } else if (strstr(bkpinfo->netfs_proto, "nfs")) { 501 511 mr_asprintf(tmp1, "mount %s@%s", bkpinfo->netfs_user, bkpinfo->netfs_mount); … … 507 517 if (strstr(bkpinfo->netfs_proto, "sshfs")) { 508 518 mr_asprintf(tmp1, "sshfs %s", bkpinfo->netfs_mount); 519 } else if (strstr(bkpinfo->netfs_proto, "smbfs")) { 520 sprintf(tmp, "mount -t cifs %s", bkpinfo->netfs_mount); 509 521 } else if (strstr(bkpinfo->netfs_proto, "nfs")) { 510 522 mr_asprintf(tmp1, "mount %s", bkpinfo->netfs_mount); … … 629 641 } 630 642 mr_free(tmp1); 631 lastpos = 0;632 643 633 644 mr_make_devlist_from_pathlist(flag_val['E'], 'E'); … … 637 648 if (flag_set['e']) { 638 649 bkpinfo->please_dont_eject = TRUE; 650 } 651 652 if (flag_set['M']) { 653 g_max_biggie_size = atol(flag_val['M']); 654 log_msg(1, "Max size for biggie file is now %ld KB", g_max_biggie_size); 639 655 } 640 656 … … 778 794 /* Before changing remove old ones if any */ 779 795 if (bkpinfo->scratchdir) { 780 chdir("/tmp"); 796 if (chdir("/tmp")) { 797 // FIXME 798 } 781 799 mr_asprintf(tmp1, "rm -Rf %s", bkpinfo->scratchdir); 782 800 paranoid_system(tmp1); … … 859 877 log_to_screen("Please install LZOP. You can't use '-L' until you do.\n"); 860 878 } 879 } 880 881 if (flag_set['F']) { 882 log_msg(3, "-F means we will fail immediately at the first interaction request"); 883 g_fail_immediately = TRUE; 861 884 } 862 885 -
branches/3.1/mondo/src/common/libmondo-devices.c
r2937 r3147 331 331 char *searchstr = NULL; 332 332 char *tmp = NULL; 333 char *p; 333 334 334 335 /*@ ints ******************************************************* */ … … 816 817 } 817 818 818 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);819 mr_asprintf(command, "%s -scanbus | grep \"[0-9],[0-9],[0-9]\" | grep -E \"[D|C][V|D]\" | grep -n \"\" | grep \"%s\" | cut -d':' -f2", cdr_exe, g_cdrw_drive_is_here); 819 820 mr_free(cdr_exe); 820 821 … … 848 849 } 849 850 850 tmp = call_program_and_get_last_line_of_output("dvdrecord -scanbus 2> /dev/null | grep \") '\" | grep -n \"\"| grep -E '[D|C][V|D]' | cut -d':' -f1",TRUE);851 tmp = call_program_and_get_last_line_of_output("dvdrecord -scanbus 2> /dev/null | grep -E '\)\ \'' | grep -n '' | grep -E '[D|C][V|D]' | cut -d':' -f1",TRUE); 851 852 log_msg(5, "tmp = '%s'", tmp); 852 853 if (!tmp[0]) 853 854 mr_free(tmp); 854 tmp = call_program_and_get_last_line_of_output("cdrecord -scanbus 2> /dev/null | grep \ ") '\" | grep -n \"\"| grep -E '[D|C][V|D]' | cut -d':' -f1",TRUE);855 tmp = call_program_and_get_last_line_of_output("cdrecord -scanbus 2> /dev/null | grep \)\ \' | grep -n '' | grep -E '[D|C][V|D]' | cut -d':' -f1",TRUE); 855 856 if (tmp[0]) { 856 857 devno = atoi(tmp) - 1; … … 886 887 #if linux 887 888 unsigned long long s = 0; 888 int fileid, cylinders = 0 , cylindersleft = 0;889 int fileid, cylinders = 0; 889 890 int cylindersize = 0; 890 891 int gotgeo = 0; … … 935 936 if (ioctl(fileid, HDIO_GETGEO, &hdgeo) != -1) { 936 937 if (hdgeo.cylinders && hdgeo.heads && hdgeo.sectors) { 937 cylindersleft = cylinders = hdgeo.cylinders;938 938 cylindersize = hdgeo.heads * hdgeo.sectors / 2; 939 939 outvalA = cylindersize * cylinders / 1024; … … 983 983 char *command = NULL; 984 984 char *format_sz = NULL; 985 char *p; 985 986 986 987 FILE *pin; … … 1822 1823 1823 1824 /* Check for LVM */ 1824 mr_asprintf(command, "pvdisplay -c %s | grep '%s:' 2> /dev/null", partitions[i], partitions[i]);1825 mr_asprintf(command, "pvdisplay -c %s 2> /dev/null", partitions[i]); 1825 1826 log_msg(5, " Running: %s", command); 1826 1827 tmp = call_program_and_get_last_line_of_output(command,TRUE); … … 2638 2639 char *p = NULL; 2639 2640 char *q = NULL; 2641 char *tmpro = NULL; 2642 char *tmp1 = NULL; 2640 2643 char *mds = NULL; 2641 2644 char *sz_size = NULL; … … 2873 2876 bkpinfo->media_size[i] = bkpinfo->media_size[0]; 2874 2877 } 2878 bkpinfo->use_obdr = ask_me_yes_or_no 2879 ("Do you want to activate OBDR support for your tapes ?"); 2880 if (bkpinfo->use_obdr) { 2881 log_msg(4, "obdr mode = TRUE"); 2882 } else { 2883 log_msg(4, "obdr mode = FALSE"); 2884 } 2875 2885 if (archiving_to_media) { 2876 2886 if ((compression_type = which_compression_type()) == NULL) { … … 2968 2978 if (bkpinfo->disaster_recovery) { 2969 2979 mr_asprintf(command ,"umount %s/isodir 2> /dev/null", bkpinfo->tmpdir); 2970 (void)system(command);2980 paranoid_system(command); 2971 2981 mr_free(command); 2972 2982 2973 2983 } 2974 p = popup_and_get_string("Network protocol", "Which Network protocol should I use?", bkpinfo->netfs_proto); 2984 <<<<<<< .courant 2985 p = popup_and_get_string("Network protocol", "Which Network protocol should I use (nfs/sshfs/smbfs) ?", bkpinfo->netfs_proto); 2975 2986 if (p == NULL) { 2976 2987 log_to_screen("User has chosen not to backup the PC"); … … 3016 3027 3017 3028 if (bkpinfo->restore_data) { 3029 /* mount th FS read-only in restore mode to avoid any erase of whatever */ 3030 mr_asprintf(tmpro, "-o ro"); 3031 } else { 3032 mr_asprintf(tmpro, ""); 3033 } 3034 3035 /* Build the mount string */ 3036 if (strstr(bkpinfo->netfs_proto, "smbfs")) { 3037 mr_asprintf(tmp, "mount -t cifs %s %s %s",bkpinfo->netfs_mount, bkpinfo->isodir,tmpro); 3038 if (bkpinfo->netfs_user) { 3039 mr_strcat(tmp, " -o user=%s", bkpinfo->netfs_user); 3040 } 3041 else { 3018 3042 if (strstr(bkpinfo->netfs_proto, "sshfs")) { 3019 mr_asprintf(tmp, "sshfs -o ro");3043 mr_asprintf(tmp, "sshfs %s ",tmpro); 3020 3044 } else { 3021 mr_asprintf(tmp, "mount -t %s -o nolock ,ro", bkpinfo->netfs_proto);3045 mr_asprintf(tmp, "mount -t %s -o nolock %s ", bkpinfo->netfs_proto,tmpro); 3022 3046 } 3023 } else { 3024 if (strstr(bkpinfo->netfs_proto, "sshfs")) { 3025 mr_asprintf(tmp, "sshfs"); 3026 } else { 3027 mr_asprintf(tmp, "mount -t %s -o nolock", bkpinfo->netfs_proto); 3047 if (bkpinfo->netfs_user) { 3048 mr_strcat(tmp, "%s@", bkpinfo->netfs_user); 3028 3049 } 3029 } 3030 if (bkpinfo->netfs_user) { 3031 mr_strcat(tmp, "%s@", bkpinfo->netfs_user); 3032 } 3033 mr_strcat(tmp, "%s %s", bkpinfo->netfs_mount, bkpinfo->isodir); 3050 mr_strcat(tmp, "%s %s", bkpinfo->netfs_mount, bkpinfo->isodir); 3051 } 3034 3052 run_program_and_log_output(tmp, 3); 3035 3053 mr_free(tmp); … … 3037 3055 malloc_string(g_selfmounted_isodir); 3038 3056 strcpy(g_selfmounted_isodir, bkpinfo->isodir); 3057 } 3039 3058 } 3040 3059 if (!is_this_device_mounted(bkpinfo->netfs_mount)) { … … 3193 3212 } 3194 3213 3195 3196 3214 p = popup_and_get_string("Exclude paths", "Please enter paths which you do NOT want to backup. Separate them with '|'. NB: /tmp and /proc are always excluded. :-) Just hit 'Enter' if you want to do a full system backup.", bkpinfo->exclude_paths); 3197 3215 if (p == NULL) { -
branches/3.1/mondo/src/common/libmondo-filelist.c
r2937 r3147 30 30 31 31 extern char *MONDO_LOGFILE; 32 33 extern long g_max_biggie_size; 32 34 33 35 /* Reference to global bkpinfo */ … … 195 197 /*@ long ****************************************/ 196 198 long lino = 0; 197 long max_sane_size_for_a_file;199 // A big file has more than 64 MB of real content 198 200 long curr_set_size; 199 201 long noof_lines; … … 221 223 assert_string_is_neither_NULL_nor_zerolength(filelist); 222 224 assert(maxsetsizeK > 0); 223 224 max_sane_size_for_a_file = 64L * 1024L;225 // max_sane_size_for_a_file = maxsetsizeK*2;226 // if (max_sane_size_for_a_file > 32*1024)227 // { max_sane_size_for_a_file = 32*1024; }228 225 229 226 log_it("filelist=%s;", filelist); … … 269 266 siz = 0; 270 267 } else { 271 siz = (long) (buf.st_size >> 10); 272 } 273 if (siz > max_sane_size_for_a_file) { 274 log_msg(10, "Adding %s to big files\n", incoming); 268 // blocks are 512 bytes long - cf man 2 stat - Pass to the previous unit (MB => kB e.g.) 269 // use blocks instead of size to allow sparse file correct handling as much as possible 270 siz = (long) ((buf.st_blocks*512) >> 10); 271 } 272 if (siz > g_max_biggie_size) { 273 log_msg(10, "Adding %s to big files (size = %ld)\n", incoming, siz); 275 274 fprintf(fbig, "%s\n", incoming); 276 275 } else { 277 276 curr_set_size += siz; 278 log_msg(10, "Adding %s to filelist %d \n", incoming, curr_set_no);277 log_msg(10, "Adding %s to filelist %d (size = %ld)\n", incoming, curr_set_no, siz); 279 278 fprintf(fout, "%s\n", incoming); 280 279 if (curr_set_size > maxsetsizeK) { … … 400 399 char *tmp = NULL; 401 400 401 char *p; 402 402 403 pattr = popen(syscall, "r"); 403 404 if (!pattr) { … … 431 432 char *strtmp = NULL; 432 433 char *tmp = NULL; 434 char *p = NULL; 433 435 int i; 434 436 … … 517 519 int retval = 0; 518 520 int i; 519 char *p, *q ;521 char *p, *q, *r; 520 522 char *tmp = NULL; 521 523 FILE *pin, *pout, *faclin; … … 1323 1325 char *skip_these = NULL; 1324 1326 char *new_with_pipe; 1325 char *strtmp ;1326 char *token ;1327 char *strtmp = NULL; 1328 char *token = NULL; 1327 1329 char *find_excludes = NULL; 1328 1330 char *name_of_evalcall_form = NULL; … … 1374 1376 1375 1377 log_msg(5, "find command = %s", strtmp); 1376 (void)system(strtmp);1378 paranoid_system(strtmp); 1377 1379 mr_free(strtmp); 1378 1380 … … 1510 1512 char *sz_filelist; 1511 1513 char *exclude_paths = NULL; 1512 int i;1513 1514 FILE *fout; 1514 1515 char *command = NULL; … … 1597 1598 fatal_error("Cannot openout to sz_filelist"); 1598 1599 } 1599 i = 0;1600 1600 if ((!include_paths) || (strlen(include_paths) == 0)) { 1601 1601 log_msg(1, "Including only '/' in %s", sz_filelist); … … 1697 1697 { 1698 1698 /*@ int ******************************************************** */ 1699 int noof_chars;1700 1699 static int depth = 0; 1701 1700 static char original_string[MAX_STR_LEN]; … … 1715 1714 assert(startnode != NULL); 1716 1715 assert(string_to_find != NULL); 1717 1718 noof_chars = strlen(string_to_find) + 1; /* we include the '\0' */1719 1716 1720 1717 log_msg(7, "starting --- str=%s", string_to_find); -
branches/3.1/mondo/src/common/libmondo-files.c
r2937 r3147 51 51 /*@ pointers **************************************************** */ 52 52 char *p = NULL; 53 char *q; 53 54 FILE *fin; 54 55 … … 126 127 char *command = NULL; 127 128 char *incoming = NULL; 129 char *q; 128 130 129 131 /*@ long ******************************************************** */ … … 204 206 char *tmp = NULL; 205 207 char *incoming = NULL; 208 char *q; 206 209 207 210 /*@ int ********************************************************* */ … … 471 474 char *output = NULL; 472 475 char *command = NULL; 476 char *p = NULL; 473 477 474 478 /*@ pointers **************************************************** */ … … 540 544 char *curr_cksum = NULL; 541 545 char *tmp = NULL; 546 char *q; 542 547 543 548 /*@ long [long] ************************************************* */ … … 679 684 /*@ buffers **************************************************** */ 680 685 char *incoming = NULL; 686 char *p = NULL; 681 687 682 688 /*@ end vars *************************************************** */ … … 743 749 char *tmp = NULL; 744 750 char *command = NULL; 751 char *comment; 745 752 746 753 /*@ long ******************************************************** */ … … 972 979 return (1); 973 980 } 974 fscanf(fin, "%s\n", contents);981 res = fscanf(fin, "%s\n", contents); 975 982 i = strlen(contents); 976 983 if (i > 0 && contents[i - 1] < 32) { … … 978 985 } 979 986 paranoid_fclose(fin); 987 res = 0; 980 988 return (res); 981 989 } … … 1020 1028 if (res) { 1021 1029 fatal_error("Failed to copy Mondo's stuff to scratchdir"); 1030 } 1031 1032 mr_asprintf(command, "cp -f %s/LAST-FILELIST-NUMBER %s", bkpinfo->tmpdir, bkpinfo->scratchdir); 1033 1034 if (run_program_and_log_output(command, FALSE)) { 1035 fatal_error("Failed to copy LAST-FILELIST-NUMBER to scratchdir"); 1022 1036 } 1023 1037 -
branches/3.1/mondo/src/common/libmondo-fork.c
r2937 r3147 42 42 char *newcall = NULL; 43 43 char *tmp = NULL; 44 char *p; 44 45 45 46 /*@ pointers **************************************************** */ … … 258 259 FILE *fin; 259 260 char *p; 261 char *q; 260 262 261 263 /*@ end vars *************************************************** */ … … 300 302 fin = fopen(tmp1, "r"); 301 303 if (fin) { 302 for ( fgets(incoming, MAX_STR_LEN, fin); !feof(fin);fgets(incoming, MAX_STR_LEN, fin)) {304 for (q = fgets(incoming, MAX_STR_LEN, fin); !feof(fin) && (q != NULL); q = fgets(incoming, MAX_STR_LEN, fin)) { 303 305 p = incoming; 304 306 while (p && *p) { … … 545 547 log_msg(1, "bytes_read_in = %ld", bytes_read_in); 546 548 547 fwrite(tmp1, 1, bytes_read_in, ftmp); 548 fread(tmp1, 1, tmpcap, fin); 549 log_msg(0, "tmp1 = '%s'", tmp1); 550 fwrite(tmp1, 1, tmpcap, ftmp); 549 if (fwrite(tmp, 1, bytes_read_in, ftmp)) { 550 fatal_error("Can't fwrite here"); 551 } 552 553 sprintf(tmp, "I am here - %lld", (long long)ftello(fin)); 554 if (fread(tmp, 1, tmpcap, fin)) { 555 fatal_error("Can't fread here"); 556 } 557 log_msg(0, "tmp = '%s'", tmp); 558 if (fwrite(tmp, 1, tmpcap, ftmp)) { 559 fatal_error("Can't fwrite there"); 560 } 551 561 fclose(ftmp); 552 562 mr_free(tmp1); -
branches/3.1/mondo/src/common/libmondo-mountlist.c
r2937 r3147 50 50 int pos = 0, npos = 0; 51 51 int res = 0; 52 int mountpoint_copies = 0;53 52 int device_copies = 0; 54 53 int i = 0; … … 112 111 } 113 112 /* does partition /dev/adXsYZ exist more than once in the mountlist? */ 114 for (i = 0, mountpoint_copies = 0,device_copies = 0;113 for (i = 0, device_copies = 0; 115 114 i < mountlist->entries; i++) { 116 115 if (!strcmp(device, mountlist->el[i].device)) { … … 214 213 } 215 214 /* does partition /dev/adXsY exist more than once in the mountlist? */ 216 for (i = 0, mountpoint_copies = 0,device_copies = 0;215 for (i = 0, device_copies = 0; 217 216 i < mountlist->entries; i++) { 218 217 if (!strcmp(device, mountlist->el[i].device)) { … … 277 276 } 278 277 /* does partition /dev/adXsYZ exist more than once in the mountlist? */ 279 for (i = 0, mountpoint_copies = 0,device_copies = 0;278 for (i = 0, device_copies = 0; 280 279 i < mountlist->entries; i++) { 281 280 if (!strcmp(device, mountlist->el[i].device)) { … … 384 383 int pos = 0; 385 384 int res = 0; 386 int mountpoint_copies = 0;387 385 int device_copies = 0; 388 386 int i = 0; … … 461 459 462 460 /* does partition /dev/hdNX exist more than once in the mountlist? */ 463 for (i = 0, mountpoint_copies = 0,device_copies = 0;461 for (i = 0, device_copies = 0; 464 462 i < mountlist->entries; i++) { 465 463 if (!strcmp(device, mountlist->el[i].device)) { … … 807 805 char *tmp = NULL; 808 806 char *p = NULL; 807 char *q = NULL; 809 808 810 809 int items = 0; … … 926 925 } 927 926 paranoid_fclose(fout); 927 if (!(fout = fopen(MONDO_MNTLISTCHG, "w"))) { 928 log_OS_error("WMTD - Cannot openout "MONDO_MNTLISTCHG); 929 return (1); 930 } 931 fprintf(fout, "the mountlist was changed by mondorestore\n"); 932 paranoid_fclose(fout); 928 933 return (0); 929 934 } -
branches/3.1/mondo/src/common/libmondo-raid-EXT.h
r558 r3147 53 53 #endif 54 54 55 extern int parse_mdstat( struct raidlist_itself *raidlist, char *device_prefix);56 extern int create_raidtab_from_mdstat(char * raidtab_fname);55 extern int parse_mdstat(char *mdstat_fname, struct raidlist_itself *raidlist, char *device_prefix); 56 extern int create_raidtab_from_mdstat(char *mdstat_fname, char *raidtab_fname); -
branches/3.1/mondo/src/common/libmondo-raid.c
r2937 r3147 15 15 #include "libmondo-tools-EXT.h" 16 16 #include "libmondo-string-EXT.h" 17 #include "libmondo-fork-EXT.h" 17 18 #include "lib-common-externs.h" 18 19 #include "libmondo-raid.h" … … 429 430 char *incoming = NULL; 430 431 char *p; 432 char *q; 431 433 432 434 assert(fin != NULL); … … 604 606 return (1); 605 607 } 608 malloc_string(label); 609 malloc_string(value); 606 610 items = 0; 607 611 log_it("Loading raidtab..."); … … 615 619 strcpy(raidlist->el[items].additional_vars.el[v].label, label); 616 620 strcpy(raidlist->el[items].additional_vars.el[v].value, value); 621 log_msg(2,"Found raidtab entry Label: %s Value: %s",raidlist->el[items].additional_vars.el[v].label,raidlist->el[items].additional_vars.el[v].value); 617 622 v++; 618 623 mr_free(label); … … 690 695 raidrec->raid_level = atoi(value); 691 696 } 697 log_msg(4,"Found raid level %d",raidrec->raid_level); 692 698 } else if (!strcmp(label, "nr-raid-disks")) { /* ignore it */ 693 699 } else if (!strcmp(label, "nr-spare-disks")) { /* ignore it */ … … 710 716 log_msg(1, "Unknown RAID parity algorithm '%s'\n.", value); 711 717 } 718 log_msg(4,"Found raid parity %d",raidrec->parity); 712 719 } else if (!strcmp(label, "device")) { 713 720 get_next_raidtab_line(fin, &labelB, &valueB); … … 735 742 strcpy(raidrec->additional_vars.el[v].label, label); 736 743 strcpy(raidrec->additional_vars.el[v].value, value); 737 raidrec->additional_vars.entries = ++v; 744 log_msg(4,"Found additional raid pair #%d: %s / %s",v,raidrec->additional_vars.el[v].label,raidrec->additional_vars.el[v].value); 745 v++; 746 raidrec->additional_vars.entries = v; 738 747 } 739 748 } … … 950 959 951 960 952 int parse_mdstat(struct raidlist_itself *raidlist, char *device_prefix) { 953 954 const char delims[] = " "; 955 956 FILE *fin; 957 int res = 0, row, i, index_min; 958 int lastpos = 0; 959 size_t len = 0; 960 char *token; 961 char *string = NULL; 962 char *pos; 963 char type; 964 char *strtmp; 961 int parse_mdstat(char *mdstat_fname, struct raidlist_itself *raidlist, char *device_prefix) { 962 963 const char delims[] = " "; 964 965 FILE *fin = NULL; 966 int res = 0, row, i, index_min; 967 int v = 0; 968 int lastpos = 0; 969 size_t len = 0; 970 char *token = NULL; 971 char *string = NULL; 972 char *cmd = NULL; 973 char *pos = NULL; 974 char type; 975 char *strtmp = NULL; 976 char *strtmp2 = NULL; 965 977 966 978 // open file … … 1044 1056 raidlist->el[raidlist->entries].raid_level = 10; 1045 1057 } else { 1046 log_msg(1, "Unknown RAID level '%s'.\n", token); 1047 paranoid_free(string); 1048 paranoid_free(token); 1049 return 1; 1050 } 1051 mr_free(token); 1058 switch (row) { 1059 case 1: // device information 1060 // check whether last line of record and if so skip 1061 log_msg(8, "This is the device line\n"); 1062 pos = strcasestr(string, "unused devices: "); 1063 if (pos != NULL) { 1064 break; 1065 } 1066 // tokenise string 1067 token = mr_strtok(string, delims, &lastpos); 1068 if (token == NULL) { 1069 // should not happen ! 1070 break; 1071 } 1072 // get RAID device name 1073 mr_asprintf(&strtmp,"%s%s", device_prefix, token); 1074 strncpy(raidlist->el[raidlist->entries].raid_device, strtmp, 63); 1075 raidlist->el[raidlist->entries].raid_device[63] = '\0'; 1076 mr_free(strtmp); 1077 mr_free(token); 1078 // store the UUID value in the additional_vars structure 1079 v = raidlist->el[raidlist->entries].additional_vars.entries; 1080 strcpy(raidlist->el[raidlist->entries].additional_vars.el[v].label, "UUID"); 1081 mr_asprintf(&cmd,"mdadm --detail %s | grep UUID | cut -d: -f2- | sed 's/^ *//'", raidlist->el[raidlist->entries].raid_device); 1082 mr_asprintf(&strtmp, "%s", call_program_and_get_last_line_of_output(cmd)); 1083 strcpy(raidlist->el[raidlist->entries].additional_vars.el[v].value, strtmp); 1084 mr_free(strtmp); 1085 v++; 1086 // store the Version value in the additional_vars structure 1087 strcpy(raidlist->el[raidlist->entries].additional_vars.el[v].label, "Version"); 1088 mr_asprintf(&cmd,"mdadm --detail %s | grep Version | cut -d: -f2- | sed 's/^ *//'", raidlist->el[raidlist->entries].raid_device); 1089 mr_asprintf(&strtmp, "%s", call_program_and_get_last_line_of_output(cmd)); 1090 strcpy(raidlist->el[raidlist->entries].additional_vars.el[v].value, strtmp); 1091 mr_free(strtmp); 1092 v++; 1093 raidlist->el[raidlist->entries].additional_vars.entries = v; 1094 // skip ':' and status 1095 token = mr_strtok (string, delims, &lastpos); 1096 if (token == NULL) { 1097 // should not happen ! 1098 break; 1099 } 1100 mr_free(token); 1101 token = mr_strtok (string, delims, &lastpos); 1102 if (token == NULL) { 1103 // should not happen ! 1104 break; 1105 } 1106 if (!strcmp(token, "inactive")) { 1107 log_msg(1, "RAID device '%s' inactive.\n", 1108 raidlist->el[raidlist->entries].raid_device); 1109 mr_free(string); 1110 mr_free(token); 1111 return 1; 1112 } 1113 mr_free(token); 1052 1114 1053 1115 // get RAID devices (type, index, device) … … 1097 1159 } 1098 1160 1161 // get RAID devices (type, index, device) 1162 // Note: parity disk for RAID4 is last normal disk, there is no '(P)' 1163 raidlist->el[raidlist->entries].data_disks.entries = 0; 1164 raidlist->el[raidlist->entries].spare_disks.entries = 0; 1165 raidlist->el[raidlist->entries].failed_disks.entries = 0; 1166 while((token = mr_strtok (string, delims, &lastpos))) { 1167 if ((pos = strstr(token, "("))) { 1168 type = *(pos+1); 1169 } else { 1170 type = ' '; 1171 } 1172 pos = strstr(token, "["); 1173 *pos = '\0'; 1174 switch(type) { 1175 case ' ': // normal data disks 1176 raidlist->el[raidlist->entries].data_disks.el[raidlist->el[raidlist->entries].data_disks.entries].index = atoi(pos + 1); 1177 mr_asprintf(&strtmp,"%s%s", device_prefix, token); 1178 strcpy(raidlist->el[raidlist->entries].data_disks.el[raidlist->el[raidlist->entries].data_disks.entries].device, strtmp); 1179 mr_free(strtmp); 1180 raidlist->el[raidlist->entries].data_disks.entries++; 1181 break; 1182 case 'S': // spare disks 1183 raidlist->el[raidlist->entries].spare_disks.el[raidlist->el[raidlist->entries].spare_disks.entries].index = atoi(pos + 1); 1184 mr_asprintf(&strtmp,"%s%s", device_prefix, token); 1185 strcpy(raidlist->el[raidlist->entries].spare_disks.el[raidlist->el[raidlist->entries].spare_disks.entries].device, strtmp); 1186 mr_free(strtmp); 1187 raidlist->el[raidlist->entries].spare_disks.entries++; 1188 break; 1189 case 'F': // failed disks 1190 raidlist->el[raidlist->entries].failed_disks.el[raidlist->el[raidlist->entries].failed_disks.entries].index = atoi(pos + 1); 1191 mr_asprintf(&strtmp,"%s%s", device_prefix, token); 1192 strcpy(raidlist->el[raidlist->entries].failed_disks.el[raidlist->el[raidlist->entries].failed_disks.entries].device, strtmp); 1193 mr_free(strtmp); 1194 raidlist->el[raidlist->entries].failed_disks.entries++; 1195 log_it("At least one failed disk found in RAID array.\n"); 1196 break; 1197 default: // error 1198 log_msg(1, "Unknown device type '%c'\n", type); 1199 mr_free(string); 1200 mr_free(token); 1201 return 1; 1202 break; 1203 } 1204 mr_free(token); 1205 } 1206 1099 1207 // adjust index for each device so that it starts with 0 for every type 1100 1208 index_min = 99; 1101 1209 for (i=0; i<raidlist->el[raidlist->entries].data_disks.entries;i++) { 1102 1103 1104 1210 if (raidlist->el[raidlist->entries].data_disks.el[i].index < index_min) { 1211 index_min = raidlist->el[raidlist->entries].data_disks.el[i].index; 1212 } 1105 1213 } 1106 1214 if (index_min > 0) { 1107 1108 1109 1215 for (i=0; i<raidlist->el[raidlist->entries].data_disks.entries;i++) { 1216 raidlist->el[raidlist->entries].data_disks.el[i].index = raidlist->el[raidlist->entries].data_disks.el[i].index - index_min; 1217 } 1110 1218 } 1111 1219 index_min = 99; 1112 1220 for (i=0; i<raidlist->el[raidlist->entries].spare_disks.entries;i++) { 1113 1114 1115 1221 if (raidlist->el[raidlist->entries].spare_disks.el[i].index < index_min) { 1222 index_min = raidlist->el[raidlist->entries].spare_disks.el[i].index; 1223 } 1116 1224 } 1117 1225 if (index_min > 0) { 1118 1119 1120 1226 for (i=0; i<raidlist->el[raidlist->entries].spare_disks.entries;i++) { 1227 raidlist->el[raidlist->entries].spare_disks.el[i].index = raidlist->el[raidlist->entries].spare_disks.el[i].index - index_min; 1228 } 1121 1229 } 1122 1230 index_min = 99; 1123 1231 for (i=0; i<raidlist->el[raidlist->entries].failed_disks.entries;i++) { 1124 1125 1126 1232 if (raidlist->el[raidlist->entries].failed_disks.el[i].index < index_min) { 1233 index_min = raidlist->el[raidlist->entries].failed_disks.el[i].index; 1234 } 1127 1235 } 1128 1236 if (index_min > 0) { 1129 1130 1131 1237 for (i=0; i<raidlist->el[raidlist->entries].failed_disks.entries;i++) { 1238 raidlist->el[raidlist->entries].failed_disks.el[i].index = raidlist->el[raidlist->entries].failed_disks.el[i].index - index_min; 1239 } 1132 1240 } 1133 1241 break; 1134 1242 case 2: // config information 1135 1243 // check for persistent super block 1136 1244 if (strcasestr(string, "super non-persistent")) { 1137 1138 } else {1139 1140 }1141 // extract chunk size1142 if (!(pos = strcasestr(string, "k chunk"))) {1143 1144 } else {1145 1146 1147 1148 1149 paranoid_free(string);1150 1151 1152 1153 1154 }1155 // extract parity if present1156 if ((pos = strcasestr(string, "algorithm"))) {1157 1158 } else {1159 1160 }1161 break;1162 1163 if (!(pos = strchr(string, '\%'))) {1164 1165 1166 1167 1168 1169 } else {1170 1171 1172 1173 1174 paranoid_free(string);1175 1176 1177 1178 1179 }1180 break;1181 1182 if (raidlist->el[raidlist->entries].progress != -1 &&1183 raidlist->el[raidlist->entries].progress != 999) {1184 log_msg(1, "Row %d should not occur in record!\n", row);1185 }1186 break;1187 1188 1189 1190 } 1191 // close file 1192 fclose(fin); 1193 // free string 1194 paranoid_free(string);1195 1196 1197 1198 } 1199 1200 1201 1202 1203 int create_raidtab_from_mdstat(char * raidtab_fname)1245 raidlist->el[raidlist->entries].persistent_superblock = 0; 1246 } else { 1247 raidlist->el[raidlist->entries].persistent_superblock = 1; 1248 } 1249 // extract chunk size 1250 if (!(pos = strcasestr(string, "k chunk"))) { 1251 raidlist->el[raidlist->entries].chunk_size = -1; 1252 } else { 1253 while (*pos != ' ') { 1254 pos -= 1; 1255 if (pos < string) { 1256 log_it("String underflow!\n"); 1257 mr_free(string); 1258 return 1; 1259 } 1260 } 1261 raidlist->el[raidlist->entries].chunk_size = atoi(pos + 1); 1262 } 1263 // extract parity if present 1264 if ((pos = strcasestr(string, "algorithm"))) { 1265 raidlist->el[raidlist->entries].parity = atoi(pos + 9); 1266 } else { 1267 raidlist->el[raidlist->entries].parity = -1; 1268 } 1269 break; 1270 case 3: // optional build status information 1271 if (!(pos = strchr(string, '\%'))) { 1272 if (strcasestr(string, "delayed")) { 1273 raidlist->el[raidlist->entries].progress = -1; // delayed (therefore, stuck at 0%) 1274 } else { 1275 raidlist->el[raidlist->entries].progress = 999; // not found 1276 } 1277 } else { 1278 while (*pos != ' ') { 1279 pos -= 1; 1280 if (pos < string) { 1281 printf("ERROR: String underflow!\n"); 1282 mr_free(string); 1283 return 1; 1284 } 1285 } 1286 raidlist->el[raidlist->entries].progress = atoi(pos); 1287 } 1288 break; 1289 default: // error or IN PROGRESS 1290 if (raidlist->el[raidlist->entries].progress != -1 && 1291 raidlist->el[raidlist->entries].progress != 999) { 1292 log_msg(1, "Row %d should not occur in record!\n", row); 1293 } 1294 break; 1295 } 1296 row++; 1297 } 1298 // free string 1299 mr_free(string); 1300 } 1301 // close file 1302 fclose(fin); 1303 // return success 1304 return 0; 1305 1306 } 1307 1308 1309 1310 1311 int create_raidtab_from_mdstat(char *mdstat_fname,char *raidtab_fname) 1204 1312 { 1205 1313 struct raidlist_itself *raidlist; … … 1209 1317 1210 1318 // FIXME: Prefix '/dev/' should really be dynamic! 1211 if (parse_mdstat( raidlist, "/dev/")) {1212 log_to_screen("Sorry, cannot read %s", MDSTAT_FILE);1319 if (parse_mdstat(mdstat_fname,raidlist, "/dev/")) { 1320 log_to_screen("Sorry, cannot read %s", mdstat_fname); 1213 1321 return (1); 1214 1322 } -
branches/3.1/mondo/src/common/libmondo-raid.h
r558 r3147 43 43 #endif 44 44 45 int create_raidtab_from_mdstat(char * raidtab_fname);46 int parse_mdstat( struct raidlist_itself *raidlist, char *device_prefix);45 int create_raidtab_from_mdstat(char *mdstat_fname, char *raidtab_fname); 46 int parse_mdstat(char *mdstat_fname, struct raidlist_itself *raidlist, char *device_prefix); -
branches/3.1/mondo/src/common/libmondo-stream.c
r2937 r3147 116 116 char *blk; 117 117 int i; 118 int j; 118 119 119 120 blk = (char *) malloc(256 * 1024); … … 131 132 } 132 133 for (i = 0; i < 8 && !feof(g_tape_stream); i++) { 133 (void) fread(blk, 1, 256 * 1024, g_tape_stream); 134 j = fread(blk, 1, 256 * 1024, g_tape_stream); 135 if (j) { 136 // FIXME 137 } 134 138 } 135 139 sleep(1); … … 185 189 } 186 190 for (i = 0; i < 4 * 8; i++) { 187 (void) fwrite(blk, 1, 256 * 1024, g_tape_stream); 191 if (fwrite(blk, 1, 256 * 1024, g_tape_stream)) { 192 //FIXME 193 } 188 194 if (should_we_write_to_next_tape 189 195 (bkpinfo->media_size[g_current_media_number], (off_t)256 * 1024)) { … … 362 368 { 363 369 int res = 0; 364 char *fname = (char *)&res; /* Should NOT be NULL */ 370 char fname_buf[PATH_MAX]; 371 char *fname = (char *)fname_buf; /* Should NOT be NULL */ 365 372 char *tmp = NULL; 366 373 … … 419 426 res = read_header_block_from_stream(ptmp_size, tmp_fname, pctrl_chr); 420 427 log_msg(1, "End of extended attributes, now looking for afioball"); 421 return ( 0);428 return (res); 422 429 } 423 430 … … 521 528 { 522 529 long long final_alleged_writeK, final_projected_certain_writeK, 523 final_actually_certain_writeK = 0,cposK, bufsize_K;530 cposK, bufsize_K; 524 531 int last, curr, i; 525 t_archtype type = other;526 532 char *command = NULL; 527 533 char *tmpdir = NULL; … … 557 563 cposK = g_tapecatalog->el[curr].tape_posK; 558 564 if (cposK < final_projected_certain_writeK) { 559 final_actually_certain_writeK = cposK;560 565 break; 561 566 } … … 835 840 g_tape_stream); 836 841 } 837 (void) fwrite(datablock, 1, (size_t) length, fout); 842 if (fwrite(datablock, 1, (size_t) length, fout)) { 843 // FIXME 844 } 838 845 g_tape_posK += length / 1024; 839 846 } … … 860 867 close_evalcall_form(); 861 868 log_it("Saved all.tar.gz to '%s'", outfname); 862 (void) getcwd(old_cwd, MAX_STR_LEN); 863 chdir(bkpinfo->tmpdir); 869 if (getcwd(old_cwd, MAX_STR_LEN)) { 870 // FIXME 871 } 872 if (chdir(bkpinfo->tmpdir)) { 873 // FIXME 874 } 864 875 mr_asprintf(tmp, "tar -zxf %s ."MINDI_CACHE"/mondorestore.cfg 2> /dev/null", outfname); 865 876 paranoid_system(tmp); … … 867 878 868 879 paranoid_system("cp -f ."MINDI_CACHE"/mondorestore.cfg . 2> /dev/null"); 869 chdir(old_cwd); 880 if (chdir(old_cwd)) { 881 // FIXME 882 } 870 883 unlink(outfname); 871 884 mr_free(outfname); … … 1049 1062 unsigned int crctt; 1050 1063 1051 bool had_to_resync = FALSE;1052 1053 1064 /*@ init ******************************************************* */ 1054 1065 malloc_string(temp_fname); … … 1062 1073 1063 1074 res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1075 if (res) { 1076 // FIXME 1077 } 1064 1078 if (orig_size != temp_size && orig_size != -1) { 1065 1079 log_to_screen("output file's size should be %ld K but is apparently %ld K", (long) size >> 10, (long) temp_size >> 10); … … 1100 1114 for (size = orig_size; size > where_I_was_before_tape_change; 1101 1115 size -= bytes_to_write) { 1102 bytes_read = 1103 fread(datablock, 1, bytes_to_read, g_tape_stream); 1116 bytes_read = fread(datablock, 1, bytes_to_read, g_tape_stream); 1104 1117 } 1105 1118 log_msg(4, "'size' is now %lld (should be %lld)", size, 1106 1119 where_I_was_before_tape_change); 1107 1120 log_to_screen("Successfully re-sync'd tape"); 1108 had_to_resync = TRUE;1109 1121 bytes_read = fread(datablock, 1, bytes_to_read, g_tape_stream); 1110 1122 } 1111 1123 1112 (void) fwrite(datablock, 1, (size_t) bytes_to_write, fout); // for blocking reasons, bytes_successfully_read_in isn't necessarily the same as bytes_to_write 1124 if (fwrite(datablock, 1, (size_t) bytes_to_write, fout)) { // for blocking reasons, bytes_successfully_read_in isn't necessarily the same as bytes_to_write 1125 // FIXME 1126 } 1113 1127 1114 1128 #ifdef EXTRA_TAPE_CHECKSUMS … … 1177 1191 } 1178 1192 while (!(*pcontrol_char = tempblock[7000])) { 1179 g_tape_posK += 1180 fread(tempblock, 1, (size_t) TAPE_BLOCK_SIZE, 1181 g_tape_stream) / 1024; 1193 g_tape_posK += fread(tempblock, 1, (size_t) TAPE_BLOCK_SIZE, g_tape_stream) / 1024; 1182 1194 } 1183 1195 memcpy((char *) plen, tempblock + 7001, sizeof(long long)); … … 1320 1332 ctrl_chr = -1; 1321 1333 while (ctrl_chr != BLK_START_AN_AFIO_OR_SLICE) { 1322 res = 1323 read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1334 res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1324 1335 if (ctrl_chr == BLK_START_AN_AFIO_OR_SLICE) { 1325 1336 break; … … 1330 1341 } 1331 1342 while (ctrl_chr != BLK_START_FILE) { 1332 res = 1333 read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1343 res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1334 1344 if (ctrl_chr == BLK_START_FILE) { 1335 1345 break; … … 1356 1366 bytes_to_write = 1357 1367 (size < TAPE_BLOCK_SIZE) ? (long) size : TAPE_BLOCK_SIZE; 1358 // FIXME - needs error-checking and -catching1359 fread(datablock, 1, (size_t) TAPE_BLOCK_SIZE, g_tape_stream);1360 }1361 res =1362 1368 if (fread(datablock, 1, (size_t) TAPE_BLOCK_SIZE, g_tape_stream)) { 1369 // FIXME - needs error-checking and -catching 1370 } 1371 } 1372 res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1363 1373 if (ctrl_chr != BLK_STOP_FILE) { 1364 1374 wrong_marker(BLK_STOP_FILE, ctrl_chr); 1365 1375 } 1366 res = 1367 read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1376 res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1368 1377 if (ctrl_chr != BLK_STOP_AN_AFIO_OR_SLICE) { 1369 1378 wrong_marker(BLK_STOP_AN_AFIO_OR_SLICE, ctrl_chr); 1370 1379 } 1371 res = 1372 read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1380 res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1373 1381 if (ctrl_chr != BLK_START_AN_AFIO_OR_SLICE) { 1374 1382 wrong_marker(BLK_START_AN_AFIO_OR_SLICE, ctrl_chr); 1375 1383 } 1376 res = 1377 read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1384 res = read_header_block_from_stream(&temp_size, temp_fname, &ctrl_chr); 1378 1385 if (ctrl_chr != BLK_START_FILE) { 1379 1386 wrong_marker(BLK_START_FILE, ctrl_chr); … … 1689 1696 bytes_to_read = TAPE_BLOCK_SIZE; 1690 1697 } 1691 (void) fread(datablock, 1, (size_t) bytes_to_read, fin); 1698 if (fread(datablock, 1, (size_t) bytes_to_read, fin)) { 1699 // FIXME 1700 } 1692 1701 g_tape_posK += 1693 1702 fwrite(datablock, 1, /*bytes_to_read */ -
branches/3.1/mondo/src/common/libmondo-string-EXT.h
r2508 r3147 23 23 extern void strip_spaces(char *in_out); 24 24 extern char *trim_empty_quotes(char *incoming); 25 extern char *truncate_to_drive_name(c har *partition);25 extern char *truncate_to_drive_name(const char *partition); 26 26 extern char *turn_raid_level_number_to_string(int raid_level); 27 27 -
branches/3.1/mondo/src/common/libmondo-string.c
r2508 r3147 665 665 */ 666 666 void strip_spaces(char *in_out) 667 { 668 /*@ buffers ***************************************************** */ 669 char *tmp = NULL; 670 671 /*@ int ******************************************************** */ 672 int i; 673 674 /*@ end vars *************************************************** */ 675 676 assert(in_out != NULL); 677 malloc_string(tmp); 678 for (i = 0; in_out[i] <= ' ' && i < (int) strlen(in_out) -1; i++); 679 strcpy(tmp, in_out + i); 680 for (i = (int) strlen(tmp) -1; i >= 0 && tmp[i] <= ' '; i--); 681 i++; 682 tmp[i] = '\0'; 683 684 // Now tmp contains the stripped string 685 strcpy(in_out,tmp); 686 paranoid_free(tmp); 687 } 688 689 /** 690 * Remove all characters whose ASCII value is less than or equal to 32 691 * (spaces and control characters) from both sides of @p in_out. 692 * @param in_out The string to strip spaces/control characters from (modified). 693 */ 694 void strip_spaces2(char *in_out) 667 695 { 668 696 /*@ buffers ***************************************************** */ … … 752 780 * @return @p partition. 753 781 */ 754 char *truncate_to_drive_name(c har *partition)782 char *truncate_to_drive_name(const char *partition) 755 783 { 756 784 int i = strlen(partition) - 1; -
branches/3.1/mondo/src/common/libmondo-string.h
r2508 r3147 21 21 void strip_spaces(char *in_out); 22 22 char *trim_empty_quotes(char *incoming); 23 char *truncate_to_drive_name(c har *partition);23 char *truncate_to_drive_name(const char *partition); 24 24 char *turn_raid_level_number_to_string(int raid_level); 25 25 void printf_silly_message(void); -
branches/3.1/mondo/src/common/libmondo-tools.c
r2937 r3147 304 304 { 305 305 #ifdef __FreeBSD__ 306 system("kldstat | grep msdosfs || kldload msdosfs 2> /dev/null");307 system("kldstat | grep ext2fs || kldload ext2fs 2> /dev/null");306 paranoid_system("kldstat | grep msdosfs || kldload msdosfs 2> /dev/null"); 307 paranoid_system("kldstat | grep ext2fs || kldload ext2fs 2> /dev/null"); 308 308 #else 309 system("modprobe -a msdos vfat loop &> /dev/null");309 paranoid_system("modprobe -a msdos vfat loop &> /dev/null"); 310 310 #endif 311 311 } … … 643 643 colon++; 644 644 hent = gethostbyname(colon); 645 mr_asprintf( bkpinfo->netfs_user,"%s", hostname);645 mr_asprintf(&(bkpinfo->netfs_user),"%s", hostname); 646 646 } else { 647 647 hent = gethostbyname(hostname); … … 713 713 } 714 714 715 /* From busybox under GPLv2 */ 716 #ifndef HAVE_MKDTEMP 717 /* This is now actually part of POSIX.1, but was only added in 2008 */ 718 char* mkdtemp(char *template) 719 { 720 if (mktemp(template) == NULL || mkdir(template, 0700) != 0) 721 return NULL; 722 return template; 723 } 724 #endif 725 715 726 void setup_tmpdir(char *path) { 716 727 … … 721 732 /* purging a potential old tmpdir */ 722 733 log_it("Purging old tmpdir %s", bkpinfo->tmpdir); 723 chdir("/tmp"); 734 if (chdir("/tmp")) { 735 // FIXME 736 } 724 737 mr_asprintf(tmp,"rm -Rf %s",bkpinfo->tmpdir); 725 738 mr_free(bkpinfo->tmpdir); 726 (void)system(tmp);739 paranoid_system(tmp); 727 740 mr_free(tmp); 728 741 } … … 1032 1045 mr_free(tmp); 1033 1046 1034 if (!run_program_and_log_output("parted2fdisk -l | grep -i raid", 1)1047 if (!run_program_and_log_output("parted2fdisk -l 2>/dev/null | grep -i raid", 1) 1035 1048 && !does_file_exist("/etc/raidtab")) { 1036 1049 log_to_screen 1037 1050 ("You have RAID partitions but no /etc/raidtab - creating one from /proc/mdstat"); 1038 create_raidtab_from_mdstat( "/etc/raidtab");1051 create_raidtab_from_mdstat(MDSTAT_FILE,"/etc/raidtab"); 1039 1052 } 1040 1053 -
branches/3.1/mondo/src/common/libmondo-verify.c
r2937 r3147 412 412 char *outlog = NULL; 413 413 char *tmp = NULL; 414 char *p = NULL; 414 415 415 416 /*@ pointers ******************************************************* */ … … 477 478 bkpinfo->use_star = TRUE; 478 479 if (strstr(tarball_fname, ".bz2")) 479 mr_asprintf(command, "star - diff diffopts=mode,size,data file=%s %s >> %s 2>> %s", tarball_fname, (strstr(tarball_fname, ".bz2")) ? "-bz" : " ", outlog, outlog);480 mr_asprintf(command, "star -sparse -diff diffopts=mode,size,data file=%s %s >> %s 2>> %s", tarball_fname, (strstr(tarball_fname, ".bz2")) ? "-bz" : " ", outlog, outlog); 480 481 } else { 481 482 bkpinfo->use_star = FALSE; … … 681 682 682 683 mr_asprintf(tmp, "echo \"%s\" >> %s/biggies.changed", biggie_fname, bkpinfo->tmpdir); 683 system(tmp);684 paranoid_system(tmp); 684 685 mr_free(tmp); 685 686 } … … 738 739 log_it("Grabbing the EXAT files"); 739 740 if (ctrl_chr == BLK_START_EXTENDED_ATTRIBUTES) { 740 res = 741 read_EXAT_files_from_tape(&size, fname, &ctrl_chr, 741 res = read_EXAT_files_from_tape(&size, fname, &ctrl_chr, 742 742 curr_xattr_list_fname, 743 743 curr_acl_list_fname); … … 765 765 if (ctrl_chr == BLK_START_EXTENDED_ATTRIBUTES) { 766 766 log_it("Reading EXAT files from tape"); 767 res = 768 read_EXAT_files_from_tape(&size, fname, &ctrl_chr, 767 res = read_EXAT_files_from_tape(&size, fname, &ctrl_chr, 769 768 curr_xattr_list_fname, 770 769 curr_acl_list_fname); … … 848 847 if (ctrl_chr == BLK_START_EXTENDED_ATTRIBUTES) { 849 848 log_it("Grabbing the EXAT biggiefiles"); 850 res = 851 read_EXAT_files_from_tape(&size, orig_fname, 849 res = read_EXAT_files_from_tape(&size, orig_fname, 852 850 &ctrl_chr, curr_xattr_list_fname, 853 851 curr_acl_list_fname); -
branches/3.1/mondo/src/common/mondostructures.h
r2816 r3147 191 191 * A type of file in the catalog of recent archives. 192 192 */ 193 typedef enum { other, ///< Some other kind of file. 193 typedef enum { 194 other, ///< Some other kind of file. 194 195 fileset, ///< An afioball (fileset), optionally compressed. 195 196 biggieslice ///< A slice of a biggiefile, optionally compressed. … … 201 202 typedef enum { 202 203 nuke = 0, /// Nuke mode 203 interactive, /// Interactive mode204 interactive, /// Interactive mode 204 205 compare, /// Compare mode 205 206 mbr, /// MBR mode -
branches/3.1/mondo/src/common/newt-specific.c
r2937 r3147 57 57 */ 58 58 bool g_exiting = FALSE; 59 60 // Decide whether we should continue to ask questions or exit (cron use case) 61 extern bool g_fail_immediately; 59 62 60 63 /** … … 122 125 char *tmp; 123 126 124 assert_string_is_neither_NULL_nor_zerolength(prompt); 125 127 assert_string_is_neither_NULL_nor_zerolength(prompt); 128 129 if (g_fail_immediately) { 130 // We consider the user aborted by using the -F option 131 log_msg(3, "Exiting at first interaction request due to -F"); 132 finish(1); 133 } 126 134 if (g_text_mode) { 127 135 while (1) { … … 163 171 /*@ buffer *********************************************************** */ 164 172 char *tmp = NULL; 173 char *p; 165 174 int i; 166 175 167 assert_string_is_neither_NULL_nor_zerolength(prompt); 176 if (g_fail_immediately) { 177 // We consider the user aborted by using the -F option 178 log_msg(3, "Exiting at first interaction request due to -F"); 179 finish(1); 180 } 168 181 169 182 if (g_text_mode) { … … 318 331 sync(); 319 332 320 chdir("/"); 333 if (chdir("/")) { 334 // FIXME 335 } 321 336 if (g_selfmounted_isodir) { 322 337 mr_asprintf(command, "umount -d %s", g_selfmounted_isodir); … … 369 384 370 385 /* Before removing dir, make sure we're out of them */ 371 chdir("/tmp"); 386 if (chdir("/tmp")) { 387 // FIXME 388 } 372 389 run_program_and_log_output("umount -d " MNT_CDROM, FALSE); 373 390 if (g_selfmounted_isodir) { … … 385 402 log_msg(8,"erasing tempdir %s",bkpinfo->tmpdir); 386 403 mr_asprintf(command, "rm -Rf %s", bkpinfo->tmpdir); 387 system(command);404 paranoid_system(command); 388 405 mr_free(command); 389 406 } … … 394 411 log_msg(8,"erasing scratchdir %s",bkpinfo->scratchdir); 395 412 mr_asprintf(command, "rm -Rf %s", bkpinfo->scratchdir); 396 system(command);413 paranoid_system(command); 397 414 mr_free(command); 398 415 } … … 424 441 char *command = NULL; 425 442 char *tmp = NULL; 443 char *p = NULL; 426 444 427 445 /*@ pointers ********************************************************* */ … … 763 781 /*@ buffers *********************************************************** */ 764 782 char *prompt = NULL; 783 char *q; 765 784 766 785 /*@ newt ************************************************************** */ … … 1130 1149 static char *possible_responses[] = { "none", "cdr", "cdrw", "dvd", "tape", "cdstream", "udev", "netfs", "iso", NULL }; 1131 1150 char *outstr = NULL; 1151 char *p; 1132 1152 t_bkptype backup_type; 1133 1153 int i; … … 1286 1306 newtPushHelpLine(" Please specify the level of compression that you want."); 1287 1307 newtCenteredWindow(34, 13, "How much compression?"); 1288 b1 = newtButton(4, 1, "Maximum ");1289 b2 = newtButton(18, 1, "Average ");1290 b3 = newtButton(4, 5, "Minimum ");1291 b4 = newtButton(18, 5, " None ");1308 b1 = newtButton(4, 1, "Maximum (9)"); 1309 b2 = newtButton(18, 1, "Average (4)"); 1310 b3 = newtButton(4, 5, "Minimum (1)"); 1311 b4 = newtButton(18, 5, " None (0) "); 1292 1312 b5 = newtButton(4, 9, " Exit "); 1293 1313 myForm = newtForm(NULL, NULL, 0); … … 1327 1347 bool done; 1328 1348 char *tmp = NULL; 1349 char *p; 1329 1350 char *tmp1 = NULL; 1330 1351 FILE *fin, *fout; … … 1563 1584 } /* extern "C" */ 1564 1585 #endif 1565 1566 1567 void wait_until_software_raids_are_prepped(char *mdstat_file, int wait_for_percentage); -
branches/3.1/mondo/src/include/my-stuff.h
r2850 r3147 313 313 #define DONT_KNOW_HOW_TO_EVALUATE_THIS_DEVICE_TYPE "/dev/md" 314 314 #define RAID_DEVICE_STUB DONT_KNOW_HOW_TO_EVALUATE_THIS_DEVICE_TYPE 315 #define SANE_FORMATS "swap image vfat ext2 ext3 ext4 xfs vfs jfs reiserfs vmfs dos minix coda fuse.sshfs nfs nfs4 ntfs ntfs-3g hpfs raid lvm cifs ocfs ocfs2 "315 #define SANE_FORMATS "swap image vfat ext2 ext3 ext4 xfs vfs jfs reiserfs vmfs dos minix coda fuse.sshfs nfs nfs4 ntfs ntfs-3g hpfs raid lvm cifs ocfs ocfs2 btrfs" 316 316 #define ALT_TAPE "/dev/ht0" 317 317 #define MKE2FS_OR_NEWFS "mke2fs" … … 331 331 #define ACL_BIGGLST_FNAME_RAW_SZ "%s/acl_list.big.gz" 332 332 333 #define BIGGIEMAXSIZE 64L*1024L 333 334 /** 334 335 * The template for an afioball filename. … … 339 340 #define ARCH_BUFFER_NUM (ARCH_THREADS*4) // Number of permissible queued afio files 340 341 #define DO_MBR_PLEASE "/tmp/DO-MBR-PLEASE" 342 #define MONDO_MNTLISTCHG "/tmp/mountlist.changed" 341 343 342 344 -
branches/3.1/mondo/src/lib/mr_conf.c
r2508 r3147 97 97 int mr_conf_open(const char *filename) { 98 98 size_t length; /*length of the buffer/file */ 99 size_t res = 0;100 99 101 100 /* check if mr_conf is already opened? */ … … 126 125 /*reading file in buffer (skip all 0 characters) */ 127 126 128 res = fread(buffer, sizeof(char), length, CONF); 127 if (fread(buffer, sizeof(char), length, CONF)) { 128 // FIXME 129 } 129 130 buffer[length] = (char) 0; /*finalize the string */ 130 131 -
branches/3.1/mondo/src/lib/mr_str.c
r2421 r3147 28 28 size_t pos1 = 0; 29 29 size_t pos2 = 0; 30 31 if (instr == NULL) { 32 *lastpos = 0; 33 return token; 34 } 35 36 if (delims == NULL) { 37 *lastpos = 0; 38 return token; 39 } 30 40 31 41 if (strlen(instr) <= *lastpos) { -
branches/3.1/mondo/src/mondoarchive/mondoarchive.c
r2508 r3147 47 47 */ 48 48 bool g_ISO_restore_mode = FALSE; 49 50 /* Whether we should fail immediately at first error */ 51 bool g_fail_immediately = FALSE; 49 52 50 53 /* Do we use extended attributes and acl ? … … 159 162 int retval = 0; 160 163 char *say_at_end = NULL; 164 FILE *fin = NULL; 161 165 162 166 printf("Initializing...\n"); … … 260 264 g_loglevel = 10; 261 265 finish(set_acl_list(argv[2], argv[3])); 266 } 267 if (argc >= 2 && !strcmp(argv[1], "mkraidtab")) { 268 g_loglevel = 10; 269 g_text_mode = TRUE; 270 setup_newt_stuff(); 271 #undef MDSTAT_FILE 272 #define MDSTAT_FILE "/tmp/mdstat" 273 if (!(fin = fopen(MDSTAT_FILE, "r"))) { 274 log_msg(1, "Could not open %s.\n", MDSTAT_FILE); 275 finish(1); 276 } 277 278 create_raidtab_from_mdstat(MDSTAT_FILE,"/tmp/raidtab"); 279 finish(0); 262 280 } 263 281 … … 397 415 run_program_and_log_output("mount", 2); 398 416 399 system("rm -f "MONDO_CACHE"/last-backup.aborted");417 paranoid_system("rm -f "MONDO_CACHE"/last-backup.aborted"); 400 418 if (!retval) { 401 419 printf("Mondoarchive ran OK.\n"); … … 421 439 mr_free(tmp); 422 440 423 chdir("/tmp"); 441 if (chdir("/tmp")) { 442 // FIXME 443 } 424 444 425 445 if (!g_text_mode) { -
branches/3.1/mondo/src/mondoarchive/mondoarchive.h
r2340 r3147 9 9 */ 10 10 char *MONDO_LOGFILE = "/var/log/mondoarchive.log"; 11 char *MONDO_OPTIONS = "0123456789A:B:C:DE: GHI:J:K:LNOP:QRS:T:UVWYb:c:d:ef:gik:l:mn:op:rs:tuw:x:z";11 char *MONDO_OPTIONS = "0123456789A:B:C:DE:FGHI:J:K:LM:NOP:QRS:T:UVWYb:c:d:ef:gik:l:mn:op:rs:tuw:x:z"; 12 12 13 13 /* No restriction on ps options */ -
branches/3.1/mondo/src/mondorestore/mondo-prep.c
r2937 r3147 110 110 popup_and_OK 111 111 ("I must now reboot. Please leave the boot media in the drive and repeat your actions - e.g. type 'nuke' - and it should work fine."); 112 system("reboot");112 paranoid_system("reboot"); 113 113 } 114 114 } … … 171 171 172 172 int do_my_funky_lvm_stuff(bool just_erase_existing_volumes, 173 173 bool vacuum_pack) 174 174 { 175 /** 175 /** buffers **********************************************/ 176 176 char *tmp = NULL; 177 177 char *tmp1 = NULL; … … 188 188 char *p; 189 189 char *q; 190 char *r; 190 191 191 192 /** int ***************************************************/ … … 442 443 /** pointers *********************************************************/ 443 444 char *p; 445 char *q; 444 446 445 447 /** init *************************************************************/ … … 503 505 } else { 504 506 strcpy(new_mountlist->el[new_mountlist->entries].device, 505 507 old_mountlist->el[lino].device); 506 508 strcpy(new_mountlist->el[new_mountlist->entries].mountpoint, 507 509 old_mountlist->el[lino].mountpoint); 508 510 strcpy(new_mountlist->el[new_mountlist->entries].format, 509 511 old_mountlist->el[lino].format); 510 512 new_mountlist->el[new_mountlist->entries].size = 511 513 old_mountlist->el[lino].size; … … 527 529 * @return 0 for success, nonzero for failure. 528 530 */ 529 int create_raid_device_via_mdadm(struct raidlist_itself *raidlist, char *device) 530 { 531 /** int **************************************************************/ 532 int i = 0; 533 int j = 0; 534 int res = 0; 535 536 /** buffers ***********************************************************/ 537 char *devices = NULL; 538 char *strtmp = NULL; 539 char *level = NULL; 540 char *program = NULL; 541 char *tmp = NULL; 542 char *oldmd = NULL; 543 char *bootdevice; 544 char *name; 531 int create_raid_device_via_mdadm(struct raidlist_itself *raidlist, char *device, bool test) { 532 /** int **************************************************************/ 533 int i = 0; 534 int j = 0; 535 int v = 0; 536 int res = 0; 537 538 /** buffers ***********************************************************/ 539 char *devices = NULL; 540 char *level = NULL; 541 char *program = NULL; 545 542 546 543 malloc_string(bootdevice); … … 735 732 /* format raid partition */ 736 733 mr_asprintf(program, "for plex in `vinum lv -r %s | grep '^P' | tr '\t' ' ' | tr -s ' ' | cut -d' ' -f2`; do echo $plex; done > /tmp/plexes", basename(device)); 737 system(program);734 paranoid_system(program); 738 735 if (g_fprep) { 739 736 fprintf(g_fprep, "%s\n", program); … … 752 749 753 750 mr_asprintf(tmp, "vinum init %s", line); 754 system(tmp);751 paranoid_system(tmp); 755 752 mr_free(tmp); 756 753 … … 781 778 log_to_screen("Initializing RAID device %s", device); 782 779 783 // Shouldn't be necessary.780 // Shouldn't be necessary. 784 781 log_to_screen("Stopping %s", device); 785 782 stop_raid_device(device); … … 789 786 log_msg(1, "Making %s", device); 790 787 // use mkraid if it exists, otherwise use mdadm 791 792 res = create_raid_device_via_mdadm(raidlist, device);793 788 if (run_program_and_log_output("which mkraid", FALSE)) { 789 res = create_raid_device_via_mdadm(raidlist, device, TRUE); 790 log_msg(1, "Creating RAID device %s via mdadm returned %d", device, res); 794 791 } else { 795 792 mr_asprintf(program, "mkraid --really-force %s", device); … … 884 881 */ 885 882 int format_everything(struct mountlist_itself *mountlist, bool interactively, 886 883 struct raidlist_itself *raidlist) 887 884 { 888 885 /** int **************************************************************/ … … 907 904 log_it("format_everything (mountlist, interactively = %s", (interactively) ? "true" : "false"); 908 905 909 mvaddstr_and_log_it(g_currentY, 0, "Formatting partitions 906 mvaddstr_and_log_it(g_currentY, 0, "Formatting partitions "); 910 907 open_progress_form("Formatting partitions", 911 912 913 908 "I am now formatting your hard disk partitions.", 909 "This may take up to five minutes.", "", 910 mountlist->entries + 1); 914 911 915 912 progress_step = … … 949 946 sleep(2); 950 947 // This last step is probably necessary 951 // 952 // 953 // system("sync"); system("sync");system("sync");954 // 948 // log_to_screen("Re-starting software RAIDs..."); 949 // start_all_raid_devices(mountlist); 950 // paranoid_system("sync"); paranoid_system("sync"); paranoid_system("sync"); 951 // sleep(5); 955 952 // do LVMs now 956 953 log_msg(1, "Creating LVMs"); … … 992 989 continue; 993 990 } else if (!does_file_exist(me->device) 994 995 991 && strncmp(me->device, "/dev/hd", 7) 992 && strncmp(me->device, "/dev/sd", 7)) { 996 993 log_it("Not formatting %s yet - doesn't exist - probably an LVM", me->device); 997 994 continue; … … 1049 1046 } 1050 1047 newtSuspend(); 1051 system("clear");1048 paranoid_system("clear"); 1052 1049 newtResume(); 1053 1050 return (retval); … … 1064 1061 */ 1065 1062 int make_dummy_partitions(FILE * pout_to_fdisk, char *drivename, 1066 1063 int devno_we_must_allow_for) 1067 1064 { 1068 1065 /** int **************************************************************/ … … 1178 1175 fprintf(f, "\n\n%u partitions:\n", lp->d_npartitions); 1179 1176 fprintf(f, 1180 "# 1177 "# size offset fstype [fsize bsize bps/cpg]\n"); 1181 1178 pp = lp->d_partitions; 1182 1179 for (i = 0; i < lp->d_npartitions; i++, pp++) { 1183 1180 if (pp->p_size) { 1184 fprintf(f, " 1181 fprintf(f, " %c: %8lu %8lu ", 'a' + i, (u_long) pp->p_size, 1185 1182 (u_long) pp->p_offset); 1186 1183 if (pp->p_fstype < FSMAXTYPES) … … 1191 1188 1192 1189 case FS_UNUSED: /* XXX */ 1193 fprintf(f, " 1190 fprintf(f, " %5lu %5lu %5.5s ", (u_long) pp->p_fsize, 1194 1191 (u_long) (pp->p_fsize * pp->p_frag), ""); 1195 1192 break; 1196 1193 1197 1194 case FS_BSDFFS: 1198 fprintf(f, " 1195 fprintf(f, " %5lu %5lu %5u ", (u_long) pp->p_fsize, 1199 1196 (u_long) (pp->p_fsize * pp->p_frag), pp->p_cpg); 1200 1197 break; 1201 1198 1202 1199 case FS_BSDLFS: 1203 fprintf(f, " 1200 fprintf(f, " %5lu %5lu %5d", (u_long) pp->p_fsize, 1204 1201 (u_long) (pp->p_fsize * pp->p_frag), pp->p_cpg); 1205 1202 break; … … 1217 1214 fprintf(f, "- %lu", 1218 1215 (u_long) ((pp->p_offset + pp->p_size + 1219 1220 1216 lp->d_secpercyl - 1) / lp->d_secpercyl - 1217 1)); 1221 1218 if (pp->p_size % lp->d_secpercyl) 1222 1219 putc('*', f); … … 1256 1253 /* 1257 1254 * Nobody in these enligthened days uses the CHS geometry for 1258 * anything, but nontheless try to get it right. 1255 * anything, but nontheless try to get it right. If we fail 1259 1256 * to get any good ideas from the device, construct something 1260 1257 * which is IBM-PC friendly. … … 1340 1337 lp->d_partitions[c - 'a'].p_cpg = 64; 1341 1338 } else if (!strcasecmp(mountlist->el[idx].format, "raid") 1342 1339 || !strcasecmp(mountlist->el[idx].format, "vinum")) { 1343 1340 lp->d_partitions[c - 'a'].p_fstype = FS_VINUM; 1344 1341 } else if (!strcmp(mountlist->el[idx].format, "swap")) { … … 1422 1419 char *format = NULL; 1423 1420 char *tmp = NULL; 1421 char *tmp1 = NULL; 1424 1422 char *tmp1 = NULL; 1425 1423 … … 1511 1509 1512 1510 /* OK, we've found partition /dev/hdxN in mountlist; let's prep it */ 1513 /* For FreeBSD, that is 1511 /* For FreeBSD, that is /dev/adXsY */ 1514 1512 1515 1513 log_it("Found partition %s in mountlist", device_str); … … 1540 1538 previous_devno = 1541 1539 make_dummy_partitions(pout_to_fdisk, drivename, 1542 1540 current_devno); 1543 1541 } 1544 1542 } … … 1595 1593 sync(); 1596 1594 paranoid_pclose(pout_to_fdisk); 1597 log_msg(0,1598 1595 paranoid_system("sync"); 1596 log_msg(0,"------------------- fdisk.log looks like this ------------------"); 1599 1597 mr_asprintf(tmp, "cat %s >> %s", FDISK_LOG, MONDO_LOGFILE); 1600 1598 system(tmp); … … 1625 1623 * Create partition number @p partno on @p drive with @p fdisk. 1626 1624 * @param drive The drive to create the partition on. 1627 // 1625 // * @param partno The partition number of the new partition (1-4 are primary, >=5 is logical). 1628 1626 * @param prev_partno The partition number of the most recently prepped partition. 1629 1627 * @param format The filesystem type of this partition (used to set the type). … … 1656 1654 1657 1655 log_it("partition_device('%s', %d, %d, '%s', %lld) --- starting", 1658 1656 drive, partno, prev_partno, format, partsize); 1659 1657 1660 1658 if (!strncmp(drive, RAID_DEVICE_STUB, strlen(RAID_DEVICE_STUB))) { … … 1743 1741 retval = 1744 1742 set_partition_type(pout_to_fdisk, drive, partno, format, 1745 1743 partsize); 1746 1744 if (retval) { 1747 1745 log_msg(1, "Failed. Trying again..."); 1748 1746 retval = 1749 1747 set_partition_type(pout_to_fdisk, drive, partno, 1750 1748 format, partsize); 1751 1749 } 1752 1750 } … … 1783 1781 retval = 1784 1782 set_partition_type(pout_to_fdisk, drive, partno, format, 1785 1783 partsize); 1786 1784 if (retval) { 1787 1785 log_it("Partitioned %s but failed to set its type", partition_name); … … 1832 1830 /** buffer *********************************************************/ 1833 1831 struct list_of_disks *drivelist; 1834 /* 1832 /* struct mountlist_itself new_mtlist, *mountlist; */ 1835 1833 1836 1834 /** end ************************************************************/ … … 1840 1838 1841 1839 log_it("partition_everything() --- starting"); 1842 mvaddstr_and_log_it(g_currentY, 0, "Partitioning hard drives 1843 /* 1840 mvaddstr_and_log_it(g_currentY, 0, "Partitioning hard drives "); 1841 /* mountlist=orig_mtlist; */ 1844 1842 if (mountlist_contains_raid_devices(mountlist)) { 1845 /* 1846 /* 1843 /* mountlist=&new_mtlist; */ 1844 /* extrapolate_mountlist_to_include_raid_partitions(mountlist,orig_mtlist); */ 1847 1845 log_msg(0, 1848 1846 "Mountlist, including the partitions incorporated in RAID devices:-"); … … 1865 1863 1866 1864 open_progress_form("Partitioning devices", 1867 1868 1869 1865 "I am now going to partition all your drives.", 1866 "This should not take more than five minutes.", "", 1867 mountlist->entries); 1870 1868 1871 1869 make_list_of_drives_in_mountlist(mountlist, drivelist); … … 1885 1883 } 1886 1884 newtSuspend(); 1887 system("clear");1885 paranoid_system("clear"); 1888 1886 newtResume(); 1889 1887 paranoid_free(drivelist); … … 1906 1904 */ 1907 1905 int set_partition_type(FILE * pout_to_fdisk, const char *drive, int partno, 1908 1906 const char *format, long long partsize) 1909 1907 { 1910 1908 /** buffers *********************************************************/ … … 1939 1937 } 1940 1938 } else if (strcmp(format, "ext2") == 0 1941 || strcmp(format, "reiserfs") == 0 1942 || strcmp(format, "ext3") == 0 1943 || strcmp(format, "ext4") == 0 1944 || strcmp(format, "xfs") == 0 1945 || strcmp(format, "jfs") == 0) { 1939 || strcmp(format, "reiserfs") == 0 1940 || strcmp(format, "ext3") == 0 1941 || strcmp(format, "ext4") == 0 1942 || strcmp(format, "xfs") == 0 1943 || strcmp(format, "jfs") == 0 1944 || strcmp(format, "btrfs") == 0) { 1946 1945 mr_asprintf(partcode, "83"); 1947 1946 } else if (strcmp(format, "minix") == 0) { … … 1956 1955 mr_asprintf(partcode, "7"); 1957 1956 } else if ((strcmp(format, "ufs") == 0) 1958 1957 || (strcmp(format, "ffs") == 0)) { /* raid autodetect */ 1959 1958 mr_asprintf(partcode, "a5"); 1960 1959 } else if (strcmp(format, "lvm") == 0) { … … 2108 2107 mr_asprintf(program, "vinum stop -f %s", raid_device); 2109 2108 #else 2110 2111 2109 // use raidstop if it exists, otherwise use mdadm 2110 if (run_program_and_log_output("which raidstop", FALSE)) { 2112 2111 mr_asprintf(program, "mdadm -S %s", raid_device); 2113 2112 } else { … … 2174 2173 /** pointers ********************************************************/ 2175 2174 FILE *fin; 2175 char *q; 2176 2176 int i; 2177 2177 … … 2203 2203 for (p = dev; *p > 32; p++); 2204 2204 *p = '\0'; 2205 re s= stop_raid_device(dev);2205 retval += stop_raid_device(dev); 2206 2206 mr_free(dev); 2207 2207 } … … 2261 2261 } else if (strcmp(format, "ext4") == 0) { 2262 2262 mr_asprintf(program, "mkfs -t ext4 -F -q"); 2263 } else if (strcmp(format, "btrfs") == 0) { 2264 strcpy(program, "mkfs.btrfs"); 2263 2265 } else if (strcmp(format, "minix") == 0) { 2264 2266 mr_asprintf(program, "mkfs.minix"); … … 2297 2299 * There are a few problems with this function: 2298 2300 * - It won't work if there was any unallocated space on the user's hard drive 2299 * 2301 * when it was backed up. 2300 2302 * - It won't work if the user's hard drive lies about its size (more common 2301 * 2303 * than you'd think). 2302 2304 * 2303 2305 * @param mountlist The mountlist to use for resizing @p drive_name. … … 2311 2313 /** int *************************************************************/ 2312 2314 int partno, lastpart; 2313 /** remove driveno, noof_drives stan benoit apr 2002**/2314 2315 2315 2316 /** float ***********************************************************/ -
branches/3.1/mondo/src/mondorestore/mondo-rstr-compare.c
r2704 r3147 71 71 return (1); 72 72 } 73 fread((void *) &biggiestruct, 1, sizeof(biggiestruct), fin); 73 if (fread((void *) &biggiestruct, 1, sizeof(biggiestruct), fin)) { 74 // FIXME 75 } 74 76 paranoid_fclose(fin); 75 77 … … 218 220 int retval = 0; 219 221 int res; 220 long noof_lines;221 222 long archiver_errors; 222 223 bool use_star; … … 289 290 if (use_star) { 290 291 // doesn't use compressor_exe 291 mr_asprintf(command, "%s - diff H=exustar file=%s >> %s 2>> %s", archiver_exe, tarball_fname, logfile, logfile);292 mr_asprintf(command, "%s -sparse -diff H=exustar file=%s >> %s 2>> %s", archiver_exe, tarball_fname, logfile, logfile); 292 293 } else { 293 294 mr_asprintf(command, "%s -r -b %ld -M 16m -c %ld %s %s >> %s 2>> %s", archiver_exe, TAPE_BLOCK_SIZE, BUFSIZE, compressor_exe, tarball_fname, logfile, logfile); … … 308 309 if (length_of_file(logfile) > 5) { 309 310 mr_asprintf(command, "sed s/': \\\"'/\\|/ %s | sed s/'\\\": '/\\|/ | cut -d'|' -f2 | sort -u | grep -vE \"^dev/.*\" >> "MONDO_CACHE"/changed.txt", logfile); 310 system(command);311 paranoid_system(command); 311 312 mr_free(command); 312 313 … … 337 338 { 338 339 int retval = 0; 339 int res;340 340 int current_tarball_number = 0; 341 341 … … 409 409 log_to_screen(progress_str); 410 410 } else { 411 re s= compare_a_tarball(tarball_fname, current_tarball_number);411 retval += compare_a_tarball(tarball_fname, current_tarball_number); 412 412 413 413 g_current_progress++; … … 459 459 assert(bkpinfo != NULL); 460 460 461 getcwd(cwd, MAX_STR_LEN - 1); 462 chdir(bkpinfo->restore_path); 463 getcwd(new, MAX_STR_LEN - 1); 461 if (getcwd(cwd, MAX_STR_LEN - 1)) { 462 // FIXME 463 } 464 if (chdir(bkpinfo->restore_path)) { 465 //FIXME 466 } 467 if (getcwd(new, MAX_STR_LEN - 1)) { 468 // FIXME 469 } 464 470 insist_on_this_cd_number(g_current_media_number); 465 471 unlink(MONDO_CACHE"/changed.txt"); … … 467 473 resA = compare_all_tarballs(); 468 474 resB = compare_all_biggiefiles(); 469 chdir(cwd); 475 if (chdir(cwd)) { 476 // FIXME 477 } 470 478 noof_changed_files = count_lines_in_file(MONDO_CACHE"/changed.txt"); 471 479 if (noof_changed_files) { … … 594 602 595 603 log_msg(2, "calling popup_changelist_from_file()"); 596 getcwd(cwd, MAX_STR_LEN - 1); 597 chdir(bkpinfo->restore_path); 598 getcwd(new, MAX_STR_LEN - 1); 604 if (getcwd(cwd, MAX_STR_LEN - 1)) { 605 //FIXME 606 } 607 if (chdir(bkpinfo->restore_path)) { 608 // FIXME 609 } 610 if (getcwd(new, MAX_STR_LEN - 1)) { 611 //FIXME 612 } 599 613 popup_changelist_from_file(MONDO_CACHE"/changed.files"); 600 chdir(cwd); 614 if (chdir(cwd)) { 615 // FIXME 616 } 601 617 log_msg(2, "Returning from popup_changelist_from_file()"); 602 618 } … … 634 650 assert(bkpinfo != NULL); 635 651 malloc_string(dir); 636 getcwd(dir, MAX_STR_LEN); 637 chdir(bkpinfo->restore_path); 652 if (getcwd(dir, MAX_STR_LEN)) { 653 // FIXME 654 } 655 if (chdir(bkpinfo->restore_path)) { 656 // FIXME 657 } 638 658 639 659 mvaddstr_and_log_it(g_currentY, … … 647 667 } 648 668 res = verify_tape_backups(); 649 chdir(dir); 669 if (chdir(dir)) { 670 // FIXME 671 } 650 672 if (length_of_file(MONDO_CACHE"/changed.txt") > 2 651 673 && length_of_file(MONDO_CACHE"/changed.files") > 2) { … … 686 708 malloc_string(dir); 687 709 688 getcwd(dir, MAX_STR_LEN); 689 chdir(bkpinfo->restore_path); 710 if (getcwd(dir, MAX_STR_LEN)) { 711 // FIXME 712 } 713 if (chdir(bkpinfo->restore_path)) { 714 // FIXME 715 } 690 716 691 717 mvaddstr_and_log_it(g_currentY, 692 718 0, "Verifying archives against filesystem"); 693 719 res = verify_tape_backups(); 694 chdir(dir); 720 if (chdir(dir)) { 721 // FIXME 722 } 695 723 if (res) { 696 724 mvaddstr_and_log_it(g_currentY++, 74, "Failed."); -
branches/3.1/mondo/src/mondorestore/mondo-rstr-newt.c
r2937 r3147 137 137 /** int **************************************************************/ 138 138 int i = 0; 139 int num_to_add = 0;140 139 141 140 /** newt *************************************************************/ … … 233 232 mr_asprintf(drive_to_add, "%s", device_str); 234 233 for (i = strlen(drive_to_add); isdigit(drive_to_add[i - 1]); i--); 235 num_to_add = atoi(drive_to_add + i);236 234 mr_free(drive_to_add); 237 235 … … 1943 1941 finish(1); 1944 1942 } 1945 newtPushHelpLine 1946 (" Please edit the mountlist to your satisfaction, then click OK or Cancel."); 1943 newtPushHelpLine("WARNING: No LVM modification possible here. Edit /tmp/i-want-my-lvm instead"); 1947 1944 i = 4; 1948 1945 bAdd = newtCompactButton(i, 17, " Add "); … … 2423 2420 newtComponent b2; 2424 2421 newtComponent b3; 2425 newtComponent b_res;2426 2422 2427 2423 … … 2434 2430 myForm = newtForm(NULL, NULL, 0); 2435 2431 newtFormAddComponents(myForm, b1, b2, b3, NULL); 2436 b_res = newtRunForm(myForm);2437 2432 newtFormDestroy(myForm); 2438 2433 newtPopWindow(); … … 2886 2881 mr_getline(tmp, stdin); 2887 2882 output = tmp[0]; 2888 free(tmp);2883 mr_free(tmp); 2889 2884 } 2890 2885 return (output); -
branches/3.1/mondo/src/mondorestore/mondo-rstr-tools.c
r2937 r3147 80 80 char *incoming = NULL; 81 81 char *question = NULL; 82 char *q; 82 83 83 84 assert_string_is_neither_NULL_nor_zerolength(infname); … … 209 210 if (is_this_device_mounted(g_isodir_device)) { 210 211 log_to_screen("WARNING - isodir is already mounted"); 211 already_mounted = TRUE;212 212 } else { 213 213 mr_asprintf(mount_isodir_command, "mount %s", g_isodir_device); … … 1082 1082 char *tmp; 1083 1083 char *tmp1 = NULL; 1084 char *q; 1084 1085 int res = 0; 1085 1086 pid_t pid; … … 1088 1089 malloc_string(tmp); 1089 1090 1090 getcwd(tmp, MAX_STR_LEN); 1091 chdir(bkpinfo->tmpdir); 1091 if (getcwd(tmp, MAX_STR_LEN) == NULL) { 1092 // FIXME 1093 } 1094 if (chdir(bkpinfo->tmpdir)) { 1095 // FIXME 1096 } 1092 1097 log_msg(1, "chdir(%s)", bkpinfo->tmpdir); 1093 1098 log_to_screen("Extracting filelist and biggielist from media..."); … … 1116 1121 } 1117 1122 } 1118 chdir(tmp); 1123 if (chdir(tmp)) { 1124 // FIXME 1125 } 1119 1126 1120 1127 log_msg(2, "Forking"); … … 1147 1154 unlink(MINDI_CACHE"/filelist.full.gz"); 1148 1155 if (g_text_mode) { 1149 printf("Restore which directory? --> "); 1150 mr_getline(tmp1, stdin); 1151 toggle_path_selection(filelist, tmp1, TRUE); 1152 if (strlen(tmp1) == 0) { 1156 q = NULL; 1157 while (q == NULL) { 1158 printf("Restore which directory? --> "); 1159 mr_getline(q, stdin); 1160 } 1161 toggle_path_selection(filelist, q, TRUE); 1162 if (strlen(q) == 0) { 1153 1163 res = 1; 1154 1164 } else { 1155 1165 res = 0; 1156 1166 } 1157 mr_free( tmp1);1167 mr_free(q); 1158 1168 } else { 1159 1169 res = edit_filelist(filelist); … … 1229 1239 newtSuspend(); 1230 1240 } 1231 (void)system("chroot " MNT_RESTORING);1241 paranoid_system("chroot " MNT_RESTORING); 1232 1242 if (!g_text_mode) { 1233 1243 newtResume(); … … 1271 1281 backup_crucial_file(MNT_RESTORING, "/boot/grub/menu.lst"); 1272 1282 backup_crucial_file(MNT_RESTORING, "/boot/grub/grub.cfg"); 1283 backup_crucial_file(MNT_RESTORING, "/boot/grub2/grub.cfg"); 1273 1284 backup_crucial_file(MNT_RESTORING, "/etc/lilo.conf"); 1274 1285 backup_crucial_file(MNT_RESTORING, "/etc/elilo.conf"); 1275 1286 backup_crucial_file(MNT_RESTORING, "/boot/grub/device.map"); 1287 backup_crucial_file(MNT_RESTORING, "/boot/grub2/device.map"); 1276 1288 backup_crucial_file(MNT_RESTORING, "/etc/mtab"); 1277 1289 device = read_cfg_var(MINDI_CACHE"/mondorestore.cfg", "bootloader.device"); … … 1385 1397 char *p = NULL; 1386 1398 1387 int res = 0;1388 1399 bool done; 1400 int res = 0; /* FALSE */ 1401 bool mntlistchg = FALSE; 1402 FILE *fin = NULL; 1389 1403 1390 1404 assert_string_is_neither_NULL_nor_zerolength(bd); … … 1397 1411 0, 1398 1412 "Modifying fstab, mtab, device.map and menu.lst/grub.cfg, and running GRUB... "); 1413 /* Did we changed the mountlist ? If yes, then force editing conf files */ 1414 if ((fin = fopen(MONDO_MNTLISTCHG, "r")) != NULL) { 1415 mntlistchg = TRUE; 1416 } 1399 1417 for (done = FALSE; !done;) { 1400 1418 p = popup_and_get_string("Boot device", "Please confirm/enter the boot device. If in doubt, try /dev/hda", boot_device); … … 1406 1424 continue; 1407 1425 } 1408 mr_asprintf(command, "stabgrub-me %s", p); 1409 mr_free(p); 1410 1411 res = run_program_and_log_output(command, 1); 1412 mr_free(command); 1413 1414 if (res) { 1426 /* Only try to adapt grub here first if the mountlist wasn't changed before */ 1427 if (! mntlistchg) { 1428 mr_asprintf(command, "stabgrub-me %s", p); 1429 mr_free(p); 1430 1431 res = run_program_and_log_output(command, 1); 1432 mr_free(command); 1433 } 1434 1435 if ((res) || (mntlistchg)){ 1415 1436 popup_and_OK 1416 1437 ("GRUB installation failed. You will now edit fstab, mtab, device.map and menu.lst/grub.cfg in order to fix grub install"); 1438 } else { 1439 popup_and_OK("The mountlist was changed. You will now edit fstab, mtab, device.map and menu.lst/grub.cfg in order to fix grub install"); 1440 } 1417 1441 if (!g_text_mode) { 1418 1442 newtSuspend(); … … 1426 1450 } else if (does_file_exist(MNT_RESTORING"/boot/grub/grub.cfg")) { 1427 1451 sprintf(tmp, "chroot %s %s /boot/grub/grub.cfg", MNT_RESTORING, editor); 1452 } else if (does_file_exist(MNT_RESTORING"/boot/grub2/grub.cfg")) { 1453 sprintf(tmp, "chroot %s %s /boot/grub2/grub.cfg", MNT_RESTORING, editor); 1428 1454 } 1429 1455 paranoid_system(tmp); 1430 sprintf(tmp, "chroot %s %s /boot/grub/device.map", MNT_RESTORING, editor); 1456 if (does_file_exist(MNT_RESTORING"/boot/grub/device.map")) { 1457 sprintf(tmp, "chroot %s %s /boot/grub/device.map", MNT_RESTORING, editor); 1458 } else if (does_file_exist(MNT_RESTORING"/boot/grub2/device.map")) { 1459 sprintf(tmp, "chroot %s %s /boot/grub2/device.map", MNT_RESTORING, editor); 1460 } 1431 1461 paranoid_system(tmp); 1432 1462 if (!g_text_mode) { … … 1439 1469 ("GRUB installation failed. Please fix the conf files so that a manual install using 'grub-install' or similar command works. You are now chroot()'ed to your restored system. Please type 'exit' when you are done."); 1440 1470 newtSuspend(); 1441 system("chroot " MNT_RESTORING);1471 paranoid_system("chroot " MNT_RESTORING); 1442 1472 newtResume(); 1443 1473 popup_and_OK("Thank you."); … … 1501 1531 ("Because of bugs in GRUB's own installer, GRUB was not installed properly. Please install the boot loader manually now, using this chroot()'ed shell prompt. Type 'exit' when you have finished."); 1502 1532 newtSuspend(); 1503 system("chroot " MNT_RESTORING);1533 paranoid_system("chroot " MNT_RESTORING); 1504 1534 newtResume(); 1505 1535 popup_and_OK("Thank you."); … … 1846 1876 FILE *fout; 1847 1877 char *incoming = NULL; 1878 char *q; 1848 1879 1849 1880 assert_string_is_neither_NULL_nor_zerolength(output_file); … … 1935 1966 "in preparation for the post-restoration reboot.", 1936 1967 "", mountlist->entries); 1937 chdir("/"); 1968 if (chdir("/")) { 1969 // FIXME 1970 } 1938 1971 for (i = 0; 1939 1972 i < 10 … … 2032 2065 /* @} - end restoreUtilityGroup */ 2033 2066 2034 void wait_until_software_raids_are_prepped(char *mdstat_file, 2035 int wait_for_percentage) 2067 void wait_until_software_raids_are_prepped(char *mdstat_file, int wait_for_percentage) 2036 2068 { 2037 2069 struct raidlist_itself *raidlist; 2038 int unfinished_mdstat_devices = 9999, i; 2070 int unfinished_mdstat_devices = 9999; 2071 int i = 0; 2039 2072 char *screen_message = NULL; 2040 2073 … … 2045 2078 while (unfinished_mdstat_devices > 0) { 2046 2079 // FIXME: Prefix '/dev/' should really be dynamic! 2047 if (parse_mdstat( raidlist, "/dev/")) {2080 if (parse_mdstat(MDSTAT_FILE, raidlist, "/dev/")) { 2048 2081 log_to_screen("Sorry, cannot read %s", MDSTAT_FILE); 2049 2082 log_msg(1,"Sorry, cannot read %s", MDSTAT_FILE); 2050 2083 return; 2051 2084 } 2052 for (unfinished_mdstat_devices = i =0; i <= raidlist->entries; i++) {2085 for (unfinished_mdstat_devices = 0; i <= raidlist->entries; i++) { 2053 2086 if (raidlist->el[i].progress < wait_for_percentage) { 2054 2087 unfinished_mdstat_devices++; … … 2067 2100 sleep(2); 2068 2101 // FIXME: Prefix '/dev/' should really be dynamic! 2069 if (parse_mdstat( raidlist, "/dev/")) {2102 if (parse_mdstat(MDSTAT_FILE, raidlist, "/dev/")) { 2070 2103 break; 2071 2104 } -
branches/3.1/mondo/src/mondorestore/mondoprep.h
r2316 r3147 82 82 83 83 84 char *truncate_to_drive_name(c har *partition);84 char *truncate_to_drive_name(const char *partition); 85 85 void create_mountlist_for_drive(struct mountlist_itself *mountlist, 86 86 char *drive_name, -
branches/3.1/mondo/src/mondorestore/mondorestore.c
r2937 r3147 63 63 */ 64 64 bool g_ISO_restore_mode = FALSE; /* are we in Iso Mode? */ 65 66 /* Whether we should fail immediately at first error */ 67 bool g_fail_immediately = FALSE; 65 68 66 69 /** … … 618 621 ("Label/Identify your ext2/ext3/ext4 partitions if necessary?")) { 619 622 mvaddstr_and_log_it(g_currentY, 0, 620 "Using tune2fs to identify your ext2,3,4 partitions");623 "Using tune2fs/tune4fs to identify your ext2,3,4 partitions"); 621 624 if (does_file_exist("/tmp/fstab.new")) { 622 625 mr_asprintf(fstab_fname, "/tmp/fstab.new"); … … 710 713 711 714 712 /* MONDO - saving your a$$since Feb 18th, 2000 */715 /* MONDO - saving your systems since Feb 18th, 2000 */ 713 716 714 717 … … 730 733 int retval = 0; 731 734 int res = 0; 732 bool boot_loader_installed = FALSE;733 735 char *tmp = NULL; 734 736 char *tmp1 = NULL; … … 829 831 log_msg(1, 830 832 "Great! Boot loader was installed. No need for msg at end."); 831 boot_loader_installed = TRUE;832 833 } 833 834 clean_blkid(); … … 836 837 mvaddstr_and_log_it(g_currentY, 837 838 0, 838 "Using tune2fs to identify your ext2,3partitions");839 "Using tune2fs/tune4fs to identify your ext2,3,4 partitions"); 839 840 840 841 mr_asprintf(tmp, "label-partitions-as-necessary %s < /tmp/fstab >> %s 2>> %s", MINDI_CACHE"/mountlist.txt", MONDO_LOGFILE, MONDO_LOGFILE); … … 1601 1602 1602 1603 if (use_star) { 1603 mr_asprintf(command, "star -x -force-remove - U " STAR_ACL_SZ " errctl=file=%s", tarball_fname);1604 mr_asprintf(command, "star -x -force-remove -sparse -U " STAR_ACL_SZ " file=%s", tarball_fname); 1604 1605 if (strstr(tarball_fname, ".bz2")) { 1605 1606 mr_strcat(command, " -bz"); … … 1639 1640 } 1640 1641 1641 if (g_getfattr) { 1642 log_msg(1, "Setting fattr list %s", xattr_fname); 1643 if (length_of_file(xattr_fname) > 0) { 1644 res = set_fattr_list(filelist_subset_fname, xattr_fname); 1645 if (res) { 1646 log_to_screen("Errors occurred while setting extended attributes"); 1647 } else { 1648 log_msg(1, "I set xattr OK"); 1642 if (! use_star) { 1643 if (g_getfattr) { 1644 log_msg(1, "Setting fattr list %s", xattr_fname); 1645 if (length_of_file(xattr_fname) > 0) { 1646 res = set_fattr_list(filelist_subset_fname, xattr_fname); 1647 if (res) { 1648 log_to_screen("Errors occurred while setting extended attributes"); 1649 } else { 1650 log_msg(1, "I set xattr OK"); 1651 } 1652 retval += res; 1649 1653 } 1650 retval += res; 1651 } 1652 } 1653 if (g_getfacl) { 1654 log_msg(1, "Setting acl list %s", acl_fname); 1655 if (length_of_file(acl_fname) > 0) { 1656 res = set_acl_list(filelist_subset_fname, acl_fname); 1657 if (res) { 1658 log_to_screen 1659 ("Errors occurred while setting access control lists"); 1660 } else { 1661 log_msg(1, "I set ACL OK"); 1654 } 1655 if (g_getfacl) { 1656 log_msg(1, "Setting acl list %s", acl_fname); 1657 if (length_of_file(acl_fname) > 0) { 1658 res = set_acl_list(filelist_subset_fname, acl_fname); 1659 if (res) { 1660 log_to_screen("Errors occurred while setting access control lists"); 1661 } else { 1662 log_msg(1, "I set ACL OK"); 1663 } 1664 retval += res; 1662 1665 } 1663 retval += res; 1664 } 1665 } 1666 if (retval) { 1666 } 1667 } else { 1668 retval = res; 1669 } 1670 // Be verbose for star 1671 if (retval || use_star) { 1667 1672 mr_asprintf(command, "cat %s >> %s", temp_log, MONDO_LOGFILE); 1668 system(command);1673 paranoid_system(command); 1669 1674 paranoid_free(command); 1670 1675 1671 log_msg(2, "Errors occurred while processing fileset #%d", 1672 current_tarball_number); 1676 if (retval) { 1677 log_msg(2, "Errors occurred while processing fileset #%d", current_tarball_number); 1678 } 1673 1679 } else { 1674 1680 log_msg(2, "Fileset #%d processed OK", current_tarball_number); … … 1782 1788 if (strstr(tarball_fname, ".star.")) { 1783 1789 use_star = TRUE; 1784 mr_asprintf(command, "star - t file=%s %s", afio_fname, executable);1790 mr_asprintf(command, "star -sparse -t file=%s %s", afio_fname, executable); 1785 1791 } else { 1786 1792 use_star = FALSE; … … 1816 1822 if (strstr(tarball_fname, ".star.")) { 1817 1823 // star 1818 mr_asprintf(command, "star - x file=%s %s", afio_fname, executable);1824 mr_asprintf(command, "star -sparse -x file=%s %s", afio_fname, executable); 1819 1825 if (filelist) { 1820 1826 mr_strcat(command, " list=%s", filelist_subset_fname); … … 2216 2222 res = read_header_block_from_stream(&biggie_size, biggie_fname, &ctrl_chr); 2217 2223 if (ctrl_chr == BLK_START_EXTENDED_ATTRIBUTES) { 2218 res = 2219 read_EXAT_files_from_tape(&biggie_size, biggie_fname, &ctrl_chr, xattr_fname, acl_fname); 2224 res = read_EXAT_files_from_tape(&biggie_size, biggie_fname, &ctrl_chr, xattr_fname, acl_fname); 2220 2225 } 2221 2226 … … 2354 2359 mr_free(tmp); 2355 2360 2356 chdir(bkpinfo->restore_path); /* I don't know why this is needed _here_ but it seems to be. -HR, 02/04/2002 */ 2361 if (chdir(bkpinfo->restore_path)) { /* I don't know why this is needed _here_ but it seems to be. -HR, 02/04/2002 */ 2362 //FIXME 2363 } 2357 2364 2358 2365 run_program_and_log_output("pwd", 5); … … 2470 2477 log_msg(2, "restore_everything() --- starting"); 2471 2478 g_current_media_number = 1; 2472 getcwd(cwd, MAX_STR_LEN - 1); 2479 if (getcwd(cwd, MAX_STR_LEN - 1)) { 2480 // FIXME 2481 } 2473 2482 mr_asprintf(tmp, "mkdir -p %s", bkpinfo->restore_path); 2474 2483 run_program_and_log_output(tmp, FALSE); … … 2476 2485 2477 2486 log_msg(1, "Changing dir to %s", bkpinfo->restore_path); 2478 chdir(bkpinfo->restore_path); 2479 getcwd(newpath, MAX_STR_LEN - 1); 2487 if (chdir(bkpinfo->restore_path)) { 2488 //FIXME 2489 } 2490 if (getcwd(newpath, MAX_STR_LEN - 1)) { 2491 // FIXME 2492 } 2480 2493 log_msg(1, "path is now %s", newpath); 2481 2494 log_msg(1, "restoring everything"); … … 2511 2524 resB = restore_all_biggiefiles_from_CD(filelist); 2512 2525 } 2513 chdir(cwd); 2526 if (chdir(cwd)) { 2527 //FIXME 2528 } 2514 2529 if (resA + resB) { 2515 2530 log_to_screen("Errors occurred while data was being restored."); … … 2654 2669 if (argc == 2 && strcmp(argv[1], "--edit-mountlist") == 0) { 2655 2670 #ifdef __FreeBSD__ 2656 system("mv -f /tmp/raidconf.txt /etc/raidtab");2671 paranoid_system("mv -f /tmp/raidconf.txt /etc/raidtab"); 2657 2672 if (!does_file_exist("/etc/raidtab")) 2658 system("vinum printconfig > /etc/raidtab");2673 paranoid_system("vinum printconfig > /etc/raidtab"); 2659 2674 #endif 2660 2675 load_raidtab_into_raidlist(raidlist, RAIDTAB_FNAME); 2661 2676 res = let_user_edit_the_mountlist(mountlist, raidlist); 2662 2677 #ifdef __FreeBSD__ 2663 system("mv -f /etc/raidtab /tmp/raidconf.txt");2678 paranoid_system("mv -f /etc/raidtab /tmp/raidconf.txt"); 2664 2679 #endif 2665 2680 paranoid_MR_finish(res); … … 2734 2749 2735 2750 if (argc == 3 && strcmp(argv[1], "--mdconv") == 0) { 2736 finish(create_raidtab_from_mdstat( argv[2]));2751 finish(create_raidtab_from_mdstat(MDSTAT_FILE,argv[2])); 2737 2752 } 2738 2753 … … 2820 2835 mr_asprintf(tmp, "sshfs -o ro %s /tmp/isodir", bkpinfo->netfs_mount); 2821 2836 } 2822 } else { 2823 if (bkpinfo->netfs_user) { 2824 mr_asprintf(tmp, "mount %s@%s -o nolock,ro /tmp/isodir", bkpinfo->netfs_user,bkpinfo->netfs_mount); 2837 } else { 2838 if (strstr(bkpinfo->netfs_proto, "smbfs")) { 2839 if (bkpinfo->netfs_user) { 2840 mr_asprintf(tmp, "mount -t cifs %s /tmp/isodir -o user=%s,nolock,ro ", bkpinfo->netfs_mount,bkpinfo->netfs_user); 2841 } else { 2842 mr_asprintf(tmp, "mount -t cifs %s /tmp/isodir -o nolock,ro ", bkpinfo->netfs_mount); 2843 } 2825 2844 } else { 2826 mr_asprintf(tmp, "mount %s -o nolock,ro /tmp/isodir", bkpinfo->netfs_mount); 2845 if (bkpinfo->netfs_user) { 2846 mr_asprintf(tmp, "mount %s@%s -o nolock,ro /tmp/isodir", bkpinfo->netfs_user,bkpinfo->netfs_mount); 2847 } else { 2848 mr_asprintf(tmp, "mount %s -o nolock,ro /tmp/isodir", bkpinfo->netfs_mount); 2849 } 2827 2850 } 2828 2851 } … … 2956 2979 if (strstr(bkpinfo->tmpdir,"mondo.tmp.") != NULL) { 2957 2980 mr_asprintf(tmp, "rm -Rf %s", bkpinfo->tmpdir); 2958 system(tmp);2981 paranoid_system(tmp); 2959 2982 mr_free(tmp); 2960 2983 } -
branches/3.1/mondo/src/restore-scripts/mondo/grub-MR
r2937 r3147 107 107 if [ "$MNT_RESTORING" ] ; then 108 108 if [ -x $MNT_RESTORING/usr/sbin/grub-install.unsupported ]; then 109 echo "Now I'll use grub-install.unsupportedin chroot" >> $LOGFILE110 chroot $MNT_RESTORING /usr/sbin/grub-install .unsupported $1>> $LOGFILE 2>> $LOGFILE109 echo "Now I'll use OpenSuSE/SLES new grub-install in chroot" >> $LOGFILE 110 chroot $MNT_RESTORING /usr/sbin/grub-install >> $LOGFILE 2>> $LOGFILE 111 111 res=$? 112 echo "grub-install .unsupportedin chroot returned $res" >> $LOGFILE112 echo "grub-install in chroot returned $res" >> $LOGFILE 113 113 fi 114 114 else 115 115 if [ -x /usr/sbin/grub-install.unsupported ]; then 116 echo "Now I'll use grub-install.unsupportedlocally" >> $LOGFILE117 /usr/sbin/grub-install .unsupported $1>> $LOGFILE 2>> $LOGFILE116 echo "Now I'll use OpenSuSE/SLES new grub-install locally" >> $LOGFILE 117 /usr/sbin/grub-install >> $LOGFILE 2>> $LOGFILE 118 118 res=$? 119 echo "grub-install .unsupportedreturned $res" >> $LOGFILE119 echo "grub-install returned $res" >> $LOGFILE 120 120 fi 121 121 fi … … 124 124 echo "Now I'll use grub-install" >> $LOGFILE 125 125 if [ "$MNT_RESTORING" ] ; then 126 echo "Launching: chroot $MNT_RESTORING grub-install $1" >> $LOGFILE 126 127 chroot $MNT_RESTORING grub-install $1 >> $LOGFILE 2>> $LOGFILE 127 128 res=$? 128 129 else 130 echo "Launching: grub-install $1" >> $LOGFILE 129 131 grub-install $1 >> $LOGFILE 2>> $LOGFILE 130 132 res=$? 131 133 fi 132 134 echo "grub-install returned $res" >> $LOGFILE 135 [ "$res" -eq "0" ] && exit 0 136 137 138 echo "Now I'll use grub2-install" >> $LOGFILE 139 if [ "$MNT_RESTORING" ] ; then 140 chroot $MNT_RESTORING grub2-install $1 >> $LOGFILE 2>> $LOGFILE 141 res=$? 142 else 143 grub2-install $1 >> $LOGFILE 2>> $LOGFILE 144 res=$? 145 fi 146 echo "grub2-install returned $res" >> $LOGFILE 133 147 [ "$res" -eq "0" ] && exit 0 134 148 … … 190 204 elif [ -f "/mnt/RESTORING/boot/grub/grub.cfg" ]; then 191 205 grep -vE '^#' /boot/grub/grub.cfg > /mnt/RESTORING/tmp/grub.conf 206 elif [ -f "/mnt/RESTORING/boot/grub2/grub.cfg" ]; then 207 grep -vE '^#' /boot/grub2/grub.cfg > /mnt/RESTORING/tmp/grub.conf 192 208 else 193 209 echo "Unable to find Grub conf file" | tee -a $LOGFILE -
branches/3.1/mondo/src/restore-scripts/mondo/label-partitions-as-necessary
r2462 r3147 28 28 else 29 29 if [ "$format" = "ext2" ] || [ "$format" = "ext3" ] || [ "$format" = "ext4" ]; then 30 command="tune2fs $opttun $label $mountpt" 30 if [ "$format" = "ext4" ] && [ -x "/sbin/tune4fs" ]; then 31 command="/sbin/tune4fs $opttun $label $mountpt" 32 else 33 command="tune2fs $opttun $label $mountpt" 34 fi 31 35 LogIt "Running $command" 32 36 $command … … 38 42 if [ "$opttun" = "-U" ]; then 39 43 LogIt "Creating uuid $label on swap partition $mountpt" 40 echo -n "$label" | perl -ne 's/-//g;chomp;print pack "H*",$_' | dd conv=notrunc "of=$mountpt" obs=1 seek=1036 44 if [ -x "/sbin/swaplabel" ]; then 45 /sbin/swaplabel $opttun $label $mountpt 46 else 47 echo -n "$label" | perl -ne 's/-//g;chomp;print pack "H*",$_' | dd conv=notrunc "of=$mountpt" obs=1 seek=1036 48 fi 41 49 else 42 command="mkswap $opttun $label $mountpt" 50 if [ -x "/sbin/swaplabel" ]; then 51 command="/sbin/swaplabel $opttun $label $mountpt" 52 else 53 command="mkswap $opttun $label $mountpt" 54 fi 43 55 LogIt "Running $command" 44 56 $command 45 57 fi 46 58 else 47 LogIt "I am NOT going to run tune2 fs/reiserfstune: the partition is format '$format', which doesn't like tune2fs/reiserfstune anyway"59 LogIt "I am NOT going to run tune2|4fs/reiserfstune: the partition is format '$format', which doesn't like tune2|4fs/reiserfstune anyway" 48 60 fi 49 61 fi … … 53 65 # --------------------------------------------- 54 66 55 LogIt "Identifying your drives with tune2fs"67 LogIt "Identifying your drives with FS tune tool" 56 68 if [ "$#" -ne "1" ] ; then 57 69 LogIt "label-partitions-as-necessary $MINDI_CACHE/mountlist.txt < /tmp/fstab.new" 1 -
branches/3.1/mondo/src/restore-scripts/mondo/make-me-bootable
r2196 r3147 2 2 3 3 4 if [ "$#" -ne " 1" ] && [ "$#" -ne "2" ] ; then5 echo "make-me-bootable <fname> (dummy)"4 if [ "$#" -ne "2" ] && [ "$#" -ne "3" ] ; then 5 echo "make-me-bootable <fname> <drive> [noaction]" 6 6 exit 1 7 7 fi 8 8 9 d ummy=$29 drivetouse=$2 10 10 boot_drv="" 11 11 boot_part="" 12 12 root_drv="" 13 13 root_part="" 14 if [ ! "$LOGFILE" ]; then 15 LOGFILE="/tmp/mondorestore2.log" 16 fi 17 dummy="$3" 14 18 15 HAVE_ACTIVE="false" 19 activepart=`parted2fdisk -l $drivetouse | tr -s '\t' ' ' | grep "$drivetouse" | grep '*' | cut -d' ' -f1` 20 16 21 for i in `cat $1 | tr -s '\t' ' ' | cut -d' ' -f1 | grep -vE "/dev/fd|none|#"` ; do 17 mountpt=`grep "$i " $1 | tr -s '\t' ' ' | cut -d' ' -f2`18 format=`grep "$i " $1 | tr -s '\t' ' ' | cut -d' ' -f3`19 22 # Warning wrong if LVM ! 20 23 drive=`echo $i | sed -e 's/[0-9]*$//' -e 's/\([0-9]\)p$/\1/'` 21 partno=`echo $i | sed -e 's/^.*[^0-9]\([0-9]*\)$/\1/'` 24 if [ "$drivetouse" = "$drive" ]; then 25 # We can continue as this is the drive we ned to work on 26 partno=`echo $i | sed -e 's/^.*[^0-9]\([0-9]*\)$/\1/'` 27 mountpt=`grep "$i " $1 | tr -s '\t' ' ' | cut -d' ' -f2` 22 28 23 if [ "$HAVE_ACTIVE" = "false" ] && [ "`parted2fdisk -l $drive | tr -s '\t' ' ' | grep "$i " | grep -v "*"`" ] ; then24 29 if [ "$mountpt" = "/" ] ; then 25 30 root_drv=$drive 26 root_part=$partno31 root_part=$partno 27 32 elif [ "$mountpt" = "/boot" ] ; then 28 33 boot_drv=$drive … … 46 51 47 52 if [ "$drive" ] ; then 53 if [ "$partno" = "0" ] || [ ! "$partno" ] ; then 54 partno="1" 55 fi 56 cmd="" 57 for p in "$activepart"; do 58 # First desactivate active partitions (coming from previous usage) 59 cmd="${cmd}a\n$p\n" 60 if [ "$dummy" != "" ] ; then 61 echo "Will desactivate $p on $drive" >> $LOGFILE 62 fi 63 done 64 # Then activate the one which should 48 65 if [ "$dummy" != "" ] ; then 49 if [ "$partno" = "0" ] || [ ! "$partno" ] ; then 50 partno="1" 51 fi 52 echo "$partno" 53 else 54 echo -en "a\n$partno\nw\n" | parted2fdisk $drive >> $LOGFILE 2>> $LOGFILE 55 fi 66 echo "Would activate $partno on $drive" >> $LOGFILE 67 else 68 echo -en "${cmd}a\n$partno\np\nw\n" | parted2fdisk $drive >> $LOGFILE 2>> $LOGFILE 69 fi 56 70 fi 57 71 exit 0 -
branches/3.1/mondo/src/restore-scripts/mondo/stabgrub-me
r2508 r3147 57 57 LocateOldGrub() { 58 58 old_grubconf="" 59 if [ -f "/mnt/RESTORING/boot/grub/menu.lst" ] || [ -f "/mnt/RESTORING/boot/grub/grub.cfg" ] ; then59 if [ -f "/mnt/RESTORING/boot/grub/menu.lst" ] || [ -f "/mnt/RESTORING/boot/grub/grub.cfg" ] || [ -f "/mnt/RESTORING/boot/grub2/grub.cfg" ] ; then 60 60 LogIt "No need for menu.lst/grub.cfg search." 2 61 61 if [ -f "/mnt/RESTORING/boot/grub/menu.lst" ]; then … … 63 63 elif [ -f "/mnt/RESTORING/boot/grub/grub.cfg" ]; then 64 64 old_grubconf=/mnt/RESTORING/boot/grub/grub.cfg 65 elif [ -f "/mnt/RESTORING/boot/grub2/grub.cfg" ]; then 66 old_grubconf=/mnt/RESTORING/boot/grub2/grub.cfg 65 67 fi 66 68 if [ -L "$old_grubconf" ] ; then … … 68 70 if [ _"`echo $l | cut -c1`" = _"/" ]; then 69 71 # If readlink gives an absolute path it's related to the chroot 70 old_grubconf=/mnt/RESTORING/$l72 old_grubconf=/mnt/RESTORING/$l 71 73 else 72 74 # If readlink gives a relative path, it's in the same dir 73 old_grubconf=/mnt/RESTORING/boot/grub/$l 75 d=`dirname "$old_grubconf"` 76 old_grubconf=$d/$l 74 77 fi 75 fi 78 fi 76 79 return 0 77 80 fi … … 128 131 elif [ -f /mnt/RESTORING/boot/grub/grub.cfg ]; then 129 132 new_grubconf=/mnt/RESTORING/boot/grub/grub.cfg.NEW 133 elif [ -f /mnt/RESTORING/boot/grub2/grub.cfg ]; then 134 new_grubconf=/mnt/RESTORING/boot/grub2/grub.cfg.NEW 130 135 fi 131 136 # change back to /tmp if /mnt/RESTORING/etc be problematic -
branches/3.1/mondo/test/Makefile.am
r2310 r3147 3 3 ## The program 4 4 sbin_PROGRAMS = mrtest_mountlist mrtest_truncname mrtest_conf mrtest_mem mrtest_msg mrtest_string 5 mrtestdir = $(pkglibdir)/test 6 mrtest_PROGRAMS = mrtest_mountlist mrtest_truncname mrtest_stresc 5 7 mrtest_mountlist_SOURCES = test-mountlist.c ${top_builddir}/src/mondorestore/mondo-prep.c ${top_builddir}/src/mondorestore/mondo-rstr-newt.c ${top_builddir}/src/mondorestore/mondo-rstr-tools.c 6 8 mrtest_mountlist_LDADD = ${top_builddir}/src/common/libmondo.a ${top_builddir}/src/lib/libmr.a @MONDORESTORE_STATIC@ … … 15 17 mrtest_string_SOURCES = test-string.c 16 18 mrtest_string_LDADD = ${top_builddir}/src/common/libmondo.a ${top_builddir}/src/lib/libmr.a @MONDORESTORE_STATIC@ 19 mrtest_stresc_SOURCES = test-mr_stresc.c 20 mrtest_stresc_LDADD = ${top_builddir}/src/lib/libmr.a @MONDORESTORE_STATIC@ -
branches/3.1/mondo/test/test-mountlist.c
r2623 r3147 3 3 * 4 4 * Test program for mountlist management at restore time 5 * C n be used on host system with valgrind easier than with mondorestore5 * Can be used on host system with valgrind easier than with mondorestore 6 6 */ 7 7 #include <stdio.h> … … 12 12 #include "../mondorestore/mondorestore.h" 13 13 #include "../mondorestore/mr-externs.h" 14 15 #define RAIDTAB_TEST "/tmp/raidtab" 16 #define MOUNTLIST_TEST "/tmp/mountlist.txt" 14 17 15 18 extern void twenty_seconds_til_yikes(void); … … 23 26 extern int g_partition_table_locked_up; 24 27 extern int g_noof_rows; 28 29 /* Whether we should fail immediately at first error */ 30 bool g_fail_immediately = FALSE; 25 31 26 32 bool g_ISO_restore_mode = FALSE; /* are we in Iso Mode? */ … … 64 70 65 71 setup_newt_stuff(); 72 mr_asprintf(&g_mountlist_fname, MOUNTLIST_TEST); 66 73 log_it("before mountlist"); 67 74 load_mountlist(mountlist, MINDI_CACHE"/mountlist.txt"); … … 69 76 resize_mountlist_proportionately_to_suit_new_drives(mountlist); 70 77 log_it("after resize_mountlist_proportionately_to_suit_new_drives"); 71 load_raidtab_into_raidlist(raidlist, RAIDTAB_ FNAME);78 load_raidtab_into_raidlist(raidlist, RAIDTAB_TEST); 72 79 log_it("after load_raidtab_into_raidlist"); 73 80 edit_mountlist(MINDI_CACHE"/mountlist.txt", mountlist, raidlist); … … 78 85 mr_free(flaws_str); 79 86 87 log_it("before check raidlist content"); 88 log_it("after check raidlist content"); 89 90 log_it("before create mdadm dev"); 91 create_raid_device_via_mdadm(raidlist,"/dev/md0",FALSE); 92 create_raid_device_via_mdadm(raidlist,"/dev/md1",FALSE); 93 log_it("after create mdadm dev"); 94 95 free(mountlist); 96 free(raidlist); 80 97 mr_free(MONDO_LOGFILE); 98 mr_free(g_mountlist_fname); 81 99 exit(0); 82 100 } -
branches/3.1/mondo/test/test-truncname.c
r2623 r3147 23 23 extern int g_noof_rows; 24 24 25 /* Whether we should fail immediately at first error */ 26 bool g_fail_immediately = FALSE; 27 25 28 bool g_ISO_restore_mode = FALSE; /* are we in Iso Mode? */ 26 29 bool g_I_have_just_nuked = FALSE; … … 37 40 38 41 extern char *MONDO_LOGFILE; 39 extern char *truncate_to_drive_name(c har *);42 extern char *truncate_to_drive_name(const char *); 40 43 /* We don't have a cleanup function yet */ 41 44 void (*mr_cleanup)(int) = NULL;
Note:
See TracChangeset
for help on using the changeset viewer.