* never have errors, or it is really fatal.
*/
B_DB *
-db_init_database(void *jcr, char *db_name, char *db_user, char *db_password)
+db_init_database(void *jcr, char *db_name, char *db_user, char *db_password,
+ char *db_address, int db_port, char *db_socket)
{
B_DB *mdb;
P(mutex); /* lock DB queue */
int ref_count;
char *db_name;
char *db_user;
+ char *db_address; /* host name address */
+ char *db_socket; /* socket for local access */
char *db_password;
+ int db_port; /* port for host name address */
int connected;
char *sqlite_errmsg; /* error message returned by sqlite */
POOLMEM *errmsg; /* nicely edited error message */
char *db_name;
char *db_user;
char *db_password;
+ char *db_address; /* host address */
+ char *db_socket; /* socket for local access */
+ int db_port; /* port of host address */
int have_insert_id; /* do have insert_id() */
int connected;
POOLMEM *errmsg; /* nicely edited error message */
* never have errors, or it is really fatal.
*/
B_DB *
-db_init_database(void *jcr, char *db_name, char *db_user, char *db_password)
+db_init_database(void *jcr, char *db_name, char *db_user, char *db_password,
+ char *db_address, int db_port, char *db_socket)
{
B_DB *mdb;
mdb->db_name = bstrdup(db_name);
mdb->db_user = bstrdup(db_user);
mdb->db_password = bstrdup(db_password);
+ if (db_address) {
+ mdb->db_address = bstrdup(db_address);
+ }
+ if (db_socket) {
+ mdb->db_socket = bstrdup(db_socket);
+ }
+ mdb->db_port = db_port;
mdb->have_insert_id = TRUE;
mdb->errmsg = get_pool_memory(PM_EMSG); /* get error message buffer */
*mdb->errmsg = 0;
Dmsg0(50, "mysql_init done\n");
mdb->db = mysql_real_connect(
&(mdb->mysql), /* db */
- NULL, /* default = localhost */
+ mdb->db_address, /* default = localhost */
mdb->db_user, /* login name */
mdb->db_password, /* password */
mdb->db_name, /* database name */
- 0, /* default port */
- NULL, /* default = socket */
+ mdb->db_port, /* default port */
+ mdb->db_socket, /* default = socket */
0); /* flags = none */
/* If no connect, try once more incase it is a timing problem */
if (mdb->db == NULL) {
mdb->db = mysql_real_connect(
&(mdb->mysql), /* db */
- NULL, /* default = localhost */
+ mdb->db_address, /* default = localhost */
mdb->db_user, /* login name */
mdb->db_password, /* password */
mdb->db_name, /* database name */
- 0, /* default port */
- NULL, /* default = socket */
+ mdb->db_port, /* default port */
+ mdb->db_socket, /* default = socket */
0); /* flags = none */
}
if (mdb->db_password) {
free(mdb->db_password);
}
+ if (mdb->db_address) {
+ free(mdb->db_address);
+ }
+ if (mdb->db_socket) {
+ free(mdb->db_socket);
+ }
free(mdb);
}
V(mutex);
/* Database prototypes */
/* sql.c */
-B_DB *db_init_database(void *jcr, char *db_name, char *db_user, char *db_password);
+B_DB *db_init_database(void *jcr, char *db_name, char *db_user, char *db_password,
+ char *db_address, int db_port, char *db_socket);
int db_open_database(void *jcr, B_DB *db);
void db_close_database(void *jcr, B_DB *db);
void db_escape_string(char *snew, char *old, int len);
* never have errors, or it is really fatal.
*/
B_DB *
-db_init_database(void *jcr, char *db_name, char *db_user, char *db_password)
+db_init_database(void *jcr, char *db_name, char *db_user, char *db_password,
+ char *db_address, int db_port, char *db_socket)
{
B_DB *mdb;
* message because the server is probably not running.
*/
db = db_init_database(NULL, catalog->db_name, catalog->db_user,
- catalog->db_password);
+ catalog->db_password, catalog->db_address,
+ catalog->db_port, catalog->db_socket);
if (!db_open_database(NULL, db)) {
Jmsg(NULL, M_FATAL, 0, "%s", db_strerror(db));
} else {
static struct res_items cat_items[] = {
{"name", store_name, ITEM(res_cat.hdr.name), 0, ITEM_REQUIRED, 0},
{"description", store_str, ITEM(res_cat.hdr.desc), 0, 0, 0},
- {"address", store_str, ITEM(res_cat.address), 0, 0, 0},
- {"dbport", store_pint, ITEM(res_cat.DBport), 0, 0, 0},
+ {"address", store_str, ITEM(res_cat.db_address), 0, 0, 0},
+ {"dbaddress", store_str, ITEM(res_cat.db_address), 0, 0, 0},
+ {"dbport", store_pint, ITEM(res_cat.db_port), 0, 0, 0},
/* keep this password as store_str for the moment */
{"password", store_str, ITEM(res_cat.db_password), 0, 0, 0},
{"user", store_str, ITEM(res_cat.db_user), 0, 0, 0},
{"dbname", store_str, ITEM(res_cat.db_name), 0, ITEM_REQUIRED, 0},
+ {"dbsocket", store_str, ITEM(res_cat.db_socket), 0, 0, 0},
{NULL, NULL, NULL, 0, 0, 0}
};
case R_CATALOG:
sendit(sock, "Catalog: name=%s address=%s DBport=%d db_name=%s\n\
db_user=%s\n",
- res->res_cat.hdr.name, NPRT(res->res_cat.address),
- res->res_cat.DBport, res->res_cat.db_name, NPRT(res->res_cat.db_user));
+ res->res_cat.hdr.name, NPRT(res->res_cat.db_address),
+ res->res_cat.db_port, res->res_cat.db_name, NPRT(res->res_cat.db_user));
break;
case R_JOB:
sendit(sock, "Job: name=%s JobType=%d level=%s\n", res->res_job.hdr.name,
}
break;
case R_STORAGE:
- if (res->res_store.address)
+ if (res->res_store.address) {
free(res->res_store.address);
- if (res->res_store.password)
+ }
+ if (res->res_store.password) {
free(res->res_store.password);
- if (res->res_store.media_type)
+ }
+ if (res->res_store.media_type) {
free(res->res_store.media_type);
- if (res->res_store.dev_name)
+ }
+ if (res->res_store.dev_name) {
free(res->res_store.dev_name);
+ }
break;
case R_CATALOG:
- if (res->res_cat.address)
- free(res->res_cat.address);
- if (res->res_cat.db_user)
+ if (res->res_cat.db_address) {
+ free(res->res_cat.db_address);
+ }
+ if (res->res_cat.db_socket) {
+ free(res->res_cat.db_socket);
+ }
+ if (res->res_cat.db_user) {
free(res->res_cat.db_user);
- if (res->res_cat.db_name)
+ }
+ if (res->res_cat.db_name) {
free(res->res_cat.db_name);
- if (res->res_cat.db_password)
+ }
+ if (res->res_cat.db_password) {
free(res->res_cat.db_password);
+ }
break;
case R_FILESET:
if ((num=res->res_fs.num_includes)) {
struct s_res_cat {
RES hdr;
- int DBport; /* Port -- not yet implemented */
- char *address;
+ int db_port; /* Port -- not yet implemented */
+ char *db_address; /* host name for remote access */
+ char *db_socket; /* Socket for local access */
char *db_password;
char *db_user;
char *db_name;
*/
Dmsg0(50, "Open database\n");
jcr->db=db_init_database(jcr, jcr->catalog->db_name, jcr->catalog->db_user,
- jcr->catalog->db_password);
+ jcr->catalog->db_password, jcr->catalog->db_address,
+ jcr->catalog->db_port, jcr->catalog->db_socket);
if (!db_open_database(jcr, jcr->db)) {
Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db));
db_close_database(jcr, jcr->db);
Dmsg0(150, "Open database\n");
ua->db = db_init_database(ua->jcr, ua->catalog->db_name, ua->catalog->db_user,
- ua->catalog->db_password);
+ ua->catalog->db_password, ua->catalog->db_address,
+ ua->catalog->db_port, ua->catalog->db_socket);
if (!db_open_database(ua->jcr, ua->db)) {
bsendmsg(ua, _("Could not open DB %s: ERR=%s"),
ua->catalog->db_name, db_strerror(ua->db));
" -c <file> specify configuration file\n"
" -dnn set debug level to nn\n"
" -v verbose\n"
+" -i specify input Volume names (separated by |)\n"
+" -o specify output Volume names (separated by |)\n"
" -w dir specify working directory (default /tmp)\n"
" -? print this message\n\n"));
exit(1);
int main (int argc, char *argv[])
{
int ch;
+ char *iVolumeName = NULL;
+ char *oVolumeName = NULL;
my_name_is(argc, argv, "bscan");
init_msg(NULL, NULL);
- while ((ch = getopt(argc, argv, "b:c:d:mn:p:rsu:vw:?")) != -1) {
+ while ((ch = getopt(argc, argv, "b:c:d:mn:p:rsu:vV:w:?")) != -1) {
switch (ch) {
case 'b':
bsr = parse_bsr(NULL, optarg);
verbose++;
break;
+ case 'i': /* input Volume name */
+ iVolumeName = optarg;
+ break;
+
+ case 'o': /* output Volume name */
+ oVolumeName = optarg;
+ break;
+
+
case 'w':
wd = optarg;
break;
parse_config(configfile);
/* Setup and acquire input device for reading */
- in_jcr = setup_jcr("bcopy", argv[0], bsr);
+ in_jcr = setup_jcr("bcopy", argv[0], bsr, iVolumeName);
in_dev = setup_to_access_device(in_jcr, 1); /* read device */
if (!in_dev) {
exit(1);
}
/* Setup output device for writing */
- out_jcr = setup_jcr("bcopy", argv[1], bsr);
+ out_jcr = setup_jcr("bcopy", argv[1], bsr, oVolumeName);
out_dev = setup_to_access_device(out_jcr, 0); /* no acquire */
if (!out_dev) {
exit(1);
static int type;
static int stream;
static int prog_name_msg = 0;
+static char *VolumeName = NULL;
static char *wbuf; /* write buffer address */
static uint32_t wsize; /* write size */
" -dnn set debug level to nn\n"
" -e <file> exclude list\n"
" -i <file> include list\n"
+" -V specify Volume names (separated by |)\n"
" -? print this message\n\n");
exit(1);
}
got_inc = TRUE;
break;
+ case 'V': /* Volume name */
+ VolumeName = optarg;
+ break;
+
case '?':
default:
usage();
static void do_extract(char *devname)
{
- jcr = setup_jcr("bextract", devname, bsr);
+ jcr = setup_jcr("bextract", devname, bsr, VolumeName);
dev = setup_to_access_device(jcr, 1); /* acquire for read */
if (!dev) {
exit(1);
" -i <file> include list\n"
" -j list jobs\n"
" -k list blocks\n"
-" -L list tape label\n"
" (none of above) list saved files\n"
" -v be verbose\n"
+" -V specify Volume names (separated by |)\n"
" -? print this message\n\n");
exit(1);
}
int i, ch;
FILE *fd;
char line[1000];
+ char *VolumeName= NULL;
+ char *bsrName = NULL;
working_directory = "/tmp";
my_name_is(argc, argv, "bls");
memset(&ff, 0, sizeof(ff));
init_include_exclude_files(&ff);
- while ((ch = getopt(argc, argv, "b:c:d:e:i:jkLtv?")) != -1) {
+ while ((ch = getopt(argc, argv, "b:c:d:e:i:jkLtvV:?")) != -1) {
switch (ch) {
case 'b':
- bsr = parse_bsr(NULL, optarg);
-// dump_bsr(bsr);
+ bsrName = optarg;
break;
case 'c': /* specify config file */
verbose++;
break;
+ case 'V': /* Volume name */
+ VolumeName = optarg;
+ break;
+
case '?':
default:
usage();
parse_config(configfile);
-
if (ff.included_files_list == NULL) {
add_fname_to_include_list(&ff, 0, "/");
}
for (i=0; i < argc; i++) {
- jcr = setup_jcr("bls", argv[i], bsr);
+ if (bsrName) {
+ bsr = parse_bsr(NULL, bsrName);
+ }
+ jcr = setup_jcr("bls", argv[i], bsr, VolumeName);
dev = setup_to_access_device(jcr, 1); /* acquire for read */
if (!dev) {
exit(1);
dump_volume_label(dev);
return;
}
-
read_records(jcr, dev, record_cb, mount_next_read_volume);
printf("%u files found.\n", num_files);
}
" -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)) {
exit(1);
}
- jcr = setup_jcr("btape", argv[0], bsr);
+ jcr = setup_jcr("btape", argv[0], bsr, NULL);
dev = setup_to_access_device(jcr, 0); /* acquire for write */
if (!dev) {
exit(1);
char *p;
DEVRES *device;
- jcr->VolumeName[0] = 0;
- if (strncmp(jcr->dev_name, "/dev/", 5) != 0) {
- /* Try stripping file part */
- p = jcr->dev_name + strlen(jcr->dev_name);
- while (p >= jcr->dev_name && *p != '/')
- p--;
- if (*p == '/') {
- strcpy(jcr->VolumeName, p+1);
- *p = 0;
+ /*
+ * If no volume name already given and no bsr, and it is a file,
+ * try getting name from Filename
+ */
+ if (!jcr->bsr && jcr->VolumeName[0] == 0) {
+ if (strncmp(jcr->dev_name, "/dev/", 5) != 0) {
+ /* Try stripping file part */
+ p = jcr->dev_name + strlen(jcr->dev_name);
+ while (p >= jcr->dev_name && *p != '/')
+ p--;
+ if (*p == '/') {
+ strcpy(jcr->VolumeName, p+1);
+ *p = 0;
+ }
}
}
* Setup a "daemon" JCR for the various standalone
* tools (e.g. bls, bextract, bscan, ...)
*/
-JCR *setup_jcr(char *name, char *device, BSR *bsr)
+JCR *setup_jcr(char *name, char *device, BSR *bsr, char *VolumeName)
{
JCR *jcr = new_jcr(sizeof(JCR), my_free_jcr);
jcr->VolSessionId = 1;
jcr->VolSessionTime = (uint32_t)time(NULL);
jcr->bsr = bsr;
- jcr->NumVolumes = 1;
+ jcr->NumVolumes = 0;
jcr->pool_name = get_pool_memory(PM_FNAME);
strcpy(jcr->pool_name, "Default");
jcr->pool_type = get_pool_memory(PM_FNAME);
jcr->JobStatus = JS_Terminated;
jcr->dev_name = get_pool_memory(PM_FNAME);
pm_strcpy(&jcr->dev_name, device);
+ if (!bsr && VolumeName) {
+ pm_strcpy(&jcr->VolumeName, VolumeName);
+ }
return jcr;
}
dev_name(dev), VolName);
if (dev->state & ST_LABEL) { /* did we already read label? */
- /* Compare Volume Names */
- if (VolName && *VolName && strcmp(dev->VolHdr.VolName, VolName) != 0) {
+ /* Compare Volume Names allow special wild card */
+ if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolName, VolName) != 0) {
Mmsg(&jcr->errmsg, _("Volume name mismatch on device %s: Wanted %s got %s\n"),
dev_name(dev), VolName, dev->VolHdr.VolName);
/*
/* Compare Volume Names */
Dmsg2(30, "Compare Vol names: VolName=%s hdr=%s\n", VolName?VolName:"*", dev->VolHdr.VolName);
- if (VolName && *VolName && strcmp(dev->VolHdr.VolName, VolName) != 0) {
+ if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolName, VolName) != 0) {
Mmsg(&jcr->errmsg, _("Volume name mismatch. Wanted %s got %s\n"),
VolName, dev->VolHdr.VolName);
/*
uint32_t new_VolSessionId();
/* From acquire.c */
-DEVICE *acquire_device_for_append(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
-int acquire_device_for_read(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
-int release_device(JCR *jcr, DEVICE *dev);
+DEVICE *acquire_device_for_append(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
+int acquire_device_for_read(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
+int release_device(JCR *jcr, DEVICE *dev);
/* From askdir.c */
-int dir_get_volume_info(JCR *jcr, int writing);
-int dir_find_next_appendable_volume(JCR *jcr);
-int dir_update_volume_info(JCR *jcr, VOLUME_CAT_INFO *vol, int relabel);
-int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev);
-int dir_ask_sysop_to_mount_volume(JCR *jcr, DEVICE *dev);
-int dir_update_file_attributes(JCR *jcr, DEV_RECORD *rec);
-int dir_send_job_status(JCR *jcr);
-int dir_create_jobmedia_record(JCR *jcr);
+int dir_get_volume_info(JCR *jcr, int writing);
+int dir_find_next_appendable_volume(JCR *jcr);
+int dir_update_volume_info(JCR *jcr, VOLUME_CAT_INFO *vol, int relabel);
+int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev);
+int dir_ask_sysop_to_mount_volume(JCR *jcr, DEVICE *dev);
+int dir_update_file_attributes(JCR *jcr, DEV_RECORD *rec);
+int dir_send_job_status(JCR *jcr);
+int dir_create_jobmedia_record(JCR *jcr);
/* authenticate.c */
-int authenticate_director(JCR *jcr);
-int authenticate_filed(JCR *jcr);
+int authenticate_director(JCR *jcr);
+int authenticate_filed(JCR *jcr);
/* From block.c */
-void dump_block(DEV_BLOCK *b, char *msg);
+void dump_block(DEV_BLOCK *b, char *msg);
DEV_BLOCK *new_block(DEVICE *dev);
-void init_block_write(DEV_BLOCK *block);
-void empty_block(DEV_BLOCK *block);
-void free_block(DEV_BLOCK *block);
-int write_block_to_device(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
-int write_block_to_dev(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
-int read_block_from_device(DEVICE *dev, DEV_BLOCK *block);
-int read_block_from_dev(DEVICE *dev, DEV_BLOCK *block);
+void init_block_write(DEV_BLOCK *block);
+void empty_block(DEV_BLOCK *block);
+void free_block(DEV_BLOCK *block);
+int write_block_to_device(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
+int write_block_to_dev(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
+int read_block_from_device(DEVICE *dev, DEV_BLOCK *block);
+int read_block_from_dev(DEVICE *dev, DEV_BLOCK *block);
/* From butil.c -- utilities for SD tool programs */
-void print_ls_output(char *fname, char *link, int type, struct stat *statp);
-JCR *setup_jcr(char *name, char *device, BSR *bsr);
+void print_ls_output(char *fname, char *link, int type, struct stat *statp);
+JCR *setup_jcr(char *name, char *device, BSR *bsr, char *VolumeName);
DEVICE *setup_to_access_device(JCR *jcr, int read_access);
-void display_error_status(DEVICE *dev);
+void display_error_status(DEVICE *dev);
DEVRES *find_device_res(char *device_name, int read_access);
/* From dev.c */
-DEVICE *init_dev(DEVICE *dev, DEVRES *device);
-int open_dev(DEVICE *dev, char *VolName, int mode);
-void close_dev(DEVICE *dev);
-void force_close_dev(DEVICE *dev);
-int truncate_dev(DEVICE *dev);
-void term_dev(DEVICE *dev);
-char * strerror_dev(DEVICE *dev);
-void clrerror_dev(DEVICE *dev, int func);
-int update_pos_dev(DEVICE *dev);
-int rewind_dev(DEVICE *dev);
-int load_dev(DEVICE *dev);
-int offline_dev(DEVICE *dev);
-int flush_dev(DEVICE *dev);
-int weof_dev(DEVICE *dev, int num);
-int write_block(DEVICE *dev);
-int write_dev(DEVICE *dev, char *buf, size_t len);
-int read_dev(DEVICE *dev, char *buf, size_t len);
-int status_dev(DEVICE *dev, uint32_t *status);
-int eod_dev(DEVICE *dev);
-int fsf_dev(DEVICE *dev, int num);
-int fsr_dev(DEVICE *dev, int num);
-int bsf_dev(DEVICE *dev, int num);
-int bsr_dev(DEVICE *dev, int num);
-void attach_jcr_to_device(DEVICE *dev, JCR *jcr);
-void detach_jcr_from_device(DEVICE *dev, JCR *jcr);
-JCR *next_attached_jcr(DEVICE *dev, JCR *jcr);
+DEVICE *init_dev(DEVICE *dev, DEVRES *device);
+int open_dev(DEVICE *dev, char *VolName, int mode);
+void close_dev(DEVICE *dev);
+void force_close_dev(DEVICE *dev);
+int truncate_dev(DEVICE *dev);
+void term_dev(DEVICE *dev);
+char * strerror_dev(DEVICE *dev);
+void clrerror_dev(DEVICE *dev, int func);
+int update_pos_dev(DEVICE *dev);
+int rewind_dev(DEVICE *dev);
+int load_dev(DEVICE *dev);
+int offline_dev(DEVICE *dev);
+int flush_dev(DEVICE *dev);
+int weof_dev(DEVICE *dev, int num);
+int write_block(DEVICE *dev);
+int write_dev(DEVICE *dev, char *buf, size_t len);
+int read_dev(DEVICE *dev, char *buf, size_t len);
+int status_dev(DEVICE *dev, uint32_t *status);
+int eod_dev(DEVICE *dev);
+int fsf_dev(DEVICE *dev, int num);
+int fsr_dev(DEVICE *dev, int num);
+int bsf_dev(DEVICE *dev, int num);
+int bsr_dev(DEVICE *dev, int num);
+void attach_jcr_to_device(DEVICE *dev, JCR *jcr);
+void detach_jcr_from_device(DEVICE *dev, JCR *jcr);
+JCR *next_attached_jcr(DEVICE *dev, JCR *jcr);
/* Get info about device */
-char * dev_name(DEVICE *dev);
-char * dev_vol_name(DEVICE *dev);
+char * dev_name(DEVICE *dev);
+char * dev_vol_name(DEVICE *dev);
uint32_t dev_block(DEVICE *dev);
uint32_t dev_file(DEVICE *dev);
-int dev_is_tape(DEVICE *dev);
+int dev_is_tape(DEVICE *dev);
/* From device.c */
-int open_device(DEVICE *dev);
-int fixup_device_block_write_error(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
+int open_device(DEVICE *dev);
+int fixup_device_block_write_error(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
void _lock_device(char *file, int line, DEVICE *dev);
void _unlock_device(char *file, int line, DEVICE *dev);
void _block_device(char *file, int line, DEVICE *dev, int state);
void new_return_device_lock(DEVICE *dev, brwsteal_t *hold);
/* From dircmd.c */
-void connection_request(void *arg);
+void connection_request(void *arg);
/* From fd_cmds.c */
-void run_job(JCR *jcr);
+void run_job(JCR *jcr);
/* From fdmsg.c */
-int bget_msg(BSOCK *sock);
+int bget_msg(BSOCK *sock);
/* From job.c */
-void stored_free_jcr(JCR *jcr);
-void connection_from_filed(void *arg);
-void handle_filed_connection(BSOCK *fd, char *job_name);
+void stored_free_jcr(JCR *jcr);
+void connection_from_filed(void *arg);
+void handle_filed_connection(BSOCK *fd, char *job_name);
/* From label.c */
-int read_dev_volume_label(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
-void create_session_label(JCR *jcr, DEV_RECORD *rec, int label);
-void create_volume_label(DEVICE *dev, char *VolName);
-int write_volume_label_to_dev(JCR *jcr, DEVRES *device, char *VolName, char *PoolName);
-int write_session_label(JCR *jcr, DEV_BLOCK *block, int label);
-int write_volume_label_to_block(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
-void dump_volume_label(DEVICE *dev);
-void dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose);
-int unser_volume_label(DEVICE *dev, DEV_RECORD *rec);
-int unser_session_label(SESSION_LABEL *label, DEV_RECORD *rec);
+int read_dev_volume_label(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
+void create_session_label(JCR *jcr, DEV_RECORD *rec, int label);
+void create_volume_label(DEVICE *dev, char *VolName);
+int write_volume_label_to_dev(JCR *jcr, DEVRES *device, char *VolName, char *PoolName);
+int write_session_label(JCR *jcr, DEV_BLOCK *block, int label);
+int write_volume_label_to_block(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
+void dump_volume_label(DEVICE *dev);
+void dump_label_record(DEVICE *dev, DEV_RECORD *rec, int verbose);
+int unser_volume_label(DEVICE *dev, DEV_RECORD *rec);
+int unser_session_label(SESSION_LABEL *label, DEV_RECORD *rec);
/* From match_bsr.c */
int match_bsr(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec,
- SESSION_LABEL *sesrec);
+ SESSION_LABEL *sesrec);
/* From mount.c */
-int mount_next_write_volume(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, int release);
-int mount_next_read_volume(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
-int autoload_device(JCR *jcr, DEVICE *dev, int writing, BSOCK *dir);
+int mount_next_write_volume(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, int release);
+int mount_next_read_volume(JCR *jcr, DEVICE *dev, DEV_BLOCK *block);
+int autoload_device(JCR *jcr, DEVICE *dev, int writing, BSOCK *dir);
/* From parse_bsr.c */
/* From record.c */
char *FI_to_ascii(int fi);
char *stream_to_ascii(int stream, int fi);
-int write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
-int can_write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
-int read_record_from_block(DEV_BLOCK *block, DEV_RECORD *rec);
+int write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
+int can_write_record_to_block(DEV_BLOCK *block, DEV_RECORD *rec);
+int read_record_from_block(DEV_BLOCK *block, DEV_RECORD *rec);
DEV_RECORD *new_record();
-void free_record(DEV_RECORD *rec);
+void free_record(DEV_RECORD *rec);
/* From read_record.c */
int read_records(JCR *jcr, DEVICE *dev,
}
/* Open database */
- db = db_init_database(NULL, db_name, user, password);
+ db = db_init_database(NULL, db_name, user, password, NULL, 0, NULL);
if (!db_open_database(NULL, db)) {
Emsg1(M_FATAL, 0, "%s", db_strerror(db));
}