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