Changeset 3191 in MondoRescue for branches/3.2/mondo/src/common/libmondo-verify.c
- Timestamp:
- Sep 25, 2013, 8:55:45 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.2/mondo/src/common/libmondo-verify.c
r3185 r3191 55 55 assert(bkpinfo != NULL); 56 56 assert_string_is_neither_NULL_nor_zerolength(mountpoint); 57 sprintf(output, "%s/archives/%d.star.%s", mountpoint, setno, 58 bkpinfo->zip_suffix); 57 sprintf(output, "%s/archives/%d.star.%s", mountpoint, setno, bkpinfo->zip_suffix); 59 58 if (!does_file_exist(output)) { 60 sprintf(output, "%s/archives/%d.afio.%s", mountpoint, setno, 61 bkpinfo->zip_suffix); 59 sprintf(output, "%s/archives/%d.afio.%s", mountpoint, setno, bkpinfo->zip_suffix); 62 60 } 63 61 return (output); … … 80 78 { 81 79 /*@ buffer ********************************************************** */ 82 char *command ;83 char *afio_found_changes ;80 char *command = NULL; 81 char *afio_found_changes = NULL; 84 82 85 83 /*@ int ************************************************************* */ … … 89 87 long afio_diffs = 0; 90 88 91 command = malloc(2000);92 afio_found_changes = malloc(500);93 89 assert_string_is_neither_NULL_nor_zerolength(changedfiles_fname); 94 90 assert_string_is_neither_NULL_nor_zerolength(ignorefiles_fname); 95 91 assert_string_is_neither_NULL_nor_zerolength(stderr_fname); 96 92 97 sprintf(afio_found_changes, "%s.afio", ignorefiles_fname); 98 paranoid_system("sync"); 99 100 /* sprintf (command, 101 "grep \"afio: \" %s | awk '{j=substr($0,8); i=index(j,\": \");printf \"/%%s\\n\",substr(j,1,i-2);}' | sort -u | grep -v \"incheckentry.*xwait\" | grep -vx \"/afio:.*\" | grep -vx \"/dev/.*\" > %s", 102 stderr_fname, afio_found_changes); 103 */ 93 mr_asprintf(afio_found_changes, "%s.afio", ignorefiles_fname); 94 sync(); 104 95 105 96 log_msg(1, "Now scanning log file for 'afio: ' stuff"); 106 sprintf(command, 107 "grep \"afio: \" %s | sed 's/afio: //' | grep -vE '^/dev/.*$' >> %s", 108 stderr_fname, afio_found_changes); 97 mr_asprintf(command, "grep \"afio: \" %s | sed 's/afio: //' | grep -vE '^/dev/.*$' >> %s", stderr_fname, afio_found_changes); 109 98 log_msg(2, command); 110 99 res = system(command); 100 mr_free(command); 101 111 102 if (res) { 112 103 log_msg(2, "Warning - failed to think"); … … 114 105 115 106 log_msg(1, "Now scanning log file for 'star: ' stuff"); 116 sprintf(command, 117 "grep \"star: \" %s | sed 's/star: //' | grep -vE '^/dev/.*$' >> %s", 118 stderr_fname, afio_found_changes); 107 mr_asprintf(command, "grep \"star: \" %s | sed 's/star: //' | grep -vE '^/dev/.*$' >> %s", stderr_fname, afio_found_changes); 119 108 log_msg(2, command); 120 109 res = system(command); 110 mr_free(command); 111 121 112 if (res) { 122 113 log_msg(2, "Warning - failed to think"); 123 114 } 124 // exclude_nonexistent_files (afio_found_changes);125 115 afio_diffs = count_lines_in_file(afio_found_changes); 126 sprintf(command, 127 "sort %s %s %s | uniq -c | awk '{ if ($1==\"2\") {print $2;};}' | grep -v \"incheckentry xwait()\" > %s", 128 ignorefiles_fname, afio_found_changes, afio_found_changes, 129 changedfiles_fname); 116 mr_asprintf(command, "sort %s %s %s | uniq -c | awk '{ if ($1==\"2\") {print $2;};}' | grep -v \"incheckentry xwait()\" > %s", ignorefiles_fname, afio_found_changes, afio_found_changes, changedfiles_fname); 117 mr_free(afio_found_changes); 130 118 log_msg(2, command); 131 119 paranoid_system(command); 132 paranoid_free(command); 133 paranoid_free(afio_found_changes); 120 mr_free(command); 134 121 return (afio_diffs); 135 122 } … … 151 138 152 139 /*@ buffers ********************************************************* */ 153 char *tmp ;140 char *tmp = NULL; 154 141 char *mds = NULL; 155 142 … … 162 149 assert_string_is_neither_NULL_nor_zerolength(mountpoint); 163 150 assert(bkpinfo != NULL); 164 malloc_string(tmp);165 151 166 152 for (set_number = 0; … … 175 161 if (g_last_afioball_number != set_number - 1) { 176 162 if (set_number == 0) { 177 log_msg(1, 178 "Weird error in verify_afioballs_on_CD() but it's really a cosmetic error, nothing more"); 163 log_msg(1, "Weird error in verify_afioballs_on_CD() but it's really a cosmetic error, nothing more"); 179 164 } else { 180 165 retval++; 181 sprintf(tmp, "Warning - missing set(s) between %d and %d\n", 182 g_last_afioball_number, set_number - 1); 183 log_to_screen(tmp); 166 log_to_screen("Warning - missing set(s) between %d and %d\n", g_last_afioball_number, set_number - 1); 184 167 } 185 168 } 186 169 mds = media_descriptor_string(bkpinfo->backup_media_type); 187 sprintf(tmp, "Verifying %s #%d's tarballs", mds, g_current_media_number);170 mr_asprintf(tmp, "Verifying %s #%d's tarballs", mds, g_current_media_number); 188 171 mr_free(mds); 189 172 190 173 open_evalcall_form(tmp); 174 mr_free(tmp); 191 175 192 176 for (total_sets = set_number; … … 208 192 g_last_afioball_number = set_number - 1; 209 193 close_evalcall_form(); 210 paranoid_free(tmp);211 194 return (retval); 212 195 } … … 227 210 228 211 /*@ buffer ********************************************************** */ 229 char *tmp; 230 char *mountpoint; 231 // char ca, cb; 232 char *command; 212 char *tmp = NULL; 213 char *mountpoint = NULL; 214 char *command = NULL; 233 215 char *mds = NULL; 234 char *sz_exe ;216 char *sz_exe = NULL; 235 217 static char *bufblkA = NULL; 236 218 static char *bufblkB = NULL; … … 252 234 FILE *fin; 253 235 int retval = 0; 254 // long long outlen; 255 256 malloc_string(tmp); 257 malloc_string(mountpoint); 258 malloc_string(command); 259 malloc_string(sz_exe); 236 260 237 if (!bufblkA) { 261 238 if (!(bufblkA = malloc(maxbufsize))) { … … 274 251 if (bkpinfo->compression_level > 0) { 275 252 if (bkpinfo->use_lzo) { 276 strcpy(sz_exe, "lzop");253 mr_asprintf(sz_exe, "lzop"); 277 254 } else if (bkpinfo->use_gzip) { 278 strcpy(sz_exe, "gzip"); 255 mr_asprintf(sz_exe, "gzip"); 256 } else if (bkpinfo->use_lzma) { 257 mr_asprintf(sz_exe, "lzma"); 279 258 } else { 280 strcpy(sz_exe, "bzip2"); 281 } 282 } else { 283 sz_exe[0] = '\0'; 259 mr_asprintf(sz_exe, "bzip2"); 260 } 284 261 } 285 262 286 263 log_it("before vsbf"); 287 264 mds = media_descriptor_string(bkpinfo->backup_media_type); 288 sprintf(tmp, "Verifying %s#%d's big files", mds, g_current_media_number);265 mr_asprintf(tmp, "Verifying %s#%d's big files", mds, g_current_media_number); 289 266 mr_free(mds); 290 267 291 268 open_evalcall_form(tmp); 269 mr_free(tmp); 270 292 271 log_it("after vsbf"); 293 sprintf(mountpoint, "%s/archives", mtpt);272 mr_asprintf(mountpoint, "%s/archives", mtpt); 294 273 if (last_bigfile_num == -1) { 295 274 bigfile_num = 0; … … 302 281 slice_num = last_slice_num + 1; 303 282 } 304 while (does_file_exist 305 (slice_fname 306 (bigfile_num, slice_num, mountpoint, bkpinfo->zip_suffix)) 283 while (does_file_exist(slice_fname(bigfile_num, slice_num, mountpoint, bkpinfo->zip_suffix)) 307 284 || 308 does_file_exist(slice_fname 309 (bigfile_num, slice_num, mountpoint, ""))) { 285 does_file_exist(slice_fname(bigfile_num, slice_num, mountpoint, ""))) { 310 286 // handle slices until end of CD 311 287 if (slice_num == 0) { 312 log_msg(2, "ISO=%d bigfile=%ld --START--", 313 g_current_media_number, bigfile_num); 314 if (! 315 (fin = 316 fopen(slice_fname(bigfile_num, slice_num, mountpoint, ""), 317 "r"))) { 288 log_msg(2, "ISO=%d bigfile=%ld --START--", g_current_media_number, bigfile_num); 289 if (! (fin = fopen(slice_fname(bigfile_num, slice_num, mountpoint, ""), "r"))) { 318 290 log_msg(2, "Cannot open bigfile's info file"); 319 291 } else { 320 if (fread 321 ((void *) &biggiestruct, 1, sizeof(biggiestruct), 322 fin) < sizeof(biggiestruct)) { 292 if (fread ((void *) &biggiestruct, 1, sizeof(biggiestruct), fin) < sizeof(biggiestruct)) { 323 293 log_msg(2, "Unable to get biggiestruct"); 324 294 } 325 295 paranoid_fclose(fin); 326 296 } 327 sprintf(tmp, "%s/%s", bkpinfo->restore_path, 328 biggiestruct.filename); 329 log_msg(2, "Opening biggiefile #%ld - '%s'", bigfile_num, tmp); 330 if (!(forig = fopen(tmp, "r"))) { 331 log_msg(2, "Failed to open bigfile. Darn."); 332 log_to_screen("%s/%s not found on live filesystem", 333 bkpinfo->restore_path, 334 biggiestruct.filename); 335 mr_asprintf(mds, "echo \"%s/%s not found\" >> %s/biggies.changed", 336 bkpinfo->restore_path, 337 biggiestruct.filename, 338 bkpinfo->tmpdir); 339 paranoid_system(mds); 340 paranoid_free(mds); 341 342 bigfile_num++; 343 slice_num = 0; 344 retval++; 297 if (bkpinfo->restore_path) { 298 mr_asprintf(tmp, "%s/%s", bkpinfo->restore_path, biggiestruct.filename); 299 log_msg(2, "Opening biggiefile #%ld - '%s'", bigfile_num, tmp); 300 forig = fopen(tmp, "r"); 301 mr_free(tmp); 302 303 if (!forig) { 304 log_msg(2, "Failed to open bigfile. Darn."); 305 log_to_screen("%s/%s not found on live filesystem", bkpinfo->restore_path, biggiestruct.filename); 306 mr_asprintf(tmp, "echo \"%s/%s not found\" >> %s/biggies.changed", bkpinfo->restore_path, biggiestruct.filename, bkpinfo->tmpdir); 307 paranoid_system(tmp); 308 mr_free(tmp); 309 310 bigfile_num++; 311 slice_num = 0; 312 retval++; 313 } else { 314 slice_num++; 315 } 345 316 } else { 346 slice_num++;317 log_it("Unable to open bigfile as restore_path is NULL"); 347 318 } 348 319 } else if (does_file_exist(slice_fname(bigfile_num, slice_num, mountpoint, "")) && … … 354 325 slice_num = 0; 355 326 } else { 356 log_msg(2, "ISO=%d bigfile=%ld slice=%ld", 357 g_current_media_number, bigfile_num, slice_num); 358 if (!does_file_exist(slice_fname(bigfile_num, slice_num, mountpoint, ""))) { 359 sprintf(command, "%s -dc %s 2>> %s", 360 sz_exe, 361 slice_fname(bigfile_num, slice_num, mountpoint, bkpinfo->zip_suffix), 362 MONDO_LOGFILE); 327 log_msg(2, "ISO=%d bigfile=%ld slice=%ld", g_current_media_number, bigfile_num, slice_num); 328 if ((!does_file_exist(slice_fname(bigfile_num, slice_num, mountpoint, ""))) && (sz_exe != NULL)) { 329 mr_asprintf(command, "%s -dc %s 2>> %s", sz_exe, slice_fname(bigfile_num, slice_num, mountpoint, bkpinfo->zip_suffix), MONDO_LOGFILE); 363 330 } else { 364 sprintf(command, "cat %s 2>> %s", 365 slice_fname(bigfile_num, slice_num, mountpoint, ""), MONDO_LOGFILE); 331 mr_asprintf(command, "cat %s 2>> %s", slice_fname(bigfile_num, slice_num, mountpoint, ""), MONDO_LOGFILE); 366 332 } 367 if ((pin = popen(command, "r"))) { 333 pin = popen(command, "r"); 334 mr_free(command); 335 if (pin) { 368 336 res = 0; 369 337 while (!feof(pin)) { … … 404 372 } 405 373 } 374 mr_free(mountpoint); 375 mr_free(sz_exe); 376 406 377 last_bigfile_num = bigfile_num; 407 378 last_slice_num = slice_num - 1; … … 416 387 paranoid_free(bufblkB); 417 388 } 418 paranoid_free(tmp);419 paranoid_free(command);420 paranoid_free(sz_exe);421 paranoid_free(mountpoint);422 389 return (0); 423 390 } … … 442 409 { 443 410 /*@ buffers ********************************************************* */ 444 char *command ;445 char *outlog ;446 char *tmp ;447 char *p ;411 char *command = NULL; 412 char *outlog = NULL; 413 char *tmp = NULL; 414 char *p = NULL; 448 415 449 416 /*@ pointers ******************************************************* */ … … 462 429 463 430 log_it("Verifying fileset '%s'", tarball_fname); 464 /* chdir("/"); */ 465 sprintf(outlog, "%s/afio.log", bkpinfo->tmpdir); 466 /* if programmer forgot to say which compression thingy to use then find out */ 467 if (strstr(tarball_fname, ".lzo") 468 && strcmp(bkpinfo->zip_suffix, "lzo")) { 431 mr_asprintf(outlog, "%s/afio.log", bkpinfo->tmpdir); 432 /* if programmer forgot to say which compression thingy to use then find out */ 433 if (strstr(tarball_fname, ".lzo") && strcmp(bkpinfo->zip_suffix, "lzo")) { 469 434 log_msg(2, "OK, I'm going to start using lzop."); 470 435 strcpy(bkpinfo->zip_exe, "lzop"); … … 472 437 bkpinfo->use_lzo = TRUE; 473 438 bkpinfo->use_gzip = FALSE; 474 }475 if (strstr(tarball_fname, ".gz")476 439 bkpinfo->use_lzma = FALSE; 440 } 441 if (strstr(tarball_fname, ".gz") && strcmp(bkpinfo->zip_suffix, "gz")) { 477 442 log_msg(2, "OK, I'm going to start using gzip."); 478 443 strcpy(bkpinfo->zip_exe, "gzip"); … … 480 445 bkpinfo->use_lzo = FALSE; 481 446 bkpinfo->use_gzip = TRUE; 482 }483 if (strstr(tarball_fname, ".bz2")484 447 bkpinfo->use_lzma = FALSE; 448 } 449 if (strstr(tarball_fname, ".bz2") && strcmp(bkpinfo->zip_suffix, "bz2")) { 485 450 log_msg(2, "OK, I'm going to start using bzip2."); 486 451 strcpy(bkpinfo->zip_exe, "bzip2"); … … 488 453 bkpinfo->use_lzo = FALSE; 489 454 bkpinfo->use_gzip = FALSE; 455 bkpinfo->use_lzma = FALSE; 456 } 457 if (strstr(tarball_fname, ".lzma") && strcmp(bkpinfo->zip_suffix, "lzma")) { 458 log_msg(2, "OK, I'm going to start using lzma."); 459 strcpy(bkpinfo->zip_exe, "lzma"); 460 strcpy(bkpinfo->zip_suffix, "lzma"); 461 bkpinfo->use_lzo = FALSE; 462 bkpinfo->use_gzip = FALSE; 463 bkpinfo->use_lzma = TRUE; 464 } 465 if (bkpinfo->zip_exe == NULL) { 466 strcpy(bkpinfo->zip_exe, "none"); 467 } 468 if (bkpinfo->zip_suffix == NULL) { 469 strcpy(bkpinfo->zip_suffix, ""); 490 470 } 491 471 unlink(outlog); … … 493 473 bkpinfo->use_star = TRUE; 494 474 if (strstr(tarball_fname, ".bz2")) 495 sprintf(command, 496 "star -sparse -diff diffopts=mode,size,data file=%s %s >> %s 2>> %s", 497 tarball_fname, 498 (strstr(tarball_fname, ".bz2")) ? "-bz" : " ", outlog, 499 outlog); 475 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); 500 476 } else { 501 477 bkpinfo->use_star = FALSE; 502 sprintf(command, "afio -r -P %s -Z %s >> %s 2>> %s", 503 bkpinfo->zip_exe, tarball_fname, outlog, outlog); 478 /* Here we suppose that there is always a compression program called */ 479 if (bkpinfo->zip_exe) { 480 mr_asprintf(command, "afio -r -P %s -Z %s >> %s 2>> %s", bkpinfo->zip_exe, tarball_fname, outlog, outlog); 481 } else { 482 mr_asprintf(command, "afio -r -Z %s >> %s 2>> %s", tarball_fname, outlog, outlog); 483 } 504 484 } 505 485 log_msg(6, "command=%s", command); 506 486 paranoid_system(command); 487 mr_free(command); 488 507 489 if (length_of_file(outlog) < 10) { 508 sprintf(command, "cat %s >> %s", outlog, MONDO_LOGFILE);490 mr_asprintf(command, "cat %s >> %s", outlog, MONDO_LOGFILE); 509 491 } else { 510 sprintf(command, "cut -d: -f%d %s | sort -u", 511 (bkpinfo->use_star) ? 1 : 2, outlog); 492 mr_asprintf(command, "cut -d: -f%d %s | sort -u", (bkpinfo->use_star) ? 1 : 2, outlog); 512 493 pin = popen(command, "r"); 513 494 if (pin) { 514 for (p = fgets(tmp, MAX_STR_LEN, pin); !feof(pin) && (p != NULL); 515 p = fgets(tmp, MAX_STR_LEN, pin)) { 495 for (mr_getline(tmp, pin); !feof(pin); mr_getline(tmp, pin)) { 516 496 if (bkpinfo->use_star) { 517 497 if (!strstr(tmp, "diffopts=")) { 518 while (strlen(tmp) > 0 519 && tmp[strlen(tmp) - 1] < 32) { 498 while (strlen(tmp) > 0 && tmp[strlen(tmp) - 1] < 32) { 520 499 tmp[strlen(tmp) - 1] = '\0'; 521 500 } 522 501 if (strchr(tmp, '/')) { 523 502 if (!diffs) { 524 log_msg(0, "'%s' - differences found", 525 tarball_fname); 503 log_msg(0, "'%s' - differences found", tarball_fname); 526 504 } 527 log_msg(0, "star: /%s", 528 strip_afio_output_line(tmp)); 505 log_msg(0, "star: /%s", strip_afio_output_line(tmp)); 529 506 diffs++; 530 507 } … … 532 509 } else { 533 510 if (!diffs) { 534 log_msg(0, "'%s' - differences found", 535 tarball_fname); 511 log_msg(0, "'%s' - differences found", tarball_fname); 536 512 } 537 513 log_msg(0, "afio: /%s", strip_afio_output_line(tmp)); 538 514 diffs++; 539 515 } 516 mr_free(tmp); 540 517 } 518 mr_free(tmp); 541 519 paranoid_pclose(pin); 542 520 } else { … … 544 522 } 545 523 } 546 /* chdir(old_pwd); */ 547 // sprintf (tmp, "uniq -u %s >> %s", "/tmp/mondo-verify.err", MONDO_LOGFILE); 548 // paranoid_system (tmp); 549 // unlink ("/tmp/mondo-verify.err"); 550 paranoid_free(command); 551 paranoid_free(outlog); 552 paranoid_free(tmp); 524 mr_free(command); 525 mr_free(outlog); 553 526 return (0); 554 527 } … … 604 577 605 578 /*@ buffers ********************************************************** */ 606 char *tmp ;607 char *tarball_fname ;579 char *tmp = NULL; 580 char *tarball_fname = NULL; 608 581 609 582 /*@ pointers ********************************************************* */ 610 583 char *p; 611 584 612 malloc_string(tmp);613 malloc_string(tarball_fname);614 585 assert(bkpinfo != NULL); 615 586 assert_string_is_neither_NULL_nor_zerolength(orig_fname); … … 621 592 p++; 622 593 } 623 sprintf(tmp, "mkdir -p %s/tmpfs", bkpinfo->tmpdir);594 mr_asprintf(tmp, "mkdir -p %s/tmpfs", bkpinfo->tmpdir); 624 595 paranoid_system(tmp); 625 sprintf(tarball_fname, "%s/tmpfs/temporary-%s", bkpinfo->tmpdir, p); 626 sprintf(tmp, "Temporarily copying file from tape to '%s'", 627 tarball_fname); 628 /* log_it(tmp); */ 596 mr_free(tmp); 597 598 mr_asprintf(tarball_fname, "%s/tmpfs/temporary-%s", bkpinfo->tmpdir, p); 629 599 read_file_from_stream_to_file(tarball_fname, size); 630 600 res = verify_a_tarball(tarball_fname); 631 601 if (res) { 632 sprintf(tmp, 633 "Afioball '%s' no longer matches your live filesystem", p); 634 log_msg(0, tmp); 602 log_msg(0, "Afioball '%s' no longer matches your live filesystem", p); 635 603 retval++; 636 604 } 637 605 unlink(tarball_fname); 638 paranoid_free(tmp); 639 paranoid_free(tarball_fname); 606 mr_free(tarball_fname); 640 607 return (retval); 641 608 } … … 660 627 661 628 /*@ char ************************************************************ */ 662 char *test_file ;663 char *biggie_cksum ;664 char *orig_cksum ;665 char *tmp ;666 char *slice_fnam ;629 char *test_file = NULL; 630 char *biggie_cksum = NULL; 631 char *orig_cksum = NULL; 632 char *tmp = NULL; 633 char *slice_fnam = NULL; 667 634 668 635 /*@ pointers ******************************************************** */ … … 672 639 long long slice_siz; 673 640 674 malloc_string(test_file);675 malloc_string(biggie_cksum);676 malloc_string(orig_cksum);677 malloc_string(tmp);678 641 malloc_string(slice_fnam); 679 642 assert(bkpinfo != NULL); … … 686 649 p++; 687 650 } 688 sprintf(test_file, "%s/temporary-%s", bkpinfo->tmpdir, p); 689 sprintf(tmp, 690 "Temporarily copying biggiefile %s's slices from tape to '%s'", 691 p, test_file); 692 /* log_it(tmp); */ 651 mr_asprintf(test_file, "%s/temporary-%s", bkpinfo->tmpdir, p); 693 652 for (res = 694 653 read_header_block_from_stream(&slice_siz, slice_fnam, &ctrl_chr); 695 654 ctrl_chr != BLK_STOP_A_BIGGIE; 696 655 res = 697 read_header_block_from_stream(&slice_siz, slice_fnam, 698 &ctrl_chr)) { 656 read_header_block_from_stream(&slice_siz, slice_fnam, &ctrl_chr)) { 699 657 if (ctrl_chr != BLK_START_AN_AFIO_OR_SLICE) { 700 658 wrong_marker(BLK_START_AN_AFIO_OR_SLICE, ctrl_chr); … … 703 661 unlink(test_file); 704 662 res = 705 read_header_block_from_stream(&slice_siz, slice_fnam, 706 &ctrl_chr); 663 read_header_block_from_stream(&slice_siz, slice_fnam, &ctrl_chr); 707 664 if (ctrl_chr != BLK_STOP_AN_AFIO_OR_SLICE) { 708 665 log_msg(2, "test_file = %s", test_file); … … 712 669 retval += res; 713 670 } 714 strcpy(biggie_cksum, slice_fnam);671 mr_asprintf(biggie_cksum, "%s", slice_fnam); 715 672 if (biggie_cksum[0] != '\0') { 716 strcpy(orig_cksum, calc_checksum_of_file(biggie_fname));673 mr_asprintf(orig_cksum, "%s", calc_checksum_of_file(biggie_fname)); 717 674 if (strcmp(biggie_cksum, orig_cksum)) { 718 sprintf(tmp, "orig cksum=%s; curr cksum=%s", biggie_cksum, 719 orig_cksum); 720 log_msg(2, tmp); 721 sprintf(tmp, "%s has changed on live filesystem", 722 biggie_fname); 723 log_to_screen(tmp); 724 sprintf(tmp, "echo \"%s\" >> %s/biggies.changed", 725 biggie_fname, bkpinfo->tmpdir); 675 log_msg(2, "orig cksum=%s; curr cksum=%s", biggie_cksum, orig_cksum); 676 log_to_screen("%s has changed on live filesystem", biggie_fname); 677 678 mr_asprintf(tmp, "echo \"%s\" >> %s/biggies.changed", biggie_fname, bkpinfo->tmpdir); 726 679 paranoid_system(tmp); 727 }728 }729 paranoid_free(test_file);730 paranoid_free(biggie_cksum);731 paranoid_free(orig_cksum);732 paranoid_free(tmp);680 mr_free(tmp); 681 } 682 mr_free(orig_cksum); 683 } 684 mr_free(biggie_cksum); 685 mr_free(test_file); 733 686 paranoid_free(slice_fnam); 734 687 return (retval); … … 739 692 * Verify all afioballs from the opened tape/CD stream. 740 693 * @param bkpinfo The backup information structure. Fields used: 741 * - @c bkpinfo->restore_path742 694 * - @c bkpinfo->tmpdir 743 695 * … … 754 706 755 707 /*@ buffers ***************************************************** */ 756 char *tmp ;708 char *tmp = NULL; 757 709 char *fname; 758 710 char *curr_xattr_list_fname; … … 763 715 764 716 assert(bkpinfo != NULL); 765 malloc_string(tmp);766 717 malloc_string(fname); 767 718 malloc_string(curr_xattr_list_fname); … … 816 767 wrong_marker(BLK_START_AN_AFIO_OR_SLICE, ctrl_chr); 817 768 } 818 sprintf(tmp, "Verifying fileset #%ld", current_afioball_number); 819 /*log_it(tmp); */ 769 mr_asprintf(tmp, "Verifying fileset #%ld", current_afioball_number); 820 770 update_progress_form(tmp); 771 mr_free(tmp); 772 821 773 res = verify_an_afioball_from_stream(fname, size); 822 774 if (res) { 823 sprintf(tmp, "Afioball %ld differs from live filesystem", 824 current_afioball_number); 825 log_to_screen(tmp); 775 log_to_screen("Afioball %ld differs from live filesystem", current_afioball_number); 826 776 } 827 777 retval += res; … … 835 785 log_msg(1, "All done with afioballs"); 836 786 close_progress_form(); 837 paranoid_free(tmp);838 787 paranoid_free(fname); 839 788 paranoid_free(curr_xattr_list_fname); … … 863 812 864 813 /*@ buffers ******************************************************** */ 865 char * tmp;866 char * orig_fname, *logical_fname;867 char *comment ;868 char *curr_xattr_list_fname ;869 char *curr_acl_list_fname ;814 char *orig_fname; 815 char *logical_fname = NULL; 816 char *comment = NULL; 817 char *curr_xattr_list_fname = NULL; 818 char *curr_acl_list_fname = NULL; 870 819 /*@ pointers ******************************************************* */ 871 820 char *p; … … 875 824 876 825 assert(bkpinfo != NULL); 877 malloc_string(tmp);878 826 malloc_string(orig_fname); 879 malloc_string(logical_fname);880 malloc_string(comment);881 827 malloc_string(curr_xattr_list_fname); 882 828 malloc_string(curr_acl_list_fname); … … 890 836 bkpinfo->tmpdir); 891 837 } 892 sprintf(comment, "Verifying all bigfiles.");838 mr_asprintf(comment, "Verifying all bigfiles."); 893 839 log_to_screen(comment); 894 sprintf(tmp, "%s/biggielist.txt", bkpinfo->tmpdir);895 // noof_biggiefiles = count_lines_in_file (tmp); // pointless896 840 res = read_header_block_from_stream(&size, orig_fname, &ctrl_chr); 897 841 if (ctrl_chr != BLK_START_BIGGIEFILES) { … … 911 855 "Please wait. This may take some time.", "", 912 856 noof_biggiefiles); 857 mr_free(comment); 858 913 859 for (res = read_header_block_from_stream(&size, orig_fname, &ctrl_chr); 914 860 ctrl_chr != BLK_STOP_BIGGIEFILES; … … 925 871 p++; 926 872 } 927 sprintf(comment, "Verifying bigfile #%ld (%ld K)", 928 current_biggiefile_number, (long) size >> 10); 873 mr_asprintf(comment, "Verifying bigfile #%ld (%ld K)", current_biggiefile_number, (long) size >> 10); 929 874 update_progress_form(comment); 930 sprintf(logical_fname, "%s/%s", bkpinfo->restore_path, orig_fname); 931 res = 932 verify_a_biggiefile_from_stream(logical_fname, size); 933 retval += res; 875 mr_free(comment); 876 877 if (bkpinfo->restore_path) { 878 mr_asprintf(logical_fname, "%s/%s", bkpinfo->restore_path, orig_fname); 879 res = verify_a_biggiefile_from_stream(logical_fname, size); 880 mr_free(logical_fname); 881 retval += res; 882 } else { 883 log_it("Unable to verify bigfile as restore_path is NULL"); 884 } 885 934 886 current_biggiefile_number++; 935 887 g_current_progress++; … … 937 889 close_progress_form(); 938 890 paranoid_free(orig_fname); 939 paranoid_free(logical_fname);940 891 paranoid_free(curr_xattr_list_fname); 941 892 paranoid_free(curr_acl_list_fname); 942 paranoid_free(comment);943 paranoid_free(tmp);944 893 return (retval); 945 894 } … … 951 900 * Verify the USB device 952 901 * @param bkpinfo The backup information structure. Fields used: 953 * - @c bkpinfo->isodir954 902 * - @c bkpinfo->media_device 955 903 * - @c bkpinfo->tmpdir … … 981 929 assert(bkpinfo != NULL); 982 930 931 if (bkpinfo->media_device == NULL) { 932 return(1); 933 } 934 983 935 mr_asprintf(fname, "%s1", bkpinfo->media_device); 984 936 if (is_this_device_mounted(fname)) { … … 1032 984 #endif 1033 985 { 1034 mr_asprintf(tmp, "%s failed; unable to unmount USB device\n", tmp1); 1035 log_to_screen(tmp); 1036 paranoid_free(tmp); 986 log_to_screen("%s failed; unable to unmount USB device\n", tmp1); 1037 987 retval++; 1038 988 } else { 1039 989 log_msg(2, "OK, I've unmounted the USB device\n"); 1040 990 } 1041 paranoid_free(tmp1);1042 paranoid_free(mountpoint);991 mr_free(tmp1); 992 mr_free(mountpoint); 1043 993 return (retval); 1044 994 } … … 1066 1016 1067 1017 /*@ buffers ******************************************************** */ 1068 char *mountpoint ;1069 char *command ;1070 char *tmp ;1071 char *fname ;1018 char *mountpoint = NULL; 1019 char *command = NULL; 1020 char *tmp = NULL; 1021 char *fname = NULL; 1072 1022 #ifdef __FreeBSD__ 1073 1023 char mdd[32]; … … 1079 1029 #endif 1080 1030 1081 command = malloc(2000);1082 malloc_string(mountpoint);1083 malloc_string(tmp);1084 malloc_string(fname);1085 1086 1031 assert(bkpinfo != NULL); 1087 1032 1088 sprintf(mountpoint, "%s/cdrom", bkpinfo->tmpdir); 1089 sprintf(fname, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->netfs_remote_dir, 1090 bkpinfo->prefix, g_current_media_number); 1033 if (bkpinfo->media_device == NULL) { 1034 return(1); 1035 } 1036 1037 mr_asprintf(mountpoint, "%s/cdrom", bkpinfo->tmpdir); 1038 if (((bkpinfo->isodir == NULL) && (bkpinfo->netfs_remote_dir == NULL)) || (bkpinfo->prefix == NULL)) { 1039 fatal_error("No iso filename preparation possible"); 1040 } 1041 if (bkpinfo->netfs_remote_dir) { 1042 // NETFS 1043 mr_asprintf(fname, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->netfs_remote_dir, bkpinfo->prefix, g_current_media_number); 1044 } else { 1045 // ISO 1046 mr_asprintf(fname, "%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->prefix, g_current_media_number); 1047 } 1091 1048 1092 1049 mkdir(mountpoint, 1777); 1093 1050 sync(); 1094 1051 if (!does_file_exist(fname)) { 1095 sprintf(tmp, 1096 "%s not found; assuming you backed up to CD; verifying CD...", 1097 fname); 1098 log_msg(2, tmp); 1052 log_msg(2, "%s not found; assuming you backed up to CD; verifying CD...", fname); 1099 1053 if (bkpinfo->manual_cd_tray) { 1100 1054 popup_and_OK("Please push CD tray closed."); … … 1102 1056 if (find_and_mount_actual_cd(mountpoint)) { 1103 1057 log_to_screen("failed to mount actual CD"); 1058 mr_free(mountpoint); 1059 mr_free(fname); 1104 1060 return (1); 1105 1061 } 1106 1062 } else { 1107 sprintf(tmp, "%s found; verifying ISO...", fname);1063 log_msg(2, "%s found; verifying ISO...", fname); 1108 1064 #ifdef __FreeBSD__ 1109 1065 ret = 0; … … 1111 1067 mddevice = make_vn(fname); 1112 1068 if (ret) { 1113 sprintf(tmp, "make_vn of %s failed; unable to verify ISO\n",1114 fname);1115 log_to_screen(tmp);1069 log_to_screen("make_vn of %s failed; unable to verify ISO\n", fname); 1070 mr_free(mountpoint); 1071 mr_free(fname); 1116 1072 return (1); 1117 1073 } 1118 sprintf(command, "mount_cd9660 %s %s", mddevice, mountpoint);1074 mr_asprintf(command, "mount_cd9660 %s %s", mddevice, mountpoint); 1119 1075 #else 1120 sprintf(command, "mount -o loop,ro -t iso9660 %s %s", fname, 1121 mountpoint); 1076 mr_asprintf(command, "mount -o loop,ro -t iso9660 %s %s", fname, mountpoint); 1122 1077 #endif 1123 1078 if (run_program_and_log_output(command, FALSE)) { 1124 sprintf(tmp, "%s failed; unable to mount ISO image\n", 1125 command); 1126 log_to_screen(tmp); 1079 log_to_screen("%s failed; unable to mount ISO image\n", command); 1080 mr_free(mountpoint); 1081 mr_free(command); 1082 mr_free(fname); 1127 1083 return (1); 1128 1084 } 1085 mr_free(command); 1129 1086 } 1130 1087 log_msg(2, "OK, I've mounted the ISO/CD\n"); 1131 sprintf(tmp, "%s/archives/NOT-THE-LAST", mountpoint);1088 mr_asprintf(tmp, "%s/archives/NOT-THE-LAST", mountpoint); 1132 1089 if (!does_file_exist(tmp)) { 1133 1090 log_msg … … 1141 1098 */ 1142 1099 } 1100 mr_free(tmp); 1101 1143 1102 verify_afioballs_on_CD(mountpoint); 1144 1103 log_it("before verify_all_slices"); … … 1147 1106 #ifdef __FreeBSD__ 1148 1107 ret = 0; 1149 sprintf(command, "umount -d %s", mountpoint);1108 mr_asprintf(command, "umount -d %s", mountpoint); 1150 1109 ret += system(command); 1151 1110 ret += kick_vn(mddevice); 1152 if (ret) 1111 if (ret) { 1153 1112 #else 1154 sprintf(command, "umount -d %s", mountpoint);1155 if (system(command)) 1113 mr_asprintf(command, "umount -d %s", mountpoint); 1114 if (system(command)) { 1156 1115 #endif 1157 { 1158 sprintf(tmp, "%s failed; unable to unmount ISO image\n", command); 1159 log_to_screen(tmp); 1116 log_to_screen("%s failed; unable to unmount ISO image\n", command); 1117 1160 1118 retval++; 1161 1119 } else { 1162 1120 log_msg(2, "OK, I've unmounted the ISO file\n"); 1163 1121 } 1122 mr_free(mountpoint); 1123 mr_free(command); 1124 1164 1125 if (!does_file_exist(fname)) { 1165 sprintf(command, "umount -d %s", bkpinfo->media_device);1126 mr_asprintf(command, "umount -d %s", bkpinfo->media_device); 1166 1127 run_program_and_log_output(command, 2); 1167 if (!bkpinfo->please_dont_eject 1168 && eject_device(bkpinfo->media_device)) { 1128 mr_free(command); 1129 1130 if (!bkpinfo->please_dont_eject && eject_device(bkpinfo->media_device)) { 1169 1131 log_msg(2, "Failed to eject CD-ROM drive"); 1170 1132 } 1171 1133 } 1172 paranoid_free(command); 1173 paranoid_free(mountpoint); 1174 paranoid_free(tmp); 1175 paranoid_free(fname); 1134 mr_free(fname); 1176 1135 return (retval); 1177 1136 } … … 1191 1150 1192 1151 /*@ buffers ******************************************************** */ 1193 char tmp[MAX_STR_LEN];1194 char changed_files_fname[MAX_STR_LEN];1152 char *tmp = NULL; 1153 char *changed_files_fname = NULL; 1195 1154 1196 1155 /*@ long *********************************************************** */ … … 1206 1165 retval += verify_biggiefiles_from_stream(); 1207 1166 /* find the final blocks */ 1208 paranoid_system("sync");1167 sync(); 1209 1168 sleep(2); 1210 1169 closein_tape(); 1211 1170 /* close tape; exit */ 1212 1171 // fclose(g_tape_stream); <-- not needed; is handled by closein_tape() 1213 sprintf(tmp, "rm -f %s/biggies.changed %s/changed.files 2> /dev/null", bkpinfo->tmpdir, bkpinfo->tmpdir);1172 mr_asprintf(tmp, "rm -f %s/biggies.changed %s/changed.files 2> /dev/null", bkpinfo->tmpdir, bkpinfo->tmpdir); 1214 1173 paranoid_system(tmp); 1215 sprintf(changed_files_fname, "%s/changed.files", bkpinfo->tmpdir); 1216 sprintf(tmp, 1217 "grep -E '^%s:.*$' %s | cut -d'\"' -f2 | sort -u | awk '{print \"/\"$0;};' | tr -s '/' '/' | grep -v \"(total of\" | grep -v \"incheckentry.*xwait\" | grep -vE '^/afio:.*$' | grep -vE '^dev/.*$' > %s", 1218 (bkpinfo->use_star) ? "star" : "afio", MONDO_LOGFILE, 1219 changed_files_fname); 1174 mr_free(tmp); 1175 1176 mr_asprintf(changed_files_fname, "%s/changed.files", bkpinfo->tmpdir); 1177 mr_asprintf(tmp, "grep -E '^%s:.*$' %s | cut -d'\"' -f2 | sort -u | awk '{print \"/\"$0;};' | tr -s '/' '/' | grep -v \"(total of\" | grep -v \"incheckentry.*xwait\" | grep -vE '^/afio:.*$' | grep -vE '^dev/.*$' > %s", (bkpinfo->use_star) ? "star" : "afio", MONDO_LOGFILE, changed_files_fname); 1220 1178 log_msg(2, "Running command to derive list of changed files"); 1221 1179 log_msg(2, tmp); 1222 1180 if (system(tmp)) { 1223 if (does_file_exist(changed_files_fname) 1224 && length_of_file(changed_files_fname) > 2) { 1225 log_to_screen 1226 ("Warning - unable to check logfile to derive list of changed files"); 1181 if (does_file_exist(changed_files_fname) && length_of_file(changed_files_fname) > 2) { 1182 log_to_screen("Warning - unable to check logfile to derive list of changed files"); 1227 1183 } else { 1228 log_to_screen 1229 ("No differences found. Therefore, no 'changed.files' text file."); 1230 } 1231 } 1232 sprintf(tmp, "cat %s/biggies.changed >> %s", bkpinfo->tmpdir, changed_files_fname); 1184 log_to_screen("No differences found. Therefore, no 'changed.files' text file."); 1185 } 1186 } 1187 mr_free(tmp); 1188 1189 mr_asprintf(tmp, "cat %s/biggies.changed >> %s", bkpinfo->tmpdir, changed_files_fname); 1233 1190 paranoid_system(tmp); 1191 mr_free(tmp); 1234 1192 1235 1193 diffs = count_lines_in_file(changed_files_fname); 1236 1194 if (diffs > 0) { 1237 sprintf(tmp, "cp -f %s %s/changed.files", changed_files_fname, 1238 MONDO_CACHE); 1195 mr_asprintf(tmp, "cp -f %s %s/changed.files", changed_files_fname, MONDO_CACHE); 1239 1196 run_program_and_log_output(tmp, FALSE); 1240 sprintf(tmp, 1241 "%ld files differed from live filesystem; type less %s or less %s/changed.files to see", 1242 diffs, changed_files_fname, MONDO_CACHE); 1243 log_msg(0, tmp); 1197 mr_free(tmp); 1198 1199 log_msg(0, "%ld files differed from live filesystem; type less %s or less %s/changed.files to see", diffs, changed_files_fname, MONDO_CACHE); 1244 1200 log_to_screen("See "MONDO_CACHE"/changed.files for a list of nonmatching files."); 1245 1201 log_to_screen("The files probably changed on filesystem, not on backup media."); 1246 // retval++;1247 }1202 } 1203 mr_free(changed_files_fname); 1248 1204 return (retval); 1249 1205 }
Note:
See TracChangeset
for help on using the changeset viewer.