/*
Bacula® - The Network Backup Solution
- Copyright (C) 2001-2010 Free Software Foundation Europe e.V.
+ Copyright (C) 2001-2011 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
#include "stored.h"
#include "findlib/find.h"
#include "cats/cats.h"
+#include "cats/sql_glue.h"
/* Dummy functions */
int generate_daemon_event(JCR *jcr, const char *event) { return 1; }
edit_uint64(currentVolumeSize, ed1));
}
- if ((db=db_init(NULL, db_driver, db_name, db_user, db_password,
- db_host, db_port, NULL, 0)) == NULL) {
+ if ((db = db_init_database(NULL, db_driver, db_name, db_user, db_password,
+ db_host, db_port, NULL, false, false)) == NULL) {
Emsg0(M_ERROR_TERM, 0, _("Could not init Bacula database\n"));
}
if (!db_open_database(NULL, db)) {
mdcr->EndFile = dcr->EndFile;
mdcr->VolMediaId = dcr->VolMediaId;
mjcr->read_dcr->VolLastIndex = dcr->VolLastIndex;
- if (!create_jobmedia_record(db, mjcr)) {
- Pmsg2(000, _("Could not create JobMedia record for Volume=%s Job=%s\n"),
- dev->getVolCatName(), mjcr->Job);
+ if( mjcr->bscan_insert_jobmedia_records ) {
+ if (!create_jobmedia_record(db, mjcr)) {
+ Pmsg2(000, _("Could not create JobMedia record for Volume=%s Job=%s\n"),
+ dev->getVolCatName(), mjcr->Job);
+ }
}
}
DEVICE *dev = dcr->dev;
JCR *bjcr = dcr->jcr;
DEV_BLOCK *block = dcr->block;
+ POOL_MEM sql_buffer;
+ db_int64_ctx jmr_count;
+
char digest[BASE64_SIZE(CRYPTO_DIGEST_MAX_SIZE)];
if (rec->data_len > 0) {
jr.JobId);
}
}
+
/* Create Client record if not already there */
bstrncpy(cr.Name, label.ClientName, sizeof(cr.Name));
create_client_record(db, &cr);
jr.PoolId = pr.PoolId;
mjcr->start_time = jr.StartTime;
- mjcr->set_JobLevel(jr.JobLevel);
+ mjcr->setJobLevel(jr.JobLevel);
mjcr->client_name = get_pool_memory(PM_FNAME);
pm_strcpy(mjcr->client_name, label.ClientName);
bstrncpy(dcr->pool_type, label.PoolType, sizeof(dcr->pool_type));
bstrncpy(dcr->pool_name, label.PoolName, sizeof(dcr->pool_name));
+ /* Look for existing Job Media records for this job. If there are
+ any, no new ones need be created. This may occur if File
+ Retention has expired before Job Retention, or if the volume
+ has already been bscan'd */
+ Mmsg(sql_buffer, "SELECT count(*) from JobMedia where JobId=%d", jr.JobId);
+ db_sql_query(db, sql_buffer.c_str(), db_int64_handler, &jmr_count);
+ if( jmr_count.value > 0 ) {
+ //FIELD NAME TO BE DEFINED/CONFIRMED (maybe a struct?)
+ mjcr->bscan_insert_jobmedia_records = false;
+ } else {
+ mjcr->bscan_insert_jobmedia_records = true;
+ }
+
if (rec->VolSessionId != jr.VolSessionId) {
Pmsg3(000, _("SOS_LABEL: VolSessId mismatch for JobId=%u. DB=%d Vol=%d\n"),
jr.JobId,
/* Create JobMedia record */
mjcr->read_dcr->VolLastIndex = dcr->VolLastIndex;
- create_jobmedia_record(db, mjcr);
+ if( mjcr->bscan_insert_jobmedia_records ) {
+ create_jobmedia_record(db, mjcr);
+ }
free_dcr(mjcr->read_dcr);
free_jcr(mjcr);
}
/* File Attributes stream */
- switch (rec->Stream) {
+ switch (rec->maskedStream) {
case STREAM_UNIX_ATTRIBUTES:
case STREAM_UNIX_ATTRIBUTES_EX:
}
if (verbose > 1) {
- decode_stat(attr->attr, &attr->statp, &attr->LinkFI);
+ decode_stat(attr->attr, &attr->statp, sizeof(attr->statp), &attr->LinkFI);
build_attr_output_fnames(bjcr, attr);
print_ls_output(bjcr, attr);
}
case STREAM_WIN32_DATA:
case STREAM_FILE_DATA:
case STREAM_SPARSE_DATA:
+ case STREAM_MACOS_FORK_DATA:
case STREAM_ENCRYPTED_FILE_DATA:
case STREAM_ENCRYPTED_WIN32_DATA:
case STREAM_ENCRYPTED_MACOS_FORK_DATA:
* The data must be decrypted to know the correct length.
*/
mjcr->JobBytes += rec->data_len;
- if (rec->Stream == STREAM_SPARSE_DATA) {
+ if (rec->maskedStream == STREAM_SPARSE_DATA) {
mjcr->JobBytes -= sizeof(uint64_t);
}
break;
case STREAM_GZIP_DATA:
+ case STREAM_COMPRESSED_DATA:
case STREAM_ENCRYPTED_FILE_GZIP_DATA:
+ case STREAM_ENCRYPTED_FILE_COMPRESSED_DATA:
case STREAM_ENCRYPTED_WIN32_GZIP_DATA:
+ case STREAM_ENCRYPTED_WIN32_COMPRESSED_DATA:
/* No correct, we should (decrypt and) expand it
done using JCR
*/
break;
case STREAM_SPARSE_GZIP_DATA:
+ case STREAM_SPARSE_COMPRESSED_DATA:
mjcr->JobBytes += rec->data_len - sizeof(uint64_t); /* No correct, we should expand it */
free_jcr(mjcr); /* done using JCR */
break;
/* Win32 GZIP stream */
case STREAM_WIN32_GZIP_DATA:
+ case STREAM_WIN32_COMPRESSED_DATA:
mjcr->JobBytes += rec->data_len;
free_jcr(mjcr); /* done using JCR */
break;
case STREAM_UNIX_ACCESS_ACL: /* Deprecated Standard ACL attributes on UNIX */
case STREAM_UNIX_DEFAULT_ACL: /* Deprecated Default ACL attributes on UNIX */
+ case STREAM_HFSPLUS_ATTRIBUTES:
case STREAM_ACL_AIX_TEXT:
case STREAM_ACL_DARWIN_ACCESS_ACL:
case STREAM_ACL_FREEBSD_DEFAULT_ACL:
case STREAM_ACL_AFS_TEXT:
case STREAM_ACL_AIX_AIXC:
case STREAM_ACL_AIX_NFS4:
+ case STREAM_ACL_FREEBSD_NFS4_ACL:
/* Ignore Unix ACL attributes */
break;
+ case STREAM_XATTR_TRU64:
case STREAM_XATTR_AIX:
case STREAM_XATTR_OPENBSD:
case STREAM_XATTR_SOLARIS_SYS:
if (jcr->file_bsock) {
Dmsg0(200, "Close File bsock\n");
- bnet_close(jcr->file_bsock);
+ jcr->file_bsock->close();
}
if (jcr->store_bsock) {
Dmsg0(200, "Close Store bsock\n");
- bnet_close(jcr->store_bsock);
+ jcr->store_bsock->close();
}
if (jcr->RestoreBootstrap) {
free(jcr->RestoreBootstrap);
* the JobId and the ClientId.
*/
jobjcr = new_jcr(sizeof(JCR), bscan_free_jcr);
- jobjcr->set_JobType(jr->JobType);
- jobjcr->set_JobLevel(jr->JobLevel);
+ jobjcr->setJobType(jr->JobType);
+ jobjcr->setJobLevel(jr->JobLevel);
jobjcr->JobStatus = jr->JobStatus;
bstrncpy(jobjcr->Job, jr->Job, sizeof(jobjcr->Job));
jobjcr->JobId = JobId; /* this is JobId on tape */