/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2010 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.
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Bacula® is a registered trademark of John Walker.
+ Bacula® is a registered trademark of Kern Sibbald.
The licensor of Bacula is the Free Software Foundation Europe
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
*
* Kern Sibbald, MM
*
- * Version $Id$
*/
#include "bacula.h"
/* Dummy functions */
int generate_daemon_event(JCR *jcr, const char *event) { return 1; }
+extern bool parse_sd_config(CONFIG *config, const char *configfile, int exit_code);
static void do_blocks(char *infname);
static void do_jobs(char *infname);
static SESSION_LABEL sessrec;
static uint32_t num_files = 0;
static ATTR *attr;
+static CONFIG *config;
#define CONFIG_FILE "bacula-sd.conf"
char *configfile = NULL;
"\nVersion: %s (%s)\n\n"
"Usage: bls [options] <device-name>\n"
" -b <file> specify a bootstrap file\n"
-" -c <file> specify a config file\n"
+" -c <file> specify a Storage configuration file\n"
" -d <nn> set debug level to <nn>\n"
" -dt print timestamp in debug output\n"
" -e <file> exclude list\n"
bindtextdomain("bacula", LOCALEDIR);
textdomain("bacula");
init_stack_dump();
+ lmgr_init_thread();
working_directory = "/tmp";
my_name_is(argc, argv, "bls");
configfile = bstrdup(CONFIG_FILE);
}
- parse_config(configfile);
+ config = new_config_parser();
+ parse_sd_config(config, configfile, M_ERROR_TERM);
if (ff->included_files_list == NULL) {
add_fname_to_include_list(ff, 0, "/");
/* File Attributes stream */
if (rec->Stream == STREAM_UNIX_ATTRIBUTES ||
rec->Stream == STREAM_UNIX_ATTRIBUTES_EX) {
-
- if (!unpack_attributes_record(jcr, rec->Stream, rec->data, attr)) {
+ if (!unpack_attributes_record(jcr, rec->Stream, rec->data, rec->data_len, attr)) {
if (!forge_on) {
Emsg0(M_ERROR_TERM, 0, _("Cannot continue.\n"));
+ } else {
+ Emsg0(M_ERROR, 0, _("Attrib unpack error!\n"));
}
num_files++;
return true;
}
- if (attr->file_index != rec->FileIndex) {
- Emsg2(forge_on?M_WARNING:M_ERROR_TERM, 0, _("Record header file index %ld not equal record index %ld\n"),
- rec->FileIndex, attr->file_index);
- }
-
attr->data_stream = decode_stat(attr->attr, &attr->statp, &attr->LinkFI);
build_attr_output_fnames(jcr, attr);
print_ls_output(jcr, attr);
num_files++;
}
+ } else if (rec->Stream == STREAM_PLUGIN_NAME) {
+ if (strncmp("0 0", rec->data, 3) != 0) {
+ Pmsg1(000, "Plugin data: %s\n", rec->data);
+ }
+ } else if (rec->Stream == STREAM_RESTORE_OBJECT) {
+ Pmsg0(000, "Restore Object record\n");
}
+
return true;
}
{
const char *rtype;
memset(sessrec, 0, sizeof(sessrec));
+ jcr->JobId = 0;
switch (rec->FileIndex) {
case PRE_LABEL:
rtype = _("Fresh Volume Label");
case SOS_LABEL:
rtype = _("Begin Job Session");
unser_session_label(sessrec, rec);
+ jcr->JobId = sessrec->JobId;
break;
case EOS_LABEL:
rtype = _("End Job Session");
case EOM_LABEL:
rtype = _("End of Medium");
break;
+ case EOT_LABEL:
+ rtype = _("End of Physical Medium");
+ break;
+ case SOB_LABEL:
+ rtype = _("Start of object");
+ break;
+ case EOB_LABEL:
+ rtype = _("End of object");
+ break;
default:
rtype = _("Unknown");
+ Dmsg1(10, "FI rtype=%d unknown\n", rec->FileIndex);
break;
}
Dmsg5(10, "%s Record: VolSessionId=%d VolSessionTime=%d JobId=%d DataLen=%d\n",
/* Dummies to replace askdir.c */
bool dir_find_next_appendable_volume(DCR *dcr) { return 1;}
bool dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
-bool dir_create_jobmedia_record(DCR *dcr) { return 1; }
+bool dir_create_jobmedia_record(DCR *dcr, bool zero) { return 1; }
bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
bool dir_send_job_status(JCR *jcr) {return 1;}
int generate_job_event(JCR *jcr, const char *event) { return 1; }
-bool dir_ask_sysop_to_mount_volume(DCR *dcr)
+bool dir_ask_sysop_to_mount_volume(DCR *dcr, int /*mode*/)
{
DEVICE *dev = dcr->dev;
fprintf(stderr, _("Mount Volume \"%s\" on device %s and press return when ready: "),
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->setVolCatName(dcr->VolumeName);
dcr->VolCatInfo.VolCatParts = find_num_dvd_parts(dcr);
- Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->VolCatInfo.VolCatName, dcr->VolCatInfo.VolCatParts);
+ Dmsg2(500, "Vol=%s num_parts=%d\n", dcr->getVolCatName(), dcr->VolCatInfo.VolCatParts);
return 1;
}