/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2009 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 "vss.h"
static pthread_mutex_t vss_mutex = PTHREAD_MUTEX_INITIALIZER;
-static int enable_vss;
+static int enable_vss = 0;
#endif
extern CLIENT *me; /* our client resource */
bool found, quit;
JCR *jcr;
BSOCK *dir = (BSOCK *)dirp;
+ const char jobname[12] = "*Director*";
jcr = new_jcr(sizeof(JCR), filed_free_jcr); /* create JCR */
jcr->dir_bsock = dir;
jcr->last_fname[0] = 0;
jcr->client_name = get_memory(strlen(my_name) + 1);
pm_strcpy(jcr->client_name, my_name);
+ bstrncpy(jcr->Job, jobname, sizeof(jobname)); /* dummy */
jcr->crypto.pki_sign = me->pki_sign;
jcr->crypto.pki_encrypt = me->pki_encrypt;
jcr->crypto.pki_keypair = me->pki_keypair;
/* Send termination status back to Dir */
dir->fsend(EndJob, jcr->JobStatus, jcr->JobFiles,
edit_uint64(jcr->ReadBytes, ed1),
- edit_uint64(jcr->JobBytes, ed2), jcr->Errors, jcr->VSS,
+ edit_uint64(jcr->JobBytes, ed2), jcr->JobErrors, jcr->VSS,
jcr->crypto.pki_encrypt);
Dmsg1(110, "End FD msg: %s\n", dir->msg);
}
if (is_file) {
fileset->incexe->name_list.append(new_dlistString(fname));
} else {
- fileset->incexe->plugin_list.append(new_dlistString(fname));
+ if (me->plugin_directory) {
+ fileset->incexe->plugin_list.append(new_dlistString(fname));
+ } else {
+ Jmsg(jcr, M_FATAL, 0, _("Plugin Directory not defined. Cannot use plugin: \"%\"\n"),
+ fname);
+ }
}
break;
}
case 'N':
fo->flags |= FO_HONOR_NODUMP;
break;
+ case 'X':
+ fo->flags |= FO_XATTR;
+ break;
default:
Emsg1(M_ERROR, 0, _("Unknown include/exclude option: %c\n"), *p);
break;
goto bail_out;
}
since_time = str_to_uint64(buf); /* this is the since time */
- Dmsg1(100, "since_time=%d\n", (int)since_time);
+ Dmsg1(100, "since_time=%lld\n", since_time);
char ed1[50], ed2[50];
/*
* Sync clocks by polling him for the time. We take
} else {
type = M_INFO;
}
- Jmsg(jcr, type, 0, _("DIR and FD clocks differ by %d seconds, FD automatically compensating.\n"), adj);
+ Jmsg(jcr, type, 0, _("DIR and FD clocks differ by %lld seconds, FD automatically compensating.\n"), adj);
}
dir->signal(BNET_EOD);
- Dmsg2(100, "adj = %d since_time=%d\n", (int)adj, (int)since_time);
+ Dmsg2(100, "adj=%lld since_time=%lld\n", adj, since_time);
jcr->incremental = 1; /* set incremental or decremental backup */
- jcr->mtime = (time_t)since_time; /* set since time */
- generate_plugin_event(jcr, bEventSince, (void *)jcr->mtime);
+ jcr->mtime = since_time; /* set since time */
+ generate_plugin_event(jcr, bEventSince, (void *)(time_t)jcr->mtime);
} else {
Jmsg1(jcr, M_FATAL, 0, _("Unknown backup level: %s\n"), level);
free_memory(level);
int stored_port; /* storage daemon port */
int enable_ssl; /* enable ssl to sd */
BSOCK *dir = jcr->dir_bsock;
- BSOCK *sd; /* storage daemon bsock */
+ BSOCK *sd = new_bsock(); /* storage daemon bsock */
Dmsg1(100, "StorageCmd: %s", dir->msg);
if (sscanf(dir->msg, storaddr, &jcr->stored_addr, &stored_port, &enable_ssl) != 3) {
Dmsg3(110, "Open storage: %s:%d ssl=%d\n", jcr->stored_addr, stored_port, enable_ssl);
/* Open command communications with Storage daemon */
/* Try to connect for 1 hour at 10 second intervals */
- sd = bnet_connect(jcr, 10, (int)me->SDConnectTimeout, me->heartbeat_interval,
- _("Storage daemon"), jcr->stored_addr, NULL, stored_port, 1);
+
+ sd->set_source_address(me->FDsrc_addr);
+ if (!sd->connect(jcr, 10, (int)me->SDConnectTimeout, me->heartbeat_interval,
+ _("Storage daemon"), jcr->stored_addr, NULL, stored_port, 1)) {
+ sd->destroy();
+ sd = NULL;
+ }
+
if (sd == NULL) {
Jmsg(jcr, M_FATAL, 0, _("Failed to connect to Storage daemon: %s:%d\n"),
jcr->stored_addr, stored_port);
}
dir->fsend(OKbackup);
- Dmsg1(110, "bfiled>dird: %s", dir->msg);
+ Dmsg1(110, "filed>dird: %s", dir->msg);
/*
* Send Append Open Session to Storage daemon
Jmsg(jcr, M_INFO, 0, _("Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n"), g_pVSSClient->GetDriverName(), szWinDriveLetters);
if (!g_pVSSClient->CreateSnapshots(szWinDriveLetters)) {
Jmsg(jcr, M_WARNING, 0, _("Generate VSS snapshots failed.\n"));
- jcr->Errors++;
+ jcr->JobErrors++;
} else {
/* tell user if snapshot creation of a specific drive failed */
int i;
for (i=0; i < (int)strlen(szWinDriveLetters); i++) {
if (islower(szWinDriveLetters[i])) {
Jmsg(jcr, M_WARNING, 0, _("Generate VSS snapshot of drive \"%c:\\\" failed. VSS support is disabled on this drive.\n"), szWinDriveLetters[i]);
- jcr->Errors++;
+ jcr->JobErrors++;
}
}
/* inform user about writer states */
for (i=0; i < (int)g_pVSSClient->GetWriterCount(); i++)
if (g_pVSSClient->GetWriterState(i) < 1) {
Jmsg(jcr, M_WARNING, 0, _("VSS Writer (PrepareForBackup): %s\n"), g_pVSSClient->GetWriterInfo(i));
- jcr->Errors++;
+ jcr->JobErrors++;
}
}
} else {
Dmsg0(110, "Error in blast_data.\n");
} else {
set_jcr_job_status(jcr, JS_Terminated);
-
- if (jcr->JobStatus != JS_Terminated) {
+ /* Note, the above set status will not override an error */
+ if (!(jcr->JobStatus == JS_Terminated || jcr->JobStatus == JS_Warnings)) {
bnet_suppress_error_messages(sd, 1);
goto cleanup; /* bail out now */
}
Jmsg(jcr, M_FATAL, 0, _("Append Close with SD failed.\n"));
goto cleanup;
}
- if (SDJobStatus != JS_Terminated) {
+ if (!(SDJobStatus == JS_Terminated || SDJobStatus == JS_Warnings)) {
Jmsg(jcr, M_FATAL, 0, _("Bad status %d returned from Storage Daemon.\n"),
SDJobStatus);
}
int msg_type = M_INFO;
if (g_pVSSClient->GetWriterState(i) < 1) {
msg_type = M_WARNING;
- jcr->Errors++;
+ jcr->JobErrors++;
}
Jmsg(jcr, msg_type, 0, _("VSS Writer (BackupComplete): %s\n"), g_pVSSClient->GetWriterInfo(i));
}
}
+ Win32ConvCleanupCache();
V(vss_mutex);
}
#endif
generate_plugin_event(jcr, bEventLevel, (void *)jcr->get_JobLevel());
generate_plugin_event(jcr, bEventStartVerifyJob);
- Dmsg1(110, "bfiled>dird: %s", dir->msg);
+ Dmsg1(110, "filed>dird: %s", dir->msg);
switch (jcr->get_JobLevel()) {
case L_VERIFY_INIT:
* Send Close session command to Storage daemon
*/
sd->fsend(read_close, jcr->Ticket);
- Dmsg1(130, "bfiled>stored: %s", sd->msg);
+ Dmsg1(130, "filed>stored: %s", sd->msg);
/* ****FIXME**** check response */
bget_msg(sd); /* get OK */
jcr->prefix_links = prefix_links;
dir->fsend(OKrestore);
- Dmsg1(110, "bfiled>dird: %s", dir->msg);
+ Dmsg1(110, "filed>dird: %s", dir->msg);
jcr->set_JobType(JT_RESTORE);
* Send Close session command to Storage daemon
*/
sd->fsend(read_close, jcr->Ticket);
- Dmsg1(130, "bfiled>stored: %s", sd->msg);
+ Dmsg1(130, "filed>stored: %s", sd->msg);
bget_msg(sd); /* get OK */
bail_out:
- if (jcr->Errors) {
+ if (jcr->JobErrors) {
set_jcr_job_status(jcr, JS_ErrorTerminated);
}
* Get ticket number
*/
if (bget_msg(sd) >= 0) {
- Dmsg1(110, "bfiled<stored: %s", sd->msg);
+ Dmsg1(110, "filed<stored: %s", sd->msg);
if (sscanf(sd->msg, OK_open, &jcr->Ticket) != 1) {
Jmsg(jcr, M_FATAL, 0, _("Bad response to SD read open: %s\n"), sd->msg);
return 0;
}
- Dmsg1(110, "bfiled: got Ticket=%d\n", jcr->Ticket);
+ Dmsg1(110, "filed: got Ticket=%d\n", jcr->Ticket);
} else {
Jmsg(jcr, M_FATAL, 0, _("Bad response from stored to read open command\n"));
return 0;