From 5a8b6a221c5b29919a10b1cc73c91f462d7fe211 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Sun, 10 Feb 2008 18:22:27 +0000 Subject: [PATCH] Commit patches git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@6395 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/patches/2.2.8-bacula-conf.patch | 32 ++++++ bacula/patches/2.2.8-jobmedia.patch | 149 +++++++++++++++++++++++++ bacula/patches/2.2.8-strip-path.patch | 57 ++++++++++ 3 files changed, 238 insertions(+) create mode 100644 bacula/patches/2.2.8-bacula-conf.patch create mode 100644 bacula/patches/2.2.8-jobmedia.patch create mode 100644 bacula/patches/2.2.8-strip-path.patch diff --git a/bacula/patches/2.2.8-bacula-conf.patch b/bacula/patches/2.2.8-bacula-conf.patch new file mode 100644 index 0000000000..0438708543 --- /dev/null +++ b/bacula/patches/2.2.8-bacula-conf.patch @@ -0,0 +1,32 @@ + + This patch automatically adds the Bacula database and user name to + the default make_catalog_backup Run script call line in the bacula-dir.conf + file. + + Apply it to version 2.2.8 or earlier with: + + cd + patch -p0 <2.2.8-bacula-conf.patch + ./configure + make + ... + make install + + +Index: src/dird/bacula-dir.conf.in +=================================================================== +--- src/dird/bacula-dir.conf.in (revision 6327) ++++ src/dird/bacula-dir.conf.in (working copy) +@@ -61,7 +61,11 @@ + FileSet="Catalog" + Schedule = "WeeklyCycleAfterBackup" + # This creates an ASCII copy of the catalog +- RunBeforeJob = "@scriptdir@/make_catalog_backup bacula bacula" ++ # WARNING!!! Passing the password via the command line is insecure. ++ # see comments in make_catalog_backup for details. ++ # Arguments to make_catalog_backup are: ++ # make_catalog_backup ++ RunBeforeJob = "@scriptdir@/make_catalog_backup @db_name@ @db_user@" + # This deletes the copy of the catalog + RunAfterJob = "@scriptdir@/delete_catalog_backup" + Write Bootstrap = "@working_dir@/BackupCatalog.bsr" diff --git a/bacula/patches/2.2.8-jobmedia.patch b/bacula/patches/2.2.8-jobmedia.patch new file mode 100644 index 0000000000..497c9c7dba --- /dev/null +++ b/bacula/patches/2.2.8-jobmedia.patch @@ -0,0 +1,149 @@ + + This patch fixes a migration bug that always has a zero index entry + (JobMedia record) as the first entry. This causes Bacula to search + for the first record during a restore rather than seek directly to + it. + + Apply this patch to Bacula 2.2.8 (and possibly any prior 2.2.x version) with: + + cd + patch -p0 <2.2.8-jobmedia.patch + ./configure + make + ... + make install + + +Index: src/stored/device.c +=================================================================== +--- src/stored/device.c (revision 6391) ++++ src/stored/device.c (working copy) +@@ -1,7 +1,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2000-2008 Free Software Foundation Europe e.V. ++ Copyright (C) 2000-2007 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. +@@ -200,6 +200,19 @@ + return ok; /* device locked */ + } + ++void set_start_vol_position(DCR *dcr) ++{ ++ DEVICE *dev = dcr->dev; ++ /* Set new start position */ ++ if (dev->is_tape()) { ++ dcr->StartBlock = dev->block_num; ++ dcr->StartFile = dev->file; ++ } else { ++ dcr->StartBlock = (uint32_t)dev->file_addr; ++ dcr->StartFile = (uint32_t)(dev->file_addr >> 32); ++ } ++} ++ + /* + * We have a new Volume mounted, so reset the Volume parameters + * concerning this job. The global changes were made earlier +@@ -208,24 +221,11 @@ + void set_new_volume_parameters(DCR *dcr) + { + JCR *jcr = dcr->jcr; +- DEVICE *dev = dcr->dev; + if (dcr->NewVol && !dir_get_volume_info(dcr, GET_VOL_INFO_FOR_WRITE)) { + Jmsg1(jcr, M_ERROR, 0, "%s", jcr->errmsg); + } +- /* Set new start/end positions */ +- if (dev->is_tape()) { +- dcr->StartBlock = dev->block_num; +- dcr->StartFile = dev->file; +- } else { +- dcr->StartBlock = (uint32_t)dev->file_addr; +- dcr->StartFile = (uint32_t)(dev->file_addr >> 32); +- } +- /* Reset indicies */ +- dcr->VolFirstIndex = 0; +- dcr->VolLastIndex = 0; ++ set_new_file_parameters(dcr); + jcr->NumWriteVolumes++; +- dcr->NewVol = false; +- dcr->WroteVol = false; + } + + /* +@@ -235,16 +235,8 @@ + */ + void set_new_file_parameters(DCR *dcr) + { +- DEVICE *dev = dcr->dev; ++ set_start_vol_position(dcr); + +- /* Set new start/end positions */ +- if (dev->is_tape()) { +- dcr->StartBlock = dev->block_num; +- dcr->StartFile = dev->file; +- } else { +- dcr->StartBlock = (uint32_t)dev->file_addr; +- dcr->StartFile = (uint32_t)(dev->file_addr >> 32); +- } + /* Reset indicies */ + dcr->VolFirstIndex = 0; + dcr->VolLastIndex = 0; +Index: src/stored/mac.c +=================================================================== +--- src/stored/mac.c (revision 6391) ++++ src/stored/mac.c (working copy) +@@ -1,15 +1,7 @@ + /* +- * SD -- mac.c -- responsible for doing +- * migration, archive, and copy jobs. +- * +- * Kern Sibbald, January MMVI +- * +- * Version $Id$ +- */ +-/* + Bacula® - The Network Backup Solution + +- Copyright (C) 2006-2006 Free Software Foundation Europe e.V. ++ Copyright (C) 2006-2008 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. +@@ -33,6 +25,14 @@ + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. + */ ++/* ++ * SD -- mac.c -- responsible for doing ++ * migration, archive, and copy jobs. ++ * ++ * Kern Sibbald, January MMVI ++ * ++ * Version $Id$ ++ */ + + #include "bacula.h" + #include "stored.h" +@@ -108,6 +108,7 @@ + + jcr->dcr->VolFirstIndex = jcr->dcr->VolLastIndex = 0; + jcr->run_time = time(NULL); ++ set_start_vol_position(jcr->dcr); + + ok = read_records(jcr->read_dcr, record_cb, mount_next_read_volume); + goto ok_out; +Index: src/stored/protos.h +=================================================================== +--- src/stored/protos.h (revision 6391) ++++ src/stored/protos.h (working copy) +@@ -126,6 +126,7 @@ + bool open_device(DCR *dcr); + bool first_open_device(DCR *dcr); + bool fixup_device_block_write_error(DCR *dcr); ++void set_start_vol_position(DCR *dcr); + void set_new_volume_parameters(DCR *dcr); + void set_new_file_parameters(DCR *dcr); + bool is_device_unmounted(DEVICE *dev); diff --git a/bacula/patches/2.2.8-strip-path.patch b/bacula/patches/2.2.8-strip-path.patch new file mode 100644 index 0000000000..db75b85b69 --- /dev/null +++ b/bacula/patches/2.2.8-strip-path.patch @@ -0,0 +1,57 @@ + + This patch should fix bug #1047 -- heap corruption when using + strippath on certain directories. + + Apply it to 2.2.8 (probably prior versions) with: + + cd + patch -p0 <2.2.8-strip-path.patch + ./configure + make + ... + make install + + +Index: src/filed/backup.c +=================================================================== +--- src/filed/backup.c (revision 6390) ++++ src/filed/backup.c (revision 6391) +@@ -1146,20 +1146,21 @@ + /* + * Strip path. If it doesn't succeed put it back. If + * it does, and there is a different link string, +- * attempt to strip the link. If it fails, but them ++ * attempt to strip the link. If it fails, back them + * both back. ++ * Don't strip symlinks. + * I.e. if either stripping fails don't strip anything. + */ + if (do_strip(ff_pkt->strip_path, ff_pkt->fname)) { +- if (ff_pkt->fname != ff_pkt->link) { ++ if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) { + pm_strcpy(ff_pkt->link_save, ff_pkt->link); + if (!do_strip(ff_pkt->strip_path, ff_pkt->link)) { +- strcpy(ff_pkt->link, ff_pkt->link_save); +- strcpy(ff_pkt->fname, ff_pkt->fname_save); ++ pm_strcpy(ff_pkt->link, ff_pkt->link_save); ++ pm_strcpy(ff_pkt->fname, ff_pkt->fname_save); + } + } + } else { +- strcpy(ff_pkt->fname, ff_pkt->fname_save); ++ pm_strcpy(ff_pkt->fname, ff_pkt->fname_save); + } + Dmsg2(200, "fname=%s stripped=%s\n", ff_pkt->fname_save, ff_pkt->fname); + } +@@ -1169,8 +1170,8 @@ + if (!(ff_pkt->flags & FO_STRIPPATH) || ff_pkt->strip_path <= 0) { + return; + } +- strcpy(ff_pkt->fname, ff_pkt->fname_save); +- if (ff_pkt->fname != ff_pkt->link) { +- strcpy(ff_pkt->link, ff_pkt->link_save); ++ pm_strcpy(ff_pkt->fname, ff_pkt->fname_save); ++ if (ff_pkt->type != FT_LNK && ff_pkt->fname != ff_pkt->link) { ++ pm_strcpy(ff_pkt->link, ff_pkt->link_save); + } + } -- 2.39.5