/* Global variables */
-static STORES *me;
+STORES *me;
+
+/* Local variables */
static DEVICE *dev = NULL;
static B_DB *db;
static JCR *bjcr; /* jcr for bscan */
static char *db_user = "bacula";
static char *db_password = "";
static char *wd = NULL;
-static int verbose = 0;
static int update_db = 0;
static int update_vol_info = 0;
static int list_records = 0;
static void usage()
{
fprintf(stderr, _(
-"\nVersion: " VERSION " (" DATE ")\n\n"
+"\nVersion: " VERSION " (" BDATE ")\n\n"
"Usage: bscan [-d debug_level] <bacula-archive>\n"
" -b bootstrap specify a bootstrap file\n"
" -c <file> specify configuration file\n"
" -r list records\n"
" -s synchronize or store in database\n"
" -v verbose\n"
+" -V specify Volume names (separated by |)\n"
" -w dir specify working directory (default from conf file)\n"
" -? print this message\n\n"));
exit(1);
{
int ch;
struct stat stat_buf;
+ char *VolumeName = NULL;
my_name_is(argc, argv, "bscan");
init_msg(NULL, NULL);
verbose++;
break;
+ case 'V': /* Volume name */
+ VolumeName = optarg;
+ break;
+
case 'w':
wd = optarg;
break;
working_directory);
}
- bjcr = setup_jcr("bscan", argv[0], bsr);
+ bjcr = setup_jcr("bscan", argv[0], bsr, VolumeName);
dev = setup_to_access_device(bjcr, 1); /* read device */
if (!dev) {
exit(1);
}
- if ((db=db_init_database(NULL, db_name, db_user, db_password)) == NULL) {
+ if ((db=db_init_database(NULL, db_name, db_user, db_password, NULL, 0, NULL)) == NULL) {
Emsg0(M_ERROR_TERM, 0, _("Could not init Bacula database\n"));
}
if (!db_open_database(NULL, db)) {
}
/* Reset some JCR variables */
for (mjcr=NULL; (mjcr=next_attached_jcr(dev, mjcr)); ) {
- mjcr->VolFirstFile = mjcr->FileIndex = 0;
+ mjcr->VolFirstIndex = mjcr->FileIndex = 0;
mjcr->StartBlock = mjcr->EndBlock = 0;
mjcr->StartFile = mjcr->EndFile = 0;
}
mjcr->JobBytes += rec->data_len - sizeof(uint64_t); /* No correct, we should expand it */
free_jcr(mjcr); /* done using JCR */
+ /* Win32 Data stream */
+ } else if (rec->Stream == STREAM_WIN32_DATA) {
+ mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime);
+ if (!mjcr) {
+ if (mr.VolJobs > 0) {
+ Pmsg2(000, _("Could not find Job SessId=%d SessTime=%d for Win32 Data record.\n"),
+ rec->VolSessionId, rec->VolSessionTime);
+ } else {
+ ignored_msgs++;
+ }
+ return;
+ }
+ mjcr->JobBytes += rec->data_len;
+ free_jcr(mjcr); /* done using JCR */
+
+ /* Win32 GZIP stream */
+ } else if (rec->Stream == STREAM_WIN32_GZIP_DATA) {
+ mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime);
+ if (!mjcr) {
+ if (mr.VolJobs > 0) {
+ Pmsg2(000, _("Could not find Job SessId=%d SessTime=%d for Win32 GZIP Data record.\n"),
+ rec->VolSessionId, rec->VolSessionTime);
+ } else {
+ ignored_msgs++;
+ }
+ return;
+ }
+ mjcr->JobBytes += rec->data_len;
+ free_jcr(mjcr); /* done using JCR */
} else if (rec->Stream == STREAM_MD5_SIGNATURE) {
char MD5buf[50];
ar.Stream = rec->Stream;
ar.FileIndex = rec->FileIndex;
ar.attr = ap;
- if (mjcr->VolFirstFile == 0) {
- mjcr->VolFirstFile = rec->FileIndex;
+ if (mjcr->VolFirstIndex == 0) {
+ mjcr->VolFirstIndex = rec->FileIndex;
}
mjcr->FileIndex = rec->FileIndex;
mjcr->JobFiles++;
case JS_ErrorTerminated:
term_msg = _("*** Backup Error ***");
break;
- case JS_Cancelled:
- term_msg = _("Backup Cancelled");
+ case JS_Canceled:
+ term_msg = _("Backup Canceled");
break;
default:
term_msg = term_code;
memset(&jmr, 0, sizeof(jmr));
jmr.JobId = mjcr->JobId;
jmr.MediaId = mr.MediaId;
- jmr.FirstIndex = mjcr->VolFirstFile;
+ jmr.FirstIndex = mjcr->VolFirstIndex;
jmr.LastIndex = mjcr->FileIndex;
jmr.StartFile = mjcr->StartFile;
jmr.EndFile = mjcr->EndFile;