bacula.sqlite.rh8.spec
bacula.client.rh8.spec
bacula.mysql.rh8.spec
+bacula.sqlite.rh7.spec
+bacula.client.rh7.spec
+bacula.mysql.rh7.spec
+
+
/* update.c */
int db_update_job_start_record(void *jcr, B_DB *db, JOB_DBR *jr);
int db_update_job_end_record(void *jcr, B_DB *db, JOB_DBR *jr);
+int db_update_client_record(void *jcr, B_DB *mdb, CLIENT_DBR *cr);
int db_update_pool_record(void *jcr, B_DB *db, POOL_DBR *pr);
int db_update_media_record(void *jcr, B_DB *db, MEDIA_DBR *mr);
int db_add_SIG_to_file_record(void *jcr, B_DB *mdb, FileId_t FileId, char *SIG, int type);
if (sql_query(mdb, cmd)) {
m_msg(file, line, &mdb->errmsg, _("query %s failed:\n%s\n"), cmd, sql_strerror(mdb));
j_msg(file, line, jcr, M_FATAL, 0, "%s", mdb->errmsg);
+ if (verbose) {
+ j_msg(file, line, jcr, M_INFO, 0, "%s\n", cmd);
+ }
return 0;
}
mdb->result = sql_store_result(mdb);
if (sql_query(mdb, cmd)) {
m_msg(file, line, &mdb->errmsg, _("insert %s failed:\n%s\n"), cmd, sql_strerror(mdb));
j_msg(file, line, jcr, M_FATAL, 0, "%s", mdb->errmsg);
+ if (verbose) {
+ j_msg(file, line, jcr, M_INFO, 0, "%s\n", cmd);
+ }
return 0;
}
if (mdb->have_insert_id) {
}
if (mdb->num_rows != 1) {
char ed1[30];
- m_msg(file, line, &mdb->errmsg, _("Insertion problem: affect_rows=%s\n"),
+ m_msg(file, line, &mdb->errmsg, _("Insertion problem: affected_rows=%s\n"),
edit_uint64(mdb->num_rows, ed1));
return 0;
}
if (sql_query(mdb, cmd)) {
m_msg(file, line, &mdb->errmsg, _("update %s failed:\n%s\n"), cmd, sql_strerror(mdb));
j_msg(file, line, jcr, M_ERROR, 0, "%s", mdb->errmsg);
- j_msg(file, line, jcr, M_ERROR, 0, "%s\n", cmd);
+ if (verbose) {
+ j_msg(file, line, jcr, M_INFO, 0, "%s\n", cmd);
+ }
return 0;
}
mdb->num_rows = sql_affected_rows(mdb);
if (sql_query(mdb, cmd)) {
m_msg(file, line, &mdb->errmsg, _("delete %s failed:\n%s\n"), cmd, sql_strerror(mdb));
j_msg(file, line, jcr, M_ERROR, 0, "%s", mdb->errmsg);
+ if (verbose) {
+ j_msg(file, line, jcr, M_INFO, 0, "%s\n", cmd);
+ }
return -1;
}
mdb->changes++;
}
+int
+db_update_client_record(void *jcr, B_DB *mdb, CLIENT_DBR *cr)
+{
+ int stat;
+ char ed1[50], ed2[50];
+
+ db_lock(mdb);
+ if (!db_create_client_record(jcr, mdb, cr)) {
+ db_unlock(mdb);
+ return 0;
+ }
+
+ Mmsg(&mdb->cmd,
+"UPDATE Client SET AutoPrune=%d,FileRetention=%s,JobRetention=%s,"
+"Uname='%s' WHERE Name='%s'",
+ cr->AutoPrune,
+ edit_uint64(cr->FileRetention, ed1),
+ edit_uint64(cr->JobRetention, ed2),
+ cr->Uname, cr->Name);
+
+ stat = UPDATE_DB(jcr, mdb, mdb->cmd);
+ db_unlock(mdb);
+ return stat;
+}
+
+
int
db_update_pool_record(void *jcr, B_DB *mdb, POOL_DBR *pr)
{
while ((stat = bnet_recv(UA_sock)) >= 0) {
if (at_prompt) {
if (!stop) {
- fprintf(output, "\n");
+ putc('\n', output);
}
at_prompt = FALSE;
}
if (!stop) {
- fprintf(output, "%s", UA_sock->msg);
+ fputs(UA_sock->msg, output);
}
}
if (!stop) {
while ((ch = getopt(argc, argv, "bc:d:r:st?")) != -1) {
switch (ch) {
case 'c': /* configuration file */
- if (configfile != NULL)
+ if (configfile != NULL) {
free(configfile);
+ }
configfile = bstrdup(optarg);
break;
case 'd':
debug_level = atoi(optarg);
- if (debug_level <= 0)
+ if (debug_level <= 0) {
debug_level = 1;
+ }
break;
case 's': /* turn off signals */
}
UnlockRes();
if (ndir == 0) {
- Emsg1(M_ABORT, 0, "No Director resource defined in %s\n\
+ Emsg1(M_ERROR_TERM, 0, "No Director resource defined in %s\n\
Without that I don't how to speak to the Director :-(\n", configfile);
}
}
jcr.dir_bsock = UA_sock;
if (!authenticate_director(&jcr, dir)) {
- fprintf(stderr, "ERR: %s", UA_sock->msg);
+ fprintf(stderr, "ERR=%s", UA_sock->msg);
terminate_console(0);
return 1;
}
{
static int already_here = FALSE;
- if (already_here) /* avoid recursive temination problems */
+ if (already_here) { /* avoid recursive temination problems */
exit(1);
+ }
already_here = TRUE;
exit(0);
}
{
int len;
if (!stop) {
- fprintf(output, prompt);
+ puts(prompt, output);
fflush(output);
}
again:
jcr->store->SDDport = jcr->store->SDport;
}
bnet_fsend(fd, storaddr, jcr->store->address, jcr->store->SDDport);
- if (!response(fd, OKstore, "Storage")) {
+ if (!response(fd, OKstore, "Storage", 1)) {
goto bail_out;
}
goto bail_out;
}
Dmsg1(120, ">filed: %s", fd->msg);
- if (!response(fd, OKlevel, "Level")) {
+ if (!response(fd, OKlevel, "Level", 1)) {
goto bail_out;
}
/* Send backup command */
bnet_fsend(fd, backupcmd);
- if (!response(fd, OKbackup, "backup")) {
+ if (!response(fd, OKbackup, "backup", 1)) {
goto bail_out;
}
" -s no signals\n"
" -t test - read configuration and exit\n"
" -u userid\n"
+" -v verbose user messages\n"
" -? print this message.\n"
"\n"));
daemon_start_time = time(NULL);
memset(&last_job, 0, sizeof(last_job));
- while ((ch = getopt(argc, argv, "c:d:fg:r:stu:?")) != -1) {
+ while ((ch = getopt(argc, argv, "c:d:fg:r:stu:v?")) != -1) {
switch (ch) {
case 'c': /* specify config file */
if (configfile != NULL) {
uid = optarg;
break;
+ case 'v': /* verbose */
+ verbose++;
+ break;
+
case '?':
default:
usage();
set_jcr_job_status(jcr, JS_ErrorTerminated);
return 0;
} else {
- /***** ***FIXME***** update Client Uname */
+ CLIENT_DBR cr;
+ memset(&cr, 0, sizeof(cr));
+ bstrncpy(cr.Name, jcr->client->hdr.name, sizeof(cr.Name));
+ cr.AutoPrune = jcr->client->AutoPrune;
+ cr.FileRetention = jcr->client->FileRetention;
+ cr.JobRetention = jcr->client->JobRetention;
+ bstrncpy(cr.Uname, fd->msg+strlen(OKjob)+1, sizeof(cr.Uname));
+ if (!db_update_client_record(jcr, jcr->db, &cr)) {
+ Jmsg(jcr, M_WARNING, 0, _("Error updating Client record. ERR=%s\n"),
+ db_strerror(jcr->db));
+ }
}
} else {
- Jmsg(jcr, M_FATAL, 0, _("<filed: bad response to JobId command: %s\n"),
+ Jmsg(jcr, M_FATAL, 0, _("FD gave bad response to JobId command: %s\n"),
bnet_strerror(fd));
set_jcr_job_status(jcr, JS_ErrorTerminated);
return 0;
/*
- * Send either an Included or an Excluded list
+ * Send either an Included or an Excluded list to FD
*/
static int send_list(JCR *jcr, int list)
{
}
for (int j=0; j<ie->num_names; j++) {
p = ie->name_list[j];
- switch (*p++) {
+ switch (*p) {
case '|':
fd->msg = edit_job_codes(jcr, fd->msg, p, "");
bpipe = open_bpipe(fd->msg, 0, "r");
}
fclose(ffd);
break;
+ case '\\':
+ p++; /* skip over \ */
+ /* Note, fall through wanted */
default:
if (ie->num_opts) {
pm_strcpy(&fd->msg, ie->opts_list[0]->opts);
} else {
pm_strcpy(&fd->msg, "0 ");
}
- pm_strcat(&fd->msg, ie->name_list[j]);
+ pm_strcat(&fd->msg, p);
Dmsg1(100, "Inc/Exc name=%s\n", fd->msg);
fd->msglen = strlen(fd->msg);
if (!bnet_send(fd)) {
}
bnet_sig(fd, BNET_EOD); /* end of data */
if (list == INC_LIST) {
- if (!response(fd, OKinc, "Include")) {
+ if (!response(fd, OKinc, "Include", 1)) {
goto bail_out;
}
- } else if (!response(fd, OKexc, "Exclude")) {
+ } else if (!response(fd, OKexc, "Exclude", 1)) {
goto bail_out;
}
return 1;
* Returns: 0 on failure
* 1 on success
*/
-int response(BSOCK *fd, char *resp, char *cmd)
+int response(BSOCK *fd, char *resp, char *cmd, int prtmsg)
{
int n;
if (strcmp(fd->msg, resp) == 0) {
return 1;
}
- Emsg3(M_FATAL, 0, _("<filed: bad response to %s command: wanted %s got: %s\n"),
- cmd, resp, fd->msg);
+ if (prtmsg) {
+ Emsg3(M_FATAL, 0, _("FD gave bad response to %s command: wanted %s got: %s\n"),
+ cmd, resp, fd->msg);
+ }
return 0;
}
- Emsg2(M_FATAL, 0, _("<filed: Socket error from Filed on %s command: ERR=%s\n"),
+ Emsg2(M_FATAL, 0, _("Socket error from Filed on %s command: ERR=%s\n"),
cmd, bnet_strerror(fd));
return 0;
}
CLIENT_DBR cr;
memset(&cr, 0, sizeof(cr));
- strcpy(cr.Name, jcr->client->hdr.name);
+ bstrncpy(cr.Name, jcr->client->hdr.name, sizeof(cr.Name));
cr.AutoPrune = jcr->client->AutoPrune;
cr.FileRetention = jcr->client->FileRetention;
cr.JobRetention = jcr->client->JobRetention;
jcr->client_name = get_memory(strlen(jcr->client->hdr.name) + 1);
strcpy(jcr->client_name, jcr->client->hdr.name);
if (!db_create_client_record(jcr, jcr->db, &cr)) {
- Jmsg(jcr, M_FATAL, 0, _("Could not create Client record. ERR=%s"),
+ Jmsg(jcr, M_FATAL, 0, _("Could not create Client record. ERR=%s\n"),
db_strerror(jcr->db));
return 0;
}
if (jcr->RestoreBootstrap) {
free(jcr->RestoreBootstrap);
}
+ if (jcr->client_uname) {
+ free_pool_memory(jcr->client_uname);
+ }
Dmsg0(200, "End dird free_jcr\n");
}
device_name_len + media_type_len + pool_type_len + pool_name_len);
bnet_fsend(sd, use_device, device_name, media_type, pool_name, pool_type);
Dmsg1(110, ">stored: %s", sd->msg);
- status = response(sd, OK_device, "Use Device");
-
+ status = response(sd, OK_device, "Use Device", 0);
+ if (!status) {
+ pm_strcpy(&pool_type, sd->msg); /* save message */
+ Jmsg(jcr, M_FATAL, 0, _("\n"
+ " Storage daemon didn't accept Device \"%s\" because:\n %s"),
+ device_name, pool_type/* sd->msg */);
+ }
+
free_memory(device_name);
free_memory(media_type);
free_memory(pool_name);
extern int start_storage_daemon_job(JCR *jcr);
extern int start_storage_daemon_message_thread(JCR *jcr);
extern int32_t bget_msg(BSOCK *bs, int type);
-extern int response(BSOCK *fd, char *resp, char *cmd);
+extern int response(BSOCK *fd, char *resp, char *cmd, int prtmsg);
extern void wait_for_storage_daemon_termination(JCR *jcr);
/* newvol.c */
}
bnet_fsend(fd, storaddr, jcr->store->address, jcr->store->SDDport);
Dmsg1(6, "dird>filed: %s\n", fd->msg);
- if (!response(fd, OKstore, "Storage")) {
+ if (!response(fd, OKstore, "Storage", 1)) {
restore_cleanup(jcr, JS_ErrorTerminated);
return 0;
}
rjr.VolSessionId, rjr.VolSessionTime,
rjr.StartFile, rjr.EndFile, rjr.StartBlock,
rjr.EndBlock);
- if (!response(fd, OKsession, "Session")) {
+ if (!response(fd, OKsession, "Session", 1)) {
restore_cleanup(jcr, JS_ErrorTerminated);
return 0;
}
bnet_fsend(fd, restorecmd, replace, where);
unbash_spaces(where);
- if (!response(fd, OKrestore, "Restore")) {
+ if (!response(fd, OKrestore, "Restore", 1)) {
restore_cleanup(jcr, JS_ErrorTerminated);
return 0;
}
}
bnet_sig(fd, BNET_EOD);
fclose(bs);
- if (!response(fd, OKbootstrap, "Bootstrap")) {
+ if (!response(fd, OKbootstrap, "Bootstrap", 1)) {
set_jcr_job_status(jcr, JS_ErrorTerminated);
return 0;
}
jcr->store->SDDport = jcr->store->SDport;
}
bnet_fsend(fd, storaddr, jcr->store->address, jcr->store->SDDport);
- if (!response(fd, OKstore, "Storage")) {
+ if (!response(fd, OKstore, "Storage", 1)) {
goto bail_out;
}
/*
jr.VolSessionId, jr.VolSessionTime,
jr.StartFile, jr.EndFile, jr.StartBlock,
jr.EndBlock);
- if (!response(fd, OKsession, "Session")) {
+ if (!response(fd, OKsession, "Session", 1)) {
goto bail_out;
}
level = "volume";
* Send verify command/level to File daemon
*/
bnet_fsend(fd, verifycmd, level);
- if (!response(fd, OKverify, "Verify")) {
+ if (!response(fd, OKverify, "Verify", 1)) {
goto bail_out;
}
" -s no signals (for debugging)\n"
" -t test configuration file and exit\n"
" -u userid\n"
+" -v verbose user messages\n"
" -? print this message.\n"
"\n"));
exit(1);
memset(&last_job, 0, sizeof(last_job));
- while ((ch = getopt(argc, argv, "c:d:fg:istu:?")) != -1) {
+ while ((ch = getopt(argc, argv, "c:d:fg:istu:v?")) != -1) {
switch (ch) {
case 'c': /* configuration file */
if (configfile != NULL) {
uid = optarg;
break;
+ case 'v': /* verbose */
+ verbose++;
+ break;
+
case '?':
default:
usage();
return bnet_fsend(dir, OKjob);
}
+#define INC_LIST 0
+#define EXC_LIST 1
+
+static void add_fname_to_list(JCR *jcr, char *fname, int list)
+{
+ char *p;
+ if (list == INC_LIST) {
+ add_fname_to_include_list((FF_PKT *)jcr->ff, 1, fname);
+ } else {
+ /* Skip leading options -- currently ignored */
+ for (p=fname; *p && *p != ' '; p++)
+ { }
+ /* Skip spaces */
+ for ( ; *p && *p == ' '; p++)
+ { }
+ add_fname_to_exclude_list((FF_PKT *)jcr->ff, p);
+ }
+}
+
/*
*
* Get list of files/directories to include from Director
BSOCK *dir = jcr->dir_bsock;
while (bnet_recv(dir) >= 0) {
- dir->msg[dir->msglen] = 0;
- strip_trailing_junk(dir->msg);
- Dmsg1(010, "include file: %s\n", dir->msg);
- add_fname_to_include_list((FF_PKT *)jcr->ff, 1, dir->msg);
+ dir->msg[dir->msglen] = 0;
+ strip_trailing_junk(dir->msg);
+ Dmsg1(010, "include file: %s\n", dir->msg);
+ add_fname_to_list(jcr, dir->msg, INC_LIST);
}
return bnet_fsend(dir, OKinc);
static int exclude_cmd(JCR *jcr)
{
BSOCK *dir = jcr->dir_bsock;
- char *p;
while (bnet_recv(dir) >= 0) {
- dir->msg[dir->msglen] = 0;
- strip_trailing_junk(dir->msg);
- /* Skip leading options -- currently ignored */
- for (p=dir->msg; *p && *p != ' '; p++)
- { }
- /* Skip spaces */
- for ( ; *p && *p == ' '; p++)
- { }
- add_fname_to_exclude_list((FF_PKT *)jcr->ff, p);
- Dmsg1(110, "<dird: exclude file %s\n", dir->msg);
+ dir->msg[dir->msglen] = 0;
+ strip_trailing_junk(dir->msg);
+ add_fname_to_list(jcr, dir->msg, EXC_LIST);
+ Dmsg1(110, "<dird: exclude file %s\n", dir->msg);
}
return bnet_fsend(dir, OKexc);
#define FULL_LOCATION 1 /* set for file:line in Debug messages */
char *working_directory = NULL; /* working directory path stored here */
-int debug_level = 5; /* debug level */
+int verbose = 0; /* increase User messages */
+int debug_level = 0; /* debug level */
time_t daemon_start_time = 0; /* Daemon start time */
char my_name[20]; /* daemon name is stored here */
void Jmsg(void *vjcr, int type, int level, char *fmt,...);
extern int debug_level;
+extern int verbose;
extern char my_name[];
extern char *working_directory;
extern time_t daemon_start_time;
static JCR *out_jcr; /* output jcr */
static BSR *bsr = NULL;
static char *wd = "/tmp";
-static int verbose = 0;
static int list_records = 0;
static uint32_t records = 0;
static uint32_t jobs = 0;
static int dump_label = FALSE;
static int list_blocks = FALSE;
static int list_jobs = FALSE;
-static int verbose = 0;
static DEV_RECORD *rec;
static DEV_BLOCK *block;
static JCR *jcr;
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 time_t now;
static double kbs;
static long file_index;
-static int verbose = 0;
static int end_of_tape = 0;
static uint32_t LastBlock = 0;
static uint32_t eot_block;
/* Responses sent to Director daemon */
static char OKjob[] = "3000 OK Job SDid=%u SDtime=%u Authorization=%s\n";
static char OK_device[] = "3000 OK use device\n";
-static char NO_device[] = "3914 Device %s does not exist\n";
+static char NO_device[] = "3914 Device \"%s\" not in SD Device resources.\n";
static char BAD_use[] = "3913 Bad use command: %s\n";
static char BAD_job[] = "3915 Bad Job command: %s\n";
}
}
UnlockRes();
- Jmsg(jcr, M_FATAL, 0, _("Requested device %s not found. Cannot continue.\n"),
+ if (verbose) {
+ unbash_spaces(dir->msg);
+ Jmsg(jcr, M_INFO, 0, _("Failed command: %s\n"), dir->msg);
+ }
+ Jmsg(jcr, M_FATAL, 0, _("\n"
+ " Device \"%s\" requested by Dir not found in SD Device resources.\n"),
dev_name);
bnet_fsend(dir, NO_device, dev_name);
} else {
+ if (verbose) {
+ unbash_spaces(dir->msg);
+ Jmsg(jcr, M_INFO, 0, _("Failed command: %s\n"), dir->msg);
+ }
Jmsg(jcr, M_FATAL, 0, _("store<dir: Bad Use Device command: %s\n"), dir->msg);
bnet_fsend(dir, BAD_use, dir->msg);
}
DEV_BLOCK *block;
DEV_RECORD *rec;
uint32_t record, num_files = 0;
- int verbose = FALSE;
int ok = TRUE;
int done = FALSE;
SESSION_LABEL sessrec;
" -s no signals (for debugging)\n"
" -t test - read config and exit\n"
" -u userid\n"
+" -v verbose user messages\n"
" -? print this message.\n"
"\n"));
exit(1);
Emsg1(M_ABORT, 0, "Tape block size (%d) is not a power of 2\n", TAPE_BSIZE);
}
- while ((ch = getopt(argc, argv, "c:d:fg:stu:?")) != -1) {
+ while ((ch = getopt(argc, argv, "c:d:fg:stu:v?")) != -1) {
switch (ch) {
case 'c': /* configuration file */
if (configfile != NULL) {
uid = optarg;
break;
+ case 'v': /* verbose */
+ verbose++;
+ break;
+
case '?':
default:
usage();
/* Global variables */
static int fix = FALSE;
static int batch = FALSE;
-static int verbose = FALSE;
static B_DB *db;
static ID_LIST id_list;
static NAME_LIST name_list;