From: Kern Sibbald Date: Wed, 9 Mar 2005 18:02:45 +0000 (+0000) Subject: Patch the FD so that it does not issue an error message if X-Git-Tag: Release-7.0.0~8930 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=824e433874ecee7463418cb0b322e13ee928e485;p=bacula%2Fbacula Patch the FD so that it does not issue an error message if it attempts to restore the permissions on a Win32 drive. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1879 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/patches/1.36.2-pool.patch b/bacula/patches/1.36.2-pool.patch new file mode 100644 index 0000000000..eeb7d4079c --- /dev/null +++ b/bacula/patches/1.36.2-pool.patch @@ -0,0 +1,26 @@ + + This patch corrects a problem preventing multiple + simultaneous jobs from different pools. + Apply to 1.36.2 with: + + cd + patch -p0 <1.36.2-pool.patch + make + ... + +Index: src/dird/jobq.c +=================================================================== +RCS file: /cvsroot/bacula/bacula/src/dird/jobq.c,v +retrieving revision 1.25.4.2 +diff -u -r1.25.4.2 jobq.c +--- src/dird/jobq.c 15 Feb 2005 11:51:03 -0000 1.25.4.2 ++++ src/dird/jobq.c 4 Mar 2005 13:16:19 -0000 +@@ -584,7 +584,7 @@ + if (njcr->JobId == 0 || njcr == jcr) { + continue; + } +- if (njcr->pool != jcr->pool) { ++ if (njcr->store == jcr->store && njcr->pool != jcr->pool) { + skip_this_jcr = true; + break; + } diff --git a/bacula/patches/1.36.2-win32-drive.patch b/bacula/patches/1.36.2-win32-drive.patch new file mode 100644 index 0000000000..f9623ffbb2 --- /dev/null +++ b/bacula/patches/1.36.2-win32-drive.patch @@ -0,0 +1,32 @@ + + This patch will prevent the Win32 FD from printing an error message + when it attempts to restore the permissions for a drive (which Win32 + doesn't permit). The error is harmless in any case. + Apply the patch to 1.36.2 with + + cd + patch -p0 <1.36.2-win32-drive.patch + make + ... + + +Index: src/findlib/create_file.c +=================================================================== +RCS file: /cvsroot/bacula/bacula/src/findlib/create_file.c,v +retrieving revision 1.34 +diff -u -r1.34 create_file.c +--- src/findlib/create_file.c 27 Jul 2004 21:00:33 -0000 1.34 ++++ src/findlib/create_file.c 9 Mar 2005 17:52:50 -0000 +@@ -271,6 +271,12 @@ + if ((bopen(bfd, attr->ofname, O_WRONLY|O_BINARY, 0)) < 0) { + berrno be; + be.set_errno(bfd->berrno); ++#ifdef HAVE_WIN32 ++ /* Check for trying to create a drive, if so, skip */ ++ if (attr->ofname[1] == ':' && attr->ofname[2] = '/' && attr->ofname[3] == 0) { ++ return CF_SKIP; ++ } ++#endif + Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), + attr->ofname, be.strerror()); + return CF_ERROR; diff --git a/bacula/patches/patches-1.36.2 b/bacula/patches/patches-1.36.2 index 8a43644ed5..bae9d5dabf 100644 --- a/bacula/patches/patches-1.36.2 +++ b/bacula/patches/patches-1.36.2 @@ -3,3 +3,12 @@ This patch should fix a problem with th %l editing in the client (FD) where it edited nothing. With this fix, it should edit "since". + +04Mar05 1.36.2-pool.patch + This patch corrects a problem preventing multiple + simultaneous jobs from different pools. + +09Mar05 1.36.2-win32-drive.patch + This patch will prevent the Win32 FD from printing an error message + when it attempts to restore the permissions for a drive (which Win32 + doesn't permit). The error is harmless in any case. diff --git a/bacula/src/findlib/create_file.c b/bacula/src/findlib/create_file.c index ad18fea9a4..b2c325a1c9 100644 --- a/bacula/src/findlib/create_file.c +++ b/bacula/src/findlib/create_file.c @@ -88,20 +88,20 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) switch (replace) { case REPLACE_IFNEWER: if (attr->statp.st_mtime <= mstatp.st_mtime) { - Jmsg(jcr, M_SKIPPED, 0, _("File skipped. Not newer: %s\n"), attr->ofname); + Jmsg(jcr, M_SKIPPED, 0, _("File skipped. Not newer: %s\n"), attr->ofname); return CF_SKIP; } break; case REPLACE_IFOLDER: if (attr->statp.st_mtime >= mstatp.st_mtime) { - Jmsg(jcr, M_SKIPPED, 0, _("File skipped. Not older: %s\n"), attr->ofname); + Jmsg(jcr, M_SKIPPED, 0, _("File skipped. Not older: %s\n"), attr->ofname); return CF_SKIP; } break; case REPLACE_NEVER: - Jmsg(jcr, M_SKIPPED, 0, _("File skipped. Already exists: %s\n"), attr->ofname); + Jmsg(jcr, M_SKIPPED, 0, _("File skipped. Already exists: %s\n"), attr->ofname); return CF_SKIP; case REPLACE_ALWAYS: @@ -120,7 +120,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) /* Get rid of old copy */ if (unlink(attr->ofname) == -1) { berrno be; - Jmsg(jcr, M_ERROR, 0, _("File %s already exists and could not be replaced. ERR=%s.\n"), + Jmsg(jcr, M_ERROR, 0, _("File %s already exists and could not be replaced. ERR=%s.\n"), attr->ofname, be.strerror()); /* Continue despite error */ } @@ -146,14 +146,14 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) attr->ofname[pnl] = 0; /* terminate path */ if (!path_already_seen(jcr, attr->ofname, pnl)) { - Dmsg1(50, "Make path %s\n", attr->ofname); + Dmsg1(50, "Make path %s\n", attr->ofname); /* * If we need to make the directory, ensure that it is with * execute bit set (i.e. parent_mode), and preserve what already * exists. Normally, this should do nothing. */ if (make_path(jcr, attr->ofname, parent_mode, parent_mode, uid, gid, 1, NULL) != 0) { - Dmsg1(10, "Could not make path. %s\n", attr->ofname); + Dmsg1(10, "Could not make path. %s\n", attr->ofname); attr->ofname[pnl] = savechr; /* restore full name */ return CF_ERROR; } @@ -165,20 +165,20 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) switch(attr->type) { case FT_REGE: case FT_REG: - Dmsg1(100, "Create file %s\n", attr->ofname); + Dmsg1(100, "Create file %s\n", attr->ofname); mode = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY; /* O_NOFOLLOW; */ if (IS_CTG(attr->statp.st_mode)) { mode |= O_CTG; /* set contiguous bit if needed */ } - Dmsg1(50, "Create file: %s\n", attr->ofname); + Dmsg1(50, "Create file: %s\n", attr->ofname); if (is_bopen(bfd)) { - Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid); + Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid); bclose(bfd); } if ((bopen(bfd, attr->ofname, mode, S_IRUSR | S_IWUSR)) < 0) { berrno be; be.set_errno(bfd->berrno); - Jmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"), attr->ofname, be.strerror()); return CF_ERROR; } @@ -188,25 +188,25 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) case FT_FIFO: /* Bacula fifo to save data */ case FT_SPEC: if (S_ISFIFO(attr->statp.st_mode)) { - Dmsg1(200, "Restore fifo: %s\n", attr->ofname); + Dmsg1(200, "Restore fifo: %s\n", attr->ofname); if (mkfifo(attr->ofname, attr->statp.st_mode) != 0 && errno != EEXIST) { berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Cannot make fifo %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Cannot make fifo %s: ERR=%s\n"), attr->ofname, be.strerror()); return CF_ERROR; } } else { - Dmsg1(200, "Restore node: %s\n", attr->ofname); + Dmsg1(200, "Restore node: %s\n", attr->ofname); if (mknod(attr->ofname, attr->statp.st_mode, attr->statp.st_rdev) != 0 && errno != EEXIST) { berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Cannot make node %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Cannot make node %s: ERR=%s\n"), attr->ofname, be.strerror()); return CF_ERROR; } } if (attr->type == FT_RAW || attr->type == FT_FIFO) { btimer_t *tid; - Dmsg1(200, "FT_RAW|FT_FIFO %s\n", attr->ofname); + Dmsg1(200, "FT_RAW|FT_FIFO %s\n", attr->ofname); mode = O_WRONLY | O_BINARY; /* Timeout open() in 60 seconds */ if (attr->type == FT_FIFO) { @@ -215,12 +215,12 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) tid = NULL; } if (is_bopen(bfd)) { - Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid); + Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid); } if ((bopen(bfd, attr->ofname, mode, 0)) < 0) { berrno be; be.set_errno(bfd->berrno); - Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), + Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), attr->ofname, be.strerror()); stop_thread_timer(tid); return CF_ERROR; @@ -228,24 +228,24 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) stop_thread_timer(tid); return CF_EXTRACT; } - Dmsg1(200, "FT_SPEC %s\n", attr->ofname); + Dmsg1(200, "FT_SPEC %s\n", attr->ofname); return CF_CREATED; case FT_LNK: - Dmsg2(130, "FT_LNK should restore: %s -> %s\n", attr->ofname, attr->olname); + Dmsg2(130, "FT_LNK should restore: %s -> %s\n", attr->ofname, attr->olname); if (symlink(attr->olname, attr->ofname) != 0 && errno != EEXIST) { berrno be; - Jmsg3(jcr, M_ERROR, 0, _("Could not symlink %s -> %s: ERR=%s\n"), + Jmsg3(jcr, M_ERROR, 0, _("Could not symlink %s -> %s: ERR=%s\n"), attr->ofname, attr->olname, be.strerror()); return CF_ERROR; } return CF_CREATED; case FT_LNKSAVED: /* Hard linked, file already saved */ - Dmsg2(130, "Hard link %s => %s\n", attr->ofname, attr->olname); + Dmsg2(130, "Hard link %s => %s\n", attr->ofname, attr->olname); if (link(attr->olname, attr->ofname) != 0) { berrno be; - Jmsg3(jcr, M_ERROR, 0, _("Could not hard link %s -> %s: ERR=%s\n"), + Jmsg3(jcr, M_ERROR, 0, _("Could not hard link %s -> %s: ERR=%s\n"), attr->ofname, attr->olname, be.strerror()); return CF_ERROR; } @@ -266,12 +266,18 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace) */ if (!is_portable_backup(bfd)) { if (is_bopen(bfd)) { - Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid); + Jmsg1(jcr, M_ERROR, 0, "bpkt already open fid=%d\n", bfd->fid); } if ((bopen(bfd, attr->ofname, O_WRONLY|O_BINARY, 0)) < 0) { berrno be; be.set_errno(bfd->berrno); - Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), +#ifdef HAVE_WIN32 + /* Check for trying to create a drive, if so, skip */ + if (attr->ofname[1] == ':' && attr->ofname[2] = '/' && attr->ofname[3] == 0) { + return CF_SKIP; + } +#endif + Jmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"), attr->ofname, be.strerror()); return CF_ERROR; }