X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=bacula%2Fsrc%2Fstored%2Fbscan.c;h=5cc8781e4496cdd83e2769cd520a670c16f73919;hb=9326b2fd753cf4a714d40d5c190ba04b16261510;hp=48602c216e4679097e1ce002373d9d66de44403f;hpb=163def1959840ffe045dd393338df4ab0e4fb149;p=bacula%2Fbacula diff --git a/bacula/src/stored/bscan.c b/bacula/src/stored/bscan.c index 48602c216e..5cc8781e44 100644 --- a/bacula/src/stored/bscan.c +++ b/bacula/src/stored/bscan.c @@ -129,6 +129,7 @@ int main (int argc, char *argv[]) setlocale(LC_ALL, ""); bindtextdomain("bacula", LOCALEDIR); textdomain("bacula"); + init_stack_dump(); my_name_is(argc, argv, "bscan"); init_msg(NULL, NULL); @@ -566,7 +567,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) /* Create JobMedia record */ mjcr->read_dcr->VolLastIndex = dcr->VolLastIndex; create_jobmedia_record(db, mjcr); - dev->attached_dcrs->remove(mjcr->read_dcr); + detach_dcr_from_dev(mjcr->read_dcr); free_jcr(mjcr); break; @@ -670,6 +671,13 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) case STREAM_WIN32_DATA: case STREAM_FILE_DATA: case STREAM_SPARSE_DATA: + case STREAM_ENCRYPTED_FILE_DATA: + case STREAM_ENCRYPTED_WIN32_DATA: + case STREAM_ENCRYPTED_MACOS_FORK_DATA: + /* + * For encrypted stream, this is an approximation. + * The data must be decrypted to know the correct length. + */ mjcr->JobBytes += rec->data_len; if (rec->Stream == STREAM_SPARSE_DATA) { mjcr->JobBytes -= sizeof(uint64_t); @@ -679,8 +687,13 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) break; case STREAM_GZIP_DATA: - mjcr->JobBytes += rec->data_len; /* No correct, we should expand it */ - free_jcr(mjcr); /* done using JCR */ + case STREAM_ENCRYPTED_FILE_GZIP_DATA: + case STREAM_ENCRYPTED_WIN32_GZIP_DATA: + /* No correct, we should (decrypt and) expand it + done using JCR + */ + mjcr->JobBytes += rec->data_len; + free_jcr(mjcr); break; case STREAM_SPARSE_GZIP_DATA: @@ -758,7 +771,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) break; default: - Pmsg2(0, _("Unknown stream type!!! stream=%d data=%s\n"), rec->Stream, rec->data); + Pmsg2(0, _("Unknown stream type!!! stream=%d len=%i\n"), rec->Stream, rec->data_len); break; } return true; @@ -1237,7 +1250,6 @@ static JCR *create_jcr(JOB_DBR *jr, DEV_RECORD *rec, uint32_t JobId) } /* Dummies to replace askdir.c */ -bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing) { return 1;} bool dir_find_next_appendable_volume(DCR *dcr) { return 1;} bool dir_update_volume_info(DCR *dcr, bool relabel) { return 1; } bool dir_create_jobmedia_record(DCR *dcr) { return 1; } @@ -1251,9 +1263,18 @@ bool dir_ask_sysop_to_mount_volume(DCR *dcr) DEVICE *dev = dcr->dev; Dmsg0(20, "Enter dir_ask_sysop_to_mount_volume\n"); /* Close device so user can use autochanger if desired */ - dev->close(); fprintf(stderr, _("Mount Volume \"%s\" on device %s and press return when ready: "), dcr->VolumeName, dev->print_name()); + dev->close(); getchar(); return true; } + +bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing) +{ + Dmsg0(100, "Fake dir_get_volume_info\n"); + bstrncpy(dcr->VolCatInfo.VolCatName, dcr->VolumeName, sizeof(dcr->VolCatInfo.VolCatName)); + dcr->VolCatInfo.VolCatParts = find_num_dvd_parts(dcr); + Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->VolCatInfo.VolCatName, dcr->VolCatInfo.VolCatParts); + return 1; +}