X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Ffd_cmds.c;h=f85b39f48160d57861c13cf8ef562d47489d10e9;hb=5270a8fa2244faecb5e18b5d5a9a04eadd7164fb;hp=2ef63d9813f6ba74ee0b670c223abc230d7da047;hpb=af393297b65456d07122f3e372ee3985dc747f06;p=bacula%2Fbacula diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c index 2ef63d9813..f85b39f481 100644 --- a/bacula/src/dird/fd_cmds.c +++ b/bacula/src/dird/fd_cmds.c @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2009 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. @@ -37,7 +37,6 @@ * Utility functions for sending info to File Daemon. * These functions are used by both backup and verify. * - * Version $Id$ */ #include "bacula.h" @@ -122,6 +121,9 @@ int connect_to_file_daemon(JCR *jcr, int retry_interval, int max_retry_time, /* * Now send JobId and authorization key */ + if (jcr->sd_auth_key == NULL) { + jcr->sd_auth_key = bstrdup("dummy"); + } fd->fsend(jobcmd, edit_int64(jcr->JobId, ed1), jcr->Job, jcr->VolSessionId, jcr->VolSessionTime, jcr->sd_auth_key); if (!jcr->keep_sd_auth_key && strcmp(jcr->sd_auth_key, "dummy")) { @@ -190,7 +192,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len) * Lookup the last FULL backup job to get the time/date for a * differential or incremental save. */ - switch (jcr->get_JobLevel()) { + switch (jcr->getJobLevel()) { case L_DIFFERENTIAL: case L_INCREMENTAL: POOLMEM *stime = get_pool_memory(PM_MESSAGE); @@ -213,7 +215,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len) Dmsg4(50, "have_full=%d do_full=%d now=%lld full_time=%lld\n", have_full, do_full, now, last_full_time); /* Make sure the last diff is recent enough */ - if (have_full && jcr->get_JobLevel() == L_INCREMENTAL && jcr->job->MaxDiffInterval > 0) { + if (have_full && jcr->getJobLevel() == L_INCREMENTAL && jcr->job->MaxDiffInterval > 0) { /* Lookup last diff job */ if (db_find_last_job_start_time(jcr, jcr->db, &jcr->jr, &stime, L_DIFFERENTIAL)) { last_diff_time = str_to_utime(stime); @@ -242,13 +244,13 @@ void get_level_since_time(JCR *jcr, char *since, int since_len) Jmsg(jcr, M_INFO, 0, "%s", db_strerror(jcr->db)); Jmsg(jcr, M_INFO, 0, _("No prior or suitable Full backup found in catalog. Doing FULL backup.\n")); bsnprintf(since, since_len, _(" (upgraded from %s)"), - level_to_str(jcr->get_JobLevel())); + level_to_str(jcr->getJobLevel())); jcr->set_JobLevel(jcr->jr.JobLevel = L_FULL); } else if (do_diff) { /* No recent diff job found, so upgrade this one to Diff */ Jmsg(jcr, M_INFO, 0, _("No prior or suitable Differential backup found in catalog. Doing Differential backup.\n")); bsnprintf(since, since_len, _(" (upgraded from %s)"), - level_to_str(jcr->get_JobLevel())); + level_to_str(jcr->getJobLevel())); jcr->set_JobLevel(jcr->jr.JobLevel = L_DIFFERENTIAL); } else { if (jcr->job->rerun_failed_levels) { @@ -256,7 +258,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len) Jmsg(jcr, M_INFO, 0, _("Prior failed job found in catalog. Upgrading to %s.\n"), level_to_str(JobLevel)); bsnprintf(since, since_len, _(" (upgraded from %s)"), - level_to_str(jcr->get_JobLevel())); + level_to_str(jcr->getJobLevel())); jcr->set_JobLevel(jcr->jr.JobLevel = JobLevel); jcr->jr.JobId = jcr->JobId; break; @@ -268,7 +270,7 @@ void get_level_since_time(JCR *jcr, char *since, int since_len) jcr->jr.JobId = jcr->JobId; break; } - Dmsg2(100, "Level=%c last start time=%s\n", jcr->get_JobLevel(), jcr->stime); + Dmsg2(100, "Level=%c last start time=%s\n", jcr->getJobLevel(), jcr->stime); } static void send_since_time(JCR *jcr) @@ -296,7 +298,7 @@ bool send_level_command(JCR *jcr) /* * Send Level command to File daemon */ - switch (jcr->get_JobLevel()) { + switch (jcr->getJobLevel()) { case L_BASE: fd->fsend(levelcmd, not_accurate, "base", " ", 0); break; @@ -316,7 +318,7 @@ bool send_level_command(JCR *jcr) case L_SINCE: default: Jmsg2(jcr, M_FATAL, 0, _("Unimplemented backup level %d %c\n"), - jcr->get_JobLevel(), jcr->get_JobLevel()); + jcr->getJobLevel(), jcr->getJobLevel()); return 0; } Dmsg1(120, ">filed: %s", fd->msg); @@ -333,6 +335,7 @@ static bool send_fileset(JCR *jcr) { FILESET *fileset = jcr->fileset; BSOCK *fd = jcr->file_bsock; + STORE *store = jcr->wstore; int num; bool include = true; @@ -359,7 +362,6 @@ static bool send_fileset(JCR *jcr) } for (j=0; jnum_opts; j++) { FOPTS *fo = ie->opts_list[j]; - fd->fsend("O %s\n", fo->opts); bool enhanced_wild = false; for (k=0; fo->opts[k]!='\0'; k++) { @@ -369,6 +371,31 @@ static bool send_fileset(JCR *jcr) } } + /* Strip out compression option Zn if disallowed for this Storage */ + if (store && !store->AllowCompress) { + char newopts[MAX_FOPTS]; + int j = 0; + for (k=0; fo->opts[k]!='\0'; k++) { + /* Z compress option is followed by the single-digit compress level */ + if (fo->opts[k]=='Z') { + k++; /* skip option and level */ + } else { + newopts[j] = fo->opts[k]; + j++; + } + } + newopts[j] = '\0'; + + Jmsg(jcr, M_INFO, 0, + _("FD compression disabled for this Job because AllowCompress=No in Storage resource.\n") ); + + /* Send the new trimmed option set without overwriting fo->opts */ + fd->fsend("O %s\n", newopts); + } else { + /* Send the original options */ + fd->fsend("O %s\n", fo->opts); + } + for (k=0; kregex.size(); k++) { fd->fsend("R %s\n", fo->regex.get(k)); } @@ -581,7 +608,7 @@ int send_runscripts_commands(JCR *jcr) Dmsg0(120, "bdird: sending runscripts to fd\n"); foreach_alist(cmd, jcr->job->RunScripts) { - if (cmd->can_run_at_level(jcr->get_JobLevel()) && cmd->target) { + if (cmd->can_run_at_level(jcr->getJobLevel()) && cmd->target) { ehost = edit_job_codes(jcr, ehost, cmd->target, ""); Dmsg2(200, "bdird: runscript %s -> %s\n", cmd->target, ehost);