From 24a2d43a5c875d92cdfc2366111657f5a42fb0bd Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@91ce42f0-d328-0410-95d8-f526ca767f89> Date: Tue, 22 Nov 2005 11:08:20 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'Release-1.38.2'. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/tags/Release-1.38.2@2621 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/.cvsignore | 61 +- bacula/ChangeLog | 1 + bacula/ReleaseNotes | 1 + bacula/autoconf/aclocal.m4 | 2 +- bacula/autoconf/configure.in | 2 +- bacula/configure | 2 +- bacula/kes-1.37 | 1408 +++ bacula/kes-1.38 | 4 +- bacula/kes-1.39 | 44 - bacula/nb-1.37 | 93 + bacula/nb-1.38 | 6 - bacula/patches/1.38.1-to-1.38.2.patch | 7768 ++++++++++++++++- bacula/src/.cvsignore | 1 - bacula/src/cats/update_sqlite_tables.in | 2 +- bacula/src/console/.cvsignore | 1 - bacula/src/dird/msgchan.c | 2 + bacula/src/dird/ua_cmds.c | 1 + bacula/src/filed/restore.c | 18 +- bacula/src/findlib/bfile.c | 224 +- bacula/src/findlib/bfile.h | 47 +- bacula/src/findlib/find.h | 16 +- bacula/src/gnome2-console/.cvsignore | 1 - bacula/src/lib/Makefile.in | 14 +- bacula/src/lib/bsnprintf.c | 913 -- bacula/src/lib/bsys.c | 3 - bacula/src/lib/signal.c | 2 +- bacula/src/stored/askdir.c | 8 +- bacula/src/stored/bextract.c | 2 +- bacula/src/stored/dev.c | 11 +- bacula/src/stored/match_bsr.c | 20 +- bacula/src/version.h | 4 +- bacula/src/win32/README.vc8 | 16 +- regress/.cvsignore | 11 - regress/Makefile.in | 72 - regress/README | 115 - regress/all-non-root-2tape-tests | 12 - regress/all-non-root-tape-tests | 22 - regress/all-non-root-tests | 35 - regress/all-root-tests | 11 - regress/all-tape-and-file-tests | 10 - regress/all-tests | 8 - regress/config | 9 - regress/do_all | 14 - regress/do_all_tapes | 3 - regress/do_file | 6 - regress/endtime | 12 - regress/file | 2 - regress/freebsd.conf | 26 - regress/kern.conf | 29 - regress/misc-tests | 2 - regress/prototype.conf | 46 - regress/run | 3 - regress/scripts/.cvsignore | 23 - regress/scripts/bacula-dir-tape.conf.in | 163 - regress/scripts/bacula-sd-2drive.conf.in | 75 - regress/scripts/bacula-sd-2tape.conf.in | 61 - regress/scripts/bacula-sd-tape.conf.in | 54 - regress/scripts/bacula-sd.conf.in | 74 - regress/scripts/check_for_zombie_jobs | 51 - regress/scripts/cleanup | 19 - regress/scripts/cleanup-2drive.in | 44 - regress/scripts/cleanup-2tape.in | 30 - regress/scripts/cleanup-tape.in | 8 - regress/scripts/copy-2drive-confs | 9 - regress/scripts/copy-2tape-confs | 9 - regress/scripts/copy-confs | 5 - regress/scripts/copy-tape-confs | 5 - regress/scripts/copy-test-confs | 5 - regress/scripts/copy-testa-confs | 5 - regress/scripts/copy-win32-confs | 5 - regress/scripts/do_sed | 68 - regress/scripts/exclude-dev-test | 5 - regress/scripts/exclude-etc-test | 1 - regress/scripts/exclude-lib-test | 5 - regress/scripts/flist | 22 - regress/scripts/freebsd_tape_options | 8 - regress/scripts/linux_osst_tape_options | 7 - regress/scripts/linux_tape_options | 1 - regress/scripts/new-test-bacula-dir.conf.in | 312 - regress/scripts/prepare-two-tapes.in | 13 - regress/scripts/regress-config | 23 - regress/scripts/setup | 44 - regress/scripts/test-bacula-dir.conf.in | 312 - regress/scripts/test-bacula-fd.conf.in | 33 - regress/scripts/test-bacula-sd.conf.in | 107 - regress/scripts/test-console.conf.in | 10 - regress/scripts/testa-bacula-dir.conf.in | 149 - regress/scripts/win32-bacula-dir-tape.conf.in | 160 - regress/scripts/win32-bacula-fd.conf | 33 - regress/scripts/win32-bacula-sd-tape.conf | 54 - regress/starttime | 6 - regress/tape | 2 - regress/tests/.cvsignore | 2 - regress/tests/2drive-incremental-2tape | 117 - regress/tests/auto-label-test | 95 - regress/tests/backup-bacula-tape | 145 - regress/tests/backup-bacula-test | 93 - regress/tests/bextract-test | 79 - regress/tests/bscan-tape | 178 - regress/tests/bscan-test | 107 - regress/tests/bsr-opt-test | 96 - regress/tests/btape-fill-full-tape | 34 - regress/tests/btape-fill-tape | 39 - regress/tests/compressed-test | 67 - regress/tests/concurrent-jobs-test | 83 - regress/tests/dev-test-root | 85 - regress/tests/differential-test | 128 - regress/tests/eot-fail-tape | 62 - regress/tests/etc-test-root | 70 - regress/tests/fixed-block-size-tape | 84 - regress/tests/four-concurrent-jobs-tape | 80 - regress/tests/four-concurrent-jobs-test | 96 - regress/tests/four-jobs-tape | 175 - regress/tests/four-jobs-test | 133 - regress/tests/incremental-2tape | 105 - regress/tests/incremental-tape | 82 - regress/tests/incremental-test | 165 - regress/tests/lib-tape-root | 67 - regress/tests/lib-test-root | 76 - regress/tests/query-test | 130 - regress/tests/recycle-test | 98 - regress/tests/relabel-tape | 121 - regress/tests/restore-by-file-tape | 120 - regress/tests/restore-by-file-test | 72 - regress/tests/restore-disk-seek-test | 109 - regress/tests/restore2-by-file-test | 65 - regress/tests/six-vol-test | 72 - regress/tests/small-file-size-tape | 61 - regress/tests/span-vol-test | 88 - regress/tests/sparse-compressed-test | 62 - regress/tests/sparse-test | 64 - regress/tests/test0 | 3 - regress/tests/truncate-bug-tape | 87 - regress/tests/two-jobs-test | 93 - regress/tests/two-pool-tape | 140 - regress/tests/two-vol-test | 78 - regress/tests/two-volume-tape | 80 - regress/tests/usr-tape-root | 62 - regress/tests/verify-vol-test | 76 - regress/tests/weird-files-test | 95 - regress/tests/weird-files2-test | 112 - regress/tests/win32-backup-tape | 72 - regress/tests/win32-to-linux-tape | 72 - regress/weird-files.tar.gz | Bin 1699 -> 0 bytes 144 files changed, 9378 insertions(+), 8363 deletions(-) create mode 100644 bacula/kes-1.37 delete mode 100644 bacula/kes-1.39 create mode 100644 bacula/nb-1.37 delete mode 100644 bacula/nb-1.38 delete mode 100644 bacula/src/lib/bsnprintf.c delete mode 100644 regress/.cvsignore delete mode 100644 regress/Makefile.in delete mode 100644 regress/README delete mode 100755 regress/all-non-root-2tape-tests delete mode 100755 regress/all-non-root-tape-tests delete mode 100755 regress/all-non-root-tests delete mode 100755 regress/all-root-tests delete mode 100755 regress/all-tape-and-file-tests delete mode 100755 regress/all-tests delete mode 100755 regress/config delete mode 100755 regress/do_all delete mode 100755 regress/do_all_tapes delete mode 100755 regress/do_file delete mode 100755 regress/endtime delete mode 100755 regress/file delete mode 100644 regress/freebsd.conf delete mode 100644 regress/kern.conf delete mode 100644 regress/misc-tests delete mode 100644 regress/prototype.conf delete mode 100755 regress/run delete mode 100644 regress/scripts/.cvsignore delete mode 100644 regress/scripts/bacula-dir-tape.conf.in delete mode 100644 regress/scripts/bacula-sd-2drive.conf.in delete mode 100644 regress/scripts/bacula-sd-2tape.conf.in delete mode 100644 regress/scripts/bacula-sd-tape.conf.in delete mode 100644 regress/scripts/bacula-sd.conf.in delete mode 100755 regress/scripts/check_for_zombie_jobs delete mode 100755 regress/scripts/cleanup delete mode 100755 regress/scripts/cleanup-2drive.in delete mode 100755 regress/scripts/cleanup-2tape.in delete mode 100755 regress/scripts/cleanup-tape.in delete mode 100755 regress/scripts/copy-2drive-confs delete mode 100755 regress/scripts/copy-2tape-confs delete mode 100755 regress/scripts/copy-confs delete mode 100755 regress/scripts/copy-tape-confs delete mode 100755 regress/scripts/copy-test-confs delete mode 100755 regress/scripts/copy-testa-confs delete mode 100755 regress/scripts/copy-win32-confs delete mode 100755 regress/scripts/do_sed delete mode 100644 regress/scripts/exclude-dev-test delete mode 100644 regress/scripts/exclude-etc-test delete mode 100644 regress/scripts/exclude-lib-test delete mode 100644 regress/scripts/flist delete mode 100644 regress/scripts/freebsd_tape_options delete mode 100644 regress/scripts/linux_osst_tape_options delete mode 100644 regress/scripts/linux_tape_options delete mode 100644 regress/scripts/new-test-bacula-dir.conf.in delete mode 100755 regress/scripts/prepare-two-tapes.in delete mode 100755 regress/scripts/regress-config delete mode 100755 regress/scripts/setup delete mode 100644 regress/scripts/test-bacula-dir.conf.in delete mode 100644 regress/scripts/test-bacula-fd.conf.in delete mode 100644 regress/scripts/test-bacula-sd.conf.in delete mode 100644 regress/scripts/test-console.conf.in delete mode 100644 regress/scripts/testa-bacula-dir.conf.in delete mode 100644 regress/scripts/win32-bacula-dir-tape.conf.in delete mode 100644 regress/scripts/win32-bacula-fd.conf delete mode 100644 regress/scripts/win32-bacula-sd-tape.conf delete mode 100755 regress/starttime delete mode 100755 regress/tape delete mode 100644 regress/tests/.cvsignore delete mode 100755 regress/tests/2drive-incremental-2tape delete mode 100755 regress/tests/auto-label-test delete mode 100755 regress/tests/backup-bacula-tape delete mode 100755 regress/tests/backup-bacula-test delete mode 100755 regress/tests/bextract-test delete mode 100755 regress/tests/bscan-tape delete mode 100755 regress/tests/bscan-test delete mode 100755 regress/tests/bsr-opt-test delete mode 100755 regress/tests/btape-fill-full-tape delete mode 100755 regress/tests/btape-fill-tape delete mode 100755 regress/tests/compressed-test delete mode 100755 regress/tests/concurrent-jobs-test delete mode 100755 regress/tests/dev-test-root delete mode 100755 regress/tests/differential-test delete mode 100755 regress/tests/eot-fail-tape delete mode 100755 regress/tests/etc-test-root delete mode 100755 regress/tests/fixed-block-size-tape delete mode 100755 regress/tests/four-concurrent-jobs-tape delete mode 100755 regress/tests/four-concurrent-jobs-test delete mode 100755 regress/tests/four-jobs-tape delete mode 100755 regress/tests/four-jobs-test delete mode 100755 regress/tests/incremental-2tape delete mode 100755 regress/tests/incremental-tape delete mode 100755 regress/tests/incremental-test delete mode 100755 regress/tests/lib-tape-root delete mode 100755 regress/tests/lib-test-root delete mode 100755 regress/tests/query-test delete mode 100755 regress/tests/recycle-test delete mode 100755 regress/tests/relabel-tape delete mode 100755 regress/tests/restore-by-file-tape delete mode 100755 regress/tests/restore-by-file-test delete mode 100755 regress/tests/restore-disk-seek-test delete mode 100755 regress/tests/restore2-by-file-test delete mode 100755 regress/tests/six-vol-test delete mode 100755 regress/tests/small-file-size-tape delete mode 100755 regress/tests/span-vol-test delete mode 100755 regress/tests/sparse-compressed-test delete mode 100755 regress/tests/sparse-test delete mode 100755 regress/tests/test0 delete mode 100755 regress/tests/truncate-bug-tape delete mode 100755 regress/tests/two-jobs-test delete mode 100755 regress/tests/two-pool-tape delete mode 100755 regress/tests/two-vol-test delete mode 100755 regress/tests/two-volume-tape delete mode 100755 regress/tests/usr-tape-root delete mode 100755 regress/tests/verify-vol-test delete mode 100755 regress/tests/weird-files-test delete mode 100755 regress/tests/weird-files2-test delete mode 100755 regress/tests/win32-backup-tape delete mode 100755 regress/tests/win32-to-linux-tape delete mode 100644 regress/weird-files.tar.gz diff --git a/bacula/.cvsignore b/bacula/.cvsignore index d447ee6f7a..9d9a15180d 100644 --- a/bacula/.cvsignore +++ b/bacula/.cvsignore @@ -1,6 +1,13 @@ +*.txt +wxconsole 1 2 +txt +set-gnome2 +set-gnome1.4 +kerns-gprof-config autom4te.cache +Makefile bacula btraceback config.cache @@ -9,57 +16,47 @@ config.out config.status configure.lineno console -console.log -console.sum diff fd gconsole +kerns-console.conf +kerns-dird.conf +kerns-filed.conf +kerns-gnome-console.conf +kerns-mysql-config +kerns-sqlite-config +kerns-stored.conf kernsconfig kernsconfignodb -kerns-console.conf kernsdesign -kerns-dird.conf kernsdisclaimers kernsdone -kerns-filed.conf kernsfloppymount -kerns-gnome-console.conf -kerns-gprof-config -kerns-mysql-config -kerns-nopython-conf kernsnosqlconfig kernsolarisconfig -kerns-postgresql-config kernsproductionconfig -kerns-sqlite-config -kerns-stored.conf kernssunproductionconfig kernswinconfig kernswinproductionconfig -Makefile -newdb -newtape -run -run_clean -run_clean_tape -run_two -run_two_broken -set-gnome1.4 -set-gnome2 startit startmysql -startpostgre stopit stopmysql +console.log +console.sum +zapall +zaptapes stoppostgre -test.out -test-tape +startpostgre +kerns-postgresql-config +run +run_clean +run_two_broken +run_two +run_clean_tape +newdb +kerns-nopython-conf +newtape time.py time.pyc -txt -*.txt -wxconsole -zapall -zaptapes -kerns-pgsql-config -fake-mtx +test.out diff --git a/bacula/ChangeLog b/bacula/ChangeLog index edd6b404bd..b74ee95511 100644 --- a/bacula/ChangeLog +++ b/bacula/ChangeLog @@ -9,6 +9,7 @@ Changes to 1.38.2: - Fix memory overrun in bfile.c in building OS X resource fork filename. Bug #489 - Add Pool name to SD status output. +- Add Python install dir for Solaris to configure. Bug #492 Changes to 1.38.1: - Apply SunOS patch for ACLs submitted by David Duchscher. diff --git a/bacula/ReleaseNotes b/bacula/ReleaseNotes index d0efbc54d1..363546204e 100644 --- a/bacula/ReleaseNotes +++ b/bacula/ReleaseNotes @@ -14,6 +14,7 @@ Changes to 1.38.2: - Fix memory overrun in bfile.c in building OS X resource fork filename. Bug #489 - Add Pool name to SD status output. +- Add Python install dir for Solaris to configure. Bug #492 Changes to 1.38.1: - Corrected ACL for Solaris (David Duchscher and Attila Fulop). diff --git a/bacula/autoconf/aclocal.m4 b/bacula/autoconf/aclocal.m4 index 94de0926c6..8458af0159 100644 --- a/bacula/autoconf/aclocal.m4 +++ b/bacula/autoconf/aclocal.m4 @@ -1,4 +1,4 @@ -# generated automatically by aclocal 1.9.5 -*- Autoconf -*- +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005 Free Software Foundation, Inc. diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in index 44c232f29e..1844cb79fe 100644 --- a/bacula/autoconf/configure.in +++ b/bacula/autoconf/configure.in @@ -604,7 +604,7 @@ AC_ARG_WITH(python, PYTHON_LIBS= if test "$withval" != "no"; then if test "$withval" = "yes"; then - for python_root in /usr /usr/local; do + for python_root in /usr /usr/local /usr/sfw; do if test -f $python_root/include/python2.2/Python.h; then PYTHON_INCDIR=-I$python_root/include/python2.2 PYTHON_LIBS="-L$python_root/lib/python2.2/config -lpython2.2" diff --git a/bacula/configure b/bacula/configure index a19250e0d5..48c8e5a5bf 100755 --- a/bacula/configure +++ b/bacula/configure @@ -14948,7 +14948,7 @@ if test "${with_python+set}" = set; then PYTHON_LIBS= if test "$withval" != "no"; then if test "$withval" = "yes"; then - for python_root in /usr /usr/local; do + for python_root in /usr /usr/local /usr/sfw; do if test -f $python_root/include/python2.2/Python.h; then PYTHON_INCDIR=-I$python_root/include/python2.2 PYTHON_LIBS="-L$python_root/lib/python2.2/config -lpython2.2" diff --git a/bacula/kes-1.37 b/bacula/kes-1.37 new file mode 100644 index 0000000000..6a7697f74c --- /dev/null +++ b/bacula/kes-1.37 @@ -0,0 +1,1408 @@ + Technical notes on version 1.37 + Kern Sibbald + +General: + +Changes to 1.37.42: +26Oct05 +- Return HARDEOF status from bnet_recv() if bsock NULL rather + than aborting. +- Don't overwrite pthreadVCE.dll or msvcr71.dll during Win32 + install. +- Update README.win32 instructions. +25Oct05 +- Make db_get_job_record() return Name so that the ACL + can be checked. Fixes bug #446 +22Oct05 +- Insure that all the SD tools init the Autochanger + resources. + +Changes to 1.37.41: +22Oct05 +- Print error message if no Changer Command found. +- Apply fix from Martin Simmons to clear structure before + using it in IPADDR -- fixes a bind() bug on AIX. +14Oct05 +- Add NetBSD fstype patch from Geert Hendrickx +- Update num_parts only when writing to DVD. +13Oct05 +- Fix error conditions in bpipe.c DVD routine (terminate buffer). +- Use a bigger buffer 32K as suggested by Arno in bpipe.c. +- Increase dvd mount timeout with patch from Arno. +- Modify DVD code so that it keeps a state flag that indicates + when the freespace variable is valid. freespace_errno, now has + either 0 or an errno. There are no negative errnos. +- Create is_freespace_ok() to test state flag. Also, set_freespace_ok() + and clear_freespace_ok(). Modify code to use them. This + simplifies a bit the logic of the freespace code. +- Edit 64bit debug values correctly in dvd.c +- Fix %e variable to check num_parts rather than part. +- Use static buffer instead of static buffers for FI_to_ascii() + and stream_to_ascii() debug routines in SD. This is to prevent + possible race conditions between two threads (possibly Phil's + unmount problem). +12Oct05 +- Add a .dir command that separates arguments with commas. It + is intended to be used in the tree routines to get a + machine readable output for GUIs like wx-console. +- Make configure set dvd-handler to have execute permission. +- Install dvd-handler as is done for other dvd-xxx scripts. +- In block.c call dvd_write_part() to write last part rather + than dvd_open_next_part(). +- Prefix some DVD subroutines with dvd_ +11Oct05 +- Add extra debug to Update media error for VolFiles decrease + error. +- Do not update dev->file on set_ateof() for non-tape. +10Oct05 +- Mark DVD volume in error if part cannot be written. +- If a DVD is mounted, unmount it before asking operator + to mount an different one. +- Add Arno's dvd-handler script to the scripts directory and + integrate with configure. It replaces both existing scripts. +- Make default schedule start at 23:10 +- Implement gui release in Makefile. It creates two .tar.gz + bacula-web and bimagemgr. +08Oct05 +- Add README plus tar release to gui project. +- Manual documentation +- Tweak bacula.man doc +- Add PRAGMA synchronous = NORMAL; to SQLite3 tables. This + speeds up SQLite3 so it is only about 10% slower than version + 2.xx. Thanks to Russell Howe for this tip. +- Add msvcr71.dll to pebuilder .inf file as it is needed by + Bacula FD. Thanks to Brandon for passing this fix to Scott. +05Oct05 +- Add VolumePurged method to Python JobEvents class. Fixes + bug #428 (I think). +- Add JobId index to File table for MySQL. +- Correct tray-monitor crash of bacula-dir. qstatus_cmd() + code referenced the wrong pointer. Fixes bug #438. +- Add bacualnovss.mak file from Martin. +- Remove Pool from restore string in wbrestorepanel.cpp. Patch + from user for bug #433. +- Correct code in wbrestorpanel.cpp with misplaced parens. Patch + from user for bug #431 +- Correct printing filenames/date/times in wbrestorepanel.cpp due to bad + column alignment. Patch from user for bug #432. + +Changes to 1.37.40: +01Oct05 +- Add fix to compat.h supplied by Martin Simmons that permits + building the Win32 FD without VSS. +29Sep05 +- Bring cats/bdb_x.c routines up to version 1.37 (return values + are different). +28Sep05 +- Integrate libwrap patch from Szechuan Death. They should + also fix bug 423. +- Clean up patches directory for next release. +- Add PS variable in bacula.in script as recommended by a user. + "Tom Boyda" +- Correct mtx-changer.in so it only creates a temp file when + actually needed. +- Add patch supplied by user in a bug report to fix gnome2 + console buttons. +- Add patch from Peter Eriksson to correct + NLS error in tray-monitor.c +26Sep05 +- Add code to catalog_update to detect NULL db pointer. +- Remove char *msg argument from catalog_request and + catalog_update(). +24Sep05 +- Fix mode change open in btape.c +- Use nonblocking opens on Linux only. +- Move set_blocking code for tapes into method to + simplify main line code. +- Cleanup the code for ensuring we advance tape on fsf. + This should fix IBM problems -- patch from Adam Thorton + was very helpful. +- Remove test for BMT_EOD in fixup_device... this eliminates + need for status_dev() routine. +- Before doing label ensure device is in read-write mode. + +Changes to 1.37.39: +20Sep05 +- Tweak daemon.c berrno, copyright. +19Sep05 +- Fix handling of temp file in mtx_changer.in, reported as + a security bug, but it is not really. Bug #422 +- Fix security problem of handling temp file in randpass. + Bug #422. +- During label/relabel, add new_volume to VOLRES list in SD. +18Sep05 +- Apply Landon's patch for the TLS ANS1 API change. +- Remove old code. +- Make single exit path in first_open_device(). +17Sep05 +- Make new_volume walk through all Vols looking for dev + to release. +16Sep05 +- Make "quit" command in console always allowed. +- Remove the storage list between each console command to + keep Dir from remembering a previously selected SD. +- Add code to reservation VOLRES subroutines to try to ensure + we don't end up with two Volumes on the same drive. +- Simplify the mutex code in VOLRES a bit to reduce the chance + of error. +15Sep05 +- Apply Nicolas' dvd-freespace.in patch. +- Make sure SQL table names are not translated. +- Eliminate incorrect message saying barcodes not + found in "label barcodes" -- fixes bug report. + +Changes to 1.37.38: +07Sep05 +- Add ability to have passwords on backup of catalog as + alternate 3rd argument. Submitted by Andrew Ford + +- Turn off TapeAlert by default if user enables a Device + and add a note to install mtx. +04Sep05 +- Fix out of order volumes during restore. + +Changes to 1.37.37: +30Aug05 +- Final tweaks to build Win32. +- Enable debug code in ua_label.c +- Remove devices from the Volume list even if no + Volume is in drive. Hopefully this fixes Arno's problem + of multiple volumes listed in the same drive. +28Aug05 +- Apply Landon's patch for TLS default values. +- Correct LOCALEDIR problem in build of Win32 +- Correct ssize_t problem in build of Win32 +- Add code to llprint pools and volumes to debug next item. +- From bug report, fix resetting Pool defaults in Volume. It + was a typo "Max" was missing in several places. +- Don't allow translation of database Volume Status values. +24Aug05 +- Ensure that the drive is closed before calling the + mtx-changer script so that the script can access the drive. +- Add drive name to reserved Volume list printout in SD. +23Aug05 +- Fix bug in acquire.c that incorrectly reported volume + busy. +- Add additional debug code and messages in reserve.c +- Eliminate unwanted warning message in reserve.c + +Changes to 1.37.36 release 22Aug05: +20Aug05 +- Landon's fix for NLS detection +- Eliminate incorrect compiler warning on FreeBSD. +- Move Win32 errno message build into berrno constructor. +- Minor Win32 build tweaks +19Aug05 +- A number of minor build Win32 fixes. +- Remove a PostQuitMessage() as suggested by Thorsten so that + BartPE restore can work correctly. +- Fix for create JobMedia so that VolIndex remains valid even + during a delete Job or pruning -- bug 402. +- Minor tweak for Win32 build. +18Aug05 +- Win32 fix -- remove debug O_NONBLOCK code. +- Fix bug 399 -- make_catalog_backup does not work for sqlite3 +- Implement unloading a volume in a different drive if it + is needed in the current drive. +- Implement search for unused autochanger drive. +- Implement search for exact Volume in reservation before + other searches. +- Fix picking up drive in Dir so that it is not done in + the status command. +- Eliminate double check on "loaded" for autochanger. +17Aug05 +- Start coding better reservation algorithm +- Always look for slot for label command. +- Add more debug code for autochangers. +- Apply fix from Stephan Leemburg for + improper scanning of schedule resource: + Run = Level=Full Pool=Catalog daily at 1:20 +- Apply patch from Chris Lee for + adding --enable-build-dird --enable-build-stored. +- Tweak datadir definition in configure.in +16Aug05 +- Fix bug that missed drive=nn specification. +- Eliminate nonblocking kludge in heartbeat of FD as + it caused high CPU usage. +- Pickup loaded slot when doing open() of tape drive. +- Make autochanger reservation code go through full list + first pass until exact match found. +15Aug05 +- Fix how FileSet is saved in job record to correct continual + Full save. +- Make datadir print on config.out listing. +- Move get FileSet record up in backup init to eliminate continual + Full save seen by Peter Sjoberg. +- Add VolumeName to read-only Python variables. +- Add VolumePurged event for Python. +- Suppress /dev/ Filesystem change prohibited INFO messages. +- Do not delete FT_RAW files before restore (allows FIFOs + to be used for restore). +13Aug05 +- Add drive specification to mount, unmount, release, label, + and relabel for Autochangers. Note Dir<->SD protocol has + changed. + +Changes to 1.37.35: +12Aug05 +- Disable parts of NLS as the configure does not work here. +- In job backup init (backup.c) define definitive Job level and + since time, *then* apply Job Pool override selection if any. +11Aug05 +- Modified bconsole script so that it is improperly + installed, it will refuse to execute. This avoids + recursive call loops. + +Changes to 1.37.34: +06Aug05 +- Apply David's ACL fix to src/filed/acl.c +05Aug05 +- Apply patches sent by David Duchscher for + making ACLs work on MacOS X and FreeBSD. +04Aug05 +- Apply patch in bug#397 that improved configure + - find readline under $with_readline/include/readline + - no libutil under Solaris + - no need for -ldl under Solaris +- Make reservation system single threaded during the + search to avoid two threads competing for the same + resource. +- Correct a return code in find_suitable_device_for_job() + Possibly cause of "busy writing to another volume". +03Aug05 +- Modify open() for tape so nonblocking really works. +- Use fcntl() to reset blocking status rather than close() + and reopen the drive. +- Make sure dev->open() is always called so that any change + in read/write permissions will occur. +- Open drives initially in daemon in read-only mode. +- Ensure that each time the VolHdr.VolumeName is zapped + or changed that free_volume() is called on the old name. + +Changes to 1.37.33: +03Aug05 +- Require 5 arguments to mtx-changer except list and slots +- Turn -EPIPE status returns from bpipe to ETIME +- Include Slot in SD status output +- Do not term_dev() during initialization in SD if the device + could not be opened. In the case of a tape drive, there may + be no tape in the drive. + +Changes to 1.32.32: +02Aug05 +- Correct PostgreSQL database scripts as suggested by a user. +- Add additional info to FATAL message generated when a device + is busy writing to another volume. +- Suppress an inappropriate NULL Volume name message after a cancel. +- Correct a warning message in reserve.c +29Jul05 +- Apply user's patch to make mutiple modifiers for times + work correctly. +- Make read_dev_volume_label() handle ANSI/IBM labels + correctly -- ie space over any label at the beginning + of the tape. +28Jul05 +- Make ANSI/IBM writing of HDR1/2 labels ignore any + errors if at end of tape. +- Apply Martin's patch to improve Python detection in + configure.in +- Temporarily turn off disk seeking until I find the + cause of the problem. +27Jul05 +- Add OSF1 patch supplied by user. +- Use number of files selected from write_bsr() only + if it is not defined. +- Explicitly seek to end of file when getting size for + restore test. +- Correctly set EndBlock position in JobMedia record + for files. +- Remove unnecessary set StartBlock in bscan. Caused bscan + regression error. +26Jul05 +- Modify mtx-changer to wait a maximum of 300 seconds. +- Do restart of failed jobs only for Backups job types. +- A number of DVD updates from Nicolas. +24Jul05 +- Turn off old service helper code in Win32. +- Correct Messages bug found by Phil in stored. +23Jul05 +- Complete (almost) documentation of 1.38. +- Add error messages for error conditions with VSS. +- Fix additional problems with VSS backup that I introduced. +Changes to 1.37.31: +22Jul05 +- Correct compiler complaints in wx-console and tray-monitor. +- Correct VSS problems recognizing c: +- Add VSS before job status +- Fix output of status from being one big line. +- Change cd xx; make to cd xx && make as suggested by Phil. +- Cleanup projects file +- Remove unnecessary casting of FF_PKT in filed. +- Apply Thorsten's bugfix for vss_generic.cpp +- Add check for df path for dvd_freespace +- Use df to get space used on DVD. +- Change sense of flag indicating erase DVD or not before writing. +- Fix bpipe so that it never modifies the result pointer. +- Replace more dev_name by print_name(). +- Rewrite edit_device_codes_dev() so it does not overwrite the + supplied buffer. +- Update printing of labels (for bls) so that critical information + is printed (Job name and timestamp). +- Cleanup old spool files when starting the SD. +- Modify vss.cpp to allow C: as a path name. Otherwise VSS + doesn't work when only a drive name is given. +- Modify vss.c to eliminate double / in filenames. +- Update doc -- particularly the restore chapter. +18Jul05 +- Make all files in working directory have .xxx at end. +- Work on DVD writing. +- Fix keepatime bug (bugs database). +- Move Python variables from Job to Bacula. They are + DirName, Version, ConfigFile, and WorkingDir +- Fix delete of bootstrap to only occur on Bacula created + filenames. +- Allow cancelling a Job name that is not active. It is + sent to the daemons. +17Jul05 +- Fix name space pollution by OpenSSL 0.9.8 reported by + Matthias Kurz -- applied his patch. +- Fix bpipe.c so that it does not modify results pointer. + ***FIXME*** calling sequence should be changed. +- Remove some remaining references to dev_name. +- Fix calls to mount_dev() and unmount_dev() to + correspond to returned value (bool instead of int). +- Try without success to make DVD writing work. + +Changes to 1.37.30 released 16 July 05: +14Jul05 +- Fix "dir" command scanning field misalignment in + wx-console. +- Switch to using the wxWidgets Unicode library. +- Include msvcr71.dll in distribution. +- Add VSS to status line in Win32 FD if enabled. +- Get VSS build scripts working with Thorsten's help. +- Unlink the bootstrap file after sending it to + the FD. +- Remove sending include/exclude lists to the FD during + a restore -- deprecated code. +- Cleanup the bootstrap files in the FD. + +Changes to 1.37.29: +14Jul05 +- Remove old commented out code from configure.in +- Add baculavssfd.mak file for building VSS version of + Win32 FD. +- Correct date (year) in vss.cpp and vss_generic.cpp +13Jul05 +- I finally found and squashed the elusive SD crash. + I needed to initialize the used volume list before + firing off the device initialization thread. +Changes to 1.37.28: +11Jul05 +- Make sure that bpipe results are zapped even on + error return. +- Lots of documentation. +- Do not prune volume marked as append when needing a + new Volume. +- Print a warning message in SD if a non-used Volume + is specified and autolabel not turned on. +- Correct a bug in chksum.c concerning SHA1 signatures + (an * should have been & when checking for a bit flag). +- Print File:Block for all label records in label.c -- concerns + primarily bls when doing Job listings (-j). +- Correct is_volume_in_use() to return false if testing + on the same device where the Volume is already mounted. +- Define a init_done flag in the SD that is set when the + devices are initialized and make users connecting wait. + This prevents useless connect failure warning messages. +- Do additional device locking in ask_op_to_mount_volume() + to prevent race conditions with a user labeling a Volume + or autolabeling. +09Jul05 +- Add a test for error return from bnet_wait... in heartbeat.c + in FD to avoid CPU loop. +- Implement TLS in gnome console and wx-console. +08Jul05 +- Correct a NULL pointer reference in the mount command. +- Correct typo in Copyright +- Add detection of EOM for IBM drives (i.e. errno == ENOSPC) +07Jul05 +- Remove temp file created in mtx-changer script. +- Make fsf_dev() into a class method. +06Jul05 +- Modify mtx-changer.in script to return slot:barcode for + Volumes that are loaded in the drives. +- Correct some more places where dev->is_blocked() needs + to be checked in dircmd.c in SD. +- Update doc. +05Jul05 +- Add code to ensure that reserved but unused volumes + are freed. +- Correct how Volumes are mounted and handled so that the SD + does not get stuck if multiple volumes are used (recycling, + relabling, ...) +- Correct bug where you could relabel a volume while it + was being acquired -- created chaos. +04Jul05 +- Correct seg fault caused by open() calling sequence change. +03Jul05 +- Add new rc-chio-changer script by Rudolf Cejka to + examples/autochangers +- Apply Rudolf's changes to bacula.in +- Expand the space from 8 to 10 characters in editing + file sizes for restore and dir of catalog, otherwise + GB sizes are truncated -- fixes bug report. +- Modify wx-console to know about 10 character widths. +- Allow decending into top level directory if "recurse=no" + is set. Fixes a bug report. +- Install pthreadVCE.dll when installing console or wx-console + on Win32 systems. Fixes bug report. +02Jul05 +- Tweak dvd-writepart script to prevent door from opening/closing + so much. +- Remove GROUP BY in several PostgreSQL commands to prevent error. + Resolves bug report. +- Ensure that < as first character of filename list is not treated + as a directory for restore. +- Add debug to heartbeat in FD as it seems to go into an + infinite loop from time to time during SD failure in DVD writing. +- Add more debug code to dvd writing. +- Attempt not to destroy existing fs on DVD. +30Jun05 +- Detect device mounted for DVD and suppress be sure to + mount message after label. +- Set Cleaning tape status to "Cleaning" and force no + MediaType. +- Get DVD writing working with new standard Bacula open() + code. +- Rename get_filename() to make more sense. +- Detect "is already mounted on" on mount command so to avoid + error if device is already mounted. +- Eliminated guess_name() code. It may be necessary to + add it back later. +- Eliminate seg fault from printing invalid results. +- Make dvd_write_part() bool. + +29Jun05 +- Attempt to fix DVD writing by eliminating a number of the + DVD subroutines to simplify. +- Modify DEVICE::open() to take dcr as first argument. This + will permit providing more info to DVD opening. +- Fix scanning for time/size items which in some cases + ate the next line. +- Eliminate read_dvd_volume_label(). New code (not yet written) + *must* open dvd appropriately before calling + read_dev_volume_label. +- Modify open_first_part() open_next_part() to take DCR as + argument. +- Make label command from console work on DVDs. +- Make mount command from console work on DVDs. + Unmount does not work yet. + +Changes to 1.37.27: +27Jun05 +- Add Database vendor to CatalogRes tuple for Python. +- Update doc +- Implement DoesVolumeExist(Vol) for Python. +- Prevent python command from seg faulting if no arg given. + +Changes to 1.37.26: +26Jun05 +- Add set_mode method in DEVICE. +- Correct set_mode method in DEVICE +- Add more DVD debug info +23Jun05 +- Check for incorrect duration and size modifiers in conf files. +22Jun05: +- Make Version a tuple (version, build-date) +- Add CatalogRes tuple (DBName, Address, User, Password, + Socket, Port) +- Add Version, ConfigFile, and WorkingDir as Python attributes + in the Director. +- Implement code (principally for Win32) that on failure to + create a file, it will cd into the directory and attempt + to create the file using a relative path. This avoids creating + files with paths which fail on Win32. +- Fix parsing of times and sizes with decimal numbers. +- Make free_volume_list() in SD work if vol list is not + initialized (./bacula-sd -t). +21Jun05: +- Add debug error printout when open() fails. +- If open() of DVD fails in mount.c, return false. +- Split open() code for DVD into separate subroutine in dev.c + +Changes to 1.37.25 released on 20 Jun 05: +20Jun05: +- Remove (cd gnome-console; make clean) from src/Makefile.in +- Fix bug where Storage daemon gets confused about what + tape is mounted. (one line of code was inadvertently + deleted). + +Changes to 1.37.24: +18Jun05 +- DVD writing/reading seems to be mostly working. +- Set execute bits on dvd-freespace and dvd-writepart +- Make dvd-freespace use existing dummy file. +- Modify dvd-freespace to pickup size from Track Size: +16Jun05 +- Add Date, Job, level to updates to .bsr file in + dird/backup.c +- Add debug info to dvd-freespace.in +- Fix hard coded bacula.sql in make_catalog_backup reported + by a user. +- Make sure a verify volume to catalog never reports an error + if there are zero files to verify. +- Remove confusing debug info in filed/backup.c on network + error. +- Make sure output from console is not sent to system log. +- Convert open_dev() into a class method. +- Change VolHdr.VolName to VolHdr.VolumeName. +- Add a flag in the device state word to indicate that + we found Media in the drive (DVD). +- Make mount_dev() and unmount_dev() return bool. + +Changes to 1.37.22: +14Jun05 +- Fix the same state variable problem in open_next_part(). +- C++ify the SD code a bit more. +13Jun05 +- Add more debug code and clarify debug code for DVDs. +- Do not save and restore state in open_first_part() + since state should be properly set after open_dev(). +- Make default mandir /usr/share/man +- Install Bacula man page. +- Implement passing of FileSet Enable VSS to FD. +- Move main body of reserve drive code into subroutine + so that it can be called multiple times. +12Jun05 +- Eliminate getpass() for Win32 builds in console as the + function does not exist. +10Jun05 +- Correct some reservation problems in SD when no devices + are available. +- Start removing #ifdef HAVE_TLS by sneaky tricks. +- Begin implementation of TLS in wx-console +- Remove ignoring SIGCHLD from console. +- Rework the dlist binary search routines for implemenation + of the Volume reservation code -- make it more general. +- Strip double slashes // from Win32 filenames in an attempt + to resolve restore problems on some systems. +- Fix a minor bugs in the trace code that caused the first + line output to be lost. +- Implement a good first cut at adding Volume reservation code + to the storage daemon (in file reserve.c). +- Remove old unused code from the tree.c routines. + +Changes to 1.37.21: +06Jun05 +- Fix compile problems on Win32 +- Start writing Volume reservation list (already exists, but + is not really very good). +- Implement attribute caching to put Signature into database + at the same time as the file attributes thus eliminating a + number of database accesses. +- Correct a reservation problem. +- Implement full Dir Storage use. +- Reduce a bit of TLS #ifdeffing. + +Changes to 1.37.20: +04Jun05 +- Minor changes +01Jun05 +- Add more documentation to mtx-changer.in +- Correct link to manual in authenticate.c in various + directories. +- Create a new src/stored/reserve.c file where the + Use Storage command is processed and drives are + reserved. +- Modify src/stored/autochanger.c to keep track of each + Slot that is loaded for each device. +- Ensure that changer_command and changer_name are picked + up from Autochanger resource if not specified, and if + neither is specified, err. +30May05 +- Fix bextract.c compile problem +- Create bacula.man +- Make make distclean clean a bit better +29May05 +- Remove old code in jcr.c +- Make testls release jcr chain when terminating. +27May05 +- Implement Maximum Job Spool Size (actually DCR based) +26May05 +- Use light weight non-recursive locking on jcr chain. +- Make JCR a class and implement inc_use_count() and + dec_use_count() methods that ensure that the jcr is + locked when inc/dec the use count. +- Remove the global jcr lock when traversing the jcr + chain. +- Use dlist to implement the jcr chain rather than hand + crafted next and prev links. +- Lock the jcr chain inside each function that modifies + the chain. + +Changes to 1.37.19: +26May05 +- Fix compile problem of ua_restore.c on broken compilers. +- Apply patch from bug 326 to permit bacula status by any user. +- Fix bug 325 -- conversion of 12:30pm to 24hour time. +25May05 +- Put Dmsg() on inside if() to avoid calling subroutine. +- Make restore.bsr have unique name. +- Allow user to define bsr filename on restore command line + with bootstrap=xxx.bsr +- Add limit=nnn to "list jobs" command. +- Remove old restore code that did not use .bsr file. +- unlink automatically generated bsr file. +- Cleanup heartbeat code so that duped fd is almost sure + to be released. Previously under certain conditions, the + memory was not released due to race conditions. +- Shorten copyright. +20May05 +- Unify the reserve_device() for a single device into one subroutine. +18May05 +- Modify wait during use_device to happen only after all devices + have been examined rather than in the reserve_device code. +- Correct updating count of number of Volumes in a pool. + +Changes to 1.37.18: +16May05 +- Add more debug to SD for Autochangers + status output. +- Add Scratch to PoolType in PostgreSQL make...tables and do not + permit NULL PoolTypes. Fix for bug 319 reported by Eric. +- Update LICENSE. +- Add quotes around filename in parse_config error message. Bug + reported by Eric. +15May05 +- Change nested \include to \input so that sections are properly + included in the pdf manual -- update the Web site. +- Set reconnect flag in MySQL packet to 1 to ensure that connection + is re-established. MySQL 5 changed default to 0. Fixes bug report. +- Fix Scratch pool handling as reported in a bug by Eric Bollengier + by applying his patch. +- Remove delete job in favor of delete jobid. +- Add = NULL to configfile definitions as reported by Eric in a bug + report. +- Update winbacula.nsi.in to reflect new manual file structure. +10May05 +- Correct a minor build problem with wx-console. +- Add cancel() to Dir Python scripting. +- Re-correct bug in parse-config error handling. +- Reorganization of use_command in SD to permit + waiting and multiple drive autochanger support. +09May05 +- Correct bug in parse_config error handling. +- Where ever possible mark a volume in error or not + InChanger in mount.c +- Fix bug in changing tape pools after first backup. Reported + by Peter Sjoberg. +- Enhance mtx-changer to use Working Directory as temp. +- Remove all but initial setup locking of Res in SD. +08May05 +- Add Client OS type to Job report. +- Add version to manual +- Update the Web site to have a single page for + the documentation links. + +Changes to 1.37.18 release 08May05: +08May05 +- Correct attribute definition compile error in 1.37.17 +- Correct inverted order of CreateTime and MD5 pointed out + by a user in a bug report in FileSet db routine causing + the MD5 to print in the output instead of the time/date. + +Changes to 1.37.17: +07May05 +- Implement cstrlen() in sql list routines. +- Implement caching of attributes to add the + signature so that only one DB call will be made + per file. Not yet turned on. +- Fix Win32 build for TLS. +- Optimize File pruning to eliminate one database call. +- Fix bug that prevented File pruning from working. +- Implement a cstrlen() which returns the character + length of a UTF-8 string. +06May05 +- Move test for MaxStartDelay as suggested by Peter. +- Implement Python methods (I had to read the Python source + code). +- Implement run() method in Director. +- Add Priority and Scheduled time to Job report. +- Add JobInit and JobRun events. +- Add Priority as Python read/write attribute to Job. +- Correct typo in bsmtp reported by Jo. + +Changes to 1.37.16 released 05May05 +03May05 +- Make a few tls ifdef tweaks. +- Fix create_file.c Win32 problem pointed out by + Peter Sjoberg. +- Fix really ugly bstrncpy() but found by Thorsten. +- Move winapi.h/c from findlib to lib for inclusion in + multiple places. +02May05 +- Thorsten Engel finished his work on Win32 Unicode. We + now have a single executable that runs on all Win32 machines. +- Move job initialization code after job scheduling so that + Verify jobs check for the prior JobId after they are really + started rather than before. +- Fix lib/fnmatch.c so that it does proper testing before folding. +- More documentation -- at tls and ansi labels chapters. +- Fix fileset_convert.pl to handle empty Exclude statements. +- Turn regex back off in Win32 +01May05 +- Fix sign extension problem in lex.c that reads UTF-8 + with Chinese characters incorrectly. + +Changes to 1.37.14: +30Apr05 +- Remove a few HAVE_TLS #ifdefs +- Implement final Python style interface. More implemention to + be done, but the interface should change little if at all. +28Apr05 +- Make default no tls support. You must add + --with-openssl to get tls support. +27Apr05 +- Update Web header to include google search in the search + box -- thanks to input from Michel Meyers. +- Fix md5sum so that it builds with the new openssl stuff. +- Take some enhancements to the md5sum test program proposed + by a user. +26Apr05 +- Make option 2 of restore work better (list last 20 + locations for a file). +- Make SD re-open a device with the right permissions if + it was previously opened with something different. This + should allow reading read-only Volumes under all circumstances. +- Implement restore of a single directory. +- Apply Tru64 patch supplied by Pascal Pederiva +- Apply Unicode fixes for Win32 from "Thorsten Engel" + +- More work on Python read feature in FD. +22Apr05 +- Fix (hopefully) the ftello() overflow reported by Peter. +- Landon Fuller committed his TLS patch. +- Fixed two minor warnings in console.c with TLS turned off. +- Updated the Makefile.in for wx-windows and tray-monitor + to handle TLS. I can only build the tray-monitor. +- Fix bscan to open tape in read-only mode (actually fix + it so that it doesn't use the standard open routine). +- Correct what appears to be an error in setting the + return value in dvd.c +21Apr05 +- Get FD Python running -- design Python backup interface. +- Fix seg fault in SD when referencing Alert Command. +- More documentation. +- Fix one more thing in Win32 build. +20Apr05 +- Doc updates +- Fix Win32 build +- Put in production here + +Changes to 1.37.13: +19Apr05 +- Fix SQLite and PostgreSQL table creation script syntax + problems. +- Fix new Python code to work for Director. +- Move lib/python.c to lib/pythonlib.c so that debug output + is easier to read (can distinguish lib from dird, ...). +- Cleanup Python build so that Python is not dragged + into programs that don't use it. + +Changes to 1.37.12: +18Apr05 +- Make Bacula build without Python +- Drop Status table in drop_ scripts -- bug 283. +17Apr05 +- First cut of new Python implementation. +- Doc updates +- Correct SuSE autostart installation directory name -- + supplied by a user. +- Fix director crash if Name directive not supplied + in a Job. +- More cleanup of changing %u to %s for DB IDs. +- Replace dev_can_write(dev) with dev->can_write(). +11Apr05 +- Make fsr_dev() a method dev->fsr() +- Remove Created new FileSet message as it always comes out in + the daemon messages. +- eliminate dev_is_tape() in favor of method dev->is_tape() +- Turn on disk seeking during restore for Disk Volumes. This + required some changes to bscan -- they seem a bit suspect as + they are not symmetrical for tape/files. +- Remove some of the recursion in stored/parse_bsr.c +- Move rescue out to a new Bacula project. +08Apr05 +- Update of web site to replace old released doc with LaTeX + version. +- Replace logo in doc with new bat logo. +- Make a good number of updates to the manual. +- Implement Python scripting using a Python object. + This makes interfacing with Bacula cleaner (object + oriented). +- Add Phil's Status table to the database -- used + for getting a text description of the status + codes. +- Modify FileSet so that an empty Options (no + pattern matching) with an exclude will exclude + all files. +- Modify FileSet so that no top level included File + item can be excluded by a matching pattern. +- Suppress Created new FileSet record in daemon output. +- Implement Python in FD. +- Turn off old bfile reader code -- to be replaced + by Python. +05Apr05 +- Remove more recursion in src/dird/bsr.c as pointed out + by Peter. +04Apr05 +- Increase the index width of Filename and Path entries + to 255 chars -- suggestion of Meno Abels. +- Change remaining VARCHARS to TINYBLOBs. +- Remove recursion from is_volume_selected() following + bug report from Peter. +- Implement mostly correct handling of use_storage in the + SD with full lists, ... +02Apr05 +- Reset NumVols in Pool record from database on every update + Pool. +- Modify DB to support multiple simultaneous copies and + RAIT stiping. +- Pass copy and stripe between DIR and SD and put into + the JobMedia DB record. +- Update and test SQLite and MySQL datebase creation and + update scripts. +- Implement version 9 of the DB. +31Mar05 +- Convert more atoi to str_to_int64() for DB. +- Implement filling in NumVols by querying DB rather + than trying to keep track of it. +- Add storage name to string passed to in use storage= +- Fix newVolume() so that the Python script is always + called. +- Fix handling of pool,PoolId, and storage in ua_output. +- Same fix in ua_status.c +- Remove required locking of resources +- Replace pthread_cond_signal() by pthread_cond_broadcast() + hoping to fix the /lib/tls hang problems (lost signal). +- Move resource locking seaching from parse_conf.c to res.c + in src/lib. +- Modify end of volume handling so that fixup_... does not + redo what block.c has already done -- writing Vol info to + DIR. This fixes a bug with bad numbers of files on a tape + when it filled as reported by Peter. +- In release_device() do not update the DIR on the Volume + info if the the information was already written at the + end of the tape. +28Mar05 +- NOTE!!!! This version has a new DIR <--> SD protocol. Both + must be updated at the same time. +- Begin implementation of passing all the Storage and Device + possibilities to the SD for examination during the reserve + phase. +- Modify the reserve and acquire code in the SD to make a + job wait if the device is not available. +- Implement New Volume Each Job in DIR and pass to SD, not yet + used. +- Remove init/update of the Device resource in DIR +- Remove passing PoolId to SD and back. +26Mar05 +- Remove \a and -e from error echos in most Makefiles. +- Add more debug code when there are errors on the tape + to try to find Peter's tape problem. +- Add wait.c (oops forgot previously). +- Move all the reserve/acquire_device_for_read/append to have + only a DCR as the argument. +- Rework the reserve_device_for_append() in stored to wait + if the drive is not available. Note! This is a short + term solution. +25Mar05 +- Comment out Multiple Connections in the document. +- Move the P() and V() to subroutines so that they can be accessed + from class methods. The reference to strerror() caused problems. +- Implement new DEVICE class methods block() and unblock() that + do what was previously done in 3 lines of code. +- Implement wait_for_device(), which will wait for any device + to be released then return. This requires a new global mutex + and condition variable, and is implemented in src/stored/wait.c +- Change the code in reserve_device_for_read(), which previously + failed the job to use the new device wait code. +22Mar05 +- Apply reschedule patch to 1.37 code. +- Add copyright to title page of manual so it is clear. +- Create patch for rescheduling problem found by Ludovic. Storage + pointers were lost during rescheduling. +- Attempt to fix 2.6 rescue disk -- failed! +- Start working on adding a wait routine in the SD. +- Cleanup some old invalid doc in watchdog. +- Convert a number of references to dev->dev_name to dev->print_name(). +- Add new wait.c file to SD. +- Add a few more methods to DEVICE in SD to cleanup code a + bit -- implement a few of the methods. +18Mar05 +- Fix more print_name()s for printing device name. +- Modify open_dev to try 10 times every 6 seconds to + open the device if it gets an I/O error (meaning no + volume mounted). This gives a bit of settling in time + for an autochanger and avoids spurious messages. +- Change all yes/no to yes|no in the manual. +- Fix win32 create_file.c typo. +- Fix a typo in an error message. +17Mar05 +- Detect if fseeko exists with autoconf. If so, use it + and ftello. +- Remove old bacula-*.conf from examples directory (out + of date). +- Remove latex-fr index files from CVS. +- Rewrite code that stops reading the tape so that the + tape is marked at EOT, then once the work is done, + the EOT flag is removed. +- Flush output to file after every send in console. +- Make setting VolFiles to smaller number fatal. +- Disable Multiple Connections code. +- Add patch from user for NetBSD statvsfs() fix to + fstype.c +- Take more care with errors in acquire.c +- Don't run through dvd code in append.c if bad status + returned. +- Modify code so that an autochanger fault is fatal. +- Use dev->print_name() in more places. +- Implement dev->can_steal_lock() to simplify code. +- Make btape re-read first 10000 records on fill command. +- Check error return and fail job from fseeko and ftello + in spool.c. Don't let a -1 slip in as size. + +Changes to 1.37.7: +15Mar05 +- Apply NetBSD patch from kardel in bug 258. +14Mar05 +- Add a second job and a second client to the default + bacula-dir.conf file. +- Remove old style Include/Excludes. +- Fix ANSI labels to put EOF1 and EOF2 after each file mark. +- Add Python to SD and FD. +12Mar05 +- Implement IBM labels +- Implement EOF and EOV labels at the end of a volume. +- Fix a rather ugly problem with the PoolId not getting + passed correctly. Now the DIR passes the Pool name and + Media Type to the SD, who passes them back when requesting + the next Volume. The DIR then looks up the correct PoolId. + This takes more time, but always works, AND allows wild + card Media Types (i.e. the SD can decide). +- The DIR <==> SD protocol has changed. + +Changes to 1.37.6: +11Mar05 +- Fix scanf of PoolId in catreq to handle 64 bit Ids. +10Mar05 +- Add new ua_update.c file and move update_cmd there. +- Modify "update slots" to obtain actual number of slots. +- Tweak autochanger code to handle new slots request. +- Modify autochanger code to lock/unlock around slots and + update slots code. +09Mar05 +- Patch the FD so that it does not issue an error message if + it attempts to restore the permissions on a Win32 drive. +- Edit "Resource-name" (physical-name) for the device name + everywhere in the SD. +- Remove .linked.tex files in preparation for cutover to + using .tex in place of .wml. +08Mar05 +- Copy latest config.sub and config.guess from autoconf. +- Try new way of identifying drives with: + "resource-name" (physical-name) + More work need to a complete conversion. +07Mar05 +- Rework some of the autochanger data so that the DIR has + the number of drives. +- Modify the way the Device info is returned so that it comes + back as a special message type and can be sent anytime the + Device status changes. +- Copy the change name and changer command into the device + record if none is specified. +- Require the change command and changer name to be specified in + and AutoChanger resource. +- Force all the Media Type records of all devices in an Autochanger + to be the same. +06Mar05 +- Add new "run" command to Job resource in DIR. This permits + cloning a job as many times as you want. +- Pass PoolId to SD on Query request. It is now used in the + Find_media catalog request. +- Reworked the Device resource in the DIR. Eliminated num_waiting + and use_count, but added max_writers, reserved, and PoolId. +- This DIR is nolonger compatible with previous SDs. +- Add since and cloned keywords to the Console run command + to support cloning. +- Implemented store_alist_str() to allow multiple string items + to be specified in a .conf file. +- Added %s (since time) to Job code editing. +- Reworked reserving drives in the SD. It now does it much simpler + and correctly. +05Mar05 +- Integrate HP-UX patch from Olivier Mehani +- Fix FD job.c to test correctly for no level. + +Changes to 1.37.4: +04Mar05 +- Change Developers to Developer's Guide as requested by Michael. +- Fix developers link in manual +- Add additional dcr changes in SD to allow multiple dcrs. +02Mar05 +- Fix a few problems with the MySQL table create in 1.37. +- Delete the new tables in the table delete files. +- Increase the number of items permitted in a conf table. +- Make Director loop over alternative Devices specified in the + Storage resource until one is reserved by SD. +- Fix storing of StorageId in Media records. +- Add AutoSelect = yes|no in bacula-sd.conf +- Add Autochanger support to Label command. +- Do not autoselect devices with autoselect set false +01Mar05 +- Implement setting DIR Storage device to Autochanger + name. +- Select first available device in Autochanger. +- Pass back actual device name used. +- Allow Query of AutoChanger. +- Modify Query to include name of AutoChanger if + Device belongs to one. +- Remove old Pool code in jobq.c +- Add Autoselect flag to query and DEVICE class (still + need Directive). +28Feb05 +- Lock autochanger script when running. +- Mark Volume not InChanger if correct volume is not + autoloaded. +- Corrected some typos in the make_xxx_tables.in files. +- Made preliminary split of pre-run and run code for each + job type. This will permit early opening of SD for reserving + drives. +- Add offline and autochanger fields to Device Query record. +- Correct pthread_mutex_init() for autochanger in SD. +- Tweak Makefile for LaTeX manual, plus add nav buttons. +26Feb05 +- Clean up drive reservation system. Add more sanity checks. +- Implement a few more methods for the DEVICE class in SD. +- Add latex directories to make clean +- move DEV_BSIZE to B_DEV_BSIZE to avoid conflicts with + certain header files (FreeBSD). +24Feb05 +- Fix an ASSERT that was triggering in stored/acquire.c + attempt to fix a bug report. +23Feb05 +- Corrected SunOs to SunOS in btraceback (user submitted). +- Applied patch from Roger HÃ¥kansson + to warn the user of defective AWKs during ./configure. +20Feb05 +- Add some changes submitted by a user for HP client build. + Not all changes accepted. +- Rework code in filed/backup.c to ease #ifdefing and make + program flow more obvious. +- Split DVD code out of dev.c into dvd.c +- Tweak #ifdefing to add back all the performance measurement + #defines in version.h +- Put most of MTIOCGET code in a subroutine to simplify the + mainline code. +- Make clean remove old CVS files +- Remove unnecessary image files from Latex directory +- Implement remaining parts of Storage DB record and + its use in the Director. +- Implement + FullMaxWaitTime, Differential Max Wait Time, and + Incremental Max Wait time in Job resource. +- Start work on SD Autochanger code. +19Feb05 +- Add back JobId index for MySQL as default -- speeds up + pruning. +- Add more database fields and fix the update scripts to + include the new items. +- Pass actual level to FD so that ClientRun editing can reflect + correct level -- ditto for job status. This makes the DIR + incompatible with older clients! +- Move jobq.c acquire resources to static subroutine so that + the code logic becomes clearer. This is in preparation for + actually using the new Device resources. +- Fix some lower case problems in sql_cmds.c reported by + Debian. +- Correct a seg fault in the SD reported by a user. Occurred + only when a high debug level was set. +- Modify init_dev() in dev.c to take JCR as first arg so that + proper error messages can be reported in next item. +- Modify the query and use device SD commands to attempt to + open the device if it could not previously be opened. +- Correct error message for Could not reserve device. +- Correct some minor details with Autochanger resource in SD. +18Feb05 +- Fix seg fault if debug level 900 set in SD. +- Truncate Win32 child return code to 8 bits. +- Remove some old lld's. + +Changes to 1.37.3: +16Feb05 +- Make another attempt at fixing the ClientRunXXX return code + bug on Win32 machines. +- Apply ua_status patch from Carsten Paeth + which enforces console ACLs in the status command for Jobs. +15Feb05 +- Fix Media LabelDate and FirstWritten to be correctly set. +- Fix deadlock in multiple simultaneous jobs. +- Fix tape "truncation"/"number of files" after restore bug. +10Feb05 +- Ensure that correct error messages are returned when + reading an ANSI label. +09Feb05 +- Modified ANSI label code to preserve any ANSI label + already found by skipping over it rather than rewriting + it. +- Split the ANSI label code into ansi_label.c +- Do not let user relabel an ANSI labeled tape. +- Applied a patch for the console help command supplied + in a bug report. +- Added some new dev methods. Most notably was + set_eof(), which handles setting all the dev variables + when an EOF is just read. This is now used most everywhere + in the code. +07Feb05 +- Added code to detect that no files were inserted into the + tree for a restore. If a specific JobId was specified, the + user has the option of restoring everything. +- More progress in implementing 64 bit DB Ids. +- Modified the daemon start messages for RH. +- Implement update scripts for all database types. +- First cut at implementing restore directory (it will not + recurse). +04Feb05 +- OK, I think ANSI labels work. +- Added Label Type = ANSI|IBM|Bacula to Device resource in SD. + If this is set, it will force writing of the appropriate + label type. +- Added Check Labels = yes|no to Device resource in SD. If this + is set, Bacula will check for ANSI labels and accept them, + otherwise, ANSI labels will not be accepted when the tape + is first mounted. +02Feb05 +- Second cut ANSI labels. +01Feb05 +- Merge Preben's patch for ACLs and for Mac OS X resource forks. +- Some doc updates. +- Display more informative message when a device was not + found or could not be opened. +- Add the sqlite3 database scripts. +- Add some patches for 1.36.1 (note, I have now prepared + a 1.36.2 with all the patches and some new features -- + to be documented). +- Some minor doc updates. +- Add Arno's baculareport.pl script to the examples directory. +29Jan05 -- after vacation +- Add support for SQLite3 (it seems to run at 1/2 the speed + of SQLite2). Use --with-sqlite3 instead of --with-sqlite + to get SQLite3. +- Add target for running qemu to boot Rescue CDROM +- Add code to support kernel 2.6 in Rescue CDROM -- does NOT yet + boot correctly. +- Implement ANSI labels -- not yet tested. + This required changes to DB format. No upgrade script yet. + Note, more work needed to modify "update" command to handle + changing label types, also must restrict volume name lengths + to 6 characters. +- Add new Device, Storage, and MediaType records to DB. No + upgrade script yet. +- Add MediaType to bsr file record types. Not yet used in SD. +- Permit multiple device specifications in Storage resource in + Dir conf file. +- Implement Device resources. Director requests Device resource + info from SD on startup. +- Note!!!! DIR->SD incompatible with previous versions. +- Remove multiple Storage definitions in Job resource. One can + still specify multiple Storage resources, but they all go into + a single alist, and imply sending data to each Storage daemon + simultaneously. +- Implement Device query command between DIR and SD. +- Allow DIR to "reserve" a Device. It will then be acquired + when the FD connects to the SD. +- Turn all DIR resources into classes, and implement a few class + methods -- more to come. +- Turn DEVICE in SD into a class, and implement a number of inline + class methods -- more to come. +- I had serious problems with ACL errors on my Laptop, and so had + to add the following patch: + @@ -181,7 +181,7 @@ + } + /***** Do we really want to silently ignore errors from acl_get_file + and acl_to_text? *****/ + - return -1; + + return 0; + } +- Added edit_int64() +- Reworked and tested a bit the htable routines. +- Major changes to SD acquire.c -- DIR can now reserve devices. Needs + lots of testing!!!! +- Made a special state code for DVD -- this simplifies the logic + of the code, but I probably broke it. Testing needed!!!! +- Add AutoChanger resource to SD, but not yet used. + +Changes to 1.37.2: +12Jan05 +- Integrate Preben 'Peppe' Guldberg 's + acl patch. Fix case where configured but no ACL exists. + Rework calling arguments to be shorter and positioned + more typically in Bacula usage. +11Jan05 +- Fix scripts/bacula.in to have awk on an environment variable + and add comments for Solaris users. +- Turn off inet_aton in src/lib/address_conf.c for Win32 +- Add new files to win32 build and eliminate a compiler warning. +- Add sample DVD Device resource to bacula-sd.conf +08Jan05 +- Integrate Nicolas' patch for direct DVD support. +07Jan05 +- Fix fstype error returns. +- Apply Preben's cleanup.patch which puts back much of the + cleanup code in src/filed/restore.c +06Jan05 +- Apply all of Preben's patches, but revert to old backup.c + and old restore.c in filed. Also turn off code in new + acl.c because of errors. The new code, when fully implemented + moves platform specific code into acl.c. + One of the patches also implements WildFile and WildDir -- thanks. +01Jan05 +- Implement Python in the SD (no events yet though). +- Fix some typos in the previous commit. +30Dec04 +- Enhance CDROM boot to include some documentation at boot time. +- NOTE!!!!! The CDROM will not boot 2.6 kernels because the + boot sequence has changed significantly. Updates to come + later. +- Add memtest option to CDROM boot. +- Include Nicolas' changes to fix llist JobMedia records. +- Make sure that ClientRunBefore/After messages from the program + are terminated with a newline. Add strerror to output error + messages. +- Return program exit status code in Win32. +29Dec04 +- Add memtest86 to Bacula Rescue disk +- Enhance Rescue disk startup screen +24Dec04 +- Move some variables to eliminate Solaris 2.6 compiler warnings. +- Fix the seg fault at the end of a job in the FD when using + old style include/excludes. +22Dec04 +- Apply Preben's ACL patch. +- Integrate Preben's restore patch. +- Integrate Preben's verify teaks. +- Fix doc/latex/Makefile to copy/remove .eps files when building + html and web outputs. +21Dec04 +- Fix Bacula so that it does not exit if there is a syntax error + in its conf file during a reload command. Bug 182. +- Apply fixes suggested for old Solaris networking. + Fixes bug 190. +- Apply Preben 'Peppe' Guldberg + three patches that clean up white space: + ws.patch.02.strings: + Breaks strings that span lines into concatenated strings. I am not sure + if you like this one. Other code works with concatenated strings, though. + ws.patch.03.trailing: + This removes trailing whitespace. No changes resulted from this for + my setup. + ws.patch.04.leading: + This replaces space runs at the start of line with tabs. No changes + again. +- Fix overriding storage specification to be done + through a subroutine. +- Fix autoconf so it runs with FC3. +- Add Python4.3 to configure search paths. +- Always copy and delete storage definitions into jcr. +- Check that VolumeName supplied by Python is valid. + Return 0 if not. +19Dec04 +- Fix undefined in non-Python build. +- Update rescue disk to include mkinitrd +- Fix umount_drives in rescue disk (only one arg to umount) +- Ensure that if SD is manually set in Console, it is used. +- Put generate_event on pointer and plug it in init. This + permits using it in /lib +- Correct despooling size reported to be Job specific rather + than for the whole drive. +18Dec04 +- Fix bug 207. jcr use count off by one when manually + scheduling jobs. +- Remove FNMATCH test in configure.in and always use + the one in our library to get the FN_CASEFOLD GNU + extensions on all platforms. +- While using the rescue CDROM after my computer would not + boot, I realized that it would be very useful to have + a umount_disks. So, it is not implemented, along with + updates to the READMEs and some minor tweaks. +- Moved mounting the CDROM in the rescue boot from /cdrom + to /mnt/cdrom (more standard location). +- Reboot in CDROM rescue should now work -- requires -d + option (no write) to work. +- Hopefully fixed all the IPV6/4 problems and buffer + problems with networking in lib. Bugs 190 and 204. + Cleaned up a lot of #ifdefing problems by using routines + in address_conf.c +17Dec04 +- Apply Preben 'Peppe' Guldberg + alist fix patch. +- Remove duplicate code from chksum.h (mentioned by Preben). +13Dec04 +- Integrate Tim Oberfoell patch to ACLs + to handle both the "standard" and "default" ACLs. +12Dec04 +- Integrated Preben 'Peppe' Guldberg + three cleanup patches (btest, verify, find). +- Integrated Preben 'Peppe' Guldberg + three cleanup patches (backup, chksum, and verify) +09Dec04 +- Integrated Preben 'Peppe' Guldberg + patch to avoid doing MTIOCGET on OSes that do not support + it such as OpenBSD. +- Integrated Preben 'Peppe' Guldberg + patch to add filesystem type matching to FileSets in the + Options resource. +- Integrated Preben 'Peppe' Guldberg + patch to add Mac OSX resource fork support (save/restore) + to Bacula -- HFS Plus support. +- Add FileSet to client Job listing query. +06Dec04 +- Integrated Preben 'Peppe' Guldberg + patch to backup directories skipped (due to no file system + changes or no recursion), and to add a slash to the end + of the directory name during the match process. +- Implement Jamie ffolliott + patch to dird_conf.c that enables Multiple Connections and + fixes a typo in show. The rest of his patch awaits my suggested + changes. +05Dec04 +- Implement run command in Python +04Dec04 +- Implement conversion of the manual, and some minor + tweaks to the script tags. +- Apply a patch supplied by Preben 'Peppe' Guldberg that implements + ignore case in wild cards and regexes. +- Fix a truncated line in the above patch due to my cut and paste. +03Dec04 +- Fix it so that the InChanger flag is only changed for Volumes + in the same Pool. +- Add PIDOF configuration path and apply to bacula.in +- Add user supplied patch to add inet_aton() of old Solaris + systems. +- Require pools to match before allowing multiple simultaneous + accesses to same storage resource. +- Add patch supplied by Martin to correct buffer overrun in + bsnprintf() with no library snprintf(). +02Dec04 +- Apply user supplied patch that implements No Hard Links. +- Document Python interface +- Add hardlink keyword patch supplied by David R Bosso +01Dec04 +- Fix non-python prototypes in dummy routines. +- Add python 2.3 to config search list (user submitted patch) +- Add JobStatus to Python variables. +28Nov04 +- Add "python restart" command in Console. +- Make built-in variables table driven. +- First cut of Python Events for Bacula. Director only. + StartJob, EndJob, NewVolume events. diff --git a/bacula/kes-1.38 b/bacula/kes-1.38 index ead3818bda..f3491fef9a 100644 --- a/bacula/kes-1.38 +++ b/bacula/kes-1.38 @@ -6,7 +6,8 @@ General: Changes to 1.38.2: 20Oct05 - Fix crash in tray-monitor when daemon disconnects. Bug #479. -- Fix bnet-server bug found on OpenBSD. Bug #486 +- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator + says this does not fix *his* bug). - Fix cancel failure bug. Bug #481 - Fix failure when Pool name has spaces. Bug #487 - Fix SD crash in autochanger code. Mutex failure. Bug #488 @@ -14,6 +15,7 @@ Changes to 1.38.2: - Fix memory overrun in bfile.c in building OS X resource fork filename. Bug #489 - Add Pool name to SD status output. +- Add Python install dir for Solaris to configure. Bug #492 Changes to 1.38.1: 14Oct05 diff --git a/bacula/kes-1.39 b/bacula/kes-1.39 deleted file mode 100644 index e04221ec3a..0000000000 --- a/bacula/kes-1.39 +++ /dev/null @@ -1,44 +0,0 @@ - Technical notes on version 1.39 - Kern Sibbald - -General: - -Changes to 1.39.0: -21Nov05 -- Remove abs() in bfile.c so that it compiles on Solaris. - Bug #491. -20Nov05 -- Fix crash in tray-monitor when daemon disconnects. Bug #479. -- Fix bnet-server bug found on OpenBSD. Bug #486 -- Fix cancel failure bug. Bug #481 -- Fix failure when Pool name has spaces. Bug #487 -- Fix SD crash in autochanger code. Mutex failure. Bug #488 -- Fix a couple of free()s in src/filed/acl.c -- Fix memory overrun in bfile.c in building OS X resource - fork filename. Bug #489 -- Add Pool name to SD status output. -14Nov05 -- Apply SunOS patch for ACLs submitted by David Duchscher. -- Make sure to set storage before trying to set drive. -- Add bacula_mail_summary.sh to examples directory. It makes - a single email summary of any number of jobs. Submitted - by Adrew J. Millar. -- Make sure when we do a mount to unblock the device even - if the drive could not be opened. -13Nov05 -- Remove the USE_WIN32STREAMEXTRACTION #defines (always on) - and correct a few minor problems to make it build on Linux. -10Nov05 -- Remove delete of CVS from all Makefiles -- Fix seg fault when clicking on Add button in wx-console - restore panel. Bug #470. -- Fix copyright date and URL typo -- bug #468. -- Change autostart install for FreeBSD to look for rc.conf - rather than rc.local as suggested fix for bug #466. -- Apply patch supplied by Eric Bollinger to fix PostgreSQL - grant on status. Bug #465 -- Apply patch supplied by Eric Bollinger to fix PostgreSQL - update script. Bug #464 -- Tweak #ifdefing a bit in new Win32 stream code. -- Fix #ifdeffing for FD_NO_SEND_TEST. -- Add documentation of performance #defines diff --git a/bacula/nb-1.37 b/bacula/nb-1.37 new file mode 100644 index 0000000000..b9bcce64f8 --- /dev/null +++ b/bacula/nb-1.37 @@ -0,0 +1,93 @@ + Technical notes on version 1.37 + Nicolas Boichat + +General: + +Changes to 1.37.*: +26Oct05 + - dvd.c: update VolParts when writing the last part. +19Oct05 + - configure: add check for dd, remove check for df + - block.c:do_dvd_size_checks: Check we are writing to a dvd before doing tests + (reported by David Raine on the list, "[Bacula-users] LTO drive - End Of Volume error"). + - Update bacula-sd.conf.in to use dvd-handler correctly. + - dvd.c:dvd_write_part: Increase timeout when writing the first part (see the code for + more details). +18Oct05 + - Modify .backups command to get a fileset parameter (fix bug #444). +17Oct05 + - Fix bug when recycling DVD devices (append flag was removed). + - Add tests for dvd+rw-format in configure script. + - scripts/dvd-handler: Reformat DVD-RW when needed. This needs dvd+rw-format. + - Add patch for dvd+rw-tools in patches dir (this should probably be elsewhere). +16Oct05 + - Remove scripts/dvd-freespace and scripts/dvd-writepart, as they are now + merged into scripts/dvd-handler. Note: Documentation needs to be updated. + - scripts/dvd-handler: "zero" brand-new DVD+/-RW to fix a problem with some + DVD-writers, thanks to Arno Lehmann for reporting this, and providing the + way to fix it. + - new scripts/dvd-handler. Note: it also needs a patched version of dvd+rw-tools. + - new scripts/dvd-freespace. Note: it needs a patched version of dvd+rw-tools. + - dvd.c:dvd_write_part: Don't write empty part. (Fix 4GB crossing bug reported by Arno Lehmann) +14Oct05 + - dvd.c:dvd_write_part: Use part_size and not max_part_size when setting write timeout. + - dvd.c:do_mount_dev: When checking if the DVD is mounted, do not count ., .. and .keep (needed on Gentoo). +15Aug05 + - Convert dvd-writepart to Python. + - Increase delay from 3 seconds to 5 seconds between SIGTERM and SIGKILL when + killing external programs. +13Aug05 + - Add gettext macros in autoconf/gettext-macros. + - Modify how localedir is set in configure.in. + - Remove setlocale check (useless). +10Aug05 + - Mark translatable strings in all source files. +08Aug05 + - Create French and Italian translation files (fr.po, it.po). + - Add support for translation in configure and Makefiles. + - Update autoconf/aclocal.m4 so it is automatically created with aclocal + (Note: autoconf/gnome-macros is not used anymore, it may be removed). +30Jul05 + - Fix src/lib/bpipe.c:run_program and run_program_full_output to detect if the watchdog + killed the program, and return an error if it is the case. +26Apr05 + - Modify parse_config to get a LEX_ERROR_HANDLER as a parameter + - lex_open_file now returns NULL if the file can't be opened. All calling functions have + been adapted. + - Remove set_exit_on_error function +07Apr05 + - Fix "unknown device type" problem with DVD devices. + - Fix crash when there is no media in the DVD drive. +09Jan05 + - Update the documentation and ReleaseNotes. +05Jan05 + - Add FreeSpaceCommand in Device (SD configuration file) and implement it. + - Some modifications (again) on how guessed volume names are handled (now it should work). + - Part files on the hard disk are removed if they are empty. +04Jan05 + - Major fixes on how guessed volume names are handled. + - Minor fix in src/stored/append.c. + - Replace, when possible, POOLMEM by POOL_MEM in the new code of src/stored/dev.c. + - New script, scripts/dvd-freespace, which gets the free space available on a writable DVD. +03Jan05 + - Add WritePartAfterJob directive in Job resource (Director) + - Add WritePartAfterJob directive in Schedule Resource (Director) + - Implement these new directives +02Jan05 + - New function, open_guess_name_dev in src/stored/dev.c, which tries to guess the volume + name of a mounted device, so the label can be read. + - New script, scripts/dvd-writepart, which write parts to DVD+/-R(W). + - Removed WriteFirstPartCommand directive in Device (SD configuration file). + - Use readdir_r instead of readdir (src/stored/dev.c:open_guess_name_dev). +01Jan05 + - Add RequiresMount, MountPoint, MountCommand, UnmountCommand directives in Device (SD configuration file). + - Implement these directives (volumes can now be restored from a manually written DVD). + - Add WriteFirstPartCommand, WritePartCommand directives in Device (SD configuration file). + - Implement these directives (DVD writing now works). + - New function run_program_full_output in src/lib/bpipe.c. + - Lots of bugfixes and cleanups in the new code. +29Dec04 + - Add VolParts field in Media table + - Add MaximumPartSize directive in Device (SD configuration file) + - File Volumes can now be splitted in multiple files ("parts") + - Fix SQL error in sql_list while doing "llist jobmedia" diff --git a/bacula/nb-1.38 b/bacula/nb-1.38 deleted file mode 100644 index b12fa906ad..0000000000 --- a/bacula/nb-1.38 +++ /dev/null @@ -1,6 +0,0 @@ - Technical notes on version 1.38 - Nicolas Boichat - -General: - -Release 1.38.0: 31 October 2005 diff --git a/bacula/patches/1.38.1-to-1.38.2.patch b/bacula/patches/1.38.1-to-1.38.2.patch index 3c8e9b6485..a75062c69d 100644 --- a/bacula/patches/1.38.1-to-1.38.2.patch +++ b/bacula/patches/1.38.1-to-1.38.2.patch @@ -10,6 +10,8 @@ - Fix a couple of free()s in src/filed/acl.c - Fix memory overrun in bfile.c in building OS X resource fork filename. Bug #489 +- Add Pool name to SD status output. +- Add Python install dir for Solaris to configure. Bug #492 This patch is applied to Bacula source version 1.38.1 and will produce Bacula source version 1.38.2. Apply it with: @@ -20,39 +22,7557 @@ produce Bacula source version 1.38.2. Apply it with: make make install +Index: ChangeLog +=================================================================== +RCS file: /cvsroot/bacula/bacula/ChangeLog,v +retrieving revision 1.154.2.7 +retrieving revision 1.154.2.8 +diff -u -r1.154.2.7 -r1.154.2.8 +--- ChangeLog 15 Nov 2005 09:27:19 -0000 1.154.2.7 ++++ ChangeLog 22 Nov 2005 10:50:54 -0000 1.154.2.8 +@@ -1,4 +1,15 @@ + ++Changes to 1.38.2: ++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++- Fix bnet-server bug found on OpenBSD. Bug #486 ++- Fix cancel failure bug. Bug #481 ++- Fix failure when Pool name has spaces. Bug #487 ++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++- Fix a couple of free()s in src/filed/acl.c ++- Fix memory overrun in bfile.c in building OS X resource ++ fork filename. Bug #489 ++- Add Pool name to SD status output. ++- Add Python install dir for Solaris to configure. Bug #492 + + Changes to 1.38.1: + - Apply SunOS patch for ACLs submitted by David Duchscher. +Index: ReleaseNotes +=================================================================== +RCS file: /cvsroot/bacula/bacula/ReleaseNotes,v +retrieving revision 1.147.2.9 +retrieving revision 1.147.2.10 +diff -u -r1.147.2.9 -r1.147.2.10 +--- ReleaseNotes 15 Nov 2005 09:27:19 -0000 1.147.2.9 ++++ ReleaseNotes 22 Nov 2005 10:50:54 -0000 1.147.2.10 +@@ -1,10 +1,22 @@ + +- Release Notes for Bacula 1.38.1 ++ Release Notes for Bacula 1.38.2 + + Bacula code: Total files = 420 Total lines = 138,440 (*.h *.c *.in) + 20,440 additional lines of code since version 1.36.3 + +-Changes since 1.38.0: ++Changes to 1.38.2: ++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++- Fix bnet-server bug found on OpenBSD. Bug #486 ++- Fix cancel failure bug. Bug #481 ++- Fix failure when Pool name has spaces. Bug #487 ++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++- Fix a couple of free()s in src/filed/acl.c ++- Fix memory overrun in bfile.c in building OS X resource ++ fork filename. Bug #489 ++- Add Pool name to SD status output. ++- Add Python install dir for Solaris to configure. Bug #492 ++ ++Changes to 1.38.1: + - Corrected ACL for Solaris (David Duchscher and Attila Fulop). + - Add bacula_mail_summary.sh to examples directory. It makes + a single email summary of any number of jobs. Submitted +Index: configure +=================================================================== +RCS file: /cvsroot/bacula/bacula/configure,v +retrieving revision 1.203.2.5 +retrieving revision 1.203.2.6 +diff -u -r1.203.2.5 -r1.203.2.6 +--- configure 13 Nov 2005 10:51:17 -0000 1.203.2.5 ++++ configure 22 Nov 2005 10:50:54 -0000 1.203.2.6 +@@ -14948,7 +14948,7 @@ + PYTHON_LIBS= + if test "$withval" != "no"; then + if test "$withval" = "yes"; then +- for python_root in /usr /usr/local; do ++ for python_root in /usr /usr/local /usr/sfw; do + if test -f $python_root/include/python2.2/Python.h; then + PYTHON_INCDIR=-I$python_root/include/python2.2 + PYTHON_LIBS="-L$python_root/lib/python2.2/config -lpython2.2" +Index: kernstodo +=================================================================== +RCS file: /cvsroot/bacula/bacula/kernstodo,v +retrieving revision 1.570.2.6 +retrieving revision 1.570.2.7 +diff -u -r1.570.2.6 -r1.570.2.7 +--- kernstodo 4 Nov 2005 09:16:49 -0000 1.570.2.6 ++++ kernstodo 22 Nov 2005 10:50:55 -0000 1.570.2.7 +@@ -1,5 +1,5 @@ + Kern's ToDo List +- 03 November 2005 ++ 21 November 2005 + + Major development: + Project Developer +@@ -7,8 +7,6 @@ + Version 1.37 Kern (see below) + ======================================================== + +-Final items for 1.37 before release: +- + Document: + - Does ClientRunAfterJob fail the job on a bad return code? + - Document cleaning up the spool files: +@@ -18,6 +16,8 @@ + - Does WildFile match against full name? Doc. + + For 1.39: ++- Make sure that all do_prompt() calls in Dir check for ++ -1 (error) and -2 (cancel) returns. + - Look at -D_FORTIFY_SOURCE=2 + - Add Win32 FileSet definition somewhere + - Look at fixing restore status stats in SD. +@@ -27,6 +27,12 @@ + encountered, read many times (as it currently does), and if the + block cannot be read, skip to the next block, and try again. If + that fails, skip to the next file and try again, ... ++- Add level table: ++ create table LevelType (LevelType binary(1), LevelTypeLong tinyblob); ++ insert into LevelType (LevelType,LevelTypeLong) values ++ ("F","Full"), ++ ("D","Diff"), ++ ("I","Inc"); + - Add ACL to restore only to original location. + - Add a recursive mark command (rmark) to restore. + - "Minimum Job Interval = nnn" sets minimum interval between Jobs +@@ -1246,219 +1252,4 @@ + ==== + + +-=== Done +-- Save mount point for directories not traversed with onefs=yes. +-- Add seconds to start and end times in the Job report output. +-- if 2 concurrent backups are attempted on the same tape +- drive (autoloader) into different tape pools, one of them will exit +- fatally instead of halting until the drive is idle +-- Update StartTime if job held in Job Queue. +-- Look at www.nu2.nu/pebuilder as a helper for full windows +- bare metal restore. (done by Scott) +-- Fix orphanned buffers: +- Orphaned buffer: 24 bytes allocated at line 808 of rufus-dir job.c +- Orphaned buffer: 40 bytes allocated at line 45 of rufus-dir alist.c +-- Implement Preben's suggestion to add +- File System Types = ext2, ext3 +- to FileSets, thus simplifying backup of *all* local partitions. +-- Try to open a device on each Job if it was not opened +- when the SD started. +-- Add dump of VolSessionId/Time and FileIndex with bls. +-- If Bacula does not find the right tape in the Autochanger, +- then mark the tape in error and move on rather than asking +- for operator intervention. +-- Cancel command should include JobId in list of Jobs. +-- Add performance testing hooks +-- Bootstrap from JobMedia records. +-- Implement WildFile and WildDir to solve problem of +- saving only *.doc files. +-- Fix +- Please use the "label" command to create a new Volume for: +- Storage: DDS-4-changer +- Media type: +- Pool: Default +- label +- The defined Storage resources are: +-- Copy Changer Device and Changer Command from Autochanger +- to Device resource in SD if none given in Device resource. +-- 1. Automatic use of more than one drive in an autochanger (done) +-- 2. Automatic selection of the correct drive for each Job (i.e. +- selects a drive with an appropriate Volume for the Job) (done) +-- 6. Allow multiple simultaneous Jobs referencing the same pool write +- to several tapes (some new directive(s) are are probably needed for +- this) (done) +-- Locking (done) +-- Key on Storage rather than Pool (done) +-- Allow multiple drives to use same Pool (change jobq.c DIR) (done). +-- Synchronize multiple drives so that not more +- than one loads a tape and any time (done) +-- 4. Use Changer Device and Changer Command specified in the +- Autochanger resource, if none is found in the Device resource. +- You can continue to specify them in the Device resource if you want +- or need them to be different for each device. +-- 5. Implement a new Device directive (perhaps "Autoselect = yes/no") +- that can allow a Device be part of an Autochanger, and hence the changer +- script protected, but if set to no, will prevent the Device from being +- automatically selected from the changer. This allows the device to +- be directly accessed through its Device name, but not through the +- AutoChanger name. +-#6 Select one from among Multiple Storage Devices for Job +-#5 Events that call a Python program +- (Implemented in Dir/SD) +-- Make sure the Device name is in the Query packet returned. +-- Don't start a second file job if one is already running. +-- Implement EOF/EOV labels for ANSI labels +-- Implement IBM labels. +-- When Python creates a new label, the tape is immediately +- recycled and no label created. This happens when using +- autolabeling -- even when Python doesn't generate the name. +-- Scratch Pool where the volumes can be re-assigned to any Pool. +-- 28-Mar 23:19 rufus-sd: acquire.c:379 Device "DDS-4" (/dev/nst0) +- is busy reading. Job 6 canceled. +-- Remove separate thread for opening devices in SD. On the other +- hand, don't block waiting for open() for devices. +-- Fix code to either handle updating NumVol or to calculate it in +- Dir next_vol.c +-- Ensure that you cannot exclude a directory or a file explicitly +- Included with File. +-#4 Embedded Python Scripting +- (Implemented in Dir/SD/FD) +-- Add Python writable variable for changing the Priority, +- Client, Storage, JobStatus (error), ... +-- SD Python +- - Solicit Events +-- Add disk seeking on restore; turn off seek on tapes. +- stored/match_bsr.c +-- Look at dird_conf.c:1000: warning: `int size' +- might be used uninitialized in this function +-- Indicate when a Job is purged/pruned during restore. +-- Implement some way to turn off automatic pruning in Jobs. +-- Implement a way an Admin Job can prune, possibly multiple +- clients -- Python script? +-- Look at Preben's acl.c error handling code. +-- SD crashes after a tape restore then doing a backup. +-- If drive is opened read/write, close it and re-open +- read-only if doing a restore, and vice-versa. +-- Windows restore: +- data-fd: RestoreFiles.2004-12-07_15.56.42 Error: +- > ..\findlib\../../findlib/create_file.c:275 Could not open e:/: ERR=Der +- > Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen +- > Prozess verwendet wird. +- Restore restores all files, but then fails at the end trying +- to set the attributes of e: +- from failed jobs.- Resolve the problem between Device name and Archive name, +- and fix SD messages. +-- Tell the "restore" user when browsing is no longer possible. +-- Add a restore directory-x +-- Write non-optimized bsrs from the JobMedia and Media records, +- even after Files are pruned. +-- Delete Stripe and Copy from VolParams to save space. +-- Fix option 2 of restore -- list where file is backed up -- require Client, +- then list last 20 backups. +-- Finish implementation of passing all Storage and Device needs to +- the SD. +-- Move test for max wait time exceeded in job.c up -- Peter's idea. +-## Consider moving docs to their own project. +-## Move rescue to its own project. +-- Add client version to the Client name line that prints in +- the Job report. +-- Fix the Rescue CDROM. +-- By the way: on page http://www.bacula.org/?page=tapedrives , at the +- bottom, the link to "Tape Testing Chapter" is broken. It goes to +- /html-manual/... while the others point to /rel-manual/... +-- Device resource needs the "name" of the SD. +-- Specify a single directory to restore. +-- Implement MediaType keyword in bsr? +-- Add a date and time stamp at the beginning of every line in the +- Job report (Volker Sauer). +-- Add level to estimate command. +-- Add "limit=n" for "list jobs" +-- Make bootstrap filename unique. +-- Make Dmsg look at global before calling subroutine. +-- From Chris Hull: +- it seems to be complaining about 12:00pm which should be a valid 12 +- hour time. I changed the time to 11:59am and everything works fine. +- Also 12:00am works fine. 0:00pm also works (which I don't think +- should). None of the values 12:00pm - 12:59pm work for that matter. +-- Require restore via the restore command or make a restore Job +- get the bootstrap file. +-- Implement Maximum Job Spool Size +-- Fix 3993 error in SD. It forgets to look at autochanger +- resource for device command, ... +-- 3. Prevent two drives requesting the same Volume in any given +- autochanger, by checking if a Volume is mounted on another drive +- in an Autochanger. +-- Upgrade to MySQL 4.1.12 See: +- http://dev.mysql.com/doc/mysql/en/Server_SQL_mode.html +-- Add # Job Level date to bsr file +-- Implement "PreferMountedVolumes = yes|no" in Job resource. +-## Integrate web-bacula into a new Bacula project with +- bimagemgr. +-- Cleaning tapes should have Status "Cleaning" rather than append. +-- Make sure that Python has access to Client address/port so that +- it can check if Clients are alive. +-- Review all items in "restore". +-- Fix PostgreSQL GROUP BY problems in restore. +-- Fix PostgreSQL sql problems in bugs. +-- After rename +- 04-Jul 13:01 MainSD: Rufus.2005-07-04_01.05.02 Warning: Director wanted Volume +- "DLT-13Feb04". +- Current Volume "DLT-04Jul05" not acceptable because: +- 1997 Volume "DLT-13Feb04" not in catalog. +- 04-Jul 13:01 MainSD: Please mount Volume "DLT-04Jul05" on Storage Device +- "HP DLT 80" (/dev/nst0) for Job Rufus.2005-07-04_01.05.02 +-## Create a new GUI chapter explaining all the GUI programs. +-- Make "update slots" when pointing to Autochanger, remove +- all Volumes from other drives. "update slots all-drives"? +- No, this is done by modifying mtx-changer to list what is +- in the drives. +-- Finish TLS implementation. +-- Port limiting -m in iptables to prevent DoS attacks +- could cause broken pipes on Bacula. +-6. Build and test the Volume Shadow Copy (VSS) for Win32. +-- Allow cancel of unknown Job +-- State not saved when closing Win32 FD by icon +-- bsr-opt-test fails. bsr deleted. Fix. +-- Move Python daemon variables from Job to Bacula object. +- WorkingDir, ConfigFile +-- Document that Bootstrap files can be written with cataloging +- turned off. +-- Document details of ANSI/IBM labels +-- OS linux 2.4 +- 1) ADIC, DLT, FastStor 4000, 7*20GB +-- Linux Sony LIB-D81, AIT-3 library works. +-- Doc the following +- to activate, check or disable the hardware compression feature on my +- exb-8900 i use the exabyte "MammothTool" you can get it here: +- http://www.exabyte.com/support/online/downloads/index.cfm +- There is a solaris version of this tool. With option -C 0 or 1 you can +- disable or activate compression. Start this tool without any options for +- a small reference. +-- Document Heartbeat Interval in the dealing with firewalls section. +-- Document new CDROM directory. +-- On Win32 working directory must have drive letter ???? +-- On Win32 working directory must be writable by SYSTEM to +- do restores. +-- Document that ChangerDevice is used for Alert command. +-- Add better documentation on how restores can be done +-8. Take one more try at making DVD writing work (no go) +-7. Write a bacula-web document +-- Why isn't the DEVICE structure defined when doing +- a reservation? +-- Multi-drive changer seems to only use drive 0 +- Multiple drives don't seem to be opened. +-- My database is growing +-- Call GetLastError() in the berrno constructor rather +- than delaying until strerror. +-- Tape xxx in drive 0, requested in drive 1 +-- The mount command does not work with drives other than 0. +-- A mount should cause the SD to re-examine what Slot is +- loaded. +-- The SD locks on to the first available drive then +- wants a Volume that is released but in another drive -- +- chaos. +-- Run the regression scripts on Solaris and FreeBSD +-- Figure out how to package gui, and rescue programs. +-- Add a .dir command to restore tree code to eliminate the problem +-- Mount after manually unloading changer causes hang in SD +-- Fix JobACL with restore by JobId. ++=== Done -- see kernsdone Index: kes-1.38 =================================================================== RCS file: /cvsroot/bacula/bacula/kes-1.38,v retrieving revision 1.1.2.13 -diff -u -r1.1.2.13 kes-1.38 +retrieving revision 1.1.2.14 +diff -u -r1.1.2.13 -r1.1.2.14 --- kes-1.38 14 Nov 2005 20:20:38 -0000 1.1.2.13 -+++ kes-1.38 21 Nov 2005 12:53:36 -0000 -@@ -3,6 +3,17 @@ ++++ kes-1.38 22 Nov 2005 10:50:55 -0000 1.1.2.14 +@@ -3,6 +3,20 @@ General: -+Changes after release of 1.38.1: ++Changes to 1.38.2: +20Oct05 +- Fix crash in tray-monitor when daemon disconnects. Bug #479. -+- Fix bnet-server bug found on OpenBSD. Bug #486 ++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++ says this does not fix *his* bug). +- Fix cancel failure bug. Bug #481 +- Fix failure when Pool name has spaces. Bug #487 +- Fix SD crash in autochanger code. Mutex failure. Bug #488 +- Fix a couple of free()s in src/filed/acl.c +- Fix memory overrun in bfile.c in building OS X resource + fork filename. Bug #489 ++- Add Pool name to SD status output. ++- Add Python install dir for Solaris to configure. Bug #492 + Changes to 1.38.1: 14Oct05 - Apply SunOS patch for ACLs submitted by David Duchscher. +Index: projects +=================================================================== +RCS file: /cvsroot/bacula/bacula/projects,v +retrieving revision 1.12.2.3 +retrieving revision 1.12.2.4 +diff -u -r1.12.2.3 -r1.12.2.4 +--- projects 10 Nov 2005 20:25:27 -0000 1.12.2.3 ++++ projects 22 Nov 2005 10:50:55 -0000 1.12.2.4 +@@ -228,7 +228,175 @@ + + Why: Performance enhancement. + ++Item 13: Let Bacula log tape usage and handle drive cleaning cycles. ++ Date: November 11, 2005 ++ Origin: Arno Lehmann ++ Status: ++ ++ What: Make Bacula manage tape life cycle information and drive ++ cleaning cycles. ++ ++ Why: Both parts of this project are important when operating backups. ++ We need to know which tapes need replacement, and we need to ++ make sure the drives are cleaned when necessary. While many ++ tape libraries and even autoloaders can handle all this ++ automatically, support by Bacula can be helpful for smaller ++ (older) libraries and single drives. Also, checking drive ++ status during operation can prevent some failures (as I had to ++ learn the hard way...) ++ ++ Notes: First, Bacula could (and even does, to some limited extent) ++ record tape and drive usage. For tapes, the number of mounts, ++ the amount of data, and the time the tape has actually been ++ running could be recorded. Data fields for Read and Write time ++ and Nmber of mounts already exist in the catalog (I'm not sure ++ if VolBytes is the sum of all bytes ever written to that volume ++ by Bacula). This information can be important when determining ++ which media to replace. For the tape drives known to Bacula, ++ similar information is interesting to determine the device ++ status and expected life time: Time it's been Reading and ++ Writing, number of tape Loads / Unloads / Errors. This ++ information is not yet recorded as far as I know. ++ ++ The next step would be implementing drive cleaning setup. ++ Bacula already has knowledge about cleaning tapes. Once it has ++ some information about cleaning cycles (measured in drive run ++ time, number of tapes used, or calender days, for example) it ++ can automatically execute tape cleaning (with an autochanger, ++ obviously) or ask for operator assistence loading a cleaning ++ tape. ++ ++ The next step would be to implement TAPEALERT checks not only ++ when changing tapes and only sending he information to the ++ administrator, but rather checking after each tape error, ++ checking on a regular basis (for example after each tape file), ++ and also before unloading and after loading a new tape. Then, ++ depending on the drives TAPEALERT state and the know drive ++ cleaning state Bacula could automatically schedule later ++ cleaning, clean immediately, or inform the operator. ++ ++ Implementing this would perhaps require another catalog change ++ and perhaps major changes in SD code and the DIR-SD protocoll, ++ so I'd only consider this worth implementing if it would ++ actually be used or even needed by many people. ++ ++Item 14: Merging of multiple backups into a single one. (Also called Synthetic ++ Backup or Consolidation). ++ ++ Origin: Marc Cousin and Eric Bollengier ++ Date: 15 November 2005 ++ Status: Depends on first implementing project Item 1 (Migration). ++ ++ What: A merged backup is a backup made without connecting to the Client. ++ It would be a Merge of existing backups into a single backup. ++ In effect, it is like a restore but to the backup medium. ++ ++ For instance, say that last sunday we made a full backup. Then ++ all week long, we created incremental backups, in order to do ++ them fast. Now comes sunday again, and we need another full. ++ The merged backup makes it possible to do instead an incremental ++ backup (during the night for instance), and then create a merged ++ backup during the day, by using the full and incrementals from ++ the week. The merged backup will be exactly like a full made ++ sunday night on the tape, but the production interruption on the ++ Client will be minimal, as the Client will only have to send ++ incrementals. ++ ++ In fact, if it's done correctly, you could merge all the ++ Incrementals into single Incremental, or all the Incrementals ++ and the last Differential into a new Differential, or the Full, ++ last differential and all the Incrementals into a new Full ++ backup. And there is no need to involve the Client. ++ ++ Why: The benefit is that : ++ - the Client just does an incremental ; ++ - the merged backup on tape is just as a single full backup, ++ and can be restored very fast. ++ ++ This is also a way of reducing the backup data since the old ++ data can then be pruned (or not) from the catalog, possibly ++ allowing older volumes to be recycled ++ ++Item 15: Automatic disabling of devices ++ Date: 2005-11-11 ++ Origin: Peter Eriksson ++ Status: ++ ++ What: After a configurable amount of fatal errors with a tape drive ++ Bacula should automatically disable further use of a certain ++ tape drive. There should also be "disable"/"enable" commands in ++ the "bconsole" tool. ++ ++ Why: On a multi-drive jukebox there is a possibility of tape drives ++ going bad during large backups (needing a cleaning tape run, ++ tapes getting stuck). It would be advantageous if Bacula would ++ automatically disable further use of a problematic tape drive ++ after a configurable amount of errors has occured. ++ ++ An example: I have a multi-drive jukebox (6 drives, 380+ slots) ++ where tapes occasionally get stuck inside the drive. Bacula will ++ notice that the "mtx-changer" command will fail and then fail ++ any backup jobs trying to use that drive. However, it will still ++ keep on trying to run new jobs using that drive and fail - ++ forever, and thus failing lots and lots of jobs... Since we have ++ many drives Bacula could have just automatically disabled ++ further use of that drive and used one of the other ones ++ instead. ++ ++ ++Item 16: Directive/mode to backup only file changes, not entire file ++ Date: 11 November 2005 ++ Origin: Joshua Kugler ++ Marek Bajon ++ Status: RFC ++ ++ What: Currently when a file changes, the entire file will be backed up in ++ the next incremental or full backup. To save space on the tapes ++ it would be nice to have a mode whereby only the changes to the ++ file would be backed up when it is changed. ++ ++ Why: This would save lots of space when backing up large files such as ++ logs, mbox files, Outlook PST files and the like. ++ ++ Notes: This would require the usage of disk-based volumes as comparing ++ files would not be feasible using a tape drive. ++ ++Item 17: Quick release of FD-SD connection ++ Origin: Frank Volf (frank at deze dot org) ++ Date: 17 november 2005 ++ Status: ++ ++ What: In the bacula implementation a backup is finished after all data ++ and attributes are succesfully written to storage. When using a ++ tape backup it is very annoying that a backup can take a day, ++ simply because the current tape (or whatever) is full and the ++ administrator has not put a new one in. During that time the ++ system cannot be taken off-line, because there is still an open ++ session between the storage daemon and the file daemon on the ++ client. ++ ++ Although this is a very good strategey for making "safe backups" ++ This can be annoying for e.g. laptops, that must remain ++ connected until the bacukp is completed. ++ ++ Using a new feature called "migration" it will be possible to ++ spool first to harddisk (using a special 'spool' migration ++ scheme) and then migrate the backup to tape. ++ ++ There is still the problem of getting the attributes committed. ++ If it takes a very long time to do, with the current code, the ++ job has not terminated, and the File daemon is not freed up. The ++ Storage daemon should release the File daemon as soon as all the ++ file data and all the attributes have been sent to it (the SD). ++ Currently the SD waits until everything is on tape and all the ++ attributes are transmitted to the Director before signalling ++ completion to the FD. I don't think I would have any problem ++ changing this. The reason is that even if the FD reports back to ++ the Dir that all is OK, the job will not terminate until the SD ++ has done the same thing -- so in a way keeping the SD-FD link ++ open to the very end is not really very productive ... + ++ Why: Makes backup of laptops much easier. + + + ============= Empty RFC form =========== +@@ -245,33 +413,4 @@ + ============== End RFC form ============== + + +-Items completed for release 1.38.0: +-#4 Embedded Python Scripting (implemented in all Daemons) +-#5 Events that call a Python program (Implemented in all +- daemons, but more cleanup work to be done). +-#6 Select one from among Multiple Storage Devices for Job. +- This is already implemented in 1.37. +-#7 Single Job Writing to Multiple Storage Devices. This is +- currently implemented with a Clone feature. +-#- Full multiple drive Autochanger support (done in 1.37) +-#- Built in support for communications encryption (TLS) +- done by Landon Fuller. +-# Support for Unicode characters +- (via UTF-8) on Win32 machines thanks to Thorsten Engel. +-Item 8: Break the one-to-one Relationship between a Job and a +- Specific Storage Device (or Devices if #10 is implemented). +- +-Completed items from last year's list: +-Item 1: Multiple simultaneous Jobs. (done) +-Item 3: Write the bscan program -- also write a bcopy program (done). +-Item 5: Implement Label templates (done). +-Item 6: Write a regression script (done) +-Item 9: Add SSL to daemon communications (done by Landon Fuller) +-Item 10: Define definitive tape format (done) +-Item 3: GUI for interactive restore. Partially Implemented in 1.34 +- Note, there is now a complete Webmin plugin, a partial +- GNOME console, and an excellent wx-console GUI. +-Item 4: GUI for interactive backup +-Item 2: Job Data Spooling. +- Done: Regular expression matching. +-Item 10: New daemon communication protocol (this has been dropped). ++Items completed for release 1.38.0 -- see kernsdone +Index: autoconf/configure.in +=================================================================== +RCS file: /cvsroot/bacula/bacula/autoconf/configure.in,v +retrieving revision 1.184.2.4 +retrieving revision 1.184.2.5 +diff -u -r1.184.2.4 -r1.184.2.5 +--- autoconf/configure.in 13 Nov 2005 10:51:17 -0000 1.184.2.4 ++++ autoconf/configure.in 22 Nov 2005 10:50:55 -0000 1.184.2.5 +@@ -604,7 +604,7 @@ + PYTHON_LIBS= + if test "$withval" != "no"; then + if test "$withval" = "yes"; then +- for python_root in /usr /usr/local; do ++ for python_root in /usr /usr/local /usr/sfw; do + if test -f $python_root/include/python2.2/Python.h; then + PYTHON_INCDIR=-I$python_root/include/python2.2 + PYTHON_LIBS="-L$python_root/lib/python2.2/config -lpython2.2" +Index: patches/1.38.1-to-1.38.2.patch +=================================================================== +RCS file: patches/1.38.1-to-1.38.2.patch +diff -N patches/1.38.1-to-1.38.2.patch +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ patches/1.38.1-to-1.38.2.patch 22 Nov 2005 10:52:49 -0000 1.1.2.3 +@@ -0,0 +1,6901 @@ ++ ++ This patch fixes the following bugs: ++ ++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++ says that this patch does not fix his problem) ++- Fix cancel failure bug. Bug #481 ++- Fix failure when Pool name has spaces. Bug #487 ++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++- Fix a couple of free()s in src/filed/acl.c ++- Fix memory overrun in bfile.c in building OS X resource ++ fork filename. Bug #489 ++- Add Pool name to SD status output. ++- Add Python install dir for Solaris to configure. Bug #492 ++ ++This patch is applied to Bacula source version 1.38.1 and will ++produce Bacula source version 1.38.2. Apply it with: ++ ++ cd ++ ./configure (your options) if not already done ++ patch -p0 <1.38.1-to-1.38.2.patch ++ make ++ make install ++ ++Index: ChangeLog ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/ChangeLog,v ++retrieving revision 1.154.2.7 ++retrieving revision 1.154.2.8 ++diff -u -r1.154.2.7 -r1.154.2.8 ++--- ChangeLog 15 Nov 2005 09:27:19 -0000 1.154.2.7 +++++ ChangeLog 22 Nov 2005 10:50:54 -0000 1.154.2.8 ++@@ -1,4 +1,15 @@ ++ +++Changes to 1.38.2: +++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++- Fix bnet-server bug found on OpenBSD. Bug #486 +++- Fix cancel failure bug. Bug #481 +++- Fix failure when Pool name has spaces. Bug #487 +++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++- Fix a couple of free()s in src/filed/acl.c +++- Fix memory overrun in bfile.c in building OS X resource +++ fork filename. Bug #489 +++- Add Pool name to SD status output. +++- Add Python install dir for Solaris to configure. Bug #492 ++ ++ Changes to 1.38.1: ++ - Apply SunOS patch for ACLs submitted by David Duchscher. ++Index: ReleaseNotes ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/ReleaseNotes,v ++retrieving revision 1.147.2.9 ++retrieving revision 1.147.2.10 ++diff -u -r1.147.2.9 -r1.147.2.10 ++--- ReleaseNotes 15 Nov 2005 09:27:19 -0000 1.147.2.9 +++++ ReleaseNotes 22 Nov 2005 10:50:54 -0000 1.147.2.10 ++@@ -1,10 +1,22 @@ ++ ++- Release Notes for Bacula 1.38.1 +++ Release Notes for Bacula 1.38.2 ++ ++ Bacula code: Total files = 420 Total lines = 138,440 (*.h *.c *.in) ++ 20,440 additional lines of code since version 1.36.3 ++ ++-Changes since 1.38.0: +++Changes to 1.38.2: +++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++- Fix bnet-server bug found on OpenBSD. Bug #486 +++- Fix cancel failure bug. Bug #481 +++- Fix failure when Pool name has spaces. Bug #487 +++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++- Fix a couple of free()s in src/filed/acl.c +++- Fix memory overrun in bfile.c in building OS X resource +++ fork filename. Bug #489 +++- Add Pool name to SD status output. +++- Add Python install dir for Solaris to configure. Bug #492 +++ +++Changes to 1.38.1: ++ - Corrected ACL for Solaris (David Duchscher and Attila Fulop). ++ - Add bacula_mail_summary.sh to examples directory. It makes ++ a single email summary of any number of jobs. Submitted ++Index: configure ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/configure,v ++retrieving revision 1.203.2.5 ++retrieving revision 1.203.2.6 ++diff -u -r1.203.2.5 -r1.203.2.6 ++--- configure 13 Nov 2005 10:51:17 -0000 1.203.2.5 +++++ configure 22 Nov 2005 10:50:54 -0000 1.203.2.6 ++@@ -14948,7 +14948,7 @@ ++ PYTHON_LIBS= ++ if test "$withval" != "no"; then ++ if test "$withval" = "yes"; then ++- for python_root in /usr /usr/local; do +++ for python_root in /usr /usr/local /usr/sfw; do ++ if test -f $python_root/include/python2.2/Python.h; then ++ PYTHON_INCDIR=-I$python_root/include/python2.2 ++ PYTHON_LIBS="-L$python_root/lib/python2.2/config -lpython2.2" ++Index: kernstodo ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/kernstodo,v ++retrieving revision 1.570.2.6 ++retrieving revision 1.570.2.7 ++diff -u -r1.570.2.6 -r1.570.2.7 ++--- kernstodo 4 Nov 2005 09:16:49 -0000 1.570.2.6 +++++ kernstodo 22 Nov 2005 10:50:55 -0000 1.570.2.7 ++@@ -1,5 +1,5 @@ ++ Kern's ToDo List ++- 03 November 2005 +++ 21 November 2005 ++ ++ Major development: ++ Project Developer ++@@ -7,8 +7,6 @@ ++ Version 1.37 Kern (see below) ++ ======================================================== ++ ++-Final items for 1.37 before release: ++- ++ Document: ++ - Does ClientRunAfterJob fail the job on a bad return code? ++ - Document cleaning up the spool files: ++@@ -18,6 +16,8 @@ ++ - Does WildFile match against full name? Doc. ++ ++ For 1.39: +++- Make sure that all do_prompt() calls in Dir check for +++ -1 (error) and -2 (cancel) returns. ++ - Look at -D_FORTIFY_SOURCE=2 ++ - Add Win32 FileSet definition somewhere ++ - Look at fixing restore status stats in SD. ++@@ -27,6 +27,12 @@ ++ encountered, read many times (as it currently does), and if the ++ block cannot be read, skip to the next block, and try again. If ++ that fails, skip to the next file and try again, ... +++- Add level table: +++ create table LevelType (LevelType binary(1), LevelTypeLong tinyblob); +++ insert into LevelType (LevelType,LevelTypeLong) values +++ ("F","Full"), +++ ("D","Diff"), +++ ("I","Inc"); ++ - Add ACL to restore only to original location. ++ - Add a recursive mark command (rmark) to restore. ++ - "Minimum Job Interval = nnn" sets minimum interval between Jobs ++@@ -1246,219 +1252,4 @@ ++ ==== ++ ++ ++-=== Done ++-- Save mount point for directories not traversed with onefs=yes. ++-- Add seconds to start and end times in the Job report output. ++-- if 2 concurrent backups are attempted on the same tape ++- drive (autoloader) into different tape pools, one of them will exit ++- fatally instead of halting until the drive is idle ++-- Update StartTime if job held in Job Queue. ++-- Look at www.nu2.nu/pebuilder as a helper for full windows ++- bare metal restore. (done by Scott) ++-- Fix orphanned buffers: ++- Orphaned buffer: 24 bytes allocated at line 808 of rufus-dir job.c ++- Orphaned buffer: 40 bytes allocated at line 45 of rufus-dir alist.c ++-- Implement Preben's suggestion to add ++- File System Types = ext2, ext3 ++- to FileSets, thus simplifying backup of *all* local partitions. ++-- Try to open a device on each Job if it was not opened ++- when the SD started. ++-- Add dump of VolSessionId/Time and FileIndex with bls. ++-- If Bacula does not find the right tape in the Autochanger, ++- then mark the tape in error and move on rather than asking ++- for operator intervention. ++-- Cancel command should include JobId in list of Jobs. ++-- Add performance testing hooks ++-- Bootstrap from JobMedia records. ++-- Implement WildFile and WildDir to solve problem of ++- saving only *.doc files. ++-- Fix ++- Please use the "label" command to create a new Volume for: ++- Storage: DDS-4-changer ++- Media type: ++- Pool: Default ++- label ++- The defined Storage resources are: ++-- Copy Changer Device and Changer Command from Autochanger ++- to Device resource in SD if none given in Device resource. ++-- 1. Automatic use of more than one drive in an autochanger (done) ++-- 2. Automatic selection of the correct drive for each Job (i.e. ++- selects a drive with an appropriate Volume for the Job) (done) ++-- 6. Allow multiple simultaneous Jobs referencing the same pool write ++- to several tapes (some new directive(s) are are probably needed for ++- this) (done) ++-- Locking (done) ++-- Key on Storage rather than Pool (done) ++-- Allow multiple drives to use same Pool (change jobq.c DIR) (done). ++-- Synchronize multiple drives so that not more ++- than one loads a tape and any time (done) ++-- 4. Use Changer Device and Changer Command specified in the ++- Autochanger resource, if none is found in the Device resource. ++- You can continue to specify them in the Device resource if you want ++- or need them to be different for each device. ++-- 5. Implement a new Device directive (perhaps "Autoselect = yes/no") ++- that can allow a Device be part of an Autochanger, and hence the changer ++- script protected, but if set to no, will prevent the Device from being ++- automatically selected from the changer. This allows the device to ++- be directly accessed through its Device name, but not through the ++- AutoChanger name. ++-#6 Select one from among Multiple Storage Devices for Job ++-#5 Events that call a Python program ++- (Implemented in Dir/SD) ++-- Make sure the Device name is in the Query packet returned. ++-- Don't start a second file job if one is already running. ++-- Implement EOF/EOV labels for ANSI labels ++-- Implement IBM labels. ++-- When Python creates a new label, the tape is immediately ++- recycled and no label created. This happens when using ++- autolabeling -- even when Python doesn't generate the name. ++-- Scratch Pool where the volumes can be re-assigned to any Pool. ++-- 28-Mar 23:19 rufus-sd: acquire.c:379 Device "DDS-4" (/dev/nst0) ++- is busy reading. Job 6 canceled. ++-- Remove separate thread for opening devices in SD. On the other ++- hand, don't block waiting for open() for devices. ++-- Fix code to either handle updating NumVol or to calculate it in ++- Dir next_vol.c ++-- Ensure that you cannot exclude a directory or a file explicitly ++- Included with File. ++-#4 Embedded Python Scripting ++- (Implemented in Dir/SD/FD) ++-- Add Python writable variable for changing the Priority, ++- Client, Storage, JobStatus (error), ... ++-- SD Python ++- - Solicit Events ++-- Add disk seeking on restore; turn off seek on tapes. ++- stored/match_bsr.c ++-- Look at dird_conf.c:1000: warning: `int size' ++- might be used uninitialized in this function ++-- Indicate when a Job is purged/pruned during restore. ++-- Implement some way to turn off automatic pruning in Jobs. ++-- Implement a way an Admin Job can prune, possibly multiple ++- clients -- Python script? ++-- Look at Preben's acl.c error handling code. ++-- SD crashes after a tape restore then doing a backup. ++-- If drive is opened read/write, close it and re-open ++- read-only if doing a restore, and vice-versa. ++-- Windows restore: ++- data-fd: RestoreFiles.2004-12-07_15.56.42 Error: ++- > ..\findlib\../../findlib/create_file.c:275 Could not open e:/: ERR=Der ++- > Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen ++- > Prozess verwendet wird. ++- Restore restores all files, but then fails at the end trying ++- to set the attributes of e: ++- from failed jobs.- Resolve the problem between Device name and Archive name, ++- and fix SD messages. ++-- Tell the "restore" user when browsing is no longer possible. ++-- Add a restore directory-x ++-- Write non-optimized bsrs from the JobMedia and Media records, ++- even after Files are pruned. ++-- Delete Stripe and Copy from VolParams to save space. ++-- Fix option 2 of restore -- list where file is backed up -- require Client, ++- then list last 20 backups. ++-- Finish implementation of passing all Storage and Device needs to ++- the SD. ++-- Move test for max wait time exceeded in job.c up -- Peter's idea. ++-## Consider moving docs to their own project. ++-## Move rescue to its own project. ++-- Add client version to the Client name line that prints in ++- the Job report. ++-- Fix the Rescue CDROM. ++-- By the way: on page http://www.bacula.org/?page=tapedrives , at the ++- bottom, the link to "Tape Testing Chapter" is broken. It goes to ++- /html-manual/... while the others point to /rel-manual/... ++-- Device resource needs the "name" of the SD. ++-- Specify a single directory to restore. ++-- Implement MediaType keyword in bsr? ++-- Add a date and time stamp at the beginning of every line in the ++- Job report (Volker Sauer). ++-- Add level to estimate command. ++-- Add "limit=n" for "list jobs" ++-- Make bootstrap filename unique. ++-- Make Dmsg look at global before calling subroutine. ++-- From Chris Hull: ++- it seems to be complaining about 12:00pm which should be a valid 12 ++- hour time. I changed the time to 11:59am and everything works fine. ++- Also 12:00am works fine. 0:00pm also works (which I don't think ++- should). None of the values 12:00pm - 12:59pm work for that matter. ++-- Require restore via the restore command or make a restore Job ++- get the bootstrap file. ++-- Implement Maximum Job Spool Size ++-- Fix 3993 error in SD. It forgets to look at autochanger ++- resource for device command, ... ++-- 3. Prevent two drives requesting the same Volume in any given ++- autochanger, by checking if a Volume is mounted on another drive ++- in an Autochanger. ++-- Upgrade to MySQL 4.1.12 See: ++- http://dev.mysql.com/doc/mysql/en/Server_SQL_mode.html ++-- Add # Job Level date to bsr file ++-- Implement "PreferMountedVolumes = yes|no" in Job resource. ++-## Integrate web-bacula into a new Bacula project with ++- bimagemgr. ++-- Cleaning tapes should have Status "Cleaning" rather than append. ++-- Make sure that Python has access to Client address/port so that ++- it can check if Clients are alive. ++-- Review all items in "restore". ++-- Fix PostgreSQL GROUP BY problems in restore. ++-- Fix PostgreSQL sql problems in bugs. ++-- After rename ++- 04-Jul 13:01 MainSD: Rufus.2005-07-04_01.05.02 Warning: Director wanted Volume ++- "DLT-13Feb04". ++- Current Volume "DLT-04Jul05" not acceptable because: ++- 1997 Volume "DLT-13Feb04" not in catalog. ++- 04-Jul 13:01 MainSD: Please mount Volume "DLT-04Jul05" on Storage Device ++- "HP DLT 80" (/dev/nst0) for Job Rufus.2005-07-04_01.05.02 ++-## Create a new GUI chapter explaining all the GUI programs. ++-- Make "update slots" when pointing to Autochanger, remove ++- all Volumes from other drives. "update slots all-drives"? ++- No, this is done by modifying mtx-changer to list what is ++- in the drives. ++-- Finish TLS implementation. ++-- Port limiting -m in iptables to prevent DoS attacks ++- could cause broken pipes on Bacula. ++-6. Build and test the Volume Shadow Copy (VSS) for Win32. ++-- Allow cancel of unknown Job ++-- State not saved when closing Win32 FD by icon ++-- bsr-opt-test fails. bsr deleted. Fix. ++-- Move Python daemon variables from Job to Bacula object. ++- WorkingDir, ConfigFile ++-- Document that Bootstrap files can be written with cataloging ++- turned off. ++-- Document details of ANSI/IBM labels ++-- OS linux 2.4 ++- 1) ADIC, DLT, FastStor 4000, 7*20GB ++-- Linux Sony LIB-D81, AIT-3 library works. ++-- Doc the following ++- to activate, check or disable the hardware compression feature on my ++- exb-8900 i use the exabyte "MammothTool" you can get it here: ++- http://www.exabyte.com/support/online/downloads/index.cfm ++- There is a solaris version of this tool. With option -C 0 or 1 you can ++- disable or activate compression. Start this tool without any options for ++- a small reference. ++-- Document Heartbeat Interval in the dealing with firewalls section. ++-- Document new CDROM directory. ++-- On Win32 working directory must have drive letter ???? ++-- On Win32 working directory must be writable by SYSTEM to ++- do restores. ++-- Document that ChangerDevice is used for Alert command. ++-- Add better documentation on how restores can be done ++-8. Take one more try at making DVD writing work (no go) ++-7. Write a bacula-web document ++-- Why isn't the DEVICE structure defined when doing ++- a reservation? ++-- Multi-drive changer seems to only use drive 0 ++- Multiple drives don't seem to be opened. ++-- My database is growing ++-- Call GetLastError() in the berrno constructor rather ++- than delaying until strerror. ++-- Tape xxx in drive 0, requested in drive 1 ++-- The mount command does not work with drives other than 0. ++-- A mount should cause the SD to re-examine what Slot is ++- loaded. ++-- The SD locks on to the first available drive then ++- wants a Volume that is released but in another drive -- ++- chaos. ++-- Run the regression scripts on Solaris and FreeBSD ++-- Figure out how to package gui, and rescue programs. ++-- Add a .dir command to restore tree code to eliminate the problem ++-- Mount after manually unloading changer causes hang in SD ++-- Fix JobACL with restore by JobId. +++=== Done -- see kernsdone ++Index: kes-1.38 ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/kes-1.38,v ++retrieving revision 1.1.2.13 ++retrieving revision 1.1.2.14 ++diff -u -r1.1.2.13 -r1.1.2.14 ++--- kes-1.38 14 Nov 2005 20:20:38 -0000 1.1.2.13 +++++ kes-1.38 22 Nov 2005 10:50:55 -0000 1.1.2.14 ++@@ -3,6 +3,20 @@ ++ ++ General: ++ +++Changes to 1.38.2: +++20Oct05 +++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator +++ says this does not fix *his* bug). +++- Fix cancel failure bug. Bug #481 +++- Fix failure when Pool name has spaces. Bug #487 +++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++- Fix a couple of free()s in src/filed/acl.c +++- Fix memory overrun in bfile.c in building OS X resource +++ fork filename. Bug #489 +++- Add Pool name to SD status output. +++- Add Python install dir for Solaris to configure. Bug #492 +++ ++ Changes to 1.38.1: ++ 14Oct05 ++ - Apply SunOS patch for ACLs submitted by David Duchscher. ++Index: projects ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/projects,v ++retrieving revision 1.12.2.3 ++retrieving revision 1.12.2.4 ++diff -u -r1.12.2.3 -r1.12.2.4 ++--- projects 10 Nov 2005 20:25:27 -0000 1.12.2.3 +++++ projects 22 Nov 2005 10:50:55 -0000 1.12.2.4 ++@@ -228,7 +228,175 @@ ++ ++ Why: Performance enhancement. ++ +++Item 13: Let Bacula log tape usage and handle drive cleaning cycles. +++ Date: November 11, 2005 +++ Origin: Arno Lehmann +++ Status: +++ +++ What: Make Bacula manage tape life cycle information and drive +++ cleaning cycles. +++ +++ Why: Both parts of this project are important when operating backups. +++ We need to know which tapes need replacement, and we need to +++ make sure the drives are cleaned when necessary. While many +++ tape libraries and even autoloaders can handle all this +++ automatically, support by Bacula can be helpful for smaller +++ (older) libraries and single drives. Also, checking drive +++ status during operation can prevent some failures (as I had to +++ learn the hard way...) +++ +++ Notes: First, Bacula could (and even does, to some limited extent) +++ record tape and drive usage. For tapes, the number of mounts, +++ the amount of data, and the time the tape has actually been +++ running could be recorded. Data fields for Read and Write time +++ and Nmber of mounts already exist in the catalog (I'm not sure +++ if VolBytes is the sum of all bytes ever written to that volume +++ by Bacula). This information can be important when determining +++ which media to replace. For the tape drives known to Bacula, +++ similar information is interesting to determine the device +++ status and expected life time: Time it's been Reading and +++ Writing, number of tape Loads / Unloads / Errors. This +++ information is not yet recorded as far as I know. +++ +++ The next step would be implementing drive cleaning setup. +++ Bacula already has knowledge about cleaning tapes. Once it has +++ some information about cleaning cycles (measured in drive run +++ time, number of tapes used, or calender days, for example) it +++ can automatically execute tape cleaning (with an autochanger, +++ obviously) or ask for operator assistence loading a cleaning +++ tape. +++ +++ The next step would be to implement TAPEALERT checks not only +++ when changing tapes and only sending he information to the +++ administrator, but rather checking after each tape error, +++ checking on a regular basis (for example after each tape file), +++ and also before unloading and after loading a new tape. Then, +++ depending on the drives TAPEALERT state and the know drive +++ cleaning state Bacula could automatically schedule later +++ cleaning, clean immediately, or inform the operator. +++ +++ Implementing this would perhaps require another catalog change +++ and perhaps major changes in SD code and the DIR-SD protocoll, +++ so I'd only consider this worth implementing if it would +++ actually be used or even needed by many people. +++ +++Item 14: Merging of multiple backups into a single one. (Also called Synthetic +++ Backup or Consolidation). +++ +++ Origin: Marc Cousin and Eric Bollengier +++ Date: 15 November 2005 +++ Status: Depends on first implementing project Item 1 (Migration). +++ +++ What: A merged backup is a backup made without connecting to the Client. +++ It would be a Merge of existing backups into a single backup. +++ In effect, it is like a restore but to the backup medium. +++ +++ For instance, say that last sunday we made a full backup. Then +++ all week long, we created incremental backups, in order to do +++ them fast. Now comes sunday again, and we need another full. +++ The merged backup makes it possible to do instead an incremental +++ backup (during the night for instance), and then create a merged +++ backup during the day, by using the full and incrementals from +++ the week. The merged backup will be exactly like a full made +++ sunday night on the tape, but the production interruption on the +++ Client will be minimal, as the Client will only have to send +++ incrementals. +++ +++ In fact, if it's done correctly, you could merge all the +++ Incrementals into single Incremental, or all the Incrementals +++ and the last Differential into a new Differential, or the Full, +++ last differential and all the Incrementals into a new Full +++ backup. And there is no need to involve the Client. +++ +++ Why: The benefit is that : +++ - the Client just does an incremental ; +++ - the merged backup on tape is just as a single full backup, +++ and can be restored very fast. +++ +++ This is also a way of reducing the backup data since the old +++ data can then be pruned (or not) from the catalog, possibly +++ allowing older volumes to be recycled +++ +++Item 15: Automatic disabling of devices +++ Date: 2005-11-11 +++ Origin: Peter Eriksson +++ Status: +++ +++ What: After a configurable amount of fatal errors with a tape drive +++ Bacula should automatically disable further use of a certain +++ tape drive. There should also be "disable"/"enable" commands in +++ the "bconsole" tool. +++ +++ Why: On a multi-drive jukebox there is a possibility of tape drives +++ going bad during large backups (needing a cleaning tape run, +++ tapes getting stuck). It would be advantageous if Bacula would +++ automatically disable further use of a problematic tape drive +++ after a configurable amount of errors has occured. +++ +++ An example: I have a multi-drive jukebox (6 drives, 380+ slots) +++ where tapes occasionally get stuck inside the drive. Bacula will +++ notice that the "mtx-changer" command will fail and then fail +++ any backup jobs trying to use that drive. However, it will still +++ keep on trying to run new jobs using that drive and fail - +++ forever, and thus failing lots and lots of jobs... Since we have +++ many drives Bacula could have just automatically disabled +++ further use of that drive and used one of the other ones +++ instead. +++ +++ +++Item 16: Directive/mode to backup only file changes, not entire file +++ Date: 11 November 2005 +++ Origin: Joshua Kugler +++ Marek Bajon +++ Status: RFC +++ +++ What: Currently when a file changes, the entire file will be backed up in +++ the next incremental or full backup. To save space on the tapes +++ it would be nice to have a mode whereby only the changes to the +++ file would be backed up when it is changed. +++ +++ Why: This would save lots of space when backing up large files such as +++ logs, mbox files, Outlook PST files and the like. +++ +++ Notes: This would require the usage of disk-based volumes as comparing +++ files would not be feasible using a tape drive. +++ +++Item 17: Quick release of FD-SD connection +++ Origin: Frank Volf (frank at deze dot org) +++ Date: 17 november 2005 +++ Status: +++ +++ What: In the bacula implementation a backup is finished after all data +++ and attributes are succesfully written to storage. When using a +++ tape backup it is very annoying that a backup can take a day, +++ simply because the current tape (or whatever) is full and the +++ administrator has not put a new one in. During that time the +++ system cannot be taken off-line, because there is still an open +++ session between the storage daemon and the file daemon on the +++ client. +++ +++ Although this is a very good strategey for making "safe backups" +++ This can be annoying for e.g. laptops, that must remain +++ connected until the bacukp is completed. +++ +++ Using a new feature called "migration" it will be possible to +++ spool first to harddisk (using a special 'spool' migration +++ scheme) and then migrate the backup to tape. +++ +++ There is still the problem of getting the attributes committed. +++ If it takes a very long time to do, with the current code, the +++ job has not terminated, and the File daemon is not freed up. The +++ Storage daemon should release the File daemon as soon as all the +++ file data and all the attributes have been sent to it (the SD). +++ Currently the SD waits until everything is on tape and all the +++ attributes are transmitted to the Director before signalling +++ completion to the FD. I don't think I would have any problem +++ changing this. The reason is that even if the FD reports back to +++ the Dir that all is OK, the job will not terminate until the SD +++ has done the same thing -- so in a way keeping the SD-FD link +++ open to the very end is not really very productive ... ++ +++ Why: Makes backup of laptops much easier. ++ ++ ++ ============= Empty RFC form =========== ++@@ -245,33 +413,4 @@ ++ ============== End RFC form ============== ++ ++ ++-Items completed for release 1.38.0: ++-#4 Embedded Python Scripting (implemented in all Daemons) ++-#5 Events that call a Python program (Implemented in all ++- daemons, but more cleanup work to be done). ++-#6 Select one from among Multiple Storage Devices for Job. ++- This is already implemented in 1.37. ++-#7 Single Job Writing to Multiple Storage Devices. This is ++- currently implemented with a Clone feature. ++-#- Full multiple drive Autochanger support (done in 1.37) ++-#- Built in support for communications encryption (TLS) ++- done by Landon Fuller. ++-# Support for Unicode characters ++- (via UTF-8) on Win32 machines thanks to Thorsten Engel. ++-Item 8: Break the one-to-one Relationship between a Job and a ++- Specific Storage Device (or Devices if #10 is implemented). ++- ++-Completed items from last year's list: ++-Item 1: Multiple simultaneous Jobs. (done) ++-Item 3: Write the bscan program -- also write a bcopy program (done). ++-Item 5: Implement Label templates (done). ++-Item 6: Write a regression script (done) ++-Item 9: Add SSL to daemon communications (done by Landon Fuller) ++-Item 10: Define definitive tape format (done) ++-Item 3: GUI for interactive restore. Partially Implemented in 1.34 ++- Note, there is now a complete Webmin plugin, a partial ++- GNOME console, and an excellent wx-console GUI. ++-Item 4: GUI for interactive backup ++-Item 2: Job Data Spooling. ++- Done: Regular expression matching. ++-Item 10: New daemon communication protocol (this has been dropped). +++Items completed for release 1.38.0 -- see kernsdone ++Index: autoconf/configure.in ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/autoconf/configure.in,v ++retrieving revision 1.184.2.4 ++retrieving revision 1.184.2.5 ++diff -u -r1.184.2.4 -r1.184.2.5 ++--- autoconf/configure.in 13 Nov 2005 10:51:17 -0000 1.184.2.4 +++++ autoconf/configure.in 22 Nov 2005 10:50:55 -0000 1.184.2.5 ++@@ -604,7 +604,7 @@ ++ PYTHON_LIBS= ++ if test "$withval" != "no"; then ++ if test "$withval" = "yes"; then ++- for python_root in /usr /usr/local; do +++ for python_root in /usr /usr/local /usr/sfw; do ++ if test -f $python_root/include/python2.2/Python.h; then ++ PYTHON_INCDIR=-I$python_root/include/python2.2 ++ PYTHON_LIBS="-L$python_root/lib/python2.2/config -lpython2.2" ++Index: patches/1.38.1-to-1.38.2.patch ++=================================================================== ++RCS file: patches/1.38.1-to-1.38.2.patch ++diff -N patches/1.38.1-to-1.38.2.patch ++--- /dev/null 1 Jan 1970 00:00:00 -0000 +++++ patches/1.38.1-to-1.38.2.patch 22 Nov 2005 10:50:55 -0000 1.1.2.2 ++@@ -0,0 +1,5704 @@ +++ +++ This patch fixes the following bugs: +++ +++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator +++ says that this patch does not fix his problem) +++- Fix cancel failure bug. Bug #481 +++- Fix failure when Pool name has spaces. Bug #487 +++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++- Fix a couple of free()s in src/filed/acl.c +++- Fix memory overrun in bfile.c in building OS X resource +++ fork filename. Bug #489 +++- Add Pool name to SD status output. +++- Add Python install dir for Solaris to configure. Bug #492 +++ +++This patch is applied to Bacula source version 1.38.1 and will +++produce Bacula source version 1.38.2. Apply it with: +++ +++ cd +++ ./configure (your options) if not already done +++ patch -p0 <1.38.1-to-1.38.2.patch +++ make +++ make install +++ +++? osx_finder.patch +++Index: ChangeLog +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/ChangeLog,v +++retrieving revision 1.154.2.7 +++diff -u -r1.154.2.7 ChangeLog +++--- ChangeLog 15 Nov 2005 09:27:19 -0000 1.154.2.7 ++++++ ChangeLog 22 Nov 2005 10:42:14 -0000 +++@@ -1,4 +1,14 @@ +++ ++++Changes to 1.38.2: ++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++- Fix bnet-server bug found on OpenBSD. Bug #486 ++++- Fix cancel failure bug. Bug #481 ++++- Fix failure when Pool name has spaces. Bug #487 ++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++- Fix a couple of free()s in src/filed/acl.c ++++- Fix memory overrun in bfile.c in building OS X resource ++++ fork filename. Bug #489 ++++- Add Pool name to SD status output. +++ +++ Changes to 1.38.1: +++ - Apply SunOS patch for ACLs submitted by David Duchscher. +++Index: ReleaseNotes +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/ReleaseNotes,v +++retrieving revision 1.147.2.9 +++diff -u -r1.147.2.9 ReleaseNotes +++--- ReleaseNotes 15 Nov 2005 09:27:19 -0000 1.147.2.9 ++++++ ReleaseNotes 22 Nov 2005 10:42:15 -0000 +++@@ -1,10 +1,21 @@ +++ +++- Release Notes for Bacula 1.38.1 ++++ Release Notes for Bacula 1.38.2 +++ +++ Bacula code: Total files = 420 Total lines = 138,440 (*.h *.c *.in) +++ 20,440 additional lines of code since version 1.36.3 +++ +++-Changes since 1.38.0: ++++Changes to 1.38.2: ++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++- Fix bnet-server bug found on OpenBSD. Bug #486 ++++- Fix cancel failure bug. Bug #481 ++++- Fix failure when Pool name has spaces. Bug #487 ++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++- Fix a couple of free()s in src/filed/acl.c ++++- Fix memory overrun in bfile.c in building OS X resource ++++ fork filename. Bug #489 ++++- Add Pool name to SD status output. ++++ ++++Changes to 1.38.1: +++ - Corrected ACL for Solaris (David Duchscher and Attila Fulop). +++ - Add bacula_mail_summary.sh to examples directory. It makes +++ a single email summary of any number of jobs. Submitted +++Index: configure +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/configure,v +++retrieving revision 1.203.2.5 +++diff -u -r1.203.2.5 configure +++--- configure 13 Nov 2005 10:51:17 -0000 1.203.2.5 ++++++ configure 22 Nov 2005 10:42:19 -0000 +++@@ -14948,7 +14948,7 @@ +++ PYTHON_LIBS= +++ if test "$withval" != "no"; then +++ if test "$withval" = "yes"; then +++- for python_root in /usr /usr/local; do ++++ for python_root in /usr /usr/local /usr/sfw; do +++ if test -f $python_root/include/python2.2/Python.h; then +++ PYTHON_INCDIR=-I$python_root/include/python2.2 +++ PYTHON_LIBS="-L$python_root/lib/python2.2/config -lpython2.2" +++Index: kernstodo +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/kernstodo,v +++retrieving revision 1.570.2.6 +++diff -u -r1.570.2.6 kernstodo +++--- kernstodo 4 Nov 2005 09:16:49 -0000 1.570.2.6 ++++++ kernstodo 22 Nov 2005 10:42:20 -0000 +++@@ -1,5 +1,5 @@ +++ Kern's ToDo List +++- 03 November 2005 ++++ 21 November 2005 +++ +++ Major development: +++ Project Developer +++@@ -7,8 +7,6 @@ +++ Version 1.37 Kern (see below) +++ ======================================================== +++ +++-Final items for 1.37 before release: +++- +++ Document: +++ - Does ClientRunAfterJob fail the job on a bad return code? +++ - Document cleaning up the spool files: +++@@ -18,6 +16,8 @@ +++ - Does WildFile match against full name? Doc. +++ +++ For 1.39: ++++- Make sure that all do_prompt() calls in Dir check for ++++ -1 (error) and -2 (cancel) returns. +++ - Look at -D_FORTIFY_SOURCE=2 +++ - Add Win32 FileSet definition somewhere +++ - Look at fixing restore status stats in SD. +++@@ -27,6 +27,12 @@ +++ encountered, read many times (as it currently does), and if the +++ block cannot be read, skip to the next block, and try again. If +++ that fails, skip to the next file and try again, ... ++++- Add level table: ++++ create table LevelType (LevelType binary(1), LevelTypeLong tinyblob); ++++ insert into LevelType (LevelType,LevelTypeLong) values ++++ ("F","Full"), ++++ ("D","Diff"), ++++ ("I","Inc"); +++ - Add ACL to restore only to original location. +++ - Add a recursive mark command (rmark) to restore. +++ - "Minimum Job Interval = nnn" sets minimum interval between Jobs +++@@ -1246,219 +1252,4 @@ +++ ==== +++ +++ +++-=== Done +++-- Save mount point for directories not traversed with onefs=yes. +++-- Add seconds to start and end times in the Job report output. +++-- if 2 concurrent backups are attempted on the same tape +++- drive (autoloader) into different tape pools, one of them will exit +++- fatally instead of halting until the drive is idle +++-- Update StartTime if job held in Job Queue. +++-- Look at www.nu2.nu/pebuilder as a helper for full windows +++- bare metal restore. (done by Scott) +++-- Fix orphanned buffers: +++- Orphaned buffer: 24 bytes allocated at line 808 of rufus-dir job.c +++- Orphaned buffer: 40 bytes allocated at line 45 of rufus-dir alist.c +++-- Implement Preben's suggestion to add +++- File System Types = ext2, ext3 +++- to FileSets, thus simplifying backup of *all* local partitions. +++-- Try to open a device on each Job if it was not opened +++- when the SD started. +++-- Add dump of VolSessionId/Time and FileIndex with bls. +++-- If Bacula does not find the right tape in the Autochanger, +++- then mark the tape in error and move on rather than asking +++- for operator intervention. +++-- Cancel command should include JobId in list of Jobs. +++-- Add performance testing hooks +++-- Bootstrap from JobMedia records. +++-- Implement WildFile and WildDir to solve problem of +++- saving only *.doc files. +++-- Fix +++- Please use the "label" command to create a new Volume for: +++- Storage: DDS-4-changer +++- Media type: +++- Pool: Default +++- label +++- The defined Storage resources are: +++-- Copy Changer Device and Changer Command from Autochanger +++- to Device resource in SD if none given in Device resource. +++-- 1. Automatic use of more than one drive in an autochanger (done) +++-- 2. Automatic selection of the correct drive for each Job (i.e. +++- selects a drive with an appropriate Volume for the Job) (done) +++-- 6. Allow multiple simultaneous Jobs referencing the same pool write +++- to several tapes (some new directive(s) are are probably needed for +++- this) (done) +++-- Locking (done) +++-- Key on Storage rather than Pool (done) +++-- Allow multiple drives to use same Pool (change jobq.c DIR) (done). +++-- Synchronize multiple drives so that not more +++- than one loads a tape and any time (done) +++-- 4. Use Changer Device and Changer Command specified in the +++- Autochanger resource, if none is found in the Device resource. +++- You can continue to specify them in the Device resource if you want +++- or need them to be different for each device. +++-- 5. Implement a new Device directive (perhaps "Autoselect = yes/no") +++- that can allow a Device be part of an Autochanger, and hence the changer +++- script protected, but if set to no, will prevent the Device from being +++- automatically selected from the changer. This allows the device to +++- be directly accessed through its Device name, but not through the +++- AutoChanger name. +++-#6 Select one from among Multiple Storage Devices for Job +++-#5 Events that call a Python program +++- (Implemented in Dir/SD) +++-- Make sure the Device name is in the Query packet returned. +++-- Don't start a second file job if one is already running. +++-- Implement EOF/EOV labels for ANSI labels +++-- Implement IBM labels. +++-- When Python creates a new label, the tape is immediately +++- recycled and no label created. This happens when using +++- autolabeling -- even when Python doesn't generate the name. +++-- Scratch Pool where the volumes can be re-assigned to any Pool. +++-- 28-Mar 23:19 rufus-sd: acquire.c:379 Device "DDS-4" (/dev/nst0) +++- is busy reading. Job 6 canceled. +++-- Remove separate thread for opening devices in SD. On the other +++- hand, don't block waiting for open() for devices. +++-- Fix code to either handle updating NumVol or to calculate it in +++- Dir next_vol.c +++-- Ensure that you cannot exclude a directory or a file explicitly +++- Included with File. +++-#4 Embedded Python Scripting +++- (Implemented in Dir/SD/FD) +++-- Add Python writable variable for changing the Priority, +++- Client, Storage, JobStatus (error), ... +++-- SD Python +++- - Solicit Events +++-- Add disk seeking on restore; turn off seek on tapes. +++- stored/match_bsr.c +++-- Look at dird_conf.c:1000: warning: `int size' +++- might be used uninitialized in this function +++-- Indicate when a Job is purged/pruned during restore. +++-- Implement some way to turn off automatic pruning in Jobs. +++-- Implement a way an Admin Job can prune, possibly multiple +++- clients -- Python script? +++-- Look at Preben's acl.c error handling code. +++-- SD crashes after a tape restore then doing a backup. +++-- If drive is opened read/write, close it and re-open +++- read-only if doing a restore, and vice-versa. +++-- Windows restore: +++- data-fd: RestoreFiles.2004-12-07_15.56.42 Error: +++- > ..\findlib\../../findlib/create_file.c:275 Could not open e:/: ERR=Der +++- > Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen +++- > Prozess verwendet wird. +++- Restore restores all files, but then fails at the end trying +++- to set the attributes of e: +++- from failed jobs.- Resolve the problem between Device name and Archive name, +++- and fix SD messages. +++-- Tell the "restore" user when browsing is no longer possible. +++-- Add a restore directory-x +++-- Write non-optimized bsrs from the JobMedia and Media records, +++- even after Files are pruned. +++-- Delete Stripe and Copy from VolParams to save space. +++-- Fix option 2 of restore -- list where file is backed up -- require Client, +++- then list last 20 backups. +++-- Finish implementation of passing all Storage and Device needs to +++- the SD. +++-- Move test for max wait time exceeded in job.c up -- Peter's idea. +++-## Consider moving docs to their own project. +++-## Move rescue to its own project. +++-- Add client version to the Client name line that prints in +++- the Job report. +++-- Fix the Rescue CDROM. +++-- By the way: on page http://www.bacula.org/?page=tapedrives , at the +++- bottom, the link to "Tape Testing Chapter" is broken. It goes to +++- /html-manual/... while the others point to /rel-manual/... +++-- Device resource needs the "name" of the SD. +++-- Specify a single directory to restore. +++-- Implement MediaType keyword in bsr? +++-- Add a date and time stamp at the beginning of every line in the +++- Job report (Volker Sauer). +++-- Add level to estimate command. +++-- Add "limit=n" for "list jobs" +++-- Make bootstrap filename unique. +++-- Make Dmsg look at global before calling subroutine. +++-- From Chris Hull: +++- it seems to be complaining about 12:00pm which should be a valid 12 +++- hour time. I changed the time to 11:59am and everything works fine. +++- Also 12:00am works fine. 0:00pm also works (which I don't think +++- should). None of the values 12:00pm - 12:59pm work for that matter. +++-- Require restore via the restore command or make a restore Job +++- get the bootstrap file. +++-- Implement Maximum Job Spool Size +++-- Fix 3993 error in SD. It forgets to look at autochanger +++- resource for device command, ... +++-- 3. Prevent two drives requesting the same Volume in any given +++- autochanger, by checking if a Volume is mounted on another drive +++- in an Autochanger. +++-- Upgrade to MySQL 4.1.12 See: +++- http://dev.mysql.com/doc/mysql/en/Server_SQL_mode.html +++-- Add # Job Level date to bsr file +++-- Implement "PreferMountedVolumes = yes|no" in Job resource. +++-## Integrate web-bacula into a new Bacula project with +++- bimagemgr. +++-- Cleaning tapes should have Status "Cleaning" rather than append. +++-- Make sure that Python has access to Client address/port so that +++- it can check if Clients are alive. +++-- Review all items in "restore". +++-- Fix PostgreSQL GROUP BY problems in restore. +++-- Fix PostgreSQL sql problems in bugs. +++-- After rename +++- 04-Jul 13:01 MainSD: Rufus.2005-07-04_01.05.02 Warning: Director wanted Volume +++- "DLT-13Feb04". +++- Current Volume "DLT-04Jul05" not acceptable because: +++- 1997 Volume "DLT-13Feb04" not in catalog. +++- 04-Jul 13:01 MainSD: Please mount Volume "DLT-04Jul05" on Storage Device +++- "HP DLT 80" (/dev/nst0) for Job Rufus.2005-07-04_01.05.02 +++-## Create a new GUI chapter explaining all the GUI programs. +++-- Make "update slots" when pointing to Autochanger, remove +++- all Volumes from other drives. "update slots all-drives"? +++- No, this is done by modifying mtx-changer to list what is +++- in the drives. +++-- Finish TLS implementation. +++-- Port limiting -m in iptables to prevent DoS attacks +++- could cause broken pipes on Bacula. +++-6. Build and test the Volume Shadow Copy (VSS) for Win32. +++-- Allow cancel of unknown Job +++-- State not saved when closing Win32 FD by icon +++-- bsr-opt-test fails. bsr deleted. Fix. +++-- Move Python daemon variables from Job to Bacula object. +++- WorkingDir, ConfigFile +++-- Document that Bootstrap files can be written with cataloging +++- turned off. +++-- Document details of ANSI/IBM labels +++-- OS linux 2.4 +++- 1) ADIC, DLT, FastStor 4000, 7*20GB +++-- Linux Sony LIB-D81, AIT-3 library works. +++-- Doc the following +++- to activate, check or disable the hardware compression feature on my +++- exb-8900 i use the exabyte "MammothTool" you can get it here: +++- http://www.exabyte.com/support/online/downloads/index.cfm +++- There is a solaris version of this tool. With option -C 0 or 1 you can +++- disable or activate compression. Start this tool without any options for +++- a small reference. +++-- Document Heartbeat Interval in the dealing with firewalls section. +++-- Document new CDROM directory. +++-- On Win32 working directory must have drive letter ???? +++-- On Win32 working directory must be writable by SYSTEM to +++- do restores. +++-- Document that ChangerDevice is used for Alert command. +++-- Add better documentation on how restores can be done +++-8. Take one more try at making DVD writing work (no go) +++-7. Write a bacula-web document +++-- Why isn't the DEVICE structure defined when doing +++- a reservation? +++-- Multi-drive changer seems to only use drive 0 +++- Multiple drives don't seem to be opened. +++-- My database is growing +++-- Call GetLastError() in the berrno constructor rather +++- than delaying until strerror. +++-- Tape xxx in drive 0, requested in drive 1 +++-- The mount command does not work with drives other than 0. +++-- A mount should cause the SD to re-examine what Slot is +++- loaded. +++-- The SD locks on to the first available drive then +++- wants a Volume that is released but in another drive -- +++- chaos. +++-- Run the regression scripts on Solaris and FreeBSD +++-- Figure out how to package gui, and rescue programs. +++-- Add a .dir command to restore tree code to eliminate the problem +++-- Mount after manually unloading changer causes hang in SD +++-- Fix JobACL with restore by JobId. ++++=== Done -- see kernsdone +++Index: kes-1.38 +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/kes-1.38,v +++retrieving revision 1.1.2.13 +++diff -u -r1.1.2.13 kes-1.38 +++--- kes-1.38 14 Nov 2005 20:20:38 -0000 1.1.2.13 ++++++ kes-1.38 22 Nov 2005 10:42:20 -0000 +++@@ -3,6 +3,19 @@ +++ +++ General: +++ ++++Changes to 1.38.2: ++++20Oct05 ++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++++ says this does not fix *his* bug). ++++- Fix cancel failure bug. Bug #481 ++++- Fix failure when Pool name has spaces. Bug #487 ++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++- Fix a couple of free()s in src/filed/acl.c ++++- Fix memory overrun in bfile.c in building OS X resource ++++ fork filename. Bug #489 ++++- Add Pool name to SD status output. ++++ +++ Changes to 1.38.1: +++ 14Oct05 +++ - Apply SunOS patch for ACLs submitted by David Duchscher. +++Index: projects +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/projects,v +++retrieving revision 1.12.2.3 +++diff -u -r1.12.2.3 projects +++--- projects 10 Nov 2005 20:25:27 -0000 1.12.2.3 ++++++ projects 22 Nov 2005 10:42:20 -0000 +++@@ -228,7 +228,175 @@ +++ +++ Why: Performance enhancement. +++ ++++Item 13: Let Bacula log tape usage and handle drive cleaning cycles. ++++ Date: November 11, 2005 ++++ Origin: Arno Lehmann ++++ Status: ++++ ++++ What: Make Bacula manage tape life cycle information and drive ++++ cleaning cycles. ++++ ++++ Why: Both parts of this project are important when operating backups. ++++ We need to know which tapes need replacement, and we need to ++++ make sure the drives are cleaned when necessary. While many ++++ tape libraries and even autoloaders can handle all this ++++ automatically, support by Bacula can be helpful for smaller ++++ (older) libraries and single drives. Also, checking drive ++++ status during operation can prevent some failures (as I had to ++++ learn the hard way...) ++++ ++++ Notes: First, Bacula could (and even does, to some limited extent) ++++ record tape and drive usage. For tapes, the number of mounts, ++++ the amount of data, and the time the tape has actually been ++++ running could be recorded. Data fields for Read and Write time ++++ and Nmber of mounts already exist in the catalog (I'm not sure ++++ if VolBytes is the sum of all bytes ever written to that volume ++++ by Bacula). This information can be important when determining ++++ which media to replace. For the tape drives known to Bacula, ++++ similar information is interesting to determine the device ++++ status and expected life time: Time it's been Reading and ++++ Writing, number of tape Loads / Unloads / Errors. This ++++ information is not yet recorded as far as I know. ++++ ++++ The next step would be implementing drive cleaning setup. ++++ Bacula already has knowledge about cleaning tapes. Once it has ++++ some information about cleaning cycles (measured in drive run ++++ time, number of tapes used, or calender days, for example) it ++++ can automatically execute tape cleaning (with an autochanger, ++++ obviously) or ask for operator assistence loading a cleaning ++++ tape. ++++ ++++ The next step would be to implement TAPEALERT checks not only ++++ when changing tapes and only sending he information to the ++++ administrator, but rather checking after each tape error, ++++ checking on a regular basis (for example after each tape file), ++++ and also before unloading and after loading a new tape. Then, ++++ depending on the drives TAPEALERT state and the know drive ++++ cleaning state Bacula could automatically schedule later ++++ cleaning, clean immediately, or inform the operator. ++++ ++++ Implementing this would perhaps require another catalog change ++++ and perhaps major changes in SD code and the DIR-SD protocoll, ++++ so I'd only consider this worth implementing if it would ++++ actually be used or even needed by many people. ++++ ++++Item 14: Merging of multiple backups into a single one. (Also called Synthetic ++++ Backup or Consolidation). ++++ ++++ Origin: Marc Cousin and Eric Bollengier ++++ Date: 15 November 2005 ++++ Status: Depends on first implementing project Item 1 (Migration). ++++ ++++ What: A merged backup is a backup made without connecting to the Client. ++++ It would be a Merge of existing backups into a single backup. ++++ In effect, it is like a restore but to the backup medium. ++++ ++++ For instance, say that last sunday we made a full backup. Then ++++ all week long, we created incremental backups, in order to do ++++ them fast. Now comes sunday again, and we need another full. ++++ The merged backup makes it possible to do instead an incremental ++++ backup (during the night for instance), and then create a merged ++++ backup during the day, by using the full and incrementals from ++++ the week. The merged backup will be exactly like a full made ++++ sunday night on the tape, but the production interruption on the ++++ Client will be minimal, as the Client will only have to send ++++ incrementals. ++++ ++++ In fact, if it's done correctly, you could merge all the ++++ Incrementals into single Incremental, or all the Incrementals ++++ and the last Differential into a new Differential, or the Full, ++++ last differential and all the Incrementals into a new Full ++++ backup. And there is no need to involve the Client. ++++ ++++ Why: The benefit is that : ++++ - the Client just does an incremental ; ++++ - the merged backup on tape is just as a single full backup, ++++ and can be restored very fast. ++++ ++++ This is also a way of reducing the backup data since the old ++++ data can then be pruned (or not) from the catalog, possibly ++++ allowing older volumes to be recycled ++++ ++++Item 15: Automatic disabling of devices ++++ Date: 2005-11-11 ++++ Origin: Peter Eriksson ++++ Status: ++++ ++++ What: After a configurable amount of fatal errors with a tape drive ++++ Bacula should automatically disable further use of a certain ++++ tape drive. There should also be "disable"/"enable" commands in ++++ the "bconsole" tool. ++++ ++++ Why: On a multi-drive jukebox there is a possibility of tape drives ++++ going bad during large backups (needing a cleaning tape run, ++++ tapes getting stuck). It would be advantageous if Bacula would ++++ automatically disable further use of a problematic tape drive ++++ after a configurable amount of errors has occured. ++++ ++++ An example: I have a multi-drive jukebox (6 drives, 380+ slots) ++++ where tapes occasionally get stuck inside the drive. Bacula will ++++ notice that the "mtx-changer" command will fail and then fail ++++ any backup jobs trying to use that drive. However, it will still ++++ keep on trying to run new jobs using that drive and fail - ++++ forever, and thus failing lots and lots of jobs... Since we have ++++ many drives Bacula could have just automatically disabled ++++ further use of that drive and used one of the other ones ++++ instead. ++++ ++++ ++++Item 16: Directive/mode to backup only file changes, not entire file ++++ Date: 11 November 2005 ++++ Origin: Joshua Kugler ++++ Marek Bajon ++++ Status: RFC ++++ ++++ What: Currently when a file changes, the entire file will be backed up in ++++ the next incremental or full backup. To save space on the tapes ++++ it would be nice to have a mode whereby only the changes to the ++++ file would be backed up when it is changed. ++++ ++++ Why: This would save lots of space when backing up large files such as ++++ logs, mbox files, Outlook PST files and the like. ++++ ++++ Notes: This would require the usage of disk-based volumes as comparing ++++ files would not be feasible using a tape drive. ++++ ++++Item 17: Quick release of FD-SD connection ++++ Origin: Frank Volf (frank at deze dot org) ++++ Date: 17 november 2005 ++++ Status: ++++ ++++ What: In the bacula implementation a backup is finished after all data ++++ and attributes are succesfully written to storage. When using a ++++ tape backup it is very annoying that a backup can take a day, ++++ simply because the current tape (or whatever) is full and the ++++ administrator has not put a new one in. During that time the ++++ system cannot be taken off-line, because there is still an open ++++ session between the storage daemon and the file daemon on the ++++ client. ++++ ++++ Although this is a very good strategey for making "safe backups" ++++ This can be annoying for e.g. laptops, that must remain ++++ connected until the bacukp is completed. ++++ ++++ Using a new feature called "migration" it will be possible to ++++ spool first to harddisk (using a special 'spool' migration ++++ scheme) and then migrate the backup to tape. ++++ ++++ There is still the problem of getting the attributes committed. ++++ If it takes a very long time to do, with the current code, the ++++ job has not terminated, and the File daemon is not freed up. The ++++ Storage daemon should release the File daemon as soon as all the ++++ file data and all the attributes have been sent to it (the SD). ++++ Currently the SD waits until everything is on tape and all the ++++ attributes are transmitted to the Director before signalling ++++ completion to the FD. I don't think I would have any problem ++++ changing this. The reason is that even if the FD reports back to ++++ the Dir that all is OK, the job will not terminate until the SD ++++ has done the same thing -- so in a way keeping the SD-FD link ++++ open to the very end is not really very productive ... +++ ++++ Why: Makes backup of laptops much easier. +++ +++ +++ ============= Empty RFC form =========== +++@@ -245,33 +413,4 @@ +++ ============== End RFC form ============== +++ +++ +++-Items completed for release 1.38.0: +++-#4 Embedded Python Scripting (implemented in all Daemons) +++-#5 Events that call a Python program (Implemented in all +++- daemons, but more cleanup work to be done). +++-#6 Select one from among Multiple Storage Devices for Job. +++- This is already implemented in 1.37. +++-#7 Single Job Writing to Multiple Storage Devices. This is +++- currently implemented with a Clone feature. +++-#- Full multiple drive Autochanger support (done in 1.37) +++-#- Built in support for communications encryption (TLS) +++- done by Landon Fuller. +++-# Support for Unicode characters +++- (via UTF-8) on Win32 machines thanks to Thorsten Engel. +++-Item 8: Break the one-to-one Relationship between a Job and a +++- Specific Storage Device (or Devices if #10 is implemented). +++- +++-Completed items from last year's list: +++-Item 1: Multiple simultaneous Jobs. (done) +++-Item 3: Write the bscan program -- also write a bcopy program (done). +++-Item 5: Implement Label templates (done). +++-Item 6: Write a regression script (done) +++-Item 9: Add SSL to daemon communications (done by Landon Fuller) +++-Item 10: Define definitive tape format (done) +++-Item 3: GUI for interactive restore. Partially Implemented in 1.34 +++- Note, there is now a complete Webmin plugin, a partial +++- GNOME console, and an excellent wx-console GUI. +++-Item 4: GUI for interactive backup +++-Item 2: Job Data Spooling. +++- Done: Regular expression matching. +++-Item 10: New daemon communication protocol (this has been dropped). ++++Items completed for release 1.38.0 -- see kernsdone +++Index: autoconf/configure.in +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/autoconf/configure.in,v +++retrieving revision 1.184.2.4 +++diff -u -r1.184.2.4 configure.in +++--- autoconf/configure.in 13 Nov 2005 10:51:17 -0000 1.184.2.4 ++++++ autoconf/configure.in 22 Nov 2005 10:42:21 -0000 +++@@ -604,7 +604,7 @@ +++ PYTHON_LIBS= +++ if test "$withval" != "no"; then +++ if test "$withval" = "yes"; then +++- for python_root in /usr /usr/local; do ++++ for python_root in /usr /usr/local /usr/sfw; do +++ if test -f $python_root/include/python2.2/Python.h; then +++ PYTHON_INCDIR=-I$python_root/include/python2.2 +++ PYTHON_LIBS="-L$python_root/lib/python2.2/config -lpython2.2" +++Index: patches/1.38.1-to-1.38.2.patch +++=================================================================== +++RCS file: patches/1.38.1-to-1.38.2.patch +++diff -N patches/1.38.1-to-1.38.2.patch +++--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++++ patches/1.38.1-to-1.38.2.patch 22 Nov 2005 10:42:22 -0000 +++@@ -0,0 +1,4586 @@ ++++ ++++ This patch fixes the following bugs: ++++ ++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++++ says that this patch does not fix his problem) ++++- Fix cancel failure bug. Bug #481 ++++- Fix failure when Pool name has spaces. Bug #487 ++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++- Fix a couple of free()s in src/filed/acl.c ++++- Fix memory overrun in bfile.c in building OS X resource ++++ fork filename. Bug #489 ++++ ++++This patch is applied to Bacula source version 1.38.1 and will ++++produce Bacula source version 1.38.2. Apply it with: ++++ ++++ cd ++++ ./configure (your options) if not already done ++++ patch -p0 <1.38.1-to-1.38.2.patch ++++ make ++++ make install ++++ ++++? osx_finder.patch ++++Index: ChangeLog ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/ChangeLog,v ++++retrieving revision 1.154.2.7 ++++diff -u -r1.154.2.7 ChangeLog ++++--- ChangeLog 15 Nov 2005 09:27:19 -0000 1.154.2.7 +++++++ ChangeLog 21 Nov 2005 18:19:03 -0000 ++++@@ -1,4 +1,14 @@ ++++ +++++Changes to 1.38.2: +++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++- Fix bnet-server bug found on OpenBSD. Bug #486 +++++- Fix cancel failure bug. Bug #481 +++++- Fix failure when Pool name has spaces. Bug #487 +++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++- Fix a couple of free()s in src/filed/acl.c +++++- Fix memory overrun in bfile.c in building OS X resource +++++ fork filename. Bug #489 +++++- Add Pool name to SD status output. ++++ ++++ Changes to 1.38.1: ++++ - Apply SunOS patch for ACLs submitted by David Duchscher. ++++Index: ReleaseNotes ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/ReleaseNotes,v ++++retrieving revision 1.147.2.9 ++++diff -u -r1.147.2.9 ReleaseNotes ++++--- ReleaseNotes 15 Nov 2005 09:27:19 -0000 1.147.2.9 +++++++ ReleaseNotes 21 Nov 2005 18:19:04 -0000 ++++@@ -1,10 +1,21 @@ ++++ ++++- Release Notes for Bacula 1.38.1 +++++ Release Notes for Bacula 1.38.2 ++++ ++++ Bacula code: Total files = 420 Total lines = 138,440 (*.h *.c *.in) ++++ 20,440 additional lines of code since version 1.36.3 ++++ ++++-Changes since 1.38.0: +++++Changes to 1.38.2: +++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++- Fix bnet-server bug found on OpenBSD. Bug #486 +++++- Fix cancel failure bug. Bug #481 +++++- Fix failure when Pool name has spaces. Bug #487 +++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++- Fix a couple of free()s in src/filed/acl.c +++++- Fix memory overrun in bfile.c in building OS X resource +++++ fork filename. Bug #489 +++++- Add Pool name to SD status output. +++++ +++++Changes to 1.38.1: ++++ - Corrected ACL for Solaris (David Duchscher and Attila Fulop). ++++ - Add bacula_mail_summary.sh to examples directory. It makes ++++ a single email summary of any number of jobs. Submitted ++++Index: kernstodo ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/kernstodo,v ++++retrieving revision 1.570.2.6 ++++diff -u -r1.570.2.6 kernstodo ++++--- kernstodo 4 Nov 2005 09:16:49 -0000 1.570.2.6 +++++++ kernstodo 21 Nov 2005 18:19:04 -0000 ++++@@ -1,5 +1,5 @@ ++++ Kern's ToDo List ++++- 03 November 2005 +++++ 21 November 2005 ++++ ++++ Major development: ++++ Project Developer ++++@@ -7,8 +7,6 @@ ++++ Version 1.37 Kern (see below) ++++ ======================================================== ++++ ++++-Final items for 1.37 before release: ++++- ++++ Document: ++++ - Does ClientRunAfterJob fail the job on a bad return code? ++++ - Document cleaning up the spool files: ++++@@ -18,6 +16,8 @@ ++++ - Does WildFile match against full name? Doc. ++++ ++++ For 1.39: +++++- Make sure that all do_prompt() calls in Dir check for +++++ -1 (error) and -2 (cancel) returns. ++++ - Look at -D_FORTIFY_SOURCE=2 ++++ - Add Win32 FileSet definition somewhere ++++ - Look at fixing restore status stats in SD. ++++@@ -27,6 +27,12 @@ ++++ encountered, read many times (as it currently does), and if the ++++ block cannot be read, skip to the next block, and try again. If ++++ that fails, skip to the next file and try again, ... +++++- Add level table: +++++ create table LevelType (LevelType binary(1), LevelTypeLong tinyblob); +++++ insert into LevelType (LevelType,LevelTypeLong) values +++++ ("F","Full"), +++++ ("D","Diff"), +++++ ("I","Inc"); ++++ - Add ACL to restore only to original location. ++++ - Add a recursive mark command (rmark) to restore. ++++ - "Minimum Job Interval = nnn" sets minimum interval between Jobs ++++@@ -1246,219 +1252,4 @@ ++++ ==== ++++ ++++ ++++-=== Done ++++-- Save mount point for directories not traversed with onefs=yes. ++++-- Add seconds to start and end times in the Job report output. ++++-- if 2 concurrent backups are attempted on the same tape ++++- drive (autoloader) into different tape pools, one of them will exit ++++- fatally instead of halting until the drive is idle ++++-- Update StartTime if job held in Job Queue. ++++-- Look at www.nu2.nu/pebuilder as a helper for full windows ++++- bare metal restore. (done by Scott) ++++-- Fix orphanned buffers: ++++- Orphaned buffer: 24 bytes allocated at line 808 of rufus-dir job.c ++++- Orphaned buffer: 40 bytes allocated at line 45 of rufus-dir alist.c ++++-- Implement Preben's suggestion to add ++++- File System Types = ext2, ext3 ++++- to FileSets, thus simplifying backup of *all* local partitions. ++++-- Try to open a device on each Job if it was not opened ++++- when the SD started. ++++-- Add dump of VolSessionId/Time and FileIndex with bls. ++++-- If Bacula does not find the right tape in the Autochanger, ++++- then mark the tape in error and move on rather than asking ++++- for operator intervention. ++++-- Cancel command should include JobId in list of Jobs. ++++-- Add performance testing hooks ++++-- Bootstrap from JobMedia records. ++++-- Implement WildFile and WildDir to solve problem of ++++- saving only *.doc files. ++++-- Fix ++++- Please use the "label" command to create a new Volume for: ++++- Storage: DDS-4-changer ++++- Media type: ++++- Pool: Default ++++- label ++++- The defined Storage resources are: ++++-- Copy Changer Device and Changer Command from Autochanger ++++- to Device resource in SD if none given in Device resource. ++++-- 1. Automatic use of more than one drive in an autochanger (done) ++++-- 2. Automatic selection of the correct drive for each Job (i.e. ++++- selects a drive with an appropriate Volume for the Job) (done) ++++-- 6. Allow multiple simultaneous Jobs referencing the same pool write ++++- to several tapes (some new directive(s) are are probably needed for ++++- this) (done) ++++-- Locking (done) ++++-- Key on Storage rather than Pool (done) ++++-- Allow multiple drives to use same Pool (change jobq.c DIR) (done). ++++-- Synchronize multiple drives so that not more ++++- than one loads a tape and any time (done) ++++-- 4. Use Changer Device and Changer Command specified in the ++++- Autochanger resource, if none is found in the Device resource. ++++- You can continue to specify them in the Device resource if you want ++++- or need them to be different for each device. ++++-- 5. Implement a new Device directive (perhaps "Autoselect = yes/no") ++++- that can allow a Device be part of an Autochanger, and hence the changer ++++- script protected, but if set to no, will prevent the Device from being ++++- automatically selected from the changer. This allows the device to ++++- be directly accessed through its Device name, but not through the ++++- AutoChanger name. ++++-#6 Select one from among Multiple Storage Devices for Job ++++-#5 Events that call a Python program ++++- (Implemented in Dir/SD) ++++-- Make sure the Device name is in the Query packet returned. ++++-- Don't start a second file job if one is already running. ++++-- Implement EOF/EOV labels for ANSI labels ++++-- Implement IBM labels. ++++-- When Python creates a new label, the tape is immediately ++++- recycled and no label created. This happens when using ++++- autolabeling -- even when Python doesn't generate the name. ++++-- Scratch Pool where the volumes can be re-assigned to any Pool. ++++-- 28-Mar 23:19 rufus-sd: acquire.c:379 Device "DDS-4" (/dev/nst0) ++++- is busy reading. Job 6 canceled. ++++-- Remove separate thread for opening devices in SD. On the other ++++- hand, don't block waiting for open() for devices. ++++-- Fix code to either handle updating NumVol or to calculate it in ++++- Dir next_vol.c ++++-- Ensure that you cannot exclude a directory or a file explicitly ++++- Included with File. ++++-#4 Embedded Python Scripting ++++- (Implemented in Dir/SD/FD) ++++-- Add Python writable variable for changing the Priority, ++++- Client, Storage, JobStatus (error), ... ++++-- SD Python ++++- - Solicit Events ++++-- Add disk seeking on restore; turn off seek on tapes. ++++- stored/match_bsr.c ++++-- Look at dird_conf.c:1000: warning: `int size' ++++- might be used uninitialized in this function ++++-- Indicate when a Job is purged/pruned during restore. ++++-- Implement some way to turn off automatic pruning in Jobs. ++++-- Implement a way an Admin Job can prune, possibly multiple ++++- clients -- Python script? ++++-- Look at Preben's acl.c error handling code. ++++-- SD crashes after a tape restore then doing a backup. ++++-- If drive is opened read/write, close it and re-open ++++- read-only if doing a restore, and vice-versa. ++++-- Windows restore: ++++- data-fd: RestoreFiles.2004-12-07_15.56.42 Error: ++++- > ..\findlib\../../findlib/create_file.c:275 Could not open e:/: ERR=Der ++++- > Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen ++++- > Prozess verwendet wird. ++++- Restore restores all files, but then fails at the end trying ++++- to set the attributes of e: ++++- from failed jobs.- Resolve the problem between Device name and Archive name, ++++- and fix SD messages. ++++-- Tell the "restore" user when browsing is no longer possible. ++++-- Add a restore directory-x ++++-- Write non-optimized bsrs from the JobMedia and Media records, ++++- even after Files are pruned. ++++-- Delete Stripe and Copy from VolParams to save space. ++++-- Fix option 2 of restore -- list where file is backed up -- require Client, ++++- then list last 20 backups. ++++-- Finish implementation of passing all Storage and Device needs to ++++- the SD. ++++-- Move test for max wait time exceeded in job.c up -- Peter's idea. ++++-## Consider moving docs to their own project. ++++-## Move rescue to its own project. ++++-- Add client version to the Client name line that prints in ++++- the Job report. ++++-- Fix the Rescue CDROM. ++++-- By the way: on page http://www.bacula.org/?page=tapedrives , at the ++++- bottom, the link to "Tape Testing Chapter" is broken. It goes to ++++- /html-manual/... while the others point to /rel-manual/... ++++-- Device resource needs the "name" of the SD. ++++-- Specify a single directory to restore. ++++-- Implement MediaType keyword in bsr? ++++-- Add a date and time stamp at the beginning of every line in the ++++- Job report (Volker Sauer). ++++-- Add level to estimate command. ++++-- Add "limit=n" for "list jobs" ++++-- Make bootstrap filename unique. ++++-- Make Dmsg look at global before calling subroutine. ++++-- From Chris Hull: ++++- it seems to be complaining about 12:00pm which should be a valid 12 ++++- hour time. I changed the time to 11:59am and everything works fine. ++++- Also 12:00am works fine. 0:00pm also works (which I don't think ++++- should). None of the values 12:00pm - 12:59pm work for that matter. ++++-- Require restore via the restore command or make a restore Job ++++- get the bootstrap file. ++++-- Implement Maximum Job Spool Size ++++-- Fix 3993 error in SD. It forgets to look at autochanger ++++- resource for device command, ... ++++-- 3. Prevent two drives requesting the same Volume in any given ++++- autochanger, by checking if a Volume is mounted on another drive ++++- in an Autochanger. ++++-- Upgrade to MySQL 4.1.12 See: ++++- http://dev.mysql.com/doc/mysql/en/Server_SQL_mode.html ++++-- Add # Job Level date to bsr file ++++-- Implement "PreferMountedVolumes = yes|no" in Job resource. ++++-## Integrate web-bacula into a new Bacula project with ++++- bimagemgr. ++++-- Cleaning tapes should have Status "Cleaning" rather than append. ++++-- Make sure that Python has access to Client address/port so that ++++- it can check if Clients are alive. ++++-- Review all items in "restore". ++++-- Fix PostgreSQL GROUP BY problems in restore. ++++-- Fix PostgreSQL sql problems in bugs. ++++-- After rename ++++- 04-Jul 13:01 MainSD: Rufus.2005-07-04_01.05.02 Warning: Director wanted Volume ++++- "DLT-13Feb04". ++++- Current Volume "DLT-04Jul05" not acceptable because: ++++- 1997 Volume "DLT-13Feb04" not in catalog. ++++- 04-Jul 13:01 MainSD: Please mount Volume "DLT-04Jul05" on Storage Device ++++- "HP DLT 80" (/dev/nst0) for Job Rufus.2005-07-04_01.05.02 ++++-## Create a new GUI chapter explaining all the GUI programs. ++++-- Make "update slots" when pointing to Autochanger, remove ++++- all Volumes from other drives. "update slots all-drives"? ++++- No, this is done by modifying mtx-changer to list what is ++++- in the drives. ++++-- Finish TLS implementation. ++++-- Port limiting -m in iptables to prevent DoS attacks ++++- could cause broken pipes on Bacula. ++++-6. Build and test the Volume Shadow Copy (VSS) for Win32. ++++-- Allow cancel of unknown Job ++++-- State not saved when closing Win32 FD by icon ++++-- bsr-opt-test fails. bsr deleted. Fix. ++++-- Move Python daemon variables from Job to Bacula object. ++++- WorkingDir, ConfigFile ++++-- Document that Bootstrap files can be written with cataloging ++++- turned off. ++++-- Document details of ANSI/IBM labels ++++-- OS linux 2.4 ++++- 1) ADIC, DLT, FastStor 4000, 7*20GB ++++-- Linux Sony LIB-D81, AIT-3 library works. ++++-- Doc the following ++++- to activate, check or disable the hardware compression feature on my ++++- exb-8900 i use the exabyte "MammothTool" you can get it here: ++++- http://www.exabyte.com/support/online/downloads/index.cfm ++++- There is a solaris version of this tool. With option -C 0 or 1 you can ++++- disable or activate compression. Start this tool without any options for ++++- a small reference. ++++-- Document Heartbeat Interval in the dealing with firewalls section. ++++-- Document new CDROM directory. ++++-- On Win32 working directory must have drive letter ???? ++++-- On Win32 working directory must be writable by SYSTEM to ++++- do restores. ++++-- Document that ChangerDevice is used for Alert command. ++++-- Add better documentation on how restores can be done ++++-8. Take one more try at making DVD writing work (no go) ++++-7. Write a bacula-web document ++++-- Why isn't the DEVICE structure defined when doing ++++- a reservation? ++++-- Multi-drive changer seems to only use drive 0 ++++- Multiple drives don't seem to be opened. ++++-- My database is growing ++++-- Call GetLastError() in the berrno constructor rather ++++- than delaying until strerror. ++++-- Tape xxx in drive 0, requested in drive 1 ++++-- The mount command does not work with drives other than 0. ++++-- A mount should cause the SD to re-examine what Slot is ++++- loaded. ++++-- The SD locks on to the first available drive then ++++- wants a Volume that is released but in another drive -- ++++- chaos. ++++-- Run the regression scripts on Solaris and FreeBSD ++++-- Figure out how to package gui, and rescue programs. ++++-- Add a .dir command to restore tree code to eliminate the problem ++++-- Mount after manually unloading changer causes hang in SD ++++-- Fix JobACL with restore by JobId. +++++=== Done -- see kernsdone ++++Index: kes-1.38 ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/kes-1.38,v ++++retrieving revision 1.1.2.13 ++++diff -u -r1.1.2.13 kes-1.38 ++++--- kes-1.38 14 Nov 2005 20:20:38 -0000 1.1.2.13 +++++++ kes-1.38 21 Nov 2005 18:19:04 -0000 ++++@@ -3,6 +3,19 @@ ++++ ++++ General: ++++ +++++Changes to 1.38.2: +++++20Oct05 +++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator +++++ says this does not fix *his* bug). +++++- Fix cancel failure bug. Bug #481 +++++- Fix failure when Pool name has spaces. Bug #487 +++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++- Fix a couple of free()s in src/filed/acl.c +++++- Fix memory overrun in bfile.c in building OS X resource +++++ fork filename. Bug #489 +++++- Add Pool name to SD status output. +++++ ++++ Changes to 1.38.1: ++++ 14Oct05 ++++ - Apply SunOS patch for ACLs submitted by David Duchscher. ++++Index: projects ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/projects,v ++++retrieving revision 1.12.2.3 ++++diff -u -r1.12.2.3 projects ++++--- projects 10 Nov 2005 20:25:27 -0000 1.12.2.3 +++++++ projects 21 Nov 2005 18:19:05 -0000 ++++@@ -228,7 +228,175 @@ ++++ ++++ Why: Performance enhancement. ++++ +++++Item 13: Let Bacula log tape usage and handle drive cleaning cycles. +++++ Date: November 11, 2005 +++++ Origin: Arno Lehmann +++++ Status: +++++ +++++ What: Make Bacula manage tape life cycle information and drive +++++ cleaning cycles. +++++ +++++ Why: Both parts of this project are important when operating backups. +++++ We need to know which tapes need replacement, and we need to +++++ make sure the drives are cleaned when necessary. While many +++++ tape libraries and even autoloaders can handle all this +++++ automatically, support by Bacula can be helpful for smaller +++++ (older) libraries and single drives. Also, checking drive +++++ status during operation can prevent some failures (as I had to +++++ learn the hard way...) +++++ +++++ Notes: First, Bacula could (and even does, to some limited extent) +++++ record tape and drive usage. For tapes, the number of mounts, +++++ the amount of data, and the time the tape has actually been +++++ running could be recorded. Data fields for Read and Write time +++++ and Nmber of mounts already exist in the catalog (I'm not sure +++++ if VolBytes is the sum of all bytes ever written to that volume +++++ by Bacula). This information can be important when determining +++++ which media to replace. For the tape drives known to Bacula, +++++ similar information is interesting to determine the device +++++ status and expected life time: Time it's been Reading and +++++ Writing, number of tape Loads / Unloads / Errors. This +++++ information is not yet recorded as far as I know. +++++ +++++ The next step would be implementing drive cleaning setup. +++++ Bacula already has knowledge about cleaning tapes. Once it has +++++ some information about cleaning cycles (measured in drive run +++++ time, number of tapes used, or calender days, for example) it +++++ can automatically execute tape cleaning (with an autochanger, +++++ obviously) or ask for operator assistence loading a cleaning +++++ tape. +++++ +++++ The next step would be to implement TAPEALERT checks not only +++++ when changing tapes and only sending he information to the +++++ administrator, but rather checking after each tape error, +++++ checking on a regular basis (for example after each tape file), +++++ and also before unloading and after loading a new tape. Then, +++++ depending on the drives TAPEALERT state and the know drive +++++ cleaning state Bacula could automatically schedule later +++++ cleaning, clean immediately, or inform the operator. +++++ +++++ Implementing this would perhaps require another catalog change +++++ and perhaps major changes in SD code and the DIR-SD protocoll, +++++ so I'd only consider this worth implementing if it would +++++ actually be used or even needed by many people. +++++ +++++Item 14: Merging of multiple backups into a single one. (Also called Synthetic +++++ Backup or Consolidation). +++++ +++++ Origin: Marc Cousin and Eric Bollengier +++++ Date: 15 November 2005 +++++ Status: Depends on first implementing project Item 1 (Migration). +++++ +++++ What: A merged backup is a backup made without connecting to the Client. +++++ It would be a Merge of existing backups into a single backup. +++++ In effect, it is like a restore but to the backup medium. +++++ +++++ For instance, say that last sunday we made a full backup. Then +++++ all week long, we created incremental backups, in order to do +++++ them fast. Now comes sunday again, and we need another full. +++++ The merged backup makes it possible to do instead an incremental +++++ backup (during the night for instance), and then create a merged +++++ backup during the day, by using the full and incrementals from +++++ the week. The merged backup will be exactly like a full made +++++ sunday night on the tape, but the production interruption on the +++++ Client will be minimal, as the Client will only have to send +++++ incrementals. +++++ +++++ In fact, if it's done correctly, you could merge all the +++++ Incrementals into single Incremental, or all the Incrementals +++++ and the last Differential into a new Differential, or the Full, +++++ last differential and all the Incrementals into a new Full +++++ backup. And there is no need to involve the Client. +++++ +++++ Why: The benefit is that : +++++ - the Client just does an incremental ; +++++ - the merged backup on tape is just as a single full backup, +++++ and can be restored very fast. +++++ +++++ This is also a way of reducing the backup data since the old +++++ data can then be pruned (or not) from the catalog, possibly +++++ allowing older volumes to be recycled +++++ +++++Item 15: Automatic disabling of devices +++++ Date: 2005-11-11 +++++ Origin: Peter Eriksson +++++ Status: +++++ +++++ What: After a configurable amount of fatal errors with a tape drive +++++ Bacula should automatically disable further use of a certain +++++ tape drive. There should also be "disable"/"enable" commands in +++++ the "bconsole" tool. +++++ +++++ Why: On a multi-drive jukebox there is a possibility of tape drives +++++ going bad during large backups (needing a cleaning tape run, +++++ tapes getting stuck). It would be advantageous if Bacula would +++++ automatically disable further use of a problematic tape drive +++++ after a configurable amount of errors has occured. +++++ +++++ An example: I have a multi-drive jukebox (6 drives, 380+ slots) +++++ where tapes occasionally get stuck inside the drive. Bacula will +++++ notice that the "mtx-changer" command will fail and then fail +++++ any backup jobs trying to use that drive. However, it will still +++++ keep on trying to run new jobs using that drive and fail - +++++ forever, and thus failing lots and lots of jobs... Since we have +++++ many drives Bacula could have just automatically disabled +++++ further use of that drive and used one of the other ones +++++ instead. +++++ +++++ +++++Item 16: Directive/mode to backup only file changes, not entire file +++++ Date: 11 November 2005 +++++ Origin: Joshua Kugler +++++ Marek Bajon +++++ Status: RFC +++++ +++++ What: Currently when a file changes, the entire file will be backed up in +++++ the next incremental or full backup. To save space on the tapes +++++ it would be nice to have a mode whereby only the changes to the +++++ file would be backed up when it is changed. +++++ +++++ Why: This would save lots of space when backing up large files such as +++++ logs, mbox files, Outlook PST files and the like. +++++ +++++ Notes: This would require the usage of disk-based volumes as comparing +++++ files would not be feasible using a tape drive. +++++ +++++Item 17: Quick release of FD-SD connection +++++ Origin: Frank Volf (frank at deze dot org) +++++ Date: 17 november 2005 +++++ Status: +++++ +++++ What: In the bacula implementation a backup is finished after all data +++++ and attributes are succesfully written to storage. When using a +++++ tape backup it is very annoying that a backup can take a day, +++++ simply because the current tape (or whatever) is full and the +++++ administrator has not put a new one in. During that time the +++++ system cannot be taken off-line, because there is still an open +++++ session between the storage daemon and the file daemon on the +++++ client. +++++ +++++ Although this is a very good strategey for making "safe backups" +++++ This can be annoying for e.g. laptops, that must remain +++++ connected until the bacukp is completed. +++++ +++++ Using a new feature called "migration" it will be possible to +++++ spool first to harddisk (using a special 'spool' migration +++++ scheme) and then migrate the backup to tape. +++++ +++++ There is still the problem of getting the attributes committed. +++++ If it takes a very long time to do, with the current code, the +++++ job has not terminated, and the File daemon is not freed up. The +++++ Storage daemon should release the File daemon as soon as all the +++++ file data and all the attributes have been sent to it (the SD). +++++ Currently the SD waits until everything is on tape and all the +++++ attributes are transmitted to the Director before signalling +++++ completion to the FD. I don't think I would have any problem +++++ changing this. The reason is that even if the FD reports back to +++++ the Dir that all is OK, the job will not terminate until the SD +++++ has done the same thing -- so in a way keeping the SD-FD link +++++ open to the very end is not really very productive ... ++++ +++++ Why: Makes backup of laptops much easier. ++++ ++++ ++++ ============= Empty RFC form =========== ++++@@ -245,33 +413,4 @@ ++++ ============== End RFC form ============== ++++ ++++ ++++-Items completed for release 1.38.0: ++++-#4 Embedded Python Scripting (implemented in all Daemons) ++++-#5 Events that call a Python program (Implemented in all ++++- daemons, but more cleanup work to be done). ++++-#6 Select one from among Multiple Storage Devices for Job. ++++- This is already implemented in 1.37. ++++-#7 Single Job Writing to Multiple Storage Devices. This is ++++- currently implemented with a Clone feature. ++++-#- Full multiple drive Autochanger support (done in 1.37) ++++-#- Built in support for communications encryption (TLS) ++++- done by Landon Fuller. ++++-# Support for Unicode characters ++++- (via UTF-8) on Win32 machines thanks to Thorsten Engel. ++++-Item 8: Break the one-to-one Relationship between a Job and a ++++- Specific Storage Device (or Devices if #10 is implemented). ++++- ++++-Completed items from last year's list: ++++-Item 1: Multiple simultaneous Jobs. (done) ++++-Item 3: Write the bscan program -- also write a bcopy program (done). ++++-Item 5: Implement Label templates (done). ++++-Item 6: Write a regression script (done) ++++-Item 9: Add SSL to daemon communications (done by Landon Fuller) ++++-Item 10: Define definitive tape format (done) ++++-Item 3: GUI for interactive restore. Partially Implemented in 1.34 ++++- Note, there is now a complete Webmin plugin, a partial ++++- GNOME console, and an excellent wx-console GUI. ++++-Item 4: GUI for interactive backup ++++-Item 2: Job Data Spooling. ++++- Done: Regular expression matching. ++++-Item 10: New daemon communication protocol (this has been dropped). +++++Items completed for release 1.38.0 -- see kernsdone ++++Index: patches/1.38.1-to-1.38.2.patch ++++=================================================================== ++++RCS file: patches/1.38.1-to-1.38.2.patch ++++diff -N patches/1.38.1-to-1.38.2.patch ++++--- /dev/null 1 Jan 1970 00:00:00 -0000 +++++++ patches/1.38.1-to-1.38.2.patch 21 Nov 2005 18:19:05 -0000 ++++@@ -0,0 +1,3528 @@ +++++ +++++ This patch fixes the following bugs: +++++ +++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator +++++ says that this patch does not fix his problem) +++++- Fix cancel failure bug. Bug #481 +++++- Fix failure when Pool name has spaces. Bug #487 +++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++- Fix a couple of free()s in src/filed/acl.c +++++- Fix memory overrun in bfile.c in building OS X resource +++++ fork filename. Bug #489 +++++ +++++This patch is applied to Bacula source version 1.38.1 and will +++++produce Bacula source version 1.38.2. Apply it with: +++++ +++++ cd +++++ ./configure (your options) if not already done +++++ patch -p0 <1.38.1-to-1.38.2.patch +++++ make +++++ make install +++++ +++++? osx_finder.patch +++++Index: ChangeLog +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/ChangeLog,v +++++retrieving revision 1.154.2.7 +++++diff -u -r1.154.2.7 ChangeLog +++++--- ChangeLog 15 Nov 2005 09:27:19 -0000 1.154.2.7 ++++++++ ChangeLog 21 Nov 2005 13:17:56 -0000 +++++@@ -1,4 +1,14 @@ +++++ ++++++Changes to 1.38.2: ++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++++- Fix bnet-server bug found on OpenBSD. Bug #486 ++++++- Fix cancel failure bug. Bug #481 ++++++- Fix failure when Pool name has spaces. Bug #487 ++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++++- Fix a couple of free()s in src/filed/acl.c ++++++- Fix memory overrun in bfile.c in building OS X resource ++++++ fork filename. Bug #489 ++++++- Add Pool name to SD status output. +++++ +++++ Changes to 1.38.1: +++++ - Apply SunOS patch for ACLs submitted by David Duchscher. +++++Index: ReleaseNotes +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/ReleaseNotes,v +++++retrieving revision 1.147.2.9 +++++diff -u -r1.147.2.9 ReleaseNotes +++++--- ReleaseNotes 15 Nov 2005 09:27:19 -0000 1.147.2.9 ++++++++ ReleaseNotes 21 Nov 2005 13:17:57 -0000 +++++@@ -1,10 +1,21 @@ +++++ +++++- Release Notes for Bacula 1.38.1 ++++++ Release Notes for Bacula 1.38.2 +++++ +++++ Bacula code: Total files = 420 Total lines = 138,440 (*.h *.c *.in) +++++ 20,440 additional lines of code since version 1.36.3 +++++ +++++-Changes since 1.38.0: ++++++Changes to 1.38.2: ++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++++- Fix bnet-server bug found on OpenBSD. Bug #486 ++++++- Fix cancel failure bug. Bug #481 ++++++- Fix failure when Pool name has spaces. Bug #487 ++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++++- Fix a couple of free()s in src/filed/acl.c ++++++- Fix memory overrun in bfile.c in building OS X resource ++++++ fork filename. Bug #489 ++++++- Add Pool name to SD status output. ++++++ ++++++Changes to 1.38.1: +++++ - Corrected ACL for Solaris (David Duchscher and Attila Fulop). +++++ - Add bacula_mail_summary.sh to examples directory. It makes +++++ a single email summary of any number of jobs. Submitted +++++Index: kernstodo +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/kernstodo,v +++++retrieving revision 1.570.2.6 +++++diff -u -r1.570.2.6 kernstodo +++++--- kernstodo 4 Nov 2005 09:16:49 -0000 1.570.2.6 ++++++++ kernstodo 21 Nov 2005 13:17:57 -0000 +++++@@ -1,5 +1,5 @@ +++++ Kern's ToDo List +++++- 03 November 2005 ++++++ 21 November 2005 +++++ +++++ Major development: +++++ Project Developer +++++@@ -7,8 +7,6 @@ +++++ Version 1.37 Kern (see below) +++++ ======================================================== +++++ +++++-Final items for 1.37 before release: +++++- +++++ Document: +++++ - Does ClientRunAfterJob fail the job on a bad return code? +++++ - Document cleaning up the spool files: +++++@@ -18,6 +16,8 @@ +++++ - Does WildFile match against full name? Doc. +++++ +++++ For 1.39: ++++++- Make sure that all do_prompt() calls in Dir check for ++++++ -1 (error) and -2 (cancel) returns. +++++ - Look at -D_FORTIFY_SOURCE=2 +++++ - Add Win32 FileSet definition somewhere +++++ - Look at fixing restore status stats in SD. +++++@@ -27,6 +27,12 @@ +++++ encountered, read many times (as it currently does), and if the +++++ block cannot be read, skip to the next block, and try again. If +++++ that fails, skip to the next file and try again, ... ++++++- Add level table: ++++++ create table LevelType (LevelType binary(1), LevelTypeLong tinyblob); ++++++ insert into LevelType (LevelType,LevelTypeLong) values ++++++ ("F","Full"), ++++++ ("D","Diff"), ++++++ ("I","Inc"); +++++ - Add ACL to restore only to original location. +++++ - Add a recursive mark command (rmark) to restore. +++++ - "Minimum Job Interval = nnn" sets minimum interval between Jobs +++++@@ -1246,219 +1252,4 @@ +++++ ==== +++++ +++++ +++++-=== Done +++++-- Save mount point for directories not traversed with onefs=yes. +++++-- Add seconds to start and end times in the Job report output. +++++-- if 2 concurrent backups are attempted on the same tape +++++- drive (autoloader) into different tape pools, one of them will exit +++++- fatally instead of halting until the drive is idle +++++-- Update StartTime if job held in Job Queue. +++++-- Look at www.nu2.nu/pebuilder as a helper for full windows +++++- bare metal restore. (done by Scott) +++++-- Fix orphanned buffers: +++++- Orphaned buffer: 24 bytes allocated at line 808 of rufus-dir job.c +++++- Orphaned buffer: 40 bytes allocated at line 45 of rufus-dir alist.c +++++-- Implement Preben's suggestion to add +++++- File System Types = ext2, ext3 +++++- to FileSets, thus simplifying backup of *all* local partitions. +++++-- Try to open a device on each Job if it was not opened +++++- when the SD started. +++++-- Add dump of VolSessionId/Time and FileIndex with bls. +++++-- If Bacula does not find the right tape in the Autochanger, +++++- then mark the tape in error and move on rather than asking +++++- for operator intervention. +++++-- Cancel command should include JobId in list of Jobs. +++++-- Add performance testing hooks +++++-- Bootstrap from JobMedia records. +++++-- Implement WildFile and WildDir to solve problem of +++++- saving only *.doc files. +++++-- Fix +++++- Please use the "label" command to create a new Volume for: +++++- Storage: DDS-4-changer +++++- Media type: +++++- Pool: Default +++++- label +++++- The defined Storage resources are: +++++-- Copy Changer Device and Changer Command from Autochanger +++++- to Device resource in SD if none given in Device resource. +++++-- 1. Automatic use of more than one drive in an autochanger (done) +++++-- 2. Automatic selection of the correct drive for each Job (i.e. +++++- selects a drive with an appropriate Volume for the Job) (done) +++++-- 6. Allow multiple simultaneous Jobs referencing the same pool write +++++- to several tapes (some new directive(s) are are probably needed for +++++- this) (done) +++++-- Locking (done) +++++-- Key on Storage rather than Pool (done) +++++-- Allow multiple drives to use same Pool (change jobq.c DIR) (done). +++++-- Synchronize multiple drives so that not more +++++- than one loads a tape and any time (done) +++++-- 4. Use Changer Device and Changer Command specified in the +++++- Autochanger resource, if none is found in the Device resource. +++++- You can continue to specify them in the Device resource if you want +++++- or need them to be different for each device. +++++-- 5. Implement a new Device directive (perhaps "Autoselect = yes/no") +++++- that can allow a Device be part of an Autochanger, and hence the changer +++++- script protected, but if set to no, will prevent the Device from being +++++- automatically selected from the changer. This allows the device to +++++- be directly accessed through its Device name, but not through the +++++- AutoChanger name. +++++-#6 Select one from among Multiple Storage Devices for Job +++++-#5 Events that call a Python program +++++- (Implemented in Dir/SD) +++++-- Make sure the Device name is in the Query packet returned. +++++-- Don't start a second file job if one is already running. +++++-- Implement EOF/EOV labels for ANSI labels +++++-- Implement IBM labels. +++++-- When Python creates a new label, the tape is immediately +++++- recycled and no label created. This happens when using +++++- autolabeling -- even when Python doesn't generate the name. +++++-- Scratch Pool where the volumes can be re-assigned to any Pool. +++++-- 28-Mar 23:19 rufus-sd: acquire.c:379 Device "DDS-4" (/dev/nst0) +++++- is busy reading. Job 6 canceled. +++++-- Remove separate thread for opening devices in SD. On the other +++++- hand, don't block waiting for open() for devices. +++++-- Fix code to either handle updating NumVol or to calculate it in +++++- Dir next_vol.c +++++-- Ensure that you cannot exclude a directory or a file explicitly +++++- Included with File. +++++-#4 Embedded Python Scripting +++++- (Implemented in Dir/SD/FD) +++++-- Add Python writable variable for changing the Priority, +++++- Client, Storage, JobStatus (error), ... +++++-- SD Python +++++- - Solicit Events +++++-- Add disk seeking on restore; turn off seek on tapes. +++++- stored/match_bsr.c +++++-- Look at dird_conf.c:1000: warning: `int size' +++++- might be used uninitialized in this function +++++-- Indicate when a Job is purged/pruned during restore. +++++-- Implement some way to turn off automatic pruning in Jobs. +++++-- Implement a way an Admin Job can prune, possibly multiple +++++- clients -- Python script? +++++-- Look at Preben's acl.c error handling code. +++++-- SD crashes after a tape restore then doing a backup. +++++-- If drive is opened read/write, close it and re-open +++++- read-only if doing a restore, and vice-versa. +++++-- Windows restore: +++++- data-fd: RestoreFiles.2004-12-07_15.56.42 Error: +++++- > ..\findlib\../../findlib/create_file.c:275 Could not open e:/: ERR=Der +++++- > Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen +++++- > Prozess verwendet wird. +++++- Restore restores all files, but then fails at the end trying +++++- to set the attributes of e: +++++- from failed jobs.- Resolve the problem between Device name and Archive name, +++++- and fix SD messages. +++++-- Tell the "restore" user when browsing is no longer possible. +++++-- Add a restore directory-x +++++-- Write non-optimized bsrs from the JobMedia and Media records, +++++- even after Files are pruned. +++++-- Delete Stripe and Copy from VolParams to save space. +++++-- Fix option 2 of restore -- list where file is backed up -- require Client, +++++- then list last 20 backups. +++++-- Finish implementation of passing all Storage and Device needs to +++++- the SD. +++++-- Move test for max wait time exceeded in job.c up -- Peter's idea. +++++-## Consider moving docs to their own project. +++++-## Move rescue to its own project. +++++-- Add client version to the Client name line that prints in +++++- the Job report. +++++-- Fix the Rescue CDROM. +++++-- By the way: on page http://www.bacula.org/?page=tapedrives , at the +++++- bottom, the link to "Tape Testing Chapter" is broken. It goes to +++++- /html-manual/... while the others point to /rel-manual/... +++++-- Device resource needs the "name" of the SD. +++++-- Specify a single directory to restore. +++++-- Implement MediaType keyword in bsr? +++++-- Add a date and time stamp at the beginning of every line in the +++++- Job report (Volker Sauer). +++++-- Add level to estimate command. +++++-- Add "limit=n" for "list jobs" +++++-- Make bootstrap filename unique. +++++-- Make Dmsg look at global before calling subroutine. +++++-- From Chris Hull: +++++- it seems to be complaining about 12:00pm which should be a valid 12 +++++- hour time. I changed the time to 11:59am and everything works fine. +++++- Also 12:00am works fine. 0:00pm also works (which I don't think +++++- should). None of the values 12:00pm - 12:59pm work for that matter. +++++-- Require restore via the restore command or make a restore Job +++++- get the bootstrap file. +++++-- Implement Maximum Job Spool Size +++++-- Fix 3993 error in SD. It forgets to look at autochanger +++++- resource for device command, ... +++++-- 3. Prevent two drives requesting the same Volume in any given +++++- autochanger, by checking if a Volume is mounted on another drive +++++- in an Autochanger. +++++-- Upgrade to MySQL 4.1.12 See: +++++- http://dev.mysql.com/doc/mysql/en/Server_SQL_mode.html +++++-- Add # Job Level date to bsr file +++++-- Implement "PreferMountedVolumes = yes|no" in Job resource. +++++-## Integrate web-bacula into a new Bacula project with +++++- bimagemgr. +++++-- Cleaning tapes should have Status "Cleaning" rather than append. +++++-- Make sure that Python has access to Client address/port so that +++++- it can check if Clients are alive. +++++-- Review all items in "restore". +++++-- Fix PostgreSQL GROUP BY problems in restore. +++++-- Fix PostgreSQL sql problems in bugs. +++++-- After rename +++++- 04-Jul 13:01 MainSD: Rufus.2005-07-04_01.05.02 Warning: Director wanted Volume +++++- "DLT-13Feb04". +++++- Current Volume "DLT-04Jul05" not acceptable because: +++++- 1997 Volume "DLT-13Feb04" not in catalog. +++++- 04-Jul 13:01 MainSD: Please mount Volume "DLT-04Jul05" on Storage Device +++++- "HP DLT 80" (/dev/nst0) for Job Rufus.2005-07-04_01.05.02 +++++-## Create a new GUI chapter explaining all the GUI programs. +++++-- Make "update slots" when pointing to Autochanger, remove +++++- all Volumes from other drives. "update slots all-drives"? +++++- No, this is done by modifying mtx-changer to list what is +++++- in the drives. +++++-- Finish TLS implementation. +++++-- Port limiting -m in iptables to prevent DoS attacks +++++- could cause broken pipes on Bacula. +++++-6. Build and test the Volume Shadow Copy (VSS) for Win32. +++++-- Allow cancel of unknown Job +++++-- State not saved when closing Win32 FD by icon +++++-- bsr-opt-test fails. bsr deleted. Fix. +++++-- Move Python daemon variables from Job to Bacula object. +++++- WorkingDir, ConfigFile +++++-- Document that Bootstrap files can be written with cataloging +++++- turned off. +++++-- Document details of ANSI/IBM labels +++++-- OS linux 2.4 +++++- 1) ADIC, DLT, FastStor 4000, 7*20GB +++++-- Linux Sony LIB-D81, AIT-3 library works. +++++-- Doc the following +++++- to activate, check or disable the hardware compression feature on my +++++- exb-8900 i use the exabyte "MammothTool" you can get it here: +++++- http://www.exabyte.com/support/online/downloads/index.cfm +++++- There is a solaris version of this tool. With option -C 0 or 1 you can +++++- disable or activate compression. Start this tool without any options for +++++- a small reference. +++++-- Document Heartbeat Interval in the dealing with firewalls section. +++++-- Document new CDROM directory. +++++-- On Win32 working directory must have drive letter ???? +++++-- On Win32 working directory must be writable by SYSTEM to +++++- do restores. +++++-- Document that ChangerDevice is used for Alert command. +++++-- Add better documentation on how restores can be done +++++-8. Take one more try at making DVD writing work (no go) +++++-7. Write a bacula-web document +++++-- Why isn't the DEVICE structure defined when doing +++++- a reservation? +++++-- Multi-drive changer seems to only use drive 0 +++++- Multiple drives don't seem to be opened. +++++-- My database is growing +++++-- Call GetLastError() in the berrno constructor rather +++++- than delaying until strerror. +++++-- Tape xxx in drive 0, requested in drive 1 +++++-- The mount command does not work with drives other than 0. +++++-- A mount should cause the SD to re-examine what Slot is +++++- loaded. +++++-- The SD locks on to the first available drive then +++++- wants a Volume that is released but in another drive -- +++++- chaos. +++++-- Run the regression scripts on Solaris and FreeBSD +++++-- Figure out how to package gui, and rescue programs. +++++-- Add a .dir command to restore tree code to eliminate the problem +++++-- Mount after manually unloading changer causes hang in SD +++++-- Fix JobACL with restore by JobId. ++++++=== Done -- see kernsdone +++++Index: kes-1.38 +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/kes-1.38,v +++++retrieving revision 1.1.2.13 +++++diff -u -r1.1.2.13 kes-1.38 +++++--- kes-1.38 14 Nov 2005 20:20:38 -0000 1.1.2.13 ++++++++ kes-1.38 21 Nov 2005 13:17:57 -0000 +++++@@ -3,6 +3,18 @@ +++++ +++++ General: +++++ ++++++Changes to 1.38.2: ++++++20Oct05 ++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++++- Fix bnet-server bug found on OpenBSD. Bug #486 ++++++- Fix cancel failure bug. Bug #481 ++++++- Fix failure when Pool name has spaces. Bug #487 ++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++++- Fix a couple of free()s in src/filed/acl.c ++++++- Fix memory overrun in bfile.c in building OS X resource ++++++ fork filename. Bug #489 ++++++- Add Pool name to SD status output. ++++++ +++++ Changes to 1.38.1: +++++ 14Oct05 +++++ - Apply SunOS patch for ACLs submitted by David Duchscher. +++++Index: projects +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/projects,v +++++retrieving revision 1.12.2.3 +++++diff -u -r1.12.2.3 projects +++++--- projects 10 Nov 2005 20:25:27 -0000 1.12.2.3 ++++++++ projects 21 Nov 2005 13:17:58 -0000 +++++@@ -228,7 +228,175 @@ +++++ +++++ Why: Performance enhancement. +++++ ++++++Item 13: Let Bacula log tape usage and handle drive cleaning cycles. ++++++ Date: November 11, 2005 ++++++ Origin: Arno Lehmann ++++++ Status: ++++++ ++++++ What: Make Bacula manage tape life cycle information and drive ++++++ cleaning cycles. ++++++ ++++++ Why: Both parts of this project are important when operating backups. ++++++ We need to know which tapes need replacement, and we need to ++++++ make sure the drives are cleaned when necessary. While many ++++++ tape libraries and even autoloaders can handle all this ++++++ automatically, support by Bacula can be helpful for smaller ++++++ (older) libraries and single drives. Also, checking drive ++++++ status during operation can prevent some failures (as I had to ++++++ learn the hard way...) ++++++ ++++++ Notes: First, Bacula could (and even does, to some limited extent) ++++++ record tape and drive usage. For tapes, the number of mounts, ++++++ the amount of data, and the time the tape has actually been ++++++ running could be recorded. Data fields for Read and Write time ++++++ and Nmber of mounts already exist in the catalog (I'm not sure ++++++ if VolBytes is the sum of all bytes ever written to that volume ++++++ by Bacula). This information can be important when determining ++++++ which media to replace. For the tape drives known to Bacula, ++++++ similar information is interesting to determine the device ++++++ status and expected life time: Time it's been Reading and ++++++ Writing, number of tape Loads / Unloads / Errors. This ++++++ information is not yet recorded as far as I know. ++++++ ++++++ The next step would be implementing drive cleaning setup. ++++++ Bacula already has knowledge about cleaning tapes. Once it has ++++++ some information about cleaning cycles (measured in drive run ++++++ time, number of tapes used, or calender days, for example) it ++++++ can automatically execute tape cleaning (with an autochanger, ++++++ obviously) or ask for operator assistence loading a cleaning ++++++ tape. ++++++ ++++++ The next step would be to implement TAPEALERT checks not only ++++++ when changing tapes and only sending he information to the ++++++ administrator, but rather checking after each tape error, ++++++ checking on a regular basis (for example after each tape file), ++++++ and also before unloading and after loading a new tape. Then, ++++++ depending on the drives TAPEALERT state and the know drive ++++++ cleaning state Bacula could automatically schedule later ++++++ cleaning, clean immediately, or inform the operator. ++++++ ++++++ Implementing this would perhaps require another catalog change ++++++ and perhaps major changes in SD code and the DIR-SD protocoll, ++++++ so I'd only consider this worth implementing if it would ++++++ actually be used or even needed by many people. ++++++ ++++++Item 14: Merging of multiple backups into a single one. (Also called Synthetic ++++++ Backup or Consolidation). ++++++ ++++++ Origin: Marc Cousin and Eric Bollengier ++++++ Date: 15 November 2005 ++++++ Status: Depends on first implementing project Item 1 (Migration). ++++++ ++++++ What: A merged backup is a backup made without connecting to the Client. ++++++ It would be a Merge of existing backups into a single backup. ++++++ In effect, it is like a restore but to the backup medium. ++++++ ++++++ For instance, say that last sunday we made a full backup. Then ++++++ all week long, we created incremental backups, in order to do ++++++ them fast. Now comes sunday again, and we need another full. ++++++ The merged backup makes it possible to do instead an incremental ++++++ backup (during the night for instance), and then create a merged ++++++ backup during the day, by using the full and incrementals from ++++++ the week. The merged backup will be exactly like a full made ++++++ sunday night on the tape, but the production interruption on the ++++++ Client will be minimal, as the Client will only have to send ++++++ incrementals. ++++++ ++++++ In fact, if it's done correctly, you could merge all the ++++++ Incrementals into single Incremental, or all the Incrementals ++++++ and the last Differential into a new Differential, or the Full, ++++++ last differential and all the Incrementals into a new Full ++++++ backup. And there is no need to involve the Client. ++++++ ++++++ Why: The benefit is that : ++++++ - the Client just does an incremental ; ++++++ - the merged backup on tape is just as a single full backup, ++++++ and can be restored very fast. ++++++ ++++++ This is also a way of reducing the backup data since the old ++++++ data can then be pruned (or not) from the catalog, possibly ++++++ allowing older volumes to be recycled ++++++ ++++++Item 15: Automatic disabling of devices ++++++ Date: 2005-11-11 ++++++ Origin: Peter Eriksson ++++++ Status: ++++++ ++++++ What: After a configurable amount of fatal errors with a tape drive ++++++ Bacula should automatically disable further use of a certain ++++++ tape drive. There should also be "disable"/"enable" commands in ++++++ the "bconsole" tool. ++++++ ++++++ Why: On a multi-drive jukebox there is a possibility of tape drives ++++++ going bad during large backups (needing a cleaning tape run, ++++++ tapes getting stuck). It would be advantageous if Bacula would ++++++ automatically disable further use of a problematic tape drive ++++++ after a configurable amount of errors has occured. ++++++ ++++++ An example: I have a multi-drive jukebox (6 drives, 380+ slots) ++++++ where tapes occasionally get stuck inside the drive. Bacula will ++++++ notice that the "mtx-changer" command will fail and then fail ++++++ any backup jobs trying to use that drive. However, it will still ++++++ keep on trying to run new jobs using that drive and fail - ++++++ forever, and thus failing lots and lots of jobs... Since we have ++++++ many drives Bacula could have just automatically disabled ++++++ further use of that drive and used one of the other ones ++++++ instead. ++++++ ++++++ ++++++Item 16: Directive/mode to backup only file changes, not entire file ++++++ Date: 11 November 2005 ++++++ Origin: Joshua Kugler ++++++ Marek Bajon ++++++ Status: RFC ++++++ ++++++ What: Currently when a file changes, the entire file will be backed up in ++++++ the next incremental or full backup. To save space on the tapes ++++++ it would be nice to have a mode whereby only the changes to the ++++++ file would be backed up when it is changed. ++++++ ++++++ Why: This would save lots of space when backing up large files such as ++++++ logs, mbox files, Outlook PST files and the like. ++++++ ++++++ Notes: This would require the usage of disk-based volumes as comparing ++++++ files would not be feasible using a tape drive. ++++++ ++++++Item 17: Quick release of FD-SD connection ++++++ Origin: Frank Volf (frank at deze dot org) ++++++ Date: 17 november 2005 ++++++ Status: ++++++ ++++++ What: In the bacula implementation a backup is finished after all data ++++++ and attributes are succesfully written to storage. When using a ++++++ tape backup it is very annoying that a backup can take a day, ++++++ simply because the current tape (or whatever) is full and the ++++++ administrator has not put a new one in. During that time the ++++++ system cannot be taken off-line, because there is still an open ++++++ session between the storage daemon and the file daemon on the ++++++ client. ++++++ ++++++ Although this is a very good strategey for making "safe backups" ++++++ This can be annoying for e.g. laptops, that must remain ++++++ connected until the bacukp is completed. ++++++ ++++++ Using a new feature called "migration" it will be possible to ++++++ spool first to harddisk (using a special 'spool' migration ++++++ scheme) and then migrate the backup to tape. ++++++ ++++++ There is still the problem of getting the attributes committed. ++++++ If it takes a very long time to do, with the current code, the ++++++ job has not terminated, and the File daemon is not freed up. The ++++++ Storage daemon should release the File daemon as soon as all the ++++++ file data and all the attributes have been sent to it (the SD). ++++++ Currently the SD waits until everything is on tape and all the ++++++ attributes are transmitted to the Director before signalling ++++++ completion to the FD. I don't think I would have any problem ++++++ changing this. The reason is that even if the FD reports back to ++++++ the Dir that all is OK, the job will not terminate until the SD ++++++ has done the same thing -- so in a way keeping the SD-FD link ++++++ open to the very end is not really very productive ... +++++ ++++++ Why: Makes backup of laptops much easier. +++++ +++++ +++++ ============= Empty RFC form =========== +++++@@ -245,33 +413,4 @@ +++++ ============== End RFC form ============== +++++ +++++ +++++-Items completed for release 1.38.0: +++++-#4 Embedded Python Scripting (implemented in all Daemons) +++++-#5 Events that call a Python program (Implemented in all +++++- daemons, but more cleanup work to be done). +++++-#6 Select one from among Multiple Storage Devices for Job. +++++- This is already implemented in 1.37. +++++-#7 Single Job Writing to Multiple Storage Devices. This is +++++- currently implemented with a Clone feature. +++++-#- Full multiple drive Autochanger support (done in 1.37) +++++-#- Built in support for communications encryption (TLS) +++++- done by Landon Fuller. +++++-# Support for Unicode characters +++++- (via UTF-8) on Win32 machines thanks to Thorsten Engel. +++++-Item 8: Break the one-to-one Relationship between a Job and a +++++- Specific Storage Device (or Devices if #10 is implemented). +++++- +++++-Completed items from last year's list: +++++-Item 1: Multiple simultaneous Jobs. (done) +++++-Item 3: Write the bscan program -- also write a bcopy program (done). +++++-Item 5: Implement Label templates (done). +++++-Item 6: Write a regression script (done) +++++-Item 9: Add SSL to daemon communications (done by Landon Fuller) +++++-Item 10: Define definitive tape format (done) +++++-Item 3: GUI for interactive restore. Partially Implemented in 1.34 +++++- Note, there is now a complete Webmin plugin, a partial +++++- GNOME console, and an excellent wx-console GUI. +++++-Item 4: GUI for interactive backup +++++-Item 2: Job Data Spooling. +++++- Done: Regular expression matching. +++++-Item 10: New daemon communication protocol (this has been dropped). ++++++Items completed for release 1.38.0 -- see kernsdone +++++Index: patches/1.38.1-to-1.38.2.patch +++++=================================================================== +++++RCS file: patches/1.38.1-to-1.38.2.patch +++++diff -N patches/1.38.1-to-1.38.2.patch +++++--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++++++ patches/1.38.1-to-1.38.2.patch 21 Nov 2005 13:17:58 -0000 +++++@@ -0,0 +1,2471 @@ ++++++ ++++++ This patch fixes the following bugs: ++++++ ++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++++++ says that this patch does not fix his problem) ++++++- Fix cancel failure bug. Bug #481 ++++++- Fix failure when Pool name has spaces. Bug #487 ++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++++- Fix a couple of free()s in src/filed/acl.c ++++++- Fix memory overrun in bfile.c in building OS X resource ++++++ fork filename. Bug #489 ++++++ ++++++This patch is applied to Bacula source version 1.38.1 and will ++++++produce Bacula source version 1.38.2. Apply it with: ++++++ ++++++ cd ++++++ ./configure (your options) if not already done ++++++ patch -p0 <1.38.1-to-1.38.2.patch ++++++ make ++++++ make install ++++++ ++++++? osx_finder.patch ++++++Index: ChangeLog ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/ChangeLog,v ++++++retrieving revision 1.154.2.7 ++++++diff -u -r1.154.2.7 ChangeLog ++++++--- ChangeLog 15 Nov 2005 09:27:19 -0000 1.154.2.7 +++++++++ ChangeLog 21 Nov 2005 13:12:58 -0000 ++++++@@ -1,4 +1,14 @@ ++++++ +++++++Changes to 1.38.2: +++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++++- Fix bnet-server bug found on OpenBSD. Bug #486 +++++++- Fix cancel failure bug. Bug #481 +++++++- Fix failure when Pool name has spaces. Bug #487 +++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++++- Fix a couple of free()s in src/filed/acl.c +++++++- Fix memory overrun in bfile.c in building OS X resource +++++++ fork filename. Bug #489 +++++++- Add Pool name to SD status output. ++++++ ++++++ Changes to 1.38.1: ++++++ - Apply SunOS patch for ACLs submitted by David Duchscher. ++++++Index: ReleaseNotes ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/ReleaseNotes,v ++++++retrieving revision 1.147.2.9 ++++++diff -u -r1.147.2.9 ReleaseNotes ++++++--- ReleaseNotes 15 Nov 2005 09:27:19 -0000 1.147.2.9 +++++++++ ReleaseNotes 21 Nov 2005 13:12:59 -0000 ++++++@@ -1,10 +1,21 @@ ++++++ ++++++- Release Notes for Bacula 1.38.1 +++++++ Release Notes for Bacula 1.38.2 ++++++ ++++++ Bacula code: Total files = 420 Total lines = 138,440 (*.h *.c *.in) ++++++ 20,440 additional lines of code since version 1.36.3 ++++++ ++++++-Changes since 1.38.0: +++++++Changes to 1.38.2: +++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++++- Fix bnet-server bug found on OpenBSD. Bug #486 +++++++- Fix cancel failure bug. Bug #481 +++++++- Fix failure when Pool name has spaces. Bug #487 +++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++++- Fix a couple of free()s in src/filed/acl.c +++++++- Fix memory overrun in bfile.c in building OS X resource +++++++ fork filename. Bug #489 +++++++- Add Pool name to SD status output. +++++++ +++++++Changes to 1.38.1: ++++++ - Corrected ACL for Solaris (David Duchscher and Attila Fulop). ++++++ - Add bacula_mail_summary.sh to examples directory. It makes ++++++ a single email summary of any number of jobs. Submitted ++++++Index: kernstodo ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/kernstodo,v ++++++retrieving revision 1.570.2.6 ++++++diff -u -r1.570.2.6 kernstodo ++++++--- kernstodo 4 Nov 2005 09:16:49 -0000 1.570.2.6 +++++++++ kernstodo 21 Nov 2005 13:13:00 -0000 ++++++@@ -1,5 +1,5 @@ ++++++ Kern's ToDo List ++++++- 03 November 2005 +++++++ 21 November 2005 ++++++ ++++++ Major development: ++++++ Project Developer ++++++@@ -7,8 +7,6 @@ ++++++ Version 1.37 Kern (see below) ++++++ ======================================================== ++++++ ++++++-Final items for 1.37 before release: ++++++- ++++++ Document: ++++++ - Does ClientRunAfterJob fail the job on a bad return code? ++++++ - Document cleaning up the spool files: ++++++@@ -18,6 +16,8 @@ ++++++ - Does WildFile match against full name? Doc. ++++++ ++++++ For 1.39: +++++++- Make sure that all do_prompt() calls in Dir check for +++++++ -1 (error) and -2 (cancel) returns. ++++++ - Look at -D_FORTIFY_SOURCE=2 ++++++ - Add Win32 FileSet definition somewhere ++++++ - Look at fixing restore status stats in SD. ++++++@@ -27,6 +27,12 @@ ++++++ encountered, read many times (as it currently does), and if the ++++++ block cannot be read, skip to the next block, and try again. If ++++++ that fails, skip to the next file and try again, ... +++++++- Add level table: +++++++ create table LevelType (LevelType binary(1), LevelTypeLong tinyblob); +++++++ insert into LevelType (LevelType,LevelTypeLong) values +++++++ ("F","Full"), +++++++ ("D","Diff"), +++++++ ("I","Inc"); ++++++ - Add ACL to restore only to original location. ++++++ - Add a recursive mark command (rmark) to restore. ++++++ - "Minimum Job Interval = nnn" sets minimum interval between Jobs ++++++@@ -1246,219 +1252,4 @@ ++++++ ==== ++++++ ++++++ ++++++-=== Done ++++++-- Save mount point for directories not traversed with onefs=yes. ++++++-- Add seconds to start and end times in the Job report output. ++++++-- if 2 concurrent backups are attempted on the same tape ++++++- drive (autoloader) into different tape pools, one of them will exit ++++++- fatally instead of halting until the drive is idle ++++++-- Update StartTime if job held in Job Queue. ++++++-- Look at www.nu2.nu/pebuilder as a helper for full windows ++++++- bare metal restore. (done by Scott) ++++++-- Fix orphanned buffers: ++++++- Orphaned buffer: 24 bytes allocated at line 808 of rufus-dir job.c ++++++- Orphaned buffer: 40 bytes allocated at line 45 of rufus-dir alist.c ++++++-- Implement Preben's suggestion to add ++++++- File System Types = ext2, ext3 ++++++- to FileSets, thus simplifying backup of *all* local partitions. ++++++-- Try to open a device on each Job if it was not opened ++++++- when the SD started. ++++++-- Add dump of VolSessionId/Time and FileIndex with bls. ++++++-- If Bacula does not find the right tape in the Autochanger, ++++++- then mark the tape in error and move on rather than asking ++++++- for operator intervention. ++++++-- Cancel command should include JobId in list of Jobs. ++++++-- Add performance testing hooks ++++++-- Bootstrap from JobMedia records. ++++++-- Implement WildFile and WildDir to solve problem of ++++++- saving only *.doc files. ++++++-- Fix ++++++- Please use the "label" command to create a new Volume for: ++++++- Storage: DDS-4-changer ++++++- Media type: ++++++- Pool: Default ++++++- label ++++++- The defined Storage resources are: ++++++-- Copy Changer Device and Changer Command from Autochanger ++++++- to Device resource in SD if none given in Device resource. ++++++-- 1. Automatic use of more than one drive in an autochanger (done) ++++++-- 2. Automatic selection of the correct drive for each Job (i.e. ++++++- selects a drive with an appropriate Volume for the Job) (done) ++++++-- 6. Allow multiple simultaneous Jobs referencing the same pool write ++++++- to several tapes (some new directive(s) are are probably needed for ++++++- this) (done) ++++++-- Locking (done) ++++++-- Key on Storage rather than Pool (done) ++++++-- Allow multiple drives to use same Pool (change jobq.c DIR) (done). ++++++-- Synchronize multiple drives so that not more ++++++- than one loads a tape and any time (done) ++++++-- 4. Use Changer Device and Changer Command specified in the ++++++- Autochanger resource, if none is found in the Device resource. ++++++- You can continue to specify them in the Device resource if you want ++++++- or need them to be different for each device. ++++++-- 5. Implement a new Device directive (perhaps "Autoselect = yes/no") ++++++- that can allow a Device be part of an Autochanger, and hence the changer ++++++- script protected, but if set to no, will prevent the Device from being ++++++- automatically selected from the changer. This allows the device to ++++++- be directly accessed through its Device name, but not through the ++++++- AutoChanger name. ++++++-#6 Select one from among Multiple Storage Devices for Job ++++++-#5 Events that call a Python program ++++++- (Implemented in Dir/SD) ++++++-- Make sure the Device name is in the Query packet returned. ++++++-- Don't start a second file job if one is already running. ++++++-- Implement EOF/EOV labels for ANSI labels ++++++-- Implement IBM labels. ++++++-- When Python creates a new label, the tape is immediately ++++++- recycled and no label created. This happens when using ++++++- autolabeling -- even when Python doesn't generate the name. ++++++-- Scratch Pool where the volumes can be re-assigned to any Pool. ++++++-- 28-Mar 23:19 rufus-sd: acquire.c:379 Device "DDS-4" (/dev/nst0) ++++++- is busy reading. Job 6 canceled. ++++++-- Remove separate thread for opening devices in SD. On the other ++++++- hand, don't block waiting for open() for devices. ++++++-- Fix code to either handle updating NumVol or to calculate it in ++++++- Dir next_vol.c ++++++-- Ensure that you cannot exclude a directory or a file explicitly ++++++- Included with File. ++++++-#4 Embedded Python Scripting ++++++- (Implemented in Dir/SD/FD) ++++++-- Add Python writable variable for changing the Priority, ++++++- Client, Storage, JobStatus (error), ... ++++++-- SD Python ++++++- - Solicit Events ++++++-- Add disk seeking on restore; turn off seek on tapes. ++++++- stored/match_bsr.c ++++++-- Look at dird_conf.c:1000: warning: `int size' ++++++- might be used uninitialized in this function ++++++-- Indicate when a Job is purged/pruned during restore. ++++++-- Implement some way to turn off automatic pruning in Jobs. ++++++-- Implement a way an Admin Job can prune, possibly multiple ++++++- clients -- Python script? ++++++-- Look at Preben's acl.c error handling code. ++++++-- SD crashes after a tape restore then doing a backup. ++++++-- If drive is opened read/write, close it and re-open ++++++- read-only if doing a restore, and vice-versa. ++++++-- Windows restore: ++++++- data-fd: RestoreFiles.2004-12-07_15.56.42 Error: ++++++- > ..\findlib\../../findlib/create_file.c:275 Could not open e:/: ERR=Der ++++++- > Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen ++++++- > Prozess verwendet wird. ++++++- Restore restores all files, but then fails at the end trying ++++++- to set the attributes of e: ++++++- from failed jobs.- Resolve the problem between Device name and Archive name, ++++++- and fix SD messages. ++++++-- Tell the "restore" user when browsing is no longer possible. ++++++-- Add a restore directory-x ++++++-- Write non-optimized bsrs from the JobMedia and Media records, ++++++- even after Files are pruned. ++++++-- Delete Stripe and Copy from VolParams to save space. ++++++-- Fix option 2 of restore -- list where file is backed up -- require Client, ++++++- then list last 20 backups. ++++++-- Finish implementation of passing all Storage and Device needs to ++++++- the SD. ++++++-- Move test for max wait time exceeded in job.c up -- Peter's idea. ++++++-## Consider moving docs to their own project. ++++++-## Move rescue to its own project. ++++++-- Add client version to the Client name line that prints in ++++++- the Job report. ++++++-- Fix the Rescue CDROM. ++++++-- By the way: on page http://www.bacula.org/?page=tapedrives , at the ++++++- bottom, the link to "Tape Testing Chapter" is broken. It goes to ++++++- /html-manual/... while the others point to /rel-manual/... ++++++-- Device resource needs the "name" of the SD. ++++++-- Specify a single directory to restore. ++++++-- Implement MediaType keyword in bsr? ++++++-- Add a date and time stamp at the beginning of every line in the ++++++- Job report (Volker Sauer). ++++++-- Add level to estimate command. ++++++-- Add "limit=n" for "list jobs" ++++++-- Make bootstrap filename unique. ++++++-- Make Dmsg look at global before calling subroutine. ++++++-- From Chris Hull: ++++++- it seems to be complaining about 12:00pm which should be a valid 12 ++++++- hour time. I changed the time to 11:59am and everything works fine. ++++++- Also 12:00am works fine. 0:00pm also works (which I don't think ++++++- should). None of the values 12:00pm - 12:59pm work for that matter. ++++++-- Require restore via the restore command or make a restore Job ++++++- get the bootstrap file. ++++++-- Implement Maximum Job Spool Size ++++++-- Fix 3993 error in SD. It forgets to look at autochanger ++++++- resource for device command, ... ++++++-- 3. Prevent two drives requesting the same Volume in any given ++++++- autochanger, by checking if a Volume is mounted on another drive ++++++- in an Autochanger. ++++++-- Upgrade to MySQL 4.1.12 See: ++++++- http://dev.mysql.com/doc/mysql/en/Server_SQL_mode.html ++++++-- Add # Job Level date to bsr file ++++++-- Implement "PreferMountedVolumes = yes|no" in Job resource. ++++++-## Integrate web-bacula into a new Bacula project with ++++++- bimagemgr. ++++++-- Cleaning tapes should have Status "Cleaning" rather than append. ++++++-- Make sure that Python has access to Client address/port so that ++++++- it can check if Clients are alive. ++++++-- Review all items in "restore". ++++++-- Fix PostgreSQL GROUP BY problems in restore. ++++++-- Fix PostgreSQL sql problems in bugs. ++++++-- After rename ++++++- 04-Jul 13:01 MainSD: Rufus.2005-07-04_01.05.02 Warning: Director wanted Volume ++++++- "DLT-13Feb04". ++++++- Current Volume "DLT-04Jul05" not acceptable because: ++++++- 1997 Volume "DLT-13Feb04" not in catalog. ++++++- 04-Jul 13:01 MainSD: Please mount Volume "DLT-04Jul05" on Storage Device ++++++- "HP DLT 80" (/dev/nst0) for Job Rufus.2005-07-04_01.05.02 ++++++-## Create a new GUI chapter explaining all the GUI programs. ++++++-- Make "update slots" when pointing to Autochanger, remove ++++++- all Volumes from other drives. "update slots all-drives"? ++++++- No, this is done by modifying mtx-changer to list what is ++++++- in the drives. ++++++-- Finish TLS implementation. ++++++-- Port limiting -m in iptables to prevent DoS attacks ++++++- could cause broken pipes on Bacula. ++++++-6. Build and test the Volume Shadow Copy (VSS) for Win32. ++++++-- Allow cancel of unknown Job ++++++-- State not saved when closing Win32 FD by icon ++++++-- bsr-opt-test fails. bsr deleted. Fix. ++++++-- Move Python daemon variables from Job to Bacula object. ++++++- WorkingDir, ConfigFile ++++++-- Document that Bootstrap files can be written with cataloging ++++++- turned off. ++++++-- Document details of ANSI/IBM labels ++++++-- OS linux 2.4 ++++++- 1) ADIC, DLT, FastStor 4000, 7*20GB ++++++-- Linux Sony LIB-D81, AIT-3 library works. ++++++-- Doc the following ++++++- to activate, check or disable the hardware compression feature on my ++++++- exb-8900 i use the exabyte "MammothTool" you can get it here: ++++++- http://www.exabyte.com/support/online/downloads/index.cfm ++++++- There is a solaris version of this tool. With option -C 0 or 1 you can ++++++- disable or activate compression. Start this tool without any options for ++++++- a small reference. ++++++-- Document Heartbeat Interval in the dealing with firewalls section. ++++++-- Document new CDROM directory. ++++++-- On Win32 working directory must have drive letter ???? ++++++-- On Win32 working directory must be writable by SYSTEM to ++++++- do restores. ++++++-- Document that ChangerDevice is used for Alert command. ++++++-- Add better documentation on how restores can be done ++++++-8. Take one more try at making DVD writing work (no go) ++++++-7. Write a bacula-web document ++++++-- Why isn't the DEVICE structure defined when doing ++++++- a reservation? ++++++-- Multi-drive changer seems to only use drive 0 ++++++- Multiple drives don't seem to be opened. ++++++-- My database is growing ++++++-- Call GetLastError() in the berrno constructor rather ++++++- than delaying until strerror. ++++++-- Tape xxx in drive 0, requested in drive 1 ++++++-- The mount command does not work with drives other than 0. ++++++-- A mount should cause the SD to re-examine what Slot is ++++++- loaded. ++++++-- The SD locks on to the first available drive then ++++++- wants a Volume that is released but in another drive -- ++++++- chaos. ++++++-- Run the regression scripts on Solaris and FreeBSD ++++++-- Figure out how to package gui, and rescue programs. ++++++-- Add a .dir command to restore tree code to eliminate the problem ++++++-- Mount after manually unloading changer causes hang in SD ++++++-- Fix JobACL with restore by JobId. +++++++=== Done -- see kernsdone ++++++Index: kes-1.38 ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/kes-1.38,v ++++++retrieving revision 1.1.2.13 ++++++diff -u -r1.1.2.13 kes-1.38 ++++++--- kes-1.38 14 Nov 2005 20:20:38 -0000 1.1.2.13 +++++++++ kes-1.38 21 Nov 2005 13:13:00 -0000 ++++++@@ -3,6 +3,18 @@ ++++++ ++++++ General: ++++++ +++++++Changes to 1.38.2: +++++++20Oct05 +++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++++- Fix bnet-server bug found on OpenBSD. Bug #486 +++++++- Fix cancel failure bug. Bug #481 +++++++- Fix failure when Pool name has spaces. Bug #487 +++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++++- Fix a couple of free()s in src/filed/acl.c +++++++- Fix memory overrun in bfile.c in building OS X resource +++++++ fork filename. Bug #489 +++++++- Add Pool name to SD status output. +++++++ ++++++ Changes to 1.38.1: ++++++ 14Oct05 ++++++ - Apply SunOS patch for ACLs submitted by David Duchscher. ++++++Index: projects ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/projects,v ++++++retrieving revision 1.12.2.3 ++++++diff -u -r1.12.2.3 projects ++++++--- projects 10 Nov 2005 20:25:27 -0000 1.12.2.3 +++++++++ projects 21 Nov 2005 13:13:00 -0000 ++++++@@ -228,7 +228,175 @@ ++++++ ++++++ Why: Performance enhancement. ++++++ +++++++Item 13: Let Bacula log tape usage and handle drive cleaning cycles. +++++++ Date: November 11, 2005 +++++++ Origin: Arno Lehmann +++++++ Status: +++++++ +++++++ What: Make Bacula manage tape life cycle information and drive +++++++ cleaning cycles. +++++++ +++++++ Why: Both parts of this project are important when operating backups. +++++++ We need to know which tapes need replacement, and we need to +++++++ make sure the drives are cleaned when necessary. While many +++++++ tape libraries and even autoloaders can handle all this +++++++ automatically, support by Bacula can be helpful for smaller +++++++ (older) libraries and single drives. Also, checking drive +++++++ status during operation can prevent some failures (as I had to +++++++ learn the hard way...) +++++++ +++++++ Notes: First, Bacula could (and even does, to some limited extent) +++++++ record tape and drive usage. For tapes, the number of mounts, +++++++ the amount of data, and the time the tape has actually been +++++++ running could be recorded. Data fields for Read and Write time +++++++ and Nmber of mounts already exist in the catalog (I'm not sure +++++++ if VolBytes is the sum of all bytes ever written to that volume +++++++ by Bacula). This information can be important when determining +++++++ which media to replace. For the tape drives known to Bacula, +++++++ similar information is interesting to determine the device +++++++ status and expected life time: Time it's been Reading and +++++++ Writing, number of tape Loads / Unloads / Errors. This +++++++ information is not yet recorded as far as I know. +++++++ +++++++ The next step would be implementing drive cleaning setup. +++++++ Bacula already has knowledge about cleaning tapes. Once it has +++++++ some information about cleaning cycles (measured in drive run +++++++ time, number of tapes used, or calender days, for example) it +++++++ can automatically execute tape cleaning (with an autochanger, +++++++ obviously) or ask for operator assistence loading a cleaning +++++++ tape. +++++++ +++++++ The next step would be to implement TAPEALERT checks not only +++++++ when changing tapes and only sending he information to the +++++++ administrator, but rather checking after each tape error, +++++++ checking on a regular basis (for example after each tape file), +++++++ and also before unloading and after loading a new tape. Then, +++++++ depending on the drives TAPEALERT state and the know drive +++++++ cleaning state Bacula could automatically schedule later +++++++ cleaning, clean immediately, or inform the operator. +++++++ +++++++ Implementing this would perhaps require another catalog change +++++++ and perhaps major changes in SD code and the DIR-SD protocoll, +++++++ so I'd only consider this worth implementing if it would +++++++ actually be used or even needed by many people. +++++++ +++++++Item 14: Merging of multiple backups into a single one. (Also called Synthetic +++++++ Backup or Consolidation). +++++++ +++++++ Origin: Marc Cousin and Eric Bollengier +++++++ Date: 15 November 2005 +++++++ Status: Depends on first implementing project Item 1 (Migration). +++++++ +++++++ What: A merged backup is a backup made without connecting to the Client. +++++++ It would be a Merge of existing backups into a single backup. +++++++ In effect, it is like a restore but to the backup medium. +++++++ +++++++ For instance, say that last sunday we made a full backup. Then +++++++ all week long, we created incremental backups, in order to do +++++++ them fast. Now comes sunday again, and we need another full. +++++++ The merged backup makes it possible to do instead an incremental +++++++ backup (during the night for instance), and then create a merged +++++++ backup during the day, by using the full and incrementals from +++++++ the week. The merged backup will be exactly like a full made +++++++ sunday night on the tape, but the production interruption on the +++++++ Client will be minimal, as the Client will only have to send +++++++ incrementals. +++++++ +++++++ In fact, if it's done correctly, you could merge all the +++++++ Incrementals into single Incremental, or all the Incrementals +++++++ and the last Differential into a new Differential, or the Full, +++++++ last differential and all the Incrementals into a new Full +++++++ backup. And there is no need to involve the Client. +++++++ +++++++ Why: The benefit is that : +++++++ - the Client just does an incremental ; +++++++ - the merged backup on tape is just as a single full backup, +++++++ and can be restored very fast. +++++++ +++++++ This is also a way of reducing the backup data since the old +++++++ data can then be pruned (or not) from the catalog, possibly +++++++ allowing older volumes to be recycled +++++++ +++++++Item 15: Automatic disabling of devices +++++++ Date: 2005-11-11 +++++++ Origin: Peter Eriksson +++++++ Status: +++++++ +++++++ What: After a configurable amount of fatal errors with a tape drive +++++++ Bacula should automatically disable further use of a certain +++++++ tape drive. There should also be "disable"/"enable" commands in +++++++ the "bconsole" tool. +++++++ +++++++ Why: On a multi-drive jukebox there is a possibility of tape drives +++++++ going bad during large backups (needing a cleaning tape run, +++++++ tapes getting stuck). It would be advantageous if Bacula would +++++++ automatically disable further use of a problematic tape drive +++++++ after a configurable amount of errors has occured. +++++++ +++++++ An example: I have a multi-drive jukebox (6 drives, 380+ slots) +++++++ where tapes occasionally get stuck inside the drive. Bacula will +++++++ notice that the "mtx-changer" command will fail and then fail +++++++ any backup jobs trying to use that drive. However, it will still +++++++ keep on trying to run new jobs using that drive and fail - +++++++ forever, and thus failing lots and lots of jobs... Since we have +++++++ many drives Bacula could have just automatically disabled +++++++ further use of that drive and used one of the other ones +++++++ instead. +++++++ +++++++ +++++++Item 16: Directive/mode to backup only file changes, not entire file +++++++ Date: 11 November 2005 +++++++ Origin: Joshua Kugler +++++++ Marek Bajon +++++++ Status: RFC +++++++ +++++++ What: Currently when a file changes, the entire file will be backed up in +++++++ the next incremental or full backup. To save space on the tapes +++++++ it would be nice to have a mode whereby only the changes to the +++++++ file would be backed up when it is changed. +++++++ +++++++ Why: This would save lots of space when backing up large files such as +++++++ logs, mbox files, Outlook PST files and the like. +++++++ +++++++ Notes: This would require the usage of disk-based volumes as comparing +++++++ files would not be feasible using a tape drive. +++++++ +++++++Item 17: Quick release of FD-SD connection +++++++ Origin: Frank Volf (frank at deze dot org) +++++++ Date: 17 november 2005 +++++++ Status: +++++++ +++++++ What: In the bacula implementation a backup is finished after all data +++++++ and attributes are succesfully written to storage. When using a +++++++ tape backup it is very annoying that a backup can take a day, +++++++ simply because the current tape (or whatever) is full and the +++++++ administrator has not put a new one in. During that time the +++++++ system cannot be taken off-line, because there is still an open +++++++ session between the storage daemon and the file daemon on the +++++++ client. +++++++ +++++++ Although this is a very good strategey for making "safe backups" +++++++ This can be annoying for e.g. laptops, that must remain +++++++ connected until the bacukp is completed. +++++++ +++++++ Using a new feature called "migration" it will be possible to +++++++ spool first to harddisk (using a special 'spool' migration +++++++ scheme) and then migrate the backup to tape. +++++++ +++++++ There is still the problem of getting the attributes committed. +++++++ If it takes a very long time to do, with the current code, the +++++++ job has not terminated, and the File daemon is not freed up. The +++++++ Storage daemon should release the File daemon as soon as all the +++++++ file data and all the attributes have been sent to it (the SD). +++++++ Currently the SD waits until everything is on tape and all the +++++++ attributes are transmitted to the Director before signalling +++++++ completion to the FD. I don't think I would have any problem +++++++ changing this. The reason is that even if the FD reports back to +++++++ the Dir that all is OK, the job will not terminate until the SD +++++++ has done the same thing -- so in a way keeping the SD-FD link +++++++ open to the very end is not really very productive ... ++++++ +++++++ Why: Makes backup of laptops much easier. ++++++ ++++++ ++++++ ============= Empty RFC form =========== ++++++@@ -245,33 +413,4 @@ ++++++ ============== End RFC form ============== ++++++ ++++++ ++++++-Items completed for release 1.38.0: ++++++-#4 Embedded Python Scripting (implemented in all Daemons) ++++++-#5 Events that call a Python program (Implemented in all ++++++- daemons, but more cleanup work to be done). ++++++-#6 Select one from among Multiple Storage Devices for Job. ++++++- This is already implemented in 1.37. ++++++-#7 Single Job Writing to Multiple Storage Devices. This is ++++++- currently implemented with a Clone feature. ++++++-#- Full multiple drive Autochanger support (done in 1.37) ++++++-#- Built in support for communications encryption (TLS) ++++++- done by Landon Fuller. ++++++-# Support for Unicode characters ++++++- (via UTF-8) on Win32 machines thanks to Thorsten Engel. ++++++-Item 8: Break the one-to-one Relationship between a Job and a ++++++- Specific Storage Device (or Devices if #10 is implemented). ++++++- ++++++-Completed items from last year's list: ++++++-Item 1: Multiple simultaneous Jobs. (done) ++++++-Item 3: Write the bscan program -- also write a bcopy program (done). ++++++-Item 5: Implement Label templates (done). ++++++-Item 6: Write a regression script (done) ++++++-Item 9: Add SSL to daemon communications (done by Landon Fuller) ++++++-Item 10: Define definitive tape format (done) ++++++-Item 3: GUI for interactive restore. Partially Implemented in 1.34 ++++++- Note, there is now a complete Webmin plugin, a partial ++++++- GNOME console, and an excellent wx-console GUI. ++++++-Item 4: GUI for interactive backup ++++++-Item 2: Job Data Spooling. ++++++- Done: Regular expression matching. ++++++-Item 10: New daemon communication protocol (this has been dropped). +++++++Items completed for release 1.38.0 -- see kernsdone ++++++Index: patches/1.38.1-to-1.38.2.patch ++++++=================================================================== ++++++RCS file: patches/1.38.1-to-1.38.2.patch ++++++diff -N patches/1.38.1-to-1.38.2.patch ++++++--- /dev/null 1 Jan 1970 00:00:00 -0000 +++++++++ patches/1.38.1-to-1.38.2.patch 21 Nov 2005 13:13:01 -0000 ++++++@@ -0,0 +1,1414 @@ +++++++ +++++++ This patch fixes the following bugs: +++++++ +++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator +++++++ says that this patch does not fix his problem) +++++++- Fix cancel failure bug. Bug #481 +++++++- Fix failure when Pool name has spaces. Bug #487 +++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++++- Fix a couple of free()s in src/filed/acl.c +++++++- Fix memory overrun in bfile.c in building OS X resource +++++++ fork filename. Bug #489 +++++++ +++++++This patch is applied to Bacula source version 1.38.1 and will +++++++produce Bacula source version 1.38.2. Apply it with: +++++++ +++++++ cd +++++++ ./configure (your options) if not already done +++++++ patch -p0 <1.38.1-to-1.38.2.patch +++++++ make +++++++ make install +++++++ +++++++? osx_finder.patch +++++++Index: kernstodo +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/kernstodo,v +++++++retrieving revision 1.570.2.6 +++++++diff -u -r1.570.2.6 kernstodo +++++++--- kernstodo 4 Nov 2005 09:16:49 -0000 1.570.2.6 ++++++++++ kernstodo 21 Nov 2005 13:06:36 -0000 +++++++@@ -1,5 +1,5 @@ +++++++ Kern's ToDo List +++++++- 03 November 2005 ++++++++ 21 November 2005 +++++++ +++++++ Major development: +++++++ Project Developer +++++++@@ -7,8 +7,6 @@ +++++++ Version 1.37 Kern (see below) +++++++ ======================================================== +++++++ +++++++-Final items for 1.37 before release: +++++++- +++++++ Document: +++++++ - Does ClientRunAfterJob fail the job on a bad return code? +++++++ - Document cleaning up the spool files: +++++++@@ -18,6 +16,8 @@ +++++++ - Does WildFile match against full name? Doc. +++++++ +++++++ For 1.39: ++++++++- Make sure that all do_prompt() calls in Dir check for ++++++++ -1 (error) and -2 (cancel) returns. +++++++ - Look at -D_FORTIFY_SOURCE=2 +++++++ - Add Win32 FileSet definition somewhere +++++++ - Look at fixing restore status stats in SD. +++++++@@ -27,6 +27,12 @@ +++++++ encountered, read many times (as it currently does), and if the +++++++ block cannot be read, skip to the next block, and try again. If +++++++ that fails, skip to the next file and try again, ... ++++++++- Add level table: ++++++++ create table LevelType (LevelType binary(1), LevelTypeLong tinyblob); ++++++++ insert into LevelType (LevelType,LevelTypeLong) values ++++++++ ("F","Full"), ++++++++ ("D","Diff"), ++++++++ ("I","Inc"); +++++++ - Add ACL to restore only to original location. +++++++ - Add a recursive mark command (rmark) to restore. +++++++ - "Minimum Job Interval = nnn" sets minimum interval between Jobs +++++++@@ -1246,219 +1252,4 @@ +++++++ ==== +++++++ +++++++ +++++++-=== Done +++++++-- Save mount point for directories not traversed with onefs=yes. +++++++-- Add seconds to start and end times in the Job report output. +++++++-- if 2 concurrent backups are attempted on the same tape +++++++- drive (autoloader) into different tape pools, one of them will exit +++++++- fatally instead of halting until the drive is idle +++++++-- Update StartTime if job held in Job Queue. +++++++-- Look at www.nu2.nu/pebuilder as a helper for full windows +++++++- bare metal restore. (done by Scott) +++++++-- Fix orphanned buffers: +++++++- Orphaned buffer: 24 bytes allocated at line 808 of rufus-dir job.c +++++++- Orphaned buffer: 40 bytes allocated at line 45 of rufus-dir alist.c +++++++-- Implement Preben's suggestion to add +++++++- File System Types = ext2, ext3 +++++++- to FileSets, thus simplifying backup of *all* local partitions. +++++++-- Try to open a device on each Job if it was not opened +++++++- when the SD started. +++++++-- Add dump of VolSessionId/Time and FileIndex with bls. +++++++-- If Bacula does not find the right tape in the Autochanger, +++++++- then mark the tape in error and move on rather than asking +++++++- for operator intervention. +++++++-- Cancel command should include JobId in list of Jobs. +++++++-- Add performance testing hooks +++++++-- Bootstrap from JobMedia records. +++++++-- Implement WildFile and WildDir to solve problem of +++++++- saving only *.doc files. +++++++-- Fix +++++++- Please use the "label" command to create a new Volume for: +++++++- Storage: DDS-4-changer +++++++- Media type: +++++++- Pool: Default +++++++- label +++++++- The defined Storage resources are: +++++++-- Copy Changer Device and Changer Command from Autochanger +++++++- to Device resource in SD if none given in Device resource. +++++++-- 1. Automatic use of more than one drive in an autochanger (done) +++++++-- 2. Automatic selection of the correct drive for each Job (i.e. +++++++- selects a drive with an appropriate Volume for the Job) (done) +++++++-- 6. Allow multiple simultaneous Jobs referencing the same pool write +++++++- to several tapes (some new directive(s) are are probably needed for +++++++- this) (done) +++++++-- Locking (done) +++++++-- Key on Storage rather than Pool (done) +++++++-- Allow multiple drives to use same Pool (change jobq.c DIR) (done). +++++++-- Synchronize multiple drives so that not more +++++++- than one loads a tape and any time (done) +++++++-- 4. Use Changer Device and Changer Command specified in the +++++++- Autochanger resource, if none is found in the Device resource. +++++++- You can continue to specify them in the Device resource if you want +++++++- or need them to be different for each device. +++++++-- 5. Implement a new Device directive (perhaps "Autoselect = yes/no") +++++++- that can allow a Device be part of an Autochanger, and hence the changer +++++++- script protected, but if set to no, will prevent the Device from being +++++++- automatically selected from the changer. This allows the device to +++++++- be directly accessed through its Device name, but not through the +++++++- AutoChanger name. +++++++-#6 Select one from among Multiple Storage Devices for Job +++++++-#5 Events that call a Python program +++++++- (Implemented in Dir/SD) +++++++-- Make sure the Device name is in the Query packet returned. +++++++-- Don't start a second file job if one is already running. +++++++-- Implement EOF/EOV labels for ANSI labels +++++++-- Implement IBM labels. +++++++-- When Python creates a new label, the tape is immediately +++++++- recycled and no label created. This happens when using +++++++- autolabeling -- even when Python doesn't generate the name. +++++++-- Scratch Pool where the volumes can be re-assigned to any Pool. +++++++-- 28-Mar 23:19 rufus-sd: acquire.c:379 Device "DDS-4" (/dev/nst0) +++++++- is busy reading. Job 6 canceled. +++++++-- Remove separate thread for opening devices in SD. On the other +++++++- hand, don't block waiting for open() for devices. +++++++-- Fix code to either handle updating NumVol or to calculate it in +++++++- Dir next_vol.c +++++++-- Ensure that you cannot exclude a directory or a file explicitly +++++++- Included with File. +++++++-#4 Embedded Python Scripting +++++++- (Implemented in Dir/SD/FD) +++++++-- Add Python writable variable for changing the Priority, +++++++- Client, Storage, JobStatus (error), ... +++++++-- SD Python +++++++- - Solicit Events +++++++-- Add disk seeking on restore; turn off seek on tapes. +++++++- stored/match_bsr.c +++++++-- Look at dird_conf.c:1000: warning: `int size' +++++++- might be used uninitialized in this function +++++++-- Indicate when a Job is purged/pruned during restore. +++++++-- Implement some way to turn off automatic pruning in Jobs. +++++++-- Implement a way an Admin Job can prune, possibly multiple +++++++- clients -- Python script? +++++++-- Look at Preben's acl.c error handling code. +++++++-- SD crashes after a tape restore then doing a backup. +++++++-- If drive is opened read/write, close it and re-open +++++++- read-only if doing a restore, and vice-versa. +++++++-- Windows restore: +++++++- data-fd: RestoreFiles.2004-12-07_15.56.42 Error: +++++++- > ..\findlib\../../findlib/create_file.c:275 Could not open e:/: ERR=Der +++++++- > Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen +++++++- > Prozess verwendet wird. +++++++- Restore restores all files, but then fails at the end trying +++++++- to set the attributes of e: +++++++- from failed jobs.- Resolve the problem between Device name and Archive name, +++++++- and fix SD messages. +++++++-- Tell the "restore" user when browsing is no longer possible. +++++++-- Add a restore directory-x +++++++-- Write non-optimized bsrs from the JobMedia and Media records, +++++++- even after Files are pruned. +++++++-- Delete Stripe and Copy from VolParams to save space. +++++++-- Fix option 2 of restore -- list where file is backed up -- require Client, +++++++- then list last 20 backups. +++++++-- Finish implementation of passing all Storage and Device needs to +++++++- the SD. +++++++-- Move test for max wait time exceeded in job.c up -- Peter's idea. +++++++-## Consider moving docs to their own project. +++++++-## Move rescue to its own project. +++++++-- Add client version to the Client name line that prints in +++++++- the Job report. +++++++-- Fix the Rescue CDROM. +++++++-- By the way: on page http://www.bacula.org/?page=tapedrives , at the +++++++- bottom, the link to "Tape Testing Chapter" is broken. It goes to +++++++- /html-manual/... while the others point to /rel-manual/... +++++++-- Device resource needs the "name" of the SD. +++++++-- Specify a single directory to restore. +++++++-- Implement MediaType keyword in bsr? +++++++-- Add a date and time stamp at the beginning of every line in the +++++++- Job report (Volker Sauer). +++++++-- Add level to estimate command. +++++++-- Add "limit=n" for "list jobs" +++++++-- Make bootstrap filename unique. +++++++-- Make Dmsg look at global before calling subroutine. +++++++-- From Chris Hull: +++++++- it seems to be complaining about 12:00pm which should be a valid 12 +++++++- hour time. I changed the time to 11:59am and everything works fine. +++++++- Also 12:00am works fine. 0:00pm also works (which I don't think +++++++- should). None of the values 12:00pm - 12:59pm work for that matter. +++++++-- Require restore via the restore command or make a restore Job +++++++- get the bootstrap file. +++++++-- Implement Maximum Job Spool Size +++++++-- Fix 3993 error in SD. It forgets to look at autochanger +++++++- resource for device command, ... +++++++-- 3. Prevent two drives requesting the same Volume in any given +++++++- autochanger, by checking if a Volume is mounted on another drive +++++++- in an Autochanger. +++++++-- Upgrade to MySQL 4.1.12 See: +++++++- http://dev.mysql.com/doc/mysql/en/Server_SQL_mode.html +++++++-- Add # Job Level date to bsr file +++++++-- Implement "PreferMountedVolumes = yes|no" in Job resource. +++++++-## Integrate web-bacula into a new Bacula project with +++++++- bimagemgr. +++++++-- Cleaning tapes should have Status "Cleaning" rather than append. +++++++-- Make sure that Python has access to Client address/port so that +++++++- it can check if Clients are alive. +++++++-- Review all items in "restore". +++++++-- Fix PostgreSQL GROUP BY problems in restore. +++++++-- Fix PostgreSQL sql problems in bugs. +++++++-- After rename +++++++- 04-Jul 13:01 MainSD: Rufus.2005-07-04_01.05.02 Warning: Director wanted Volume +++++++- "DLT-13Feb04". +++++++- Current Volume "DLT-04Jul05" not acceptable because: +++++++- 1997 Volume "DLT-13Feb04" not in catalog. +++++++- 04-Jul 13:01 MainSD: Please mount Volume "DLT-04Jul05" on Storage Device +++++++- "HP DLT 80" (/dev/nst0) for Job Rufus.2005-07-04_01.05.02 +++++++-## Create a new GUI chapter explaining all the GUI programs. +++++++-- Make "update slots" when pointing to Autochanger, remove +++++++- all Volumes from other drives. "update slots all-drives"? +++++++- No, this is done by modifying mtx-changer to list what is +++++++- in the drives. +++++++-- Finish TLS implementation. +++++++-- Port limiting -m in iptables to prevent DoS attacks +++++++- could cause broken pipes on Bacula. +++++++-6. Build and test the Volume Shadow Copy (VSS) for Win32. +++++++-- Allow cancel of unknown Job +++++++-- State not saved when closing Win32 FD by icon +++++++-- bsr-opt-test fails. bsr deleted. Fix. +++++++-- Move Python daemon variables from Job to Bacula object. +++++++- WorkingDir, ConfigFile +++++++-- Document that Bootstrap files can be written with cataloging +++++++- turned off. +++++++-- Document details of ANSI/IBM labels +++++++-- OS linux 2.4 +++++++- 1) ADIC, DLT, FastStor 4000, 7*20GB +++++++-- Linux Sony LIB-D81, AIT-3 library works. +++++++-- Doc the following +++++++- to activate, check or disable the hardware compression feature on my +++++++- exb-8900 i use the exabyte "MammothTool" you can get it here: +++++++- http://www.exabyte.com/support/online/downloads/index.cfm +++++++- There is a solaris version of this tool. With option -C 0 or 1 you can +++++++- disable or activate compression. Start this tool without any options for +++++++- a small reference. +++++++-- Document Heartbeat Interval in the dealing with firewalls section. +++++++-- Document new CDROM directory. +++++++-- On Win32 working directory must have drive letter ???? +++++++-- On Win32 working directory must be writable by SYSTEM to +++++++- do restores. +++++++-- Document that ChangerDevice is used for Alert command. +++++++-- Add better documentation on how restores can be done +++++++-8. Take one more try at making DVD writing work (no go) +++++++-7. Write a bacula-web document +++++++-- Why isn't the DEVICE structure defined when doing +++++++- a reservation? +++++++-- Multi-drive changer seems to only use drive 0 +++++++- Multiple drives don't seem to be opened. +++++++-- My database is growing +++++++-- Call GetLastError() in the berrno constructor rather +++++++- than delaying until strerror. +++++++-- Tape xxx in drive 0, requested in drive 1 +++++++-- The mount command does not work with drives other than 0. +++++++-- A mount should cause the SD to re-examine what Slot is +++++++- loaded. +++++++-- The SD locks on to the first available drive then +++++++- wants a Volume that is released but in another drive -- +++++++- chaos. +++++++-- Run the regression scripts on Solaris and FreeBSD +++++++-- Figure out how to package gui, and rescue programs. +++++++-- Add a .dir command to restore tree code to eliminate the problem +++++++-- Mount after manually unloading changer causes hang in SD +++++++-- Fix JobACL with restore by JobId. ++++++++=== Done -- see kernsdone +++++++Index: kes-1.38 +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/kes-1.38,v +++++++retrieving revision 1.1.2.13 +++++++diff -u -r1.1.2.13 kes-1.38 +++++++--- kes-1.38 14 Nov 2005 20:20:38 -0000 1.1.2.13 ++++++++++ kes-1.38 21 Nov 2005 13:06:36 -0000 +++++++@@ -3,6 +3,17 @@ +++++++ +++++++ General: +++++++ ++++++++Changes after release of 1.38.1: ++++++++20Oct05 ++++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++++++- Fix bnet-server bug found on OpenBSD. Bug #486 ++++++++- Fix cancel failure bug. Bug #481 ++++++++- Fix failure when Pool name has spaces. Bug #487 ++++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++++++- Fix a couple of free()s in src/filed/acl.c ++++++++- Fix memory overrun in bfile.c in building OS X resource ++++++++ fork filename. Bug #489 ++++++++ +++++++ Changes to 1.38.1: +++++++ 14Oct05 +++++++ - Apply SunOS patch for ACLs submitted by David Duchscher. +++++++Index: projects +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/projects,v +++++++retrieving revision 1.12.2.3 +++++++diff -u -r1.12.2.3 projects +++++++--- projects 10 Nov 2005 20:25:27 -0000 1.12.2.3 ++++++++++ projects 21 Nov 2005 13:06:37 -0000 +++++++@@ -228,7 +228,175 @@ +++++++ +++++++ Why: Performance enhancement. +++++++ ++++++++Item 13: Let Bacula log tape usage and handle drive cleaning cycles. ++++++++ Date: November 11, 2005 ++++++++ Origin: Arno Lehmann ++++++++ Status: ++++++++ ++++++++ What: Make Bacula manage tape life cycle information and drive ++++++++ cleaning cycles. ++++++++ ++++++++ Why: Both parts of this project are important when operating backups. ++++++++ We need to know which tapes need replacement, and we need to ++++++++ make sure the drives are cleaned when necessary. While many ++++++++ tape libraries and even autoloaders can handle all this ++++++++ automatically, support by Bacula can be helpful for smaller ++++++++ (older) libraries and single drives. Also, checking drive ++++++++ status during operation can prevent some failures (as I had to ++++++++ learn the hard way...) ++++++++ ++++++++ Notes: First, Bacula could (and even does, to some limited extent) ++++++++ record tape and drive usage. For tapes, the number of mounts, ++++++++ the amount of data, and the time the tape has actually been ++++++++ running could be recorded. Data fields for Read and Write time ++++++++ and Nmber of mounts already exist in the catalog (I'm not sure ++++++++ if VolBytes is the sum of all bytes ever written to that volume ++++++++ by Bacula). This information can be important when determining ++++++++ which media to replace. For the tape drives known to Bacula, ++++++++ similar information is interesting to determine the device ++++++++ status and expected life time: Time it's been Reading and ++++++++ Writing, number of tape Loads / Unloads / Errors. This ++++++++ information is not yet recorded as far as I know. ++++++++ ++++++++ The next step would be implementing drive cleaning setup. ++++++++ Bacula already has knowledge about cleaning tapes. Once it has ++++++++ some information about cleaning cycles (measured in drive run ++++++++ time, number of tapes used, or calender days, for example) it ++++++++ can automatically execute tape cleaning (with an autochanger, ++++++++ obviously) or ask for operator assistence loading a cleaning ++++++++ tape. ++++++++ ++++++++ The next step would be to implement TAPEALERT checks not only ++++++++ when changing tapes and only sending he information to the ++++++++ administrator, but rather checking after each tape error, ++++++++ checking on a regular basis (for example after each tape file), ++++++++ and also before unloading and after loading a new tape. Then, ++++++++ depending on the drives TAPEALERT state and the know drive ++++++++ cleaning state Bacula could automatically schedule later ++++++++ cleaning, clean immediately, or inform the operator. ++++++++ ++++++++ Implementing this would perhaps require another catalog change ++++++++ and perhaps major changes in SD code and the DIR-SD protocoll, ++++++++ so I'd only consider this worth implementing if it would ++++++++ actually be used or even needed by many people. ++++++++ ++++++++Item 14: Merging of multiple backups into a single one. (Also called Synthetic ++++++++ Backup or Consolidation). ++++++++ ++++++++ Origin: Marc Cousin and Eric Bollengier ++++++++ Date: 15 November 2005 ++++++++ Status: Depends on first implementing project Item 1 (Migration). ++++++++ ++++++++ What: A merged backup is a backup made without connecting to the Client. ++++++++ It would be a Merge of existing backups into a single backup. ++++++++ In effect, it is like a restore but to the backup medium. ++++++++ ++++++++ For instance, say that last sunday we made a full backup. Then ++++++++ all week long, we created incremental backups, in order to do ++++++++ them fast. Now comes sunday again, and we need another full. ++++++++ The merged backup makes it possible to do instead an incremental ++++++++ backup (during the night for instance), and then create a merged ++++++++ backup during the day, by using the full and incrementals from ++++++++ the week. The merged backup will be exactly like a full made ++++++++ sunday night on the tape, but the production interruption on the ++++++++ Client will be minimal, as the Client will only have to send ++++++++ incrementals. ++++++++ ++++++++ In fact, if it's done correctly, you could merge all the ++++++++ Incrementals into single Incremental, or all the Incrementals ++++++++ and the last Differential into a new Differential, or the Full, ++++++++ last differential and all the Incrementals into a new Full ++++++++ backup. And there is no need to involve the Client. ++++++++ ++++++++ Why: The benefit is that : ++++++++ - the Client just does an incremental ; ++++++++ - the merged backup on tape is just as a single full backup, ++++++++ and can be restored very fast. ++++++++ ++++++++ This is also a way of reducing the backup data since the old ++++++++ data can then be pruned (or not) from the catalog, possibly ++++++++ allowing older volumes to be recycled ++++++++ ++++++++Item 15: Automatic disabling of devices ++++++++ Date: 2005-11-11 ++++++++ Origin: Peter Eriksson ++++++++ Status: ++++++++ ++++++++ What: After a configurable amount of fatal errors with a tape drive ++++++++ Bacula should automatically disable further use of a certain ++++++++ tape drive. There should also be "disable"/"enable" commands in ++++++++ the "bconsole" tool. ++++++++ ++++++++ Why: On a multi-drive jukebox there is a possibility of tape drives ++++++++ going bad during large backups (needing a cleaning tape run, ++++++++ tapes getting stuck). It would be advantageous if Bacula would ++++++++ automatically disable further use of a problematic tape drive ++++++++ after a configurable amount of errors has occured. ++++++++ ++++++++ An example: I have a multi-drive jukebox (6 drives, 380+ slots) ++++++++ where tapes occasionally get stuck inside the drive. Bacula will ++++++++ notice that the "mtx-changer" command will fail and then fail ++++++++ any backup jobs trying to use that drive. However, it will still ++++++++ keep on trying to run new jobs using that drive and fail - ++++++++ forever, and thus failing lots and lots of jobs... Since we have ++++++++ many drives Bacula could have just automatically disabled ++++++++ further use of that drive and used one of the other ones ++++++++ instead. ++++++++ ++++++++ ++++++++Item 16: Directive/mode to backup only file changes, not entire file ++++++++ Date: 11 November 2005 ++++++++ Origin: Joshua Kugler ++++++++ Marek Bajon ++++++++ Status: RFC ++++++++ ++++++++ What: Currently when a file changes, the entire file will be backed up in ++++++++ the next incremental or full backup. To save space on the tapes ++++++++ it would be nice to have a mode whereby only the changes to the ++++++++ file would be backed up when it is changed. ++++++++ ++++++++ Why: This would save lots of space when backing up large files such as ++++++++ logs, mbox files, Outlook PST files and the like. ++++++++ ++++++++ Notes: This would require the usage of disk-based volumes as comparing ++++++++ files would not be feasible using a tape drive. ++++++++ ++++++++Item 17: Quick release of FD-SD connection ++++++++ Origin: Frank Volf (frank at deze dot org) ++++++++ Date: 17 november 2005 ++++++++ Status: ++++++++ ++++++++ What: In the bacula implementation a backup is finished after all data ++++++++ and attributes are succesfully written to storage. When using a ++++++++ tape backup it is very annoying that a backup can take a day, ++++++++ simply because the current tape (or whatever) is full and the ++++++++ administrator has not put a new one in. During that time the ++++++++ system cannot be taken off-line, because there is still an open ++++++++ session between the storage daemon and the file daemon on the ++++++++ client. ++++++++ ++++++++ Although this is a very good strategey for making "safe backups" ++++++++ This can be annoying for e.g. laptops, that must remain ++++++++ connected until the bacukp is completed. ++++++++ ++++++++ Using a new feature called "migration" it will be possible to ++++++++ spool first to harddisk (using a special 'spool' migration ++++++++ scheme) and then migrate the backup to tape. ++++++++ ++++++++ There is still the problem of getting the attributes committed. ++++++++ If it takes a very long time to do, with the current code, the ++++++++ job has not terminated, and the File daemon is not freed up. The ++++++++ Storage daemon should release the File daemon as soon as all the ++++++++ file data and all the attributes have been sent to it (the SD). ++++++++ Currently the SD waits until everything is on tape and all the ++++++++ attributes are transmitted to the Director before signalling ++++++++ completion to the FD. I don't think I would have any problem ++++++++ changing this. The reason is that even if the FD reports back to ++++++++ the Dir that all is OK, the job will not terminate until the SD ++++++++ has done the same thing -- so in a way keeping the SD-FD link ++++++++ open to the very end is not really very productive ... +++++++ ++++++++ Why: Makes backup of laptops much easier. +++++++ +++++++ +++++++ ============= Empty RFC form =========== +++++++@@ -245,33 +413,4 @@ +++++++ ============== End RFC form ============== +++++++ +++++++ +++++++-Items completed for release 1.38.0: +++++++-#4 Embedded Python Scripting (implemented in all Daemons) +++++++-#5 Events that call a Python program (Implemented in all +++++++- daemons, but more cleanup work to be done). +++++++-#6 Select one from among Multiple Storage Devices for Job. +++++++- This is already implemented in 1.37. +++++++-#7 Single Job Writing to Multiple Storage Devices. This is +++++++- currently implemented with a Clone feature. +++++++-#- Full multiple drive Autochanger support (done in 1.37) +++++++-#- Built in support for communications encryption (TLS) +++++++- done by Landon Fuller. +++++++-# Support for Unicode characters +++++++- (via UTF-8) on Win32 machines thanks to Thorsten Engel. +++++++-Item 8: Break the one-to-one Relationship between a Job and a +++++++- Specific Storage Device (or Devices if #10 is implemented). +++++++- +++++++-Completed items from last year's list: +++++++-Item 1: Multiple simultaneous Jobs. (done) +++++++-Item 3: Write the bscan program -- also write a bcopy program (done). +++++++-Item 5: Implement Label templates (done). +++++++-Item 6: Write a regression script (done) +++++++-Item 9: Add SSL to daemon communications (done by Landon Fuller) +++++++-Item 10: Define definitive tape format (done) +++++++-Item 3: GUI for interactive restore. Partially Implemented in 1.34 +++++++- Note, there is now a complete Webmin plugin, a partial +++++++- GNOME console, and an excellent wx-console GUI. +++++++-Item 4: GUI for interactive backup +++++++-Item 2: Job Data Spooling. +++++++- Done: Regular expression matching. +++++++-Item 10: New daemon communication protocol (this has been dropped). ++++++++Items completed for release 1.38.0 -- see kernsdone +++++++Index: patches/1.38.1-to-1.38.2.patch +++++++=================================================================== +++++++RCS file: patches/1.38.1-to-1.38.2.patch +++++++diff -N patches/1.38.1-to-1.38.2.patch +++++++--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++++++++ patches/1.38.1-to-1.38.2.patch 21 Nov 2005 13:06:37 -0000 +++++++@@ -0,0 +1,412 @@ ++++++++ ++++++++ This patch fixes the following bugs: ++++++++ ++++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++++++++ says that this patch does not fix his problem) ++++++++- Fix cancel failure bug. Bug #481 ++++++++- Fix failure when Pool name has spaces. Bug #487 ++++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++++++- Fix a couple of free()s in src/filed/acl.c ++++++++- Fix memory overrun in bfile.c in building OS X resource ++++++++ fork filename. Bug #489 ++++++++ ++++++++This patch is applied to Bacula source version 1.38.1 and will ++++++++produce Bacula source version 1.38.2. Apply it with: ++++++++ ++++++++ cd ++++++++ ./configure (your options) if not already done ++++++++ patch -p0 <1.38.1-to-1.38.2.patch ++++++++ make ++++++++ make install ++++++++ ++++++++Index: kes-1.38 ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/kes-1.38,v ++++++++retrieving revision 1.1.2.13 ++++++++diff -u -r1.1.2.13 kes-1.38 ++++++++--- kes-1.38 14 Nov 2005 20:20:38 -0000 1.1.2.13 +++++++++++ kes-1.38 21 Nov 2005 12:53:36 -0000 ++++++++@@ -3,6 +3,17 @@ ++++++++ ++++++++ General: ++++++++ +++++++++Changes after release of 1.38.1: +++++++++20Oct05 +++++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++++++- Fix bnet-server bug found on OpenBSD. Bug #486 +++++++++- Fix cancel failure bug. Bug #481 +++++++++- Fix failure when Pool name has spaces. Bug #487 +++++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++++++- Fix a couple of free()s in src/filed/acl.c +++++++++- Fix memory overrun in bfile.c in building OS X resource +++++++++ fork filename. Bug #489 +++++++++ ++++++++ Changes to 1.38.1: ++++++++ 14Oct05 ++++++++ - Apply SunOS patch for ACLs submitted by David Duchscher. ++++++++Index: src/version.h ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/version.h,v ++++++++retrieving revision 1.554.2.14 ++++++++diff -u -r1.554.2.14 version.h ++++++++--- src/version.h 14 Nov 2005 14:21:58 -0000 1.554.2.14 +++++++++++ src/version.h 21 Nov 2005 12:53:37 -0000 ++++++++@@ -3,9 +3,9 @@ ++++++++ */ ++++++++ ++++++++ #undef VERSION ++++++++-#define VERSION "1.38.1" ++++++++-#define BDATE "14 November 2005" ++++++++-#define LSMDATE "14Nov05" +++++++++#define VERSION "1.38.2" +++++++++#define BDATE "20 November 2005" +++++++++#define LSMDATE "20Nov05" ++++++++ ++++++++ /* Debug flags */ ++++++++ #undef DEBUG ++++++++Index: src/dird/catreq.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v ++++++++retrieving revision 1.77.2.1 ++++++++diff -u -r1.77.2.1 catreq.c ++++++++--- src/dird/catreq.c 26 Oct 2005 14:02:04 -0000 1.77.2.1 +++++++++++ src/dird/catreq.c 21 Nov 2005 12:53:37 -0000 ++++++++@@ -10,7 +10,7 @@ ++++++++ * Basic tasks done here: ++++++++ * Handle Catalog services. ++++++++ * ++++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ */ ++++++++ /* ++++++++ Copyright (C) 2001-2005 Kern Sibbald ++++++++@@ -117,6 +117,7 @@ ++++++++ if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) { ++++++++ memset(&pr, 0, sizeof(pr)); ++++++++ bstrncpy(pr.Name, pool_name, sizeof(pr.Name)); +++++++++ unbash_spaces(pr.Name); ++++++++ ok = db_get_pool_record(jcr, jcr->db, &pr); ++++++++ if (ok) { ++++++++ mr.PoolId = pr.PoolId; ++++++++Index: src/dird/ua_restore.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v ++++++++retrieving revision 1.101.2.1 ++++++++diff -u -r1.101.2.1 ua_restore.c ++++++++--- src/dird/ua_restore.c 26 Oct 2005 14:02:04 -0000 1.101.2.1 +++++++++++ src/dird/ua_restore.c 21 Nov 2005 12:53:37 -0000 ++++++++@@ -10,7 +10,7 @@ ++++++++ * ++++++++ * Kern Sibbald, July MMII ++++++++ * ++++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ */ ++++++++ /* ++++++++ Copyright (C) 2002-2005 Kern Sibbald ++++++++@@ -573,6 +573,7 @@ ++++++++ } ++++++++ return 2; ++++++++ +++++++++ case -2: /* Period entered to cancel */ ++++++++ case 11: /* Cancel or quit */ ++++++++ return 0; ++++++++ } ++++++++Index: src/dird/ua_run.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v ++++++++retrieving revision 1.71 ++++++++diff -u -r1.71 ua_run.c ++++++++--- src/dird/ua_run.c 10 Aug 2005 16:35:19 -0000 1.71 +++++++++++ src/dird/ua_run.c 21 Nov 2005 12:53:38 -0000 ++++++++@@ -851,6 +851,8 @@ ++++++++ bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); ++++++++ } ++++++++ goto try_again; +++++++++ case -1: /* error or cancel */ +++++++++ goto bail_out; ++++++++ default: ++++++++ goto try_again; ++++++++ } ++++++++Index: src/dird/ua_select.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v ++++++++retrieving revision 1.65.2.1 ++++++++diff -u -r1.65.2.1 ua_select.c ++++++++--- src/dird/ua_select.c 12 Nov 2005 17:30:52 -0000 1.65.2.1 +++++++++++ src/dird/ua_select.c 21 Nov 2005 12:53:39 -0000 ++++++++@@ -4,7 +4,7 @@ ++++++++ * ++++++++ * Kern Sibbald, October MMI ++++++++ * ++++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ */ ++++++++ /* ++++++++ Copyright (C) 2001-2005 Kern Sibbald ++++++++@@ -149,7 +149,9 @@ ++++++++ } ++++++++ } ++++++++ UnlockRes(); ++++++++- do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)); +++++++++ if (do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)) < 0) { +++++++++ return NULL; +++++++++ } ++++++++ store = (STORE *)GetResWithName(R_STORAGE, name); ++++++++ return store; ++++++++ } ++++++++@@ -170,7 +172,9 @@ ++++++++ } ++++++++ } ++++++++ UnlockRes(); ++++++++- do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)); +++++++++ if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) { +++++++++ return NULL; +++++++++ } ++++++++ fs = (FILESET *)GetResWithName(R_FILESET, name); ++++++++ return fs; ++++++++ } ++++++++@@ -202,7 +206,9 @@ ++++++++ } ++++++++ } ++++++++ UnlockRes(); ++++++++- do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)); +++++++++ if (do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)) < 0) { +++++++++ return NULL; +++++++++ } ++++++++ catalog = (CAT *)GetResWithName(R_CATALOG, name); ++++++++ } ++++++++ return catalog; ++++++++@@ -225,7 +231,9 @@ ++++++++ } ++++++++ } ++++++++ UnlockRes(); ++++++++- do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)); +++++++++ if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) { +++++++++ return NULL; +++++++++ } ++++++++ job = (JOB *)GetResWithName(R_JOB, name); ++++++++ return job; ++++++++ } ++++++++@@ -246,7 +254,9 @@ ++++++++ } ++++++++ } ++++++++ UnlockRes(); ++++++++- do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)); +++++++++ if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) { +++++++++ return NULL; +++++++++ } ++++++++ job = (JOB *)GetResWithName(R_JOB, name); ++++++++ return job; ++++++++ } ++++++++@@ -269,7 +279,9 @@ ++++++++ } ++++++++ } ++++++++ UnlockRes(); ++++++++- do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)); +++++++++ if (do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) { +++++++++ return NULL; +++++++++ } ++++++++ client = (CLIENT *)GetResWithName(R_CLIENT, name); ++++++++ return client; ++++++++ } ++++++++@@ -551,7 +563,9 @@ ++++++++ } ++++++++ } ++++++++ UnlockRes(); ++++++++- do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)); +++++++++ if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) { +++++++++ return NULL; +++++++++ } ++++++++ pool = (POOL *)GetResWithName(R_POOL, name); ++++++++ return pool; ++++++++ } ++++++++@@ -673,12 +687,16 @@ ++++++++ * Returns: -1 on error ++++++++ * index base 0 on success, and choice ++++++++ * is copied to prompt if not NULL +++++++++ * prompt is set to the chosen prompt item string ++++++++ */ ++++++++ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) ++++++++ { ++++++++ int i, item; ++++++++ char pmsg[MAXSTRING]; ++++++++ +++++++++ if (prompt) { +++++++++ *prompt = 0; +++++++++ } ++++++++ if (ua->num_prompts == 2) { ++++++++ item = 1; ++++++++ if (prompt) { ++++++++@@ -698,15 +716,11 @@ ++++++++ bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]); ++++++++ } ++++++++ ++++++++- if (prompt) { ++++++++- *prompt = 0; ++++++++- } ++++++++- ++++++++ for ( ;; ) { ++++++++ /* First item is the prompt string, not the items */ ++++++++ if (ua->num_prompts == 1) { ++++++++ bsendmsg(ua, _("Selection is empty!\n")); ++++++++- item = 0; /* list is empty ! */ +++++++++ item = -1; /* list is empty ! */ ++++++++ break; ++++++++ } ++++++++ if (ua->num_prompts == 2) { ++++++++@@ -741,7 +755,7 @@ ++++++++ free(ua->prompt[i]); ++++++++ } ++++++++ ua->num_prompts = 0; ++++++++- return item - 1; +++++++++ return item>0 ? item-1 : item; ++++++++ } ++++++++ ++++++++ ++++++++Index: src/dird/ua_update.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v ++++++++retrieving revision 1.7 ++++++++diff -u -r1.7 ua_update.c ++++++++--- src/dird/ua_update.c 28 Aug 2005 12:22:02 -0000 1.7 +++++++++++ src/dird/ua_update.c 21 Nov 2005 12:53:39 -0000 ++++++++@@ -590,7 +590,7 @@ ++++++++ update_all_vols_from_pool(ua); ++++++++ return 1; ++++++++ default: /* Done or error */ ++++++++- bsendmsg(ua, _("Selection done.\n")); +++++++++ bsendmsg(ua, _("Selection terminated.\n")); ++++++++ return 1; ++++++++ } ++++++++ } ++++++++Index: src/filed/acl.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v ++++++++retrieving revision 1.10.2.1 ++++++++diff -u -r1.10.2.1 acl.c ++++++++--- src/filed/acl.c 14 Nov 2005 20:20:38 -0000 1.10.2.1 +++++++++++ src/filed/acl.c 21 Nov 2005 12:53:39 -0000 ++++++++@@ -26,7 +26,7 @@ ++++++++ * ++++++++ * Written by Preben 'Peppe' Guldberg, December MMIV ++++++++ * ++++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ */ ++++++++ /* ++++++++ Copyright (C) 2004-2005 Kern Sibbald ++++++++@@ -140,7 +140,7 @@ ++++++++ ++++++++ if ((acl_text = acl_get(jcr->last_fname)) != NULL) { ++++++++ len = pm_strcpy(jcr->acl_text, acl_text); ++++++++- free(acl_text); +++++++++ actuallyfree(acl_text); ++++++++ return len; ++++++++ } ++++++++ return -1; ++++++++@@ -270,7 +270,7 @@ ++++++++ if ((n = getacl(jcr->last_fname, n, acls)) > 0) { ++++++++ if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) { ++++++++ len = pm_strcpy(jcr->acl_text, acl_text); ++++++++- free(acl_text); +++++++++ actuallyfree(acl_text); ++++++++ return len; ++++++++ } ++++++++ } ++++++++Index: src/findlib/bfile.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v ++++++++retrieving revision 1.40 ++++++++diff -u -r1.40 bfile.c ++++++++--- src/findlib/bfile.c 10 Aug 2005 16:35:19 -0000 1.40 +++++++++++ src/findlib/bfile.c 21 Nov 2005 12:53:39 -0000 ++++++++@@ -623,13 +623,10 @@ ++++++++ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) ++++++++ { ++++++++ POOLMEM *rsrc_fname; ++++++++- size_t fname_len; ++++++++ ++++++++- fname_len = strlen(fname); ++++++++ rsrc_fname = get_pool_memory(PM_FNAME); ++++++++- bstrncpy(rsrc_fname, fname, fname_len + 1); ++++++++- bstrncpy(rsrc_fname + fname_len, _PATH_RSRCFORKSPEC, ++++++++- strlen(_PATH_RSRCFORKSPEC) + 1); +++++++++ pm_strcpy(rsrc_fname, fname); +++++++++ pm_strcat(rsrc_fname, _PATH_RSRCFORKSPEC); ++++++++ bopen(bfd, rsrc_fname, flags, mode); ++++++++ free_pool_memory(rsrc_fname); ++++++++ return bfd->fid; ++++++++Index: src/lib/bnet_server.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v ++++++++retrieving revision 1.39 ++++++++diff -u -r1.39 bnet_server.c ++++++++--- src/lib/bnet_server.c 18 Aug 2005 15:37:40 -0000 1.39 +++++++++++ src/lib/bnet_server.c 21 Nov 2005 12:53:39 -0000 ++++++++@@ -153,7 +153,6 @@ ++++++++ /* Error, get out */ ++++++++ foreach_dlist(fd_ptr, &sockfds) { ++++++++ close(fd_ptr->fd); ++++++++- free((void *)fd_ptr); ++++++++ } ++++++++ Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror()); ++++++++ break; ++++++++Index: src/stored/autochanger.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v ++++++++retrieving revision 1.47.2.3 ++++++++diff -u -r1.47.2.3 autochanger.c ++++++++--- src/stored/autochanger.c 12 Nov 2005 17:30:53 -0000 1.47.2.3 +++++++++++ src/stored/autochanger.c 21 Nov 2005 12:53:39 -0000 ++++++++@@ -4,7 +4,7 @@ ++++++++ * ++++++++ * Kern Sibbald, August MMII ++++++++ * ++++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ */ ++++++++ /* ++++++++ Copyright (C) 2002-2005 Kern Sibbald ++++++++@@ -163,6 +163,7 @@ ++++++++ rtn_stat = -1; /* hard error */ ++++++++ } ++++++++ Dmsg2(400, "load slot %d status=%d\n", slot, status); +++++++++ unlock_changer(dcr); ++++++++ } else { ++++++++ status = 0; /* we got what we want */ ++++++++ dev->Slot = slot; /* set currently loaded slot */ ++++++++@@ -174,7 +175,6 @@ ++++++++ } else { ++++++++ rtn_stat = 0; /* no changer found */ ++++++++ } ++++++++- unlock_changer(dcr); ++++++++ free_pool_memory(changer); ++++++++ return rtn_stat; ++++++++ ++++++++Index: src/tray-monitor/tray-monitor.c ++++++++=================================================================== ++++++++RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v ++++++++retrieving revision 1.25.2.1 ++++++++diff -u -r1.25.2.1 tray-monitor.c ++++++++--- src/tray-monitor/tray-monitor.c 1 Oct 2005 10:20:18 -0000 1.25.2.1 +++++++++++ src/tray-monitor/tray-monitor.c 21 Nov 2005 12:53:39 -0000 ++++++++@@ -4,7 +4,7 @@ ++++++++ * ++++++++ * Nicolas Boichat, August MMIV ++++++++ * ++++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ */ ++++++++ ++++++++ /* ++++++++@@ -881,7 +881,7 @@ ++++++++ } ++++++++ ++++++++ if (item->D_sock == NULL) { ++++++++- g_slist_append(*list, (void *)_("Cannot connect to daemon.\n")); +++++++++ g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n"))); ++++++++ changeStatusMessage(item, _("Cannot connect to daemon.")); ++++++++ item->state = error; ++++++++ item->oldstate = error; +++++++Index: patches/patches-1.38.0 +++++++=================================================================== +++++++RCS file: patches/patches-1.38.0 +++++++diff -N patches/patches-1.38.0 +++++++Index: patches/patches-1.38.1 +++++++=================================================================== +++++++RCS file: patches/patches-1.38.1 +++++++diff -N patches/patches-1.38.1 +++++++--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++++++++ patches/patches-1.38.1 21 Nov 2005 13:06:37 -0000 +++++++@@ -0,0 +1,14 @@ ++++++++20Nov05 1.38.1-to-1.38.2.patch ++++++++ This patch fixes the following bugs: ++++++++ ++++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++++++++ says this patch does not fix his problem) ++++++++- Fix cancel failure bug. Bug #481 ++++++++- Fix failure when Pool name has spaces. Bug #487 ++++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++++++- Fix a couple of free()s in src/filed/acl.c ++++++++- Fix memory overrun in bfile.c in building OS X resource ++++++++ fork filename. Bug #489 ++++++++ ++++++++ +++++++Index: src/version.h +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/version.h,v +++++++retrieving revision 1.554.2.14 +++++++diff -u -r1.554.2.14 version.h +++++++--- src/version.h 14 Nov 2005 14:21:58 -0000 1.554.2.14 ++++++++++ src/version.h 21 Nov 2005 13:06:37 -0000 +++++++@@ -3,9 +3,9 @@ +++++++ */ +++++++ +++++++ #undef VERSION +++++++-#define VERSION "1.38.1" +++++++-#define BDATE "14 November 2005" +++++++-#define LSMDATE "14Nov05" ++++++++#define VERSION "1.38.2" ++++++++#define BDATE "20 November 2005" ++++++++#define LSMDATE "20Nov05" +++++++ +++++++ /* Debug flags */ +++++++ #undef DEBUG +++++++Index: src/dird/catreq.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v +++++++retrieving revision 1.77.2.1 +++++++diff -u -r1.77.2.1 catreq.c +++++++--- src/dird/catreq.c 26 Oct 2005 14:02:04 -0000 1.77.2.1 ++++++++++ src/dird/catreq.c 21 Nov 2005 13:06:37 -0000 +++++++@@ -10,7 +10,7 @@ +++++++ * Basic tasks done here: +++++++ * Handle Catalog services. +++++++ * +++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ */ +++++++ /* +++++++ Copyright (C) 2001-2005 Kern Sibbald +++++++@@ -117,6 +117,7 @@ +++++++ if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) { +++++++ memset(&pr, 0, sizeof(pr)); +++++++ bstrncpy(pr.Name, pool_name, sizeof(pr.Name)); ++++++++ unbash_spaces(pr.Name); +++++++ ok = db_get_pool_record(jcr, jcr->db, &pr); +++++++ if (ok) { +++++++ mr.PoolId = pr.PoolId; +++++++Index: src/dird/ua_restore.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v +++++++retrieving revision 1.101.2.1 +++++++diff -u -r1.101.2.1 ua_restore.c +++++++--- src/dird/ua_restore.c 26 Oct 2005 14:02:04 -0000 1.101.2.1 ++++++++++ src/dird/ua_restore.c 21 Nov 2005 13:06:37 -0000 +++++++@@ -10,7 +10,7 @@ +++++++ * +++++++ * Kern Sibbald, July MMII +++++++ * +++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ */ +++++++ /* +++++++ Copyright (C) 2002-2005 Kern Sibbald +++++++@@ -573,6 +573,7 @@ +++++++ } +++++++ return 2; +++++++ ++++++++ case -2: /* Period entered to cancel */ +++++++ case 11: /* Cancel or quit */ +++++++ return 0; +++++++ } +++++++Index: src/dird/ua_run.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v +++++++retrieving revision 1.71 +++++++diff -u -r1.71 ua_run.c +++++++--- src/dird/ua_run.c 10 Aug 2005 16:35:19 -0000 1.71 ++++++++++ src/dird/ua_run.c 21 Nov 2005 13:06:38 -0000 +++++++@@ -851,6 +851,8 @@ +++++++ bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); +++++++ } +++++++ goto try_again; ++++++++ case -1: /* error or cancel */ ++++++++ goto bail_out; +++++++ default: +++++++ goto try_again; +++++++ } +++++++Index: src/dird/ua_select.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v +++++++retrieving revision 1.65.2.1 +++++++diff -u -r1.65.2.1 ua_select.c +++++++--- src/dird/ua_select.c 12 Nov 2005 17:30:52 -0000 1.65.2.1 ++++++++++ src/dird/ua_select.c 21 Nov 2005 13:06:38 -0000 +++++++@@ -4,7 +4,7 @@ +++++++ * +++++++ * Kern Sibbald, October MMI +++++++ * +++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ */ +++++++ /* +++++++ Copyright (C) 2001-2005 Kern Sibbald +++++++@@ -149,7 +149,9 @@ +++++++ } +++++++ } +++++++ UnlockRes(); +++++++- do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)); ++++++++ if (do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)) < 0) { ++++++++ return NULL; ++++++++ } +++++++ store = (STORE *)GetResWithName(R_STORAGE, name); +++++++ return store; +++++++ } +++++++@@ -170,7 +172,9 @@ +++++++ } +++++++ } +++++++ UnlockRes(); +++++++- do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)); ++++++++ if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) { ++++++++ return NULL; ++++++++ } +++++++ fs = (FILESET *)GetResWithName(R_FILESET, name); +++++++ return fs; +++++++ } +++++++@@ -202,7 +206,9 @@ +++++++ } +++++++ } +++++++ UnlockRes(); +++++++- do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)); ++++++++ if (do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)) < 0) { ++++++++ return NULL; ++++++++ } +++++++ catalog = (CAT *)GetResWithName(R_CATALOG, name); +++++++ } +++++++ return catalog; +++++++@@ -225,7 +231,9 @@ +++++++ } +++++++ } +++++++ UnlockRes(); +++++++- do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)); ++++++++ if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) { ++++++++ return NULL; ++++++++ } +++++++ job = (JOB *)GetResWithName(R_JOB, name); +++++++ return job; +++++++ } +++++++@@ -246,7 +254,9 @@ +++++++ } +++++++ } +++++++ UnlockRes(); +++++++- do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)); ++++++++ if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) { ++++++++ return NULL; ++++++++ } +++++++ job = (JOB *)GetResWithName(R_JOB, name); +++++++ return job; +++++++ } +++++++@@ -269,7 +279,9 @@ +++++++ } +++++++ } +++++++ UnlockRes(); +++++++- do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)); ++++++++ if (do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) { ++++++++ return NULL; ++++++++ } +++++++ client = (CLIENT *)GetResWithName(R_CLIENT, name); +++++++ return client; +++++++ } +++++++@@ -551,7 +563,9 @@ +++++++ } +++++++ } +++++++ UnlockRes(); +++++++- do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)); ++++++++ if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) { ++++++++ return NULL; ++++++++ } +++++++ pool = (POOL *)GetResWithName(R_POOL, name); +++++++ return pool; +++++++ } +++++++@@ -673,12 +687,16 @@ +++++++ * Returns: -1 on error +++++++ * index base 0 on success, and choice +++++++ * is copied to prompt if not NULL ++++++++ * prompt is set to the chosen prompt item string +++++++ */ +++++++ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) +++++++ { +++++++ int i, item; +++++++ char pmsg[MAXSTRING]; +++++++ ++++++++ if (prompt) { ++++++++ *prompt = 0; ++++++++ } +++++++ if (ua->num_prompts == 2) { +++++++ item = 1; +++++++ if (prompt) { +++++++@@ -698,15 +716,11 @@ +++++++ bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]); +++++++ } +++++++ +++++++- if (prompt) { +++++++- *prompt = 0; +++++++- } +++++++- +++++++ for ( ;; ) { +++++++ /* First item is the prompt string, not the items */ +++++++ if (ua->num_prompts == 1) { +++++++ bsendmsg(ua, _("Selection is empty!\n")); +++++++- item = 0; /* list is empty ! */ ++++++++ item = -1; /* list is empty ! */ +++++++ break; +++++++ } +++++++ if (ua->num_prompts == 2) { +++++++@@ -741,7 +755,7 @@ +++++++ free(ua->prompt[i]); +++++++ } +++++++ ua->num_prompts = 0; +++++++- return item - 1; ++++++++ return item>0 ? item-1 : item; +++++++ } +++++++ +++++++ +++++++Index: src/dird/ua_update.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v +++++++retrieving revision 1.7 +++++++diff -u -r1.7 ua_update.c +++++++--- src/dird/ua_update.c 28 Aug 2005 12:22:02 -0000 1.7 ++++++++++ src/dird/ua_update.c 21 Nov 2005 13:06:38 -0000 +++++++@@ -590,7 +590,7 @@ +++++++ update_all_vols_from_pool(ua); +++++++ return 1; +++++++ default: /* Done or error */ +++++++- bsendmsg(ua, _("Selection done.\n")); ++++++++ bsendmsg(ua, _("Selection terminated.\n")); +++++++ return 1; +++++++ } +++++++ } +++++++Index: src/filed/acl.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v +++++++retrieving revision 1.10.2.1 +++++++diff -u -r1.10.2.1 acl.c +++++++--- src/filed/acl.c 14 Nov 2005 20:20:38 -0000 1.10.2.1 ++++++++++ src/filed/acl.c 21 Nov 2005 13:06:38 -0000 +++++++@@ -26,7 +26,7 @@ +++++++ * +++++++ * Written by Preben 'Peppe' Guldberg, December MMIV +++++++ * +++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ */ +++++++ /* +++++++ Copyright (C) 2004-2005 Kern Sibbald +++++++@@ -140,7 +140,7 @@ +++++++ +++++++ if ((acl_text = acl_get(jcr->last_fname)) != NULL) { +++++++ len = pm_strcpy(jcr->acl_text, acl_text); +++++++- free(acl_text); ++++++++ actuallyfree(acl_text); +++++++ return len; +++++++ } +++++++ return -1; +++++++@@ -270,7 +270,7 @@ +++++++ if ((n = getacl(jcr->last_fname, n, acls)) > 0) { +++++++ if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) { +++++++ len = pm_strcpy(jcr->acl_text, acl_text); +++++++- free(acl_text); ++++++++ actuallyfree(acl_text); +++++++ return len; +++++++ } +++++++ } +++++++Index: src/findlib/bfile.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v +++++++retrieving revision 1.40 +++++++diff -u -r1.40 bfile.c +++++++--- src/findlib/bfile.c 10 Aug 2005 16:35:19 -0000 1.40 ++++++++++ src/findlib/bfile.c 21 Nov 2005 13:06:38 -0000 +++++++@@ -623,13 +623,10 @@ +++++++ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) +++++++ { +++++++ POOLMEM *rsrc_fname; +++++++- size_t fname_len; +++++++ +++++++- fname_len = strlen(fname); +++++++ rsrc_fname = get_pool_memory(PM_FNAME); +++++++- bstrncpy(rsrc_fname, fname, fname_len + 1); +++++++- bstrncpy(rsrc_fname + fname_len, _PATH_RSRCFORKSPEC, +++++++- strlen(_PATH_RSRCFORKSPEC) + 1); ++++++++ pm_strcpy(rsrc_fname, fname); ++++++++ pm_strcat(rsrc_fname, _PATH_RSRCFORKSPEC); +++++++ bopen(bfd, rsrc_fname, flags, mode); +++++++ free_pool_memory(rsrc_fname); +++++++ return bfd->fid; +++++++Index: src/lib/bnet_server.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v +++++++retrieving revision 1.39 +++++++diff -u -r1.39 bnet_server.c +++++++--- src/lib/bnet_server.c 18 Aug 2005 15:37:40 -0000 1.39 ++++++++++ src/lib/bnet_server.c 21 Nov 2005 13:06:38 -0000 +++++++@@ -153,7 +153,6 @@ +++++++ /* Error, get out */ +++++++ foreach_dlist(fd_ptr, &sockfds) { +++++++ close(fd_ptr->fd); +++++++- free((void *)fd_ptr); +++++++ } +++++++ Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror()); +++++++ break; +++++++Index: src/stored/autochanger.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v +++++++retrieving revision 1.47.2.3 +++++++diff -u -r1.47.2.3 autochanger.c +++++++--- src/stored/autochanger.c 12 Nov 2005 17:30:53 -0000 1.47.2.3 ++++++++++ src/stored/autochanger.c 21 Nov 2005 13:06:38 -0000 +++++++@@ -4,7 +4,7 @@ +++++++ * +++++++ * Kern Sibbald, August MMII +++++++ * +++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ */ +++++++ /* +++++++ Copyright (C) 2002-2005 Kern Sibbald +++++++@@ -163,6 +163,7 @@ +++++++ rtn_stat = -1; /* hard error */ +++++++ } +++++++ Dmsg2(400, "load slot %d status=%d\n", slot, status); ++++++++ unlock_changer(dcr); +++++++ } else { +++++++ status = 0; /* we got what we want */ +++++++ dev->Slot = slot; /* set currently loaded slot */ +++++++@@ -174,7 +175,6 @@ +++++++ } else { +++++++ rtn_stat = 0; /* no changer found */ +++++++ } +++++++- unlock_changer(dcr); +++++++ free_pool_memory(changer); +++++++ return rtn_stat; +++++++ +++++++Index: src/stored/status.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/stored/status.c,v +++++++retrieving revision 1.44.2.1 +++++++diff -u -r1.44.2.1 status.c +++++++--- src/stored/status.c 6 Oct 2005 07:04:13 -0000 1.44.2.1 ++++++++++ src/stored/status.c 21 Nov 2005 13:06:39 -0000 +++++++@@ -264,6 +264,7 @@ +++++++ bool found = false; +++++++ int bps, sec; +++++++ JCR *jcr; ++++++++ DCR *dcr; +++++++ char JobName[MAX_NAME_LENGTH]; +++++++ char b1[30], b2[30], b3[30]; +++++++ +++++++@@ -273,7 +274,8 @@ +++++++ bnet_fsend(user, _("%s Job %s waiting for Client connection.\n"), +++++++ job_type_to_str(jcr->JobType), jcr->Job); +++++++ } +++++++- if (jcr->dcr && jcr->dcr->device) { ++++++++ dcr = jcr->dcr; ++++++++ if (dcr && dcr->device) { +++++++ bstrncpy(JobName, jcr->Job, sizeof(JobName)); +++++++ /* There are three periods after the Job name */ +++++++ char *p; +++++++@@ -282,13 +284,16 @@ +++++++ *p = 0; +++++++ } +++++++ } +++++++- bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\" device=\"%s\"\n"), ++++++++ bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\"\n" ++++++++ " pool=\"%s\" device=\"%s\"\n"), +++++++ job_level_to_str(jcr->JobLevel), +++++++ job_type_to_str(jcr->JobType), +++++++ JobName, +++++++ jcr->JobId, +++++++- jcr->dcr->VolumeName, +++++++- jcr->dcr->device->device_name); ++++++++ dcr->VolumeName, ++++++++ dcr->pool_name, ++++++++ dcr->dev?dcr->dev->print_name(): ++++++++ dcr->device->device_name); +++++++ sec = time(NULL) - jcr->run_time; +++++++ if (sec <= 0) { +++++++ sec = 1; +++++++Index: src/stored/stored_conf.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/stored/stored_conf.c,v +++++++retrieving revision 1.76 +++++++diff -u -r1.76 stored_conf.c +++++++--- src/stored/stored_conf.c 9 Sep 2005 09:40:04 -0000 1.76 ++++++++++ src/stored/stored_conf.c 21 Nov 2005 13:06:39 -0000 +++++++@@ -222,16 +222,16 @@ +++++++ res->res_dev.hdr.name, +++++++ res->res_dev.media_type, res->res_dev.device_name, +++++++ res->res_dev.label_type); +++++++- sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d\n", ++++++++ sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n", +++++++ res->res_dev.max_rewind_wait, res->res_dev.min_block_size, +++++++- res->res_dev.max_block_size); ++++++++ res->res_dev.max_block_size, res->res_dev.max_changer_wait); +++++++ sendit(sock, " max_jobs=%d max_files=%" lld " max_size=%" lld "\n", +++++++ res->res_dev.max_volume_jobs, res->res_dev.max_volume_files, +++++++ res->res_dev.max_volume_size); +++++++ sendit(sock, " max_file_size=%" lld " capacity=%" lld "\n", +++++++ res->res_dev.max_file_size, res->res_dev.volume_capacity); +++++++- sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); +++++++- sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", ++++++++ sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); ++++++++ sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", +++++++ res->res_dev.max_spool_size, res->res_dev.max_job_spool_size); +++++++ if (res->res_dev.changer_res) { +++++++ sendit(sock, " changer=%p\n", res->res_dev.changer_res); +++++++Index: src/tray-monitor/tray-monitor.c +++++++=================================================================== +++++++RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v +++++++retrieving revision 1.25.2.1 +++++++diff -u -r1.25.2.1 tray-monitor.c +++++++--- src/tray-monitor/tray-monitor.c 1 Oct 2005 10:20:18 -0000 1.25.2.1 ++++++++++ src/tray-monitor/tray-monitor.c 21 Nov 2005 13:06:39 -0000 +++++++@@ -4,7 +4,7 @@ +++++++ * +++++++ * Nicolas Boichat, August MMIV +++++++ * +++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ */ +++++++ +++++++ /* +++++++@@ -881,7 +881,7 @@ +++++++ } +++++++ +++++++ if (item->D_sock == NULL) { +++++++- g_slist_append(*list, (void *)_("Cannot connect to daemon.\n")); ++++++++ g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n"))); +++++++ changeStatusMessage(item, _("Cannot connect to daemon.")); +++++++ item->state = error; +++++++ item->oldstate = error; ++++++Index: patches/patches-1.38.0 ++++++=================================================================== ++++++RCS file: patches/patches-1.38.0 ++++++diff -N patches/patches-1.38.0 ++++++Index: patches/patches-1.38.1 ++++++=================================================================== ++++++RCS file: patches/patches-1.38.1 ++++++diff -N patches/patches-1.38.1 ++++++--- /dev/null 1 Jan 1970 00:00:00 -0000 +++++++++ patches/patches-1.38.1 21 Nov 2005 13:13:01 -0000 ++++++@@ -0,0 +1,14 @@ +++++++20Nov05 1.38.1-to-1.38.2.patch +++++++ This patch fixes the following bugs: +++++++ +++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator +++++++ says this patch does not fix his problem) +++++++- Fix cancel failure bug. Bug #481 +++++++- Fix failure when Pool name has spaces. Bug #487 +++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++++- Fix a couple of free()s in src/filed/acl.c +++++++- Fix memory overrun in bfile.c in building OS X resource +++++++ fork filename. Bug #489 +++++++ +++++++ ++++++Index: src/version.h ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/version.h,v ++++++retrieving revision 1.554.2.14 ++++++diff -u -r1.554.2.14 version.h ++++++--- src/version.h 14 Nov 2005 14:21:58 -0000 1.554.2.14 +++++++++ src/version.h 21 Nov 2005 13:13:01 -0000 ++++++@@ -3,9 +3,9 @@ ++++++ */ ++++++ ++++++ #undef VERSION ++++++-#define VERSION "1.38.1" ++++++-#define BDATE "14 November 2005" ++++++-#define LSMDATE "14Nov05" +++++++#define VERSION "1.38.2" +++++++#define BDATE "20 November 2005" +++++++#define LSMDATE "20Nov05" ++++++ ++++++ /* Debug flags */ ++++++ #undef DEBUG ++++++Index: src/dird/catreq.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v ++++++retrieving revision 1.77.2.1 ++++++diff -u -r1.77.2.1 catreq.c ++++++--- src/dird/catreq.c 26 Oct 2005 14:02:04 -0000 1.77.2.1 +++++++++ src/dird/catreq.c 21 Nov 2005 13:13:01 -0000 ++++++@@ -10,7 +10,7 @@ ++++++ * Basic tasks done here: ++++++ * Handle Catalog services. ++++++ * ++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ */ ++++++ /* ++++++ Copyright (C) 2001-2005 Kern Sibbald ++++++@@ -117,6 +117,7 @@ ++++++ if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) { ++++++ memset(&pr, 0, sizeof(pr)); ++++++ bstrncpy(pr.Name, pool_name, sizeof(pr.Name)); +++++++ unbash_spaces(pr.Name); ++++++ ok = db_get_pool_record(jcr, jcr->db, &pr); ++++++ if (ok) { ++++++ mr.PoolId = pr.PoolId; ++++++Index: src/dird/ua_restore.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v ++++++retrieving revision 1.101.2.1 ++++++diff -u -r1.101.2.1 ua_restore.c ++++++--- src/dird/ua_restore.c 26 Oct 2005 14:02:04 -0000 1.101.2.1 +++++++++ src/dird/ua_restore.c 21 Nov 2005 13:13:01 -0000 ++++++@@ -10,7 +10,7 @@ ++++++ * ++++++ * Kern Sibbald, July MMII ++++++ * ++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ */ ++++++ /* ++++++ Copyright (C) 2002-2005 Kern Sibbald ++++++@@ -409,7 +409,7 @@ ++++++ } ++++++ done = true; ++++++ switch (do_prompt(ua, "", _("Select item: "), NULL, 0)) { ++++++- case -1: /* error */ +++++++ case -1: /* error or cancel */ ++++++ return 0; ++++++ case 0: /* list last 20 Jobs run */ ++++++ gui_save = ua->jcr->gui; ++++++Index: src/dird/ua_run.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v ++++++retrieving revision 1.71 ++++++diff -u -r1.71 ua_run.c ++++++--- src/dird/ua_run.c 10 Aug 2005 16:35:19 -0000 1.71 +++++++++ src/dird/ua_run.c 21 Nov 2005 13:13:02 -0000 ++++++@@ -851,6 +851,8 @@ ++++++ bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); ++++++ } ++++++ goto try_again; +++++++ case -1: /* error or cancel */ +++++++ goto bail_out; ++++++ default: ++++++ goto try_again; ++++++ } ++++++Index: src/dird/ua_select.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v ++++++retrieving revision 1.65.2.1 ++++++diff -u -r1.65.2.1 ua_select.c ++++++--- src/dird/ua_select.c 12 Nov 2005 17:30:52 -0000 1.65.2.1 +++++++++ src/dird/ua_select.c 21 Nov 2005 13:13:02 -0000 ++++++@@ -4,7 +4,7 @@ ++++++ * ++++++ * Kern Sibbald, October MMI ++++++ * ++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ */ ++++++ /* ++++++ Copyright (C) 2001-2005 Kern Sibbald ++++++@@ -149,7 +149,9 @@ ++++++ } ++++++ } ++++++ UnlockRes(); ++++++- do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)); +++++++ if (do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)) < 0) { +++++++ return NULL; +++++++ } ++++++ store = (STORE *)GetResWithName(R_STORAGE, name); ++++++ return store; ++++++ } ++++++@@ -170,7 +172,9 @@ ++++++ } ++++++ } ++++++ UnlockRes(); ++++++- do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)); +++++++ if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) { +++++++ return NULL; +++++++ } ++++++ fs = (FILESET *)GetResWithName(R_FILESET, name); ++++++ return fs; ++++++ } ++++++@@ -202,7 +206,9 @@ ++++++ } ++++++ } ++++++ UnlockRes(); ++++++- do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)); +++++++ if (do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)) < 0) { +++++++ return NULL; +++++++ } ++++++ catalog = (CAT *)GetResWithName(R_CATALOG, name); ++++++ } ++++++ return catalog; ++++++@@ -225,7 +231,9 @@ ++++++ } ++++++ } ++++++ UnlockRes(); ++++++- do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)); +++++++ if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) { +++++++ return NULL; +++++++ } ++++++ job = (JOB *)GetResWithName(R_JOB, name); ++++++ return job; ++++++ } ++++++@@ -246,7 +254,9 @@ ++++++ } ++++++ } ++++++ UnlockRes(); ++++++- do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)); +++++++ if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) { +++++++ return NULL; +++++++ } ++++++ job = (JOB *)GetResWithName(R_JOB, name); ++++++ return job; ++++++ } ++++++@@ -269,7 +279,9 @@ ++++++ } ++++++ } ++++++ UnlockRes(); ++++++- do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)); +++++++ if (do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) { +++++++ return NULL; +++++++ } ++++++ client = (CLIENT *)GetResWithName(R_CLIENT, name); ++++++ return client; ++++++ } ++++++@@ -551,7 +563,9 @@ ++++++ } ++++++ } ++++++ UnlockRes(); ++++++- do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)); +++++++ if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) { +++++++ return NULL; +++++++ } ++++++ pool = (POOL *)GetResWithName(R_POOL, name); ++++++ return pool; ++++++ } ++++++@@ -673,12 +687,16 @@ ++++++ * Returns: -1 on error ++++++ * index base 0 on success, and choice ++++++ * is copied to prompt if not NULL +++++++ * prompt is set to the chosen prompt item string ++++++ */ ++++++ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) ++++++ { ++++++ int i, item; ++++++ char pmsg[MAXSTRING]; ++++++ +++++++ if (prompt) { +++++++ *prompt = 0; +++++++ } ++++++ if (ua->num_prompts == 2) { ++++++ item = 1; ++++++ if (prompt) { ++++++@@ -698,15 +716,11 @@ ++++++ bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]); ++++++ } ++++++ ++++++- if (prompt) { ++++++- *prompt = 0; ++++++- } ++++++- ++++++ for ( ;; ) { ++++++ /* First item is the prompt string, not the items */ ++++++ if (ua->num_prompts == 1) { ++++++ bsendmsg(ua, _("Selection is empty!\n")); ++++++- item = 0; /* list is empty ! */ +++++++ item = -1; /* list is empty ! */ ++++++ break; ++++++ } ++++++ if (ua->num_prompts == 2) { ++++++@@ -741,7 +755,7 @@ ++++++ free(ua->prompt[i]); ++++++ } ++++++ ua->num_prompts = 0; ++++++- return item - 1; +++++++ return item>0 ? item-1 : item; ++++++ } ++++++ ++++++ ++++++Index: src/dird/ua_update.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v ++++++retrieving revision 1.7 ++++++diff -u -r1.7 ua_update.c ++++++--- src/dird/ua_update.c 28 Aug 2005 12:22:02 -0000 1.7 +++++++++ src/dird/ua_update.c 21 Nov 2005 13:13:02 -0000 ++++++@@ -590,7 +590,7 @@ ++++++ update_all_vols_from_pool(ua); ++++++ return 1; ++++++ default: /* Done or error */ ++++++- bsendmsg(ua, _("Selection done.\n")); +++++++ bsendmsg(ua, _("Selection terminated.\n")); ++++++ return 1; ++++++ } ++++++ } ++++++Index: src/filed/acl.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v ++++++retrieving revision 1.10.2.1 ++++++diff -u -r1.10.2.1 acl.c ++++++--- src/filed/acl.c 14 Nov 2005 20:20:38 -0000 1.10.2.1 +++++++++ src/filed/acl.c 21 Nov 2005 13:13:02 -0000 ++++++@@ -26,7 +26,7 @@ ++++++ * ++++++ * Written by Preben 'Peppe' Guldberg, December MMIV ++++++ * ++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ */ ++++++ /* ++++++ Copyright (C) 2004-2005 Kern Sibbald ++++++@@ -140,7 +140,7 @@ ++++++ ++++++ if ((acl_text = acl_get(jcr->last_fname)) != NULL) { ++++++ len = pm_strcpy(jcr->acl_text, acl_text); ++++++- free(acl_text); +++++++ actuallyfree(acl_text); ++++++ return len; ++++++ } ++++++ return -1; ++++++@@ -270,7 +270,7 @@ ++++++ if ((n = getacl(jcr->last_fname, n, acls)) > 0) { ++++++ if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) { ++++++ len = pm_strcpy(jcr->acl_text, acl_text); ++++++- free(acl_text); +++++++ actuallyfree(acl_text); ++++++ return len; ++++++ } ++++++ } ++++++Index: src/findlib/bfile.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v ++++++retrieving revision 1.40 ++++++diff -u -r1.40 bfile.c ++++++--- src/findlib/bfile.c 10 Aug 2005 16:35:19 -0000 1.40 +++++++++ src/findlib/bfile.c 21 Nov 2005 13:13:02 -0000 ++++++@@ -623,13 +623,10 @@ ++++++ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) ++++++ { ++++++ POOLMEM *rsrc_fname; ++++++- size_t fname_len; ++++++ ++++++- fname_len = strlen(fname); ++++++ rsrc_fname = get_pool_memory(PM_FNAME); ++++++- bstrncpy(rsrc_fname, fname, fname_len + 1); ++++++- bstrncpy(rsrc_fname + fname_len, _PATH_RSRCFORKSPEC, ++++++- strlen(_PATH_RSRCFORKSPEC) + 1); +++++++ pm_strcpy(rsrc_fname, fname); +++++++ pm_strcat(rsrc_fname, _PATH_RSRCFORKSPEC); ++++++ bopen(bfd, rsrc_fname, flags, mode); ++++++ free_pool_memory(rsrc_fname); ++++++ return bfd->fid; ++++++Index: src/lib/bnet_server.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v ++++++retrieving revision 1.39 ++++++diff -u -r1.39 bnet_server.c ++++++--- src/lib/bnet_server.c 18 Aug 2005 15:37:40 -0000 1.39 +++++++++ src/lib/bnet_server.c 21 Nov 2005 13:13:03 -0000 ++++++@@ -153,7 +153,6 @@ ++++++ /* Error, get out */ ++++++ foreach_dlist(fd_ptr, &sockfds) { ++++++ close(fd_ptr->fd); ++++++- free((void *)fd_ptr); ++++++ } ++++++ Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror()); ++++++ break; ++++++Index: src/stored/autochanger.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v ++++++retrieving revision 1.47.2.3 ++++++diff -u -r1.47.2.3 autochanger.c ++++++--- src/stored/autochanger.c 12 Nov 2005 17:30:53 -0000 1.47.2.3 +++++++++ src/stored/autochanger.c 21 Nov 2005 13:13:03 -0000 ++++++@@ -4,7 +4,7 @@ ++++++ * ++++++ * Kern Sibbald, August MMII ++++++ * ++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ */ ++++++ /* ++++++ Copyright (C) 2002-2005 Kern Sibbald ++++++@@ -163,6 +163,7 @@ ++++++ rtn_stat = -1; /* hard error */ ++++++ } ++++++ Dmsg2(400, "load slot %d status=%d\n", slot, status); +++++++ unlock_changer(dcr); ++++++ } else { ++++++ status = 0; /* we got what we want */ ++++++ dev->Slot = slot; /* set currently loaded slot */ ++++++@@ -174,7 +175,6 @@ ++++++ } else { ++++++ rtn_stat = 0; /* no changer found */ ++++++ } ++++++- unlock_changer(dcr); ++++++ free_pool_memory(changer); ++++++ return rtn_stat; ++++++ ++++++Index: src/stored/status.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/stored/status.c,v ++++++retrieving revision 1.44.2.1 ++++++diff -u -r1.44.2.1 status.c ++++++--- src/stored/status.c 6 Oct 2005 07:04:13 -0000 1.44.2.1 +++++++++ src/stored/status.c 21 Nov 2005 13:13:03 -0000 ++++++@@ -264,6 +264,7 @@ ++++++ bool found = false; ++++++ int bps, sec; ++++++ JCR *jcr; +++++++ DCR *dcr; ++++++ char JobName[MAX_NAME_LENGTH]; ++++++ char b1[30], b2[30], b3[30]; ++++++ ++++++@@ -273,7 +274,8 @@ ++++++ bnet_fsend(user, _("%s Job %s waiting for Client connection.\n"), ++++++ job_type_to_str(jcr->JobType), jcr->Job); ++++++ } ++++++- if (jcr->dcr && jcr->dcr->device) { +++++++ dcr = jcr->dcr; +++++++ if (dcr && dcr->device) { ++++++ bstrncpy(JobName, jcr->Job, sizeof(JobName)); ++++++ /* There are three periods after the Job name */ ++++++ char *p; ++++++@@ -282,13 +284,16 @@ ++++++ *p = 0; ++++++ } ++++++ } ++++++- bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\" device=\"%s\"\n"), +++++++ bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\"\n" +++++++ " pool=\"%s\" device=\"%s\"\n"), ++++++ job_level_to_str(jcr->JobLevel), ++++++ job_type_to_str(jcr->JobType), ++++++ JobName, ++++++ jcr->JobId, ++++++- jcr->dcr->VolumeName, ++++++- jcr->dcr->device->device_name); +++++++ dcr->VolumeName, +++++++ dcr->pool_name, +++++++ dcr->dev?dcr->dev->print_name(): +++++++ dcr->device->device_name); ++++++ sec = time(NULL) - jcr->run_time; ++++++ if (sec <= 0) { ++++++ sec = 1; ++++++Index: src/stored/stored_conf.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/stored/stored_conf.c,v ++++++retrieving revision 1.76 ++++++diff -u -r1.76 stored_conf.c ++++++--- src/stored/stored_conf.c 9 Sep 2005 09:40:04 -0000 1.76 +++++++++ src/stored/stored_conf.c 21 Nov 2005 13:13:04 -0000 ++++++@@ -222,16 +222,16 @@ ++++++ res->res_dev.hdr.name, ++++++ res->res_dev.media_type, res->res_dev.device_name, ++++++ res->res_dev.label_type); ++++++- sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d\n", +++++++ sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n", ++++++ res->res_dev.max_rewind_wait, res->res_dev.min_block_size, ++++++- res->res_dev.max_block_size); +++++++ res->res_dev.max_block_size, res->res_dev.max_changer_wait); ++++++ sendit(sock, " max_jobs=%d max_files=%" lld " max_size=%" lld "\n", ++++++ res->res_dev.max_volume_jobs, res->res_dev.max_volume_files, ++++++ res->res_dev.max_volume_size); ++++++ sendit(sock, " max_file_size=%" lld " capacity=%" lld "\n", ++++++ res->res_dev.max_file_size, res->res_dev.volume_capacity); ++++++- sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); ++++++- sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", +++++++ sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); +++++++ sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", ++++++ res->res_dev.max_spool_size, res->res_dev.max_job_spool_size); ++++++ if (res->res_dev.changer_res) { ++++++ sendit(sock, " changer=%p\n", res->res_dev.changer_res); ++++++Index: src/tray-monitor/tray-monitor.c ++++++=================================================================== ++++++RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v ++++++retrieving revision 1.25.2.1 ++++++diff -u -r1.25.2.1 tray-monitor.c ++++++--- src/tray-monitor/tray-monitor.c 1 Oct 2005 10:20:18 -0000 1.25.2.1 +++++++++ src/tray-monitor/tray-monitor.c 21 Nov 2005 13:13:04 -0000 ++++++@@ -4,7 +4,7 @@ ++++++ * ++++++ * Nicolas Boichat, August MMIV ++++++ * ++++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ */ ++++++ ++++++ /* ++++++@@ -881,7 +881,7 @@ ++++++ } ++++++ ++++++ if (item->D_sock == NULL) { ++++++- g_slist_append(*list, (void *)_("Cannot connect to daemon.\n")); +++++++ g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n"))); ++++++ changeStatusMessage(item, _("Cannot connect to daemon.")); ++++++ item->state = error; ++++++ item->oldstate = error; +++++Index: patches/patches-1.38.0 +++++=================================================================== +++++RCS file: patches/patches-1.38.0 +++++diff -N patches/patches-1.38.0 +++++Index: patches/patches-1.38.1 +++++=================================================================== +++++RCS file: patches/patches-1.38.1 +++++diff -N patches/patches-1.38.1 +++++--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++++++ patches/patches-1.38.1 21 Nov 2005 13:17:58 -0000 +++++@@ -0,0 +1,14 @@ ++++++20Nov05 1.38.1-to-1.38.2.patch ++++++ This patch fixes the following bugs: ++++++ ++++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++++++ says this patch does not fix his problem) ++++++- Fix cancel failure bug. Bug #481 ++++++- Fix failure when Pool name has spaces. Bug #487 ++++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++++- Fix a couple of free()s in src/filed/acl.c ++++++- Fix memory overrun in bfile.c in building OS X resource ++++++ fork filename. Bug #489 ++++++ ++++++ +++++Index: src/version.h +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/version.h,v +++++retrieving revision 1.554.2.14 +++++diff -u -r1.554.2.14 version.h +++++--- src/version.h 14 Nov 2005 14:21:58 -0000 1.554.2.14 ++++++++ src/version.h 21 Nov 2005 13:17:58 -0000 +++++@@ -3,9 +3,9 @@ +++++ */ +++++ +++++ #undef VERSION +++++-#define VERSION "1.38.1" +++++-#define BDATE "14 November 2005" +++++-#define LSMDATE "14Nov05" ++++++#define VERSION "1.38.2" ++++++#define BDATE "20 November 2005" ++++++#define LSMDATE "20Nov05" +++++ +++++ /* Debug flags */ +++++ #undef DEBUG +++++Index: src/dird/catreq.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v +++++retrieving revision 1.77.2.1 +++++diff -u -r1.77.2.1 catreq.c +++++--- src/dird/catreq.c 26 Oct 2005 14:02:04 -0000 1.77.2.1 ++++++++ src/dird/catreq.c 21 Nov 2005 13:17:59 -0000 +++++@@ -10,7 +10,7 @@ +++++ * Basic tasks done here: +++++ * Handle Catalog services. +++++ * +++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ */ +++++ /* +++++ Copyright (C) 2001-2005 Kern Sibbald +++++@@ -117,6 +117,7 @@ +++++ if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) { +++++ memset(&pr, 0, sizeof(pr)); +++++ bstrncpy(pr.Name, pool_name, sizeof(pr.Name)); ++++++ unbash_spaces(pr.Name); +++++ ok = db_get_pool_record(jcr, jcr->db, &pr); +++++ if (ok) { +++++ mr.PoolId = pr.PoolId; +++++Index: src/dird/ua_restore.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v +++++retrieving revision 1.101.2.1 +++++diff -u -r1.101.2.1 ua_restore.c +++++--- src/dird/ua_restore.c 26 Oct 2005 14:02:04 -0000 1.101.2.1 ++++++++ src/dird/ua_restore.c 21 Nov 2005 13:17:59 -0000 +++++@@ -10,7 +10,7 @@ +++++ * +++++ * Kern Sibbald, July MMII +++++ * +++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ */ +++++ /* +++++ Copyright (C) 2002-2005 Kern Sibbald +++++@@ -409,7 +409,7 @@ +++++ } +++++ done = true; +++++ switch (do_prompt(ua, "", _("Select item: "), NULL, 0)) { +++++- case -1: /* error */ ++++++ case -1: /* error or cancel */ +++++ return 0; +++++ case 0: /* list last 20 Jobs run */ +++++ gui_save = ua->jcr->gui; +++++Index: src/dird/ua_run.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v +++++retrieving revision 1.71 +++++diff -u -r1.71 ua_run.c +++++--- src/dird/ua_run.c 10 Aug 2005 16:35:19 -0000 1.71 ++++++++ src/dird/ua_run.c 21 Nov 2005 13:17:59 -0000 +++++@@ -851,6 +851,8 @@ +++++ bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); +++++ } +++++ goto try_again; ++++++ case -1: /* error or cancel */ ++++++ goto bail_out; +++++ default: +++++ goto try_again; +++++ } +++++Index: src/dird/ua_select.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v +++++retrieving revision 1.65.2.1 +++++diff -u -r1.65.2.1 ua_select.c +++++--- src/dird/ua_select.c 12 Nov 2005 17:30:52 -0000 1.65.2.1 ++++++++ src/dird/ua_select.c 21 Nov 2005 13:17:59 -0000 +++++@@ -4,7 +4,7 @@ +++++ * +++++ * Kern Sibbald, October MMI +++++ * +++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ */ +++++ /* +++++ Copyright (C) 2001-2005 Kern Sibbald +++++@@ -149,7 +149,9 @@ +++++ } +++++ } +++++ UnlockRes(); +++++- do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)); ++++++ if (do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)) < 0) { ++++++ return NULL; ++++++ } +++++ store = (STORE *)GetResWithName(R_STORAGE, name); +++++ return store; +++++ } +++++@@ -170,7 +172,9 @@ +++++ } +++++ } +++++ UnlockRes(); +++++- do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)); ++++++ if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) { ++++++ return NULL; ++++++ } +++++ fs = (FILESET *)GetResWithName(R_FILESET, name); +++++ return fs; +++++ } +++++@@ -202,7 +206,9 @@ +++++ } +++++ } +++++ UnlockRes(); +++++- do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)); ++++++ if (do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)) < 0) { ++++++ return NULL; ++++++ } +++++ catalog = (CAT *)GetResWithName(R_CATALOG, name); +++++ } +++++ return catalog; +++++@@ -225,7 +231,9 @@ +++++ } +++++ } +++++ UnlockRes(); +++++- do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)); ++++++ if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) { ++++++ return NULL; ++++++ } +++++ job = (JOB *)GetResWithName(R_JOB, name); +++++ return job; +++++ } +++++@@ -246,7 +254,9 @@ +++++ } +++++ } +++++ UnlockRes(); +++++- do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)); ++++++ if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) { ++++++ return NULL; ++++++ } +++++ job = (JOB *)GetResWithName(R_JOB, name); +++++ return job; +++++ } +++++@@ -269,7 +279,9 @@ +++++ } +++++ } +++++ UnlockRes(); +++++- do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)); ++++++ if (do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) { ++++++ return NULL; ++++++ } +++++ client = (CLIENT *)GetResWithName(R_CLIENT, name); +++++ return client; +++++ } +++++@@ -551,7 +563,9 @@ +++++ } +++++ } +++++ UnlockRes(); +++++- do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)); ++++++ if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) { ++++++ return NULL; ++++++ } +++++ pool = (POOL *)GetResWithName(R_POOL, name); +++++ return pool; +++++ } +++++@@ -673,12 +687,16 @@ +++++ * Returns: -1 on error +++++ * index base 0 on success, and choice +++++ * is copied to prompt if not NULL ++++++ * prompt is set to the chosen prompt item string +++++ */ +++++ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) +++++ { +++++ int i, item; +++++ char pmsg[MAXSTRING]; +++++ ++++++ if (prompt) { ++++++ *prompt = 0; ++++++ } +++++ if (ua->num_prompts == 2) { +++++ item = 1; +++++ if (prompt) { +++++@@ -698,15 +716,11 @@ +++++ bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]); +++++ } +++++ +++++- if (prompt) { +++++- *prompt = 0; +++++- } +++++- +++++ for ( ;; ) { +++++ /* First item is the prompt string, not the items */ +++++ if (ua->num_prompts == 1) { +++++ bsendmsg(ua, _("Selection is empty!\n")); +++++- item = 0; /* list is empty ! */ ++++++ item = -1; /* list is empty ! */ +++++ break; +++++ } +++++ if (ua->num_prompts == 2) { +++++@@ -741,7 +755,7 @@ +++++ free(ua->prompt[i]); +++++ } +++++ ua->num_prompts = 0; +++++- return item - 1; ++++++ return item>0 ? item-1 : item; +++++ } +++++ +++++ +++++Index: src/dird/ua_update.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v +++++retrieving revision 1.7 +++++diff -u -r1.7 ua_update.c +++++--- src/dird/ua_update.c 28 Aug 2005 12:22:02 -0000 1.7 ++++++++ src/dird/ua_update.c 21 Nov 2005 13:17:59 -0000 +++++@@ -590,7 +590,7 @@ +++++ update_all_vols_from_pool(ua); +++++ return 1; +++++ default: /* Done or error */ +++++- bsendmsg(ua, _("Selection done.\n")); ++++++ bsendmsg(ua, _("Selection terminated.\n")); +++++ return 1; +++++ } +++++ } +++++Index: src/filed/acl.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v +++++retrieving revision 1.10.2.1 +++++diff -u -r1.10.2.1 acl.c +++++--- src/filed/acl.c 14 Nov 2005 20:20:38 -0000 1.10.2.1 ++++++++ src/filed/acl.c 21 Nov 2005 13:17:59 -0000 +++++@@ -26,7 +26,7 @@ +++++ * +++++ * Written by Preben 'Peppe' Guldberg, December MMIV +++++ * +++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ */ +++++ /* +++++ Copyright (C) 2004-2005 Kern Sibbald +++++@@ -140,7 +140,7 @@ +++++ +++++ if ((acl_text = acl_get(jcr->last_fname)) != NULL) { +++++ len = pm_strcpy(jcr->acl_text, acl_text); +++++- free(acl_text); ++++++ actuallyfree(acl_text); +++++ return len; +++++ } +++++ return -1; +++++@@ -270,7 +270,7 @@ +++++ if ((n = getacl(jcr->last_fname, n, acls)) > 0) { +++++ if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) { +++++ len = pm_strcpy(jcr->acl_text, acl_text); +++++- free(acl_text); ++++++ actuallyfree(acl_text); +++++ return len; +++++ } +++++ } +++++Index: src/findlib/bfile.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v +++++retrieving revision 1.40 +++++diff -u -r1.40 bfile.c +++++--- src/findlib/bfile.c 10 Aug 2005 16:35:19 -0000 1.40 ++++++++ src/findlib/bfile.c 21 Nov 2005 13:17:59 -0000 +++++@@ -623,13 +623,10 @@ +++++ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) +++++ { +++++ POOLMEM *rsrc_fname; +++++- size_t fname_len; +++++ +++++- fname_len = strlen(fname); +++++ rsrc_fname = get_pool_memory(PM_FNAME); +++++- bstrncpy(rsrc_fname, fname, fname_len + 1); +++++- bstrncpy(rsrc_fname + fname_len, _PATH_RSRCFORKSPEC, +++++- strlen(_PATH_RSRCFORKSPEC) + 1); ++++++ pm_strcpy(rsrc_fname, fname); ++++++ pm_strcat(rsrc_fname, _PATH_RSRCFORKSPEC); +++++ bopen(bfd, rsrc_fname, flags, mode); +++++ free_pool_memory(rsrc_fname); +++++ return bfd->fid; +++++Index: src/lib/bnet_server.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v +++++retrieving revision 1.39 +++++diff -u -r1.39 bnet_server.c +++++--- src/lib/bnet_server.c 18 Aug 2005 15:37:40 -0000 1.39 ++++++++ src/lib/bnet_server.c 21 Nov 2005 13:18:00 -0000 +++++@@ -153,7 +153,6 @@ +++++ /* Error, get out */ +++++ foreach_dlist(fd_ptr, &sockfds) { +++++ close(fd_ptr->fd); +++++- free((void *)fd_ptr); +++++ } +++++ Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror()); +++++ break; +++++Index: src/stored/autochanger.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v +++++retrieving revision 1.47.2.3 +++++diff -u -r1.47.2.3 autochanger.c +++++--- src/stored/autochanger.c 12 Nov 2005 17:30:53 -0000 1.47.2.3 ++++++++ src/stored/autochanger.c 21 Nov 2005 13:18:00 -0000 +++++@@ -4,7 +4,7 @@ +++++ * +++++ * Kern Sibbald, August MMII +++++ * +++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ */ +++++ /* +++++ Copyright (C) 2002-2005 Kern Sibbald +++++@@ -163,6 +163,7 @@ +++++ rtn_stat = -1; /* hard error */ +++++ } +++++ Dmsg2(400, "load slot %d status=%d\n", slot, status); ++++++ unlock_changer(dcr); +++++ } else { +++++ status = 0; /* we got what we want */ +++++ dev->Slot = slot; /* set currently loaded slot */ +++++@@ -174,7 +175,6 @@ +++++ } else { +++++ rtn_stat = 0; /* no changer found */ +++++ } +++++- unlock_changer(dcr); +++++ free_pool_memory(changer); +++++ return rtn_stat; +++++ +++++Index: src/stored/status.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/stored/status.c,v +++++retrieving revision 1.44.2.1 +++++diff -u -r1.44.2.1 status.c +++++--- src/stored/status.c 6 Oct 2005 07:04:13 -0000 1.44.2.1 ++++++++ src/stored/status.c 21 Nov 2005 13:18:00 -0000 +++++@@ -264,6 +264,7 @@ +++++ bool found = false; +++++ int bps, sec; +++++ JCR *jcr; ++++++ DCR *dcr; +++++ char JobName[MAX_NAME_LENGTH]; +++++ char b1[30], b2[30], b3[30]; +++++ +++++@@ -273,7 +274,8 @@ +++++ bnet_fsend(user, _("%s Job %s waiting for Client connection.\n"), +++++ job_type_to_str(jcr->JobType), jcr->Job); +++++ } +++++- if (jcr->dcr && jcr->dcr->device) { ++++++ dcr = jcr->dcr; ++++++ if (dcr && dcr->device) { +++++ bstrncpy(JobName, jcr->Job, sizeof(JobName)); +++++ /* There are three periods after the Job name */ +++++ char *p; +++++@@ -282,13 +284,16 @@ +++++ *p = 0; +++++ } +++++ } +++++- bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\" device=\"%s\"\n"), ++++++ bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\"\n" ++++++ " pool=\"%s\" device=\"%s\"\n"), +++++ job_level_to_str(jcr->JobLevel), +++++ job_type_to_str(jcr->JobType), +++++ JobName, +++++ jcr->JobId, +++++- jcr->dcr->VolumeName, +++++- jcr->dcr->device->device_name); ++++++ dcr->VolumeName, ++++++ dcr->pool_name, ++++++ dcr->dev?dcr->dev->print_name(): ++++++ dcr->device->device_name); +++++ sec = time(NULL) - jcr->run_time; +++++ if (sec <= 0) { +++++ sec = 1; +++++Index: src/stored/stored_conf.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/stored/stored_conf.c,v +++++retrieving revision 1.76 +++++diff -u -r1.76 stored_conf.c +++++--- src/stored/stored_conf.c 9 Sep 2005 09:40:04 -0000 1.76 ++++++++ src/stored/stored_conf.c 21 Nov 2005 13:18:00 -0000 +++++@@ -222,16 +222,16 @@ +++++ res->res_dev.hdr.name, +++++ res->res_dev.media_type, res->res_dev.device_name, +++++ res->res_dev.label_type); +++++- sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d\n", ++++++ sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n", +++++ res->res_dev.max_rewind_wait, res->res_dev.min_block_size, +++++- res->res_dev.max_block_size); ++++++ res->res_dev.max_block_size, res->res_dev.max_changer_wait); +++++ sendit(sock, " max_jobs=%d max_files=%" lld " max_size=%" lld "\n", +++++ res->res_dev.max_volume_jobs, res->res_dev.max_volume_files, +++++ res->res_dev.max_volume_size); +++++ sendit(sock, " max_file_size=%" lld " capacity=%" lld "\n", +++++ res->res_dev.max_file_size, res->res_dev.volume_capacity); +++++- sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); +++++- sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", ++++++ sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); ++++++ sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", +++++ res->res_dev.max_spool_size, res->res_dev.max_job_spool_size); +++++ if (res->res_dev.changer_res) { +++++ sendit(sock, " changer=%p\n", res->res_dev.changer_res); +++++Index: src/tray-monitor/tray-monitor.c +++++=================================================================== +++++RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v +++++retrieving revision 1.25.2.1 +++++diff -u -r1.25.2.1 tray-monitor.c +++++--- src/tray-monitor/tray-monitor.c 1 Oct 2005 10:20:18 -0000 1.25.2.1 ++++++++ src/tray-monitor/tray-monitor.c 21 Nov 2005 13:18:00 -0000 +++++@@ -4,7 +4,7 @@ +++++ * +++++ * Nicolas Boichat, August MMIV +++++ * +++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ */ +++++ +++++ /* +++++@@ -881,7 +881,7 @@ +++++ } +++++ +++++ if (item->D_sock == NULL) { +++++- g_slist_append(*list, (void *)_("Cannot connect to daemon.\n")); ++++++ g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n"))); +++++ changeStatusMessage(item, _("Cannot connect to daemon.")); +++++ item->state = error; +++++ item->oldstate = error; ++++Index: patches/patches-1.38.0 ++++=================================================================== ++++RCS file: patches/patches-1.38.0 ++++diff -N patches/patches-1.38.0 ++++Index: patches/patches-1.38.1 ++++=================================================================== ++++RCS file: patches/patches-1.38.1 ++++diff -N patches/patches-1.38.1 ++++--- /dev/null 1 Jan 1970 00:00:00 -0000 +++++++ patches/patches-1.38.1 21 Nov 2005 18:19:05 -0000 ++++@@ -0,0 +1,14 @@ +++++20Nov05 1.38.1-to-1.38.2.patch +++++ This patch fixes the following bugs: +++++ +++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator +++++ says this patch does not fix his problem) +++++- Fix cancel failure bug. Bug #481 +++++- Fix failure when Pool name has spaces. Bug #487 +++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++++- Fix a couple of free()s in src/filed/acl.c +++++- Fix memory overrun in bfile.c in building OS X resource +++++ fork filename. Bug #489 +++++ +++++ ++++Index: src/version.h ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/version.h,v ++++retrieving revision 1.554.2.14 ++++diff -u -r1.554.2.14 version.h ++++--- src/version.h 14 Nov 2005 14:21:58 -0000 1.554.2.14 +++++++ src/version.h 21 Nov 2005 18:19:06 -0000 ++++@@ -3,9 +3,9 @@ ++++ */ ++++ ++++ #undef VERSION ++++-#define VERSION "1.38.1" ++++-#define BDATE "14 November 2005" ++++-#define LSMDATE "14Nov05" +++++#define VERSION "1.38.2" +++++#define BDATE "20 November 2005" +++++#define LSMDATE "20Nov05" ++++ ++++ /* Debug flags */ ++++ #undef DEBUG ++++Index: src/dird/catreq.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v ++++retrieving revision 1.77.2.1 ++++diff -u -r1.77.2.1 catreq.c ++++--- src/dird/catreq.c 26 Oct 2005 14:02:04 -0000 1.77.2.1 +++++++ src/dird/catreq.c 21 Nov 2005 18:19:06 -0000 ++++@@ -10,7 +10,7 @@ ++++ * Basic tasks done here: ++++ * Handle Catalog services. ++++ * ++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ */ ++++ /* ++++ Copyright (C) 2001-2005 Kern Sibbald ++++@@ -117,6 +117,7 @@ ++++ if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) { ++++ memset(&pr, 0, sizeof(pr)); ++++ bstrncpy(pr.Name, pool_name, sizeof(pr.Name)); +++++ unbash_spaces(pr.Name); ++++ ok = db_get_pool_record(jcr, jcr->db, &pr); ++++ if (ok) { ++++ mr.PoolId = pr.PoolId; ++++Index: src/dird/ua_restore.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v ++++retrieving revision 1.101.2.1 ++++diff -u -r1.101.2.1 ua_restore.c ++++--- src/dird/ua_restore.c 26 Oct 2005 14:02:04 -0000 1.101.2.1 +++++++ src/dird/ua_restore.c 21 Nov 2005 18:19:06 -0000 ++++@@ -10,7 +10,7 @@ ++++ * ++++ * Kern Sibbald, July MMII ++++ * ++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ */ ++++ /* ++++ Copyright (C) 2002-2005 Kern Sibbald ++++@@ -409,7 +409,7 @@ ++++ } ++++ done = true; ++++ switch (do_prompt(ua, "", _("Select item: "), NULL, 0)) { ++++- case -1: /* error */ +++++ case -1: /* error or cancel */ ++++ return 0; ++++ case 0: /* list last 20 Jobs run */ ++++ gui_save = ua->jcr->gui; ++++Index: src/dird/ua_run.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v ++++retrieving revision 1.71 ++++diff -u -r1.71 ua_run.c ++++--- src/dird/ua_run.c 10 Aug 2005 16:35:19 -0000 1.71 +++++++ src/dird/ua_run.c 21 Nov 2005 18:19:06 -0000 ++++@@ -851,6 +851,8 @@ ++++ bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); ++++ } ++++ goto try_again; +++++ case -1: /* error or cancel */ +++++ goto bail_out; ++++ default: ++++ goto try_again; ++++ } ++++Index: src/dird/ua_select.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v ++++retrieving revision 1.65.2.1 ++++diff -u -r1.65.2.1 ua_select.c ++++--- src/dird/ua_select.c 12 Nov 2005 17:30:52 -0000 1.65.2.1 +++++++ src/dird/ua_select.c 21 Nov 2005 18:19:06 -0000 ++++@@ -4,7 +4,7 @@ ++++ * ++++ * Kern Sibbald, October MMI ++++ * ++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ */ ++++ /* ++++ Copyright (C) 2001-2005 Kern Sibbald ++++@@ -149,7 +149,9 @@ ++++ } ++++ } ++++ UnlockRes(); ++++- do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)); +++++ if (do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)) < 0) { +++++ return NULL; +++++ } ++++ store = (STORE *)GetResWithName(R_STORAGE, name); ++++ return store; ++++ } ++++@@ -170,7 +172,9 @@ ++++ } ++++ } ++++ UnlockRes(); ++++- do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)); +++++ if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) { +++++ return NULL; +++++ } ++++ fs = (FILESET *)GetResWithName(R_FILESET, name); ++++ return fs; ++++ } ++++@@ -202,7 +206,9 @@ ++++ } ++++ } ++++ UnlockRes(); ++++- do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)); +++++ if (do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)) < 0) { +++++ return NULL; +++++ } ++++ catalog = (CAT *)GetResWithName(R_CATALOG, name); ++++ } ++++ return catalog; ++++@@ -225,7 +231,9 @@ ++++ } ++++ } ++++ UnlockRes(); ++++- do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)); +++++ if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) { +++++ return NULL; +++++ } ++++ job = (JOB *)GetResWithName(R_JOB, name); ++++ return job; ++++ } ++++@@ -246,7 +254,9 @@ ++++ } ++++ } ++++ UnlockRes(); ++++- do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)); +++++ if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) { +++++ return NULL; +++++ } ++++ job = (JOB *)GetResWithName(R_JOB, name); ++++ return job; ++++ } ++++@@ -269,7 +279,9 @@ ++++ } ++++ } ++++ UnlockRes(); ++++- do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)); +++++ if (do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) { +++++ return NULL; +++++ } ++++ client = (CLIENT *)GetResWithName(R_CLIENT, name); ++++ return client; ++++ } ++++@@ -551,7 +563,9 @@ ++++ } ++++ } ++++ UnlockRes(); ++++- do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)); +++++ if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) { +++++ return NULL; +++++ } ++++ pool = (POOL *)GetResWithName(R_POOL, name); ++++ return pool; ++++ } ++++@@ -673,12 +687,16 @@ ++++ * Returns: -1 on error ++++ * index base 0 on success, and choice ++++ * is copied to prompt if not NULL +++++ * prompt is set to the chosen prompt item string ++++ */ ++++ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) ++++ { ++++ int i, item; ++++ char pmsg[MAXSTRING]; ++++ +++++ if (prompt) { +++++ *prompt = 0; +++++ } ++++ if (ua->num_prompts == 2) { ++++ item = 1; ++++ if (prompt) { ++++@@ -698,15 +716,11 @@ ++++ bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]); ++++ } ++++ ++++- if (prompt) { ++++- *prompt = 0; ++++- } ++++- ++++ for ( ;; ) { ++++ /* First item is the prompt string, not the items */ ++++ if (ua->num_prompts == 1) { ++++ bsendmsg(ua, _("Selection is empty!\n")); ++++- item = 0; /* list is empty ! */ +++++ item = -1; /* list is empty ! */ ++++ break; ++++ } ++++ if (ua->num_prompts == 2) { ++++@@ -741,7 +755,7 @@ ++++ free(ua->prompt[i]); ++++ } ++++ ua->num_prompts = 0; ++++- return item - 1; +++++ return item>0 ? item-1 : item; ++++ } ++++ ++++ ++++Index: src/dird/ua_update.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v ++++retrieving revision 1.7 ++++diff -u -r1.7 ua_update.c ++++--- src/dird/ua_update.c 28 Aug 2005 12:22:02 -0000 1.7 +++++++ src/dird/ua_update.c 21 Nov 2005 18:19:06 -0000 ++++@@ -590,7 +590,7 @@ ++++ update_all_vols_from_pool(ua); ++++ return 1; ++++ default: /* Done or error */ ++++- bsendmsg(ua, _("Selection done.\n")); +++++ bsendmsg(ua, _("Selection terminated.\n")); ++++ return 1; ++++ } ++++ } ++++Index: src/filed/acl.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v ++++retrieving revision 1.10.2.1 ++++diff -u -r1.10.2.1 acl.c ++++--- src/filed/acl.c 14 Nov 2005 20:20:38 -0000 1.10.2.1 +++++++ src/filed/acl.c 21 Nov 2005 18:19:07 -0000 ++++@@ -26,7 +26,7 @@ ++++ * ++++ * Written by Preben 'Peppe' Guldberg, December MMIV ++++ * ++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ */ ++++ /* ++++ Copyright (C) 2004-2005 Kern Sibbald ++++@@ -140,7 +140,7 @@ ++++ ++++ if ((acl_text = acl_get(jcr->last_fname)) != NULL) { ++++ len = pm_strcpy(jcr->acl_text, acl_text); ++++- free(acl_text); +++++ actuallyfree(acl_text); ++++ return len; ++++ } ++++ return -1; ++++@@ -270,7 +270,7 @@ ++++ if ((n = getacl(jcr->last_fname, n, acls)) > 0) { ++++ if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) { ++++ len = pm_strcpy(jcr->acl_text, acl_text); ++++- free(acl_text); +++++ actuallyfree(acl_text); ++++ return len; ++++ } ++++ } ++++Index: src/findlib/bfile.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v ++++retrieving revision 1.40 ++++diff -u -r1.40 bfile.c ++++--- src/findlib/bfile.c 10 Aug 2005 16:35:19 -0000 1.40 +++++++ src/findlib/bfile.c 21 Nov 2005 18:19:07 -0000 ++++@@ -623,13 +623,10 @@ ++++ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) ++++ { ++++ POOLMEM *rsrc_fname; ++++- size_t fname_len; ++++ ++++- fname_len = strlen(fname); ++++ rsrc_fname = get_pool_memory(PM_FNAME); ++++- bstrncpy(rsrc_fname, fname, fname_len + 1); ++++- bstrncpy(rsrc_fname + fname_len, _PATH_RSRCFORKSPEC, ++++- strlen(_PATH_RSRCFORKSPEC) + 1); +++++ pm_strcpy(rsrc_fname, fname); +++++ pm_strcat(rsrc_fname, _PATH_RSRCFORKSPEC); ++++ bopen(bfd, rsrc_fname, flags, mode); ++++ free_pool_memory(rsrc_fname); ++++ return bfd->fid; ++++Index: src/lib/bnet_server.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v ++++retrieving revision 1.39 ++++diff -u -r1.39 bnet_server.c ++++--- src/lib/bnet_server.c 18 Aug 2005 15:37:40 -0000 1.39 +++++++ src/lib/bnet_server.c 21 Nov 2005 18:19:07 -0000 ++++@@ -153,7 +153,6 @@ ++++ /* Error, get out */ ++++ foreach_dlist(fd_ptr, &sockfds) { ++++ close(fd_ptr->fd); ++++- free((void *)fd_ptr); ++++ } ++++ Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror()); ++++ break; ++++Index: src/stored/autochanger.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v ++++retrieving revision 1.47.2.3 ++++diff -u -r1.47.2.3 autochanger.c ++++--- src/stored/autochanger.c 12 Nov 2005 17:30:53 -0000 1.47.2.3 +++++++ src/stored/autochanger.c 21 Nov 2005 18:19:07 -0000 ++++@@ -4,7 +4,7 @@ ++++ * ++++ * Kern Sibbald, August MMII ++++ * ++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ */ ++++ /* ++++ Copyright (C) 2002-2005 Kern Sibbald ++++@@ -163,6 +163,7 @@ ++++ rtn_stat = -1; /* hard error */ ++++ } ++++ Dmsg2(400, "load slot %d status=%d\n", slot, status); +++++ unlock_changer(dcr); ++++ } else { ++++ status = 0; /* we got what we want */ ++++ dev->Slot = slot; /* set currently loaded slot */ ++++@@ -174,7 +175,6 @@ ++++ } else { ++++ rtn_stat = 0; /* no changer found */ ++++ } ++++- unlock_changer(dcr); ++++ free_pool_memory(changer); ++++ return rtn_stat; ++++ ++++Index: src/stored/status.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/stored/status.c,v ++++retrieving revision 1.44.2.1 ++++diff -u -r1.44.2.1 status.c ++++--- src/stored/status.c 6 Oct 2005 07:04:13 -0000 1.44.2.1 +++++++ src/stored/status.c 21 Nov 2005 18:19:08 -0000 ++++@@ -264,6 +264,7 @@ ++++ bool found = false; ++++ int bps, sec; ++++ JCR *jcr; +++++ DCR *dcr; ++++ char JobName[MAX_NAME_LENGTH]; ++++ char b1[30], b2[30], b3[30]; ++++ ++++@@ -273,7 +274,8 @@ ++++ bnet_fsend(user, _("%s Job %s waiting for Client connection.\n"), ++++ job_type_to_str(jcr->JobType), jcr->Job); ++++ } ++++- if (jcr->dcr && jcr->dcr->device) { +++++ dcr = jcr->dcr; +++++ if (dcr && dcr->device) { ++++ bstrncpy(JobName, jcr->Job, sizeof(JobName)); ++++ /* There are three periods after the Job name */ ++++ char *p; ++++@@ -282,13 +284,16 @@ ++++ *p = 0; ++++ } ++++ } ++++- bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\" device=\"%s\"\n"), +++++ bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\"\n" +++++ " pool=\"%s\" device=\"%s\"\n"), ++++ job_level_to_str(jcr->JobLevel), ++++ job_type_to_str(jcr->JobType), ++++ JobName, ++++ jcr->JobId, ++++- jcr->dcr->VolumeName, ++++- jcr->dcr->device->device_name); +++++ dcr->VolumeName, +++++ dcr->pool_name, +++++ dcr->dev?dcr->dev->print_name(): +++++ dcr->device->device_name); ++++ sec = time(NULL) - jcr->run_time; ++++ if (sec <= 0) { ++++ sec = 1; ++++Index: src/stored/stored_conf.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/stored/stored_conf.c,v ++++retrieving revision 1.76 ++++diff -u -r1.76 stored_conf.c ++++--- src/stored/stored_conf.c 9 Sep 2005 09:40:04 -0000 1.76 +++++++ src/stored/stored_conf.c 21 Nov 2005 18:19:08 -0000 ++++@@ -222,16 +222,16 @@ ++++ res->res_dev.hdr.name, ++++ res->res_dev.media_type, res->res_dev.device_name, ++++ res->res_dev.label_type); ++++- sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d\n", +++++ sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n", ++++ res->res_dev.max_rewind_wait, res->res_dev.min_block_size, ++++- res->res_dev.max_block_size); +++++ res->res_dev.max_block_size, res->res_dev.max_changer_wait); ++++ sendit(sock, " max_jobs=%d max_files=%" lld " max_size=%" lld "\n", ++++ res->res_dev.max_volume_jobs, res->res_dev.max_volume_files, ++++ res->res_dev.max_volume_size); ++++ sendit(sock, " max_file_size=%" lld " capacity=%" lld "\n", ++++ res->res_dev.max_file_size, res->res_dev.volume_capacity); ++++- sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); ++++- sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", +++++ sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); +++++ sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", ++++ res->res_dev.max_spool_size, res->res_dev.max_job_spool_size); ++++ if (res->res_dev.changer_res) { ++++ sendit(sock, " changer=%p\n", res->res_dev.changer_res); ++++Index: src/tray-monitor/tray-monitor.c ++++=================================================================== ++++RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v ++++retrieving revision 1.25.2.1 ++++diff -u -r1.25.2.1 tray-monitor.c ++++--- src/tray-monitor/tray-monitor.c 1 Oct 2005 10:20:18 -0000 1.25.2.1 +++++++ src/tray-monitor/tray-monitor.c 21 Nov 2005 18:19:08 -0000 ++++@@ -4,7 +4,7 @@ ++++ * ++++ * Nicolas Boichat, August MMIV ++++ * ++++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ */ ++++ ++++ /* ++++@@ -881,7 +881,7 @@ ++++ } ++++ ++++ if (item->D_sock == NULL) { ++++- g_slist_append(*list, (void *)_("Cannot connect to daemon.\n")); +++++ g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n"))); ++++ changeStatusMessage(item, _("Cannot connect to daemon.")); ++++ item->state = error; ++++ item->oldstate = error; +++Index: patches/patches-1.38.0 +++=================================================================== +++RCS file: patches/patches-1.38.0 +++diff -N patches/patches-1.38.0 +++Index: patches/patches-1.38.1 +++=================================================================== +++RCS file: patches/patches-1.38.1 +++diff -N patches/patches-1.38.1 +++--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++++ patches/patches-1.38.1 22 Nov 2005 10:42:22 -0000 +++@@ -0,0 +1,14 @@ ++++20Nov05 1.38.1-to-1.38.2.patch ++++ This patch fixes the following bugs: ++++ ++++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++++ says this patch does not fix his problem) ++++- Fix cancel failure bug. Bug #481 ++++- Fix failure when Pool name has spaces. Bug #487 ++++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++++- Fix a couple of free()s in src/filed/acl.c ++++- Fix memory overrun in bfile.c in building OS X resource ++++ fork filename. Bug #489 ++++ ++++ +++Index: src/version.h +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/version.h,v +++retrieving revision 1.554.2.14 +++diff -u -r1.554.2.14 version.h +++--- src/version.h 14 Nov 2005 14:21:58 -0000 1.554.2.14 ++++++ src/version.h 22 Nov 2005 10:42:22 -0000 +++@@ -3,9 +3,9 @@ +++ */ +++ +++ #undef VERSION +++-#define VERSION "1.38.1" +++-#define BDATE "14 November 2005" +++-#define LSMDATE "14Nov05" ++++#define VERSION "1.38.2" ++++#define BDATE "20 November 2005" ++++#define LSMDATE "20Nov05" +++ +++ /* Debug flags */ +++ #undef DEBUG +++Index: src/dird/catreq.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v +++retrieving revision 1.77.2.1 +++diff -u -r1.77.2.1 catreq.c +++--- src/dird/catreq.c 26 Oct 2005 14:02:04 -0000 1.77.2.1 ++++++ src/dird/catreq.c 22 Nov 2005 10:42:22 -0000 +++@@ -10,7 +10,7 @@ +++ * Basic tasks done here: +++ * Handle Catalog services. +++ * +++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ */ +++ /* +++ Copyright (C) 2001-2005 Kern Sibbald +++@@ -117,6 +117,7 @@ +++ if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) { +++ memset(&pr, 0, sizeof(pr)); +++ bstrncpy(pr.Name, pool_name, sizeof(pr.Name)); ++++ unbash_spaces(pr.Name); +++ ok = db_get_pool_record(jcr, jcr->db, &pr); +++ if (ok) { +++ mr.PoolId = pr.PoolId; +++Index: src/dird/ua_restore.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v +++retrieving revision 1.101.2.1 +++diff -u -r1.101.2.1 ua_restore.c +++--- src/dird/ua_restore.c 26 Oct 2005 14:02:04 -0000 1.101.2.1 ++++++ src/dird/ua_restore.c 22 Nov 2005 10:42:23 -0000 +++@@ -10,7 +10,7 @@ +++ * +++ * Kern Sibbald, July MMII +++ * +++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ */ +++ /* +++ Copyright (C) 2002-2005 Kern Sibbald +++@@ -409,7 +409,7 @@ +++ } +++ done = true; +++ switch (do_prompt(ua, "", _("Select item: "), NULL, 0)) { +++- case -1: /* error */ ++++ case -1: /* error or cancel */ +++ return 0; +++ case 0: /* list last 20 Jobs run */ +++ gui_save = ua->jcr->gui; +++Index: src/dird/ua_run.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v +++retrieving revision 1.71 +++diff -u -r1.71 ua_run.c +++--- src/dird/ua_run.c 10 Aug 2005 16:35:19 -0000 1.71 ++++++ src/dird/ua_run.c 22 Nov 2005 10:42:23 -0000 +++@@ -851,6 +851,8 @@ +++ bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); +++ } +++ goto try_again; ++++ case -1: /* error or cancel */ ++++ goto bail_out; +++ default: +++ goto try_again; +++ } +++Index: src/dird/ua_select.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v +++retrieving revision 1.65.2.1 +++diff -u -r1.65.2.1 ua_select.c +++--- src/dird/ua_select.c 12 Nov 2005 17:30:52 -0000 1.65.2.1 ++++++ src/dird/ua_select.c 22 Nov 2005 10:42:23 -0000 +++@@ -4,7 +4,7 @@ +++ * +++ * Kern Sibbald, October MMI +++ * +++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ */ +++ /* +++ Copyright (C) 2001-2005 Kern Sibbald +++@@ -149,7 +149,9 @@ +++ } +++ } +++ UnlockRes(); +++- do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)); ++++ if (do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)) < 0) { ++++ return NULL; ++++ } +++ store = (STORE *)GetResWithName(R_STORAGE, name); +++ return store; +++ } +++@@ -170,7 +172,9 @@ +++ } +++ } +++ UnlockRes(); +++- do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)); ++++ if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) { ++++ return NULL; ++++ } +++ fs = (FILESET *)GetResWithName(R_FILESET, name); +++ return fs; +++ } +++@@ -202,7 +206,9 @@ +++ } +++ } +++ UnlockRes(); +++- do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)); ++++ if (do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)) < 0) { ++++ return NULL; ++++ } +++ catalog = (CAT *)GetResWithName(R_CATALOG, name); +++ } +++ return catalog; +++@@ -225,7 +231,9 @@ +++ } +++ } +++ UnlockRes(); +++- do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)); ++++ if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) { ++++ return NULL; ++++ } +++ job = (JOB *)GetResWithName(R_JOB, name); +++ return job; +++ } +++@@ -246,7 +254,9 @@ +++ } +++ } +++ UnlockRes(); +++- do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)); ++++ if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) { ++++ return NULL; ++++ } +++ job = (JOB *)GetResWithName(R_JOB, name); +++ return job; +++ } +++@@ -269,7 +279,9 @@ +++ } +++ } +++ UnlockRes(); +++- do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)); ++++ if (do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) { ++++ return NULL; ++++ } +++ client = (CLIENT *)GetResWithName(R_CLIENT, name); +++ return client; +++ } +++@@ -551,7 +563,9 @@ +++ } +++ } +++ UnlockRes(); +++- do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)); ++++ if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) { ++++ return NULL; ++++ } +++ pool = (POOL *)GetResWithName(R_POOL, name); +++ return pool; +++ } +++@@ -673,12 +687,16 @@ +++ * Returns: -1 on error +++ * index base 0 on success, and choice +++ * is copied to prompt if not NULL ++++ * prompt is set to the chosen prompt item string +++ */ +++ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) +++ { +++ int i, item; +++ char pmsg[MAXSTRING]; +++ ++++ if (prompt) { ++++ *prompt = 0; ++++ } +++ if (ua->num_prompts == 2) { +++ item = 1; +++ if (prompt) { +++@@ -698,15 +716,11 @@ +++ bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]); +++ } +++ +++- if (prompt) { +++- *prompt = 0; +++- } +++- +++ for ( ;; ) { +++ /* First item is the prompt string, not the items */ +++ if (ua->num_prompts == 1) { +++ bsendmsg(ua, _("Selection is empty!\n")); +++- item = 0; /* list is empty ! */ ++++ item = -1; /* list is empty ! */ +++ break; +++ } +++ if (ua->num_prompts == 2) { +++@@ -741,7 +755,7 @@ +++ free(ua->prompt[i]); +++ } +++ ua->num_prompts = 0; +++- return item - 1; ++++ return item>0 ? item-1 : item; +++ } +++ +++ +++Index: src/dird/ua_update.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v +++retrieving revision 1.7 +++diff -u -r1.7 ua_update.c +++--- src/dird/ua_update.c 28 Aug 2005 12:22:02 -0000 1.7 ++++++ src/dird/ua_update.c 22 Nov 2005 10:42:23 -0000 +++@@ -590,7 +590,7 @@ +++ update_all_vols_from_pool(ua); +++ return 1; +++ default: /* Done or error */ +++- bsendmsg(ua, _("Selection done.\n")); ++++ bsendmsg(ua, _("Selection terminated.\n")); +++ return 1; +++ } +++ } +++Index: src/filed/acl.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v +++retrieving revision 1.10.2.1 +++diff -u -r1.10.2.1 acl.c +++--- src/filed/acl.c 14 Nov 2005 20:20:38 -0000 1.10.2.1 ++++++ src/filed/acl.c 22 Nov 2005 10:42:23 -0000 +++@@ -26,7 +26,7 @@ +++ * +++ * Written by Preben 'Peppe' Guldberg, December MMIV +++ * +++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ */ +++ /* +++ Copyright (C) 2004-2005 Kern Sibbald +++@@ -140,7 +140,7 @@ +++ +++ if ((acl_text = acl_get(jcr->last_fname)) != NULL) { +++ len = pm_strcpy(jcr->acl_text, acl_text); +++- free(acl_text); ++++ actuallyfree(acl_text); +++ return len; +++ } +++ return -1; +++@@ -270,7 +270,7 @@ +++ if ((n = getacl(jcr->last_fname, n, acls)) > 0) { +++ if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) { +++ len = pm_strcpy(jcr->acl_text, acl_text); +++- free(acl_text); ++++ actuallyfree(acl_text); +++ return len; +++ } +++ } +++Index: src/findlib/bfile.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v +++retrieving revision 1.40 +++diff -u -r1.40 bfile.c +++--- src/findlib/bfile.c 10 Aug 2005 16:35:19 -0000 1.40 ++++++ src/findlib/bfile.c 22 Nov 2005 10:42:24 -0000 +++@@ -623,13 +623,10 @@ +++ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) +++ { +++ POOLMEM *rsrc_fname; +++- size_t fname_len; +++ +++- fname_len = strlen(fname); +++ rsrc_fname = get_pool_memory(PM_FNAME); +++- bstrncpy(rsrc_fname, fname, fname_len + 1); +++- bstrncpy(rsrc_fname + fname_len, _PATH_RSRCFORKSPEC, +++- strlen(_PATH_RSRCFORKSPEC) + 1); ++++ pm_strcpy(rsrc_fname, fname); ++++ pm_strcat(rsrc_fname, _PATH_RSRCFORKSPEC); +++ bopen(bfd, rsrc_fname, flags, mode); +++ free_pool_memory(rsrc_fname); +++ return bfd->fid; +++Index: src/lib/bnet_server.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v +++retrieving revision 1.39 +++diff -u -r1.39 bnet_server.c +++--- src/lib/bnet_server.c 18 Aug 2005 15:37:40 -0000 1.39 ++++++ src/lib/bnet_server.c 22 Nov 2005 10:42:24 -0000 +++@@ -153,7 +153,6 @@ +++ /* Error, get out */ +++ foreach_dlist(fd_ptr, &sockfds) { +++ close(fd_ptr->fd); +++- free((void *)fd_ptr); +++ } +++ Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror()); +++ break; +++Index: src/stored/autochanger.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v +++retrieving revision 1.47.2.3 +++diff -u -r1.47.2.3 autochanger.c +++--- src/stored/autochanger.c 12 Nov 2005 17:30:53 -0000 1.47.2.3 ++++++ src/stored/autochanger.c 22 Nov 2005 10:42:24 -0000 +++@@ -4,7 +4,7 @@ +++ * +++ * Kern Sibbald, August MMII +++ * +++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ */ +++ /* +++ Copyright (C) 2002-2005 Kern Sibbald +++@@ -163,6 +163,7 @@ +++ rtn_stat = -1; /* hard error */ +++ } +++ Dmsg2(400, "load slot %d status=%d\n", slot, status); ++++ unlock_changer(dcr); +++ } else { +++ status = 0; /* we got what we want */ +++ dev->Slot = slot; /* set currently loaded slot */ +++@@ -174,7 +175,6 @@ +++ } else { +++ rtn_stat = 0; /* no changer found */ +++ } +++- unlock_changer(dcr); +++ free_pool_memory(changer); +++ return rtn_stat; +++ +++Index: src/stored/status.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/stored/status.c,v +++retrieving revision 1.44.2.1 +++diff -u -r1.44.2.1 status.c +++--- src/stored/status.c 6 Oct 2005 07:04:13 -0000 1.44.2.1 ++++++ src/stored/status.c 22 Nov 2005 10:42:24 -0000 +++@@ -264,6 +264,7 @@ +++ bool found = false; +++ int bps, sec; +++ JCR *jcr; ++++ DCR *dcr; +++ char JobName[MAX_NAME_LENGTH]; +++ char b1[30], b2[30], b3[30]; +++ +++@@ -273,7 +274,8 @@ +++ bnet_fsend(user, _("%s Job %s waiting for Client connection.\n"), +++ job_type_to_str(jcr->JobType), jcr->Job); +++ } +++- if (jcr->dcr && jcr->dcr->device) { ++++ dcr = jcr->dcr; ++++ if (dcr && dcr->device) { +++ bstrncpy(JobName, jcr->Job, sizeof(JobName)); +++ /* There are three periods after the Job name */ +++ char *p; +++@@ -282,13 +284,16 @@ +++ *p = 0; +++ } +++ } +++- bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\" device=\"%s\"\n"), ++++ bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\"\n" ++++ " pool=\"%s\" device=\"%s\"\n"), +++ job_level_to_str(jcr->JobLevel), +++ job_type_to_str(jcr->JobType), +++ JobName, +++ jcr->JobId, +++- jcr->dcr->VolumeName, +++- jcr->dcr->device->device_name); ++++ dcr->VolumeName, ++++ dcr->pool_name, ++++ dcr->dev?dcr->dev->print_name(): ++++ dcr->device->device_name); +++ sec = time(NULL) - jcr->run_time; +++ if (sec <= 0) { +++ sec = 1; +++Index: src/stored/stored_conf.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/stored/stored_conf.c,v +++retrieving revision 1.76 +++diff -u -r1.76 stored_conf.c +++--- src/stored/stored_conf.c 9 Sep 2005 09:40:04 -0000 1.76 ++++++ src/stored/stored_conf.c 22 Nov 2005 10:42:24 -0000 +++@@ -222,16 +222,16 @@ +++ res->res_dev.hdr.name, +++ res->res_dev.media_type, res->res_dev.device_name, +++ res->res_dev.label_type); +++- sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d\n", ++++ sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n", +++ res->res_dev.max_rewind_wait, res->res_dev.min_block_size, +++- res->res_dev.max_block_size); ++++ res->res_dev.max_block_size, res->res_dev.max_changer_wait); +++ sendit(sock, " max_jobs=%d max_files=%" lld " max_size=%" lld "\n", +++ res->res_dev.max_volume_jobs, res->res_dev.max_volume_files, +++ res->res_dev.max_volume_size); +++ sendit(sock, " max_file_size=%" lld " capacity=%" lld "\n", +++ res->res_dev.max_file_size, res->res_dev.volume_capacity); +++- sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); +++- sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", ++++ sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); ++++ sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", +++ res->res_dev.max_spool_size, res->res_dev.max_job_spool_size); +++ if (res->res_dev.changer_res) { +++ sendit(sock, " changer=%p\n", res->res_dev.changer_res); +++Index: src/tray-monitor/tray-monitor.c +++=================================================================== +++RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v +++retrieving revision 1.25.2.1 +++diff -u -r1.25.2.1 tray-monitor.c +++--- src/tray-monitor/tray-monitor.c 1 Oct 2005 10:20:18 -0000 1.25.2.1 ++++++ src/tray-monitor/tray-monitor.c 22 Nov 2005 10:42:24 -0000 +++@@ -4,7 +4,7 @@ +++ * +++ * Nicolas Boichat, August MMIV +++ * +++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ */ +++ +++ /* +++@@ -881,7 +881,7 @@ +++ } +++ +++ if (item->D_sock == NULL) { +++- g_slist_append(*list, (void *)_("Cannot connect to daemon.\n")); ++++ g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n"))); +++ changeStatusMessage(item, _("Cannot connect to daemon.")); +++ item->state = error; +++ item->oldstate = error; +++Index: updatedb/kes-1.38 +++=================================================================== +++RCS file: updatedb/kes-1.38 +++diff -N updatedb/kes-1.38 +++--- updatedb/kes-1.38 3 Nov 2005 14:54:28 -0000 1.1.2.1 ++++++ /dev/null 1 Jan 1970 00:00:00 -0000 +++@@ -1,19 +0,0 @@ +++- Technical notes on version 1.38 +++- Kern Sibbald +++- +++-General: +++- +++-Changes to 1.38.0: +++-- Modify configure.in to add execute option to sqlite3 catalog +++- scripts. +++-- Create update_xxx_table_8_to_9 scripts for updatedb +++-- Fix wrong variable in bpipe.c debug output reported by user. +++-- Fix improper placement of encode_and_send_attributes() in +++- FD backup.c causing first file of non-portable Win32 backup +++- to have wrong stream. Reported by Thorsten. +++-- Move the -lcrypt for PostgreSQL after the PostgreSQL libs in +++- autoconf/bacula-macros/db.m4 as suggested by user. Fixes bug #457. +++-- Remove @STATIC_CONS@ from tray-monitor Makefile as suggested +++- by user. Fixes bug #456. +++- +++-Released 1.38.0 (28Oct05): 31 October 2005 ++Index: patches/patches-1.38.0 ++=================================================================== ++RCS file: patches/patches-1.38.0 ++diff -N patches/patches-1.38.0 ++Index: patches/patches-1.38.1 ++=================================================================== ++RCS file: patches/patches-1.38.1 ++diff -N patches/patches-1.38.1 ++--- /dev/null 1 Jan 1970 00:00:00 -0000 +++++ patches/patches-1.38.1 22 Nov 2005 10:50:55 -0000 1.1.2.2 ++@@ -0,0 +1,14 @@ +++20Nov05 1.38.1-to-1.38.2.patch +++ This patch fixes the following bugs: +++ +++- Fix crash in tray-monitor when daemon disconnects. Bug #479. +++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator +++ says this patch does not fix his problem) +++- Fix cancel failure bug. Bug #481 +++- Fix failure when Pool name has spaces. Bug #487 +++- Fix SD crash in autochanger code. Mutex failure. Bug #488 +++- Fix a couple of free()s in src/filed/acl.c +++- Fix memory overrun in bfile.c in building OS X resource +++ fork filename. Bug #489 +++ +++ ++Index: src/version.h ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/version.h,v ++retrieving revision 1.554.2.14 ++retrieving revision 1.554.2.15 ++diff -u -r1.554.2.14 -r1.554.2.15 ++--- src/version.h 14 Nov 2005 14:21:58 -0000 1.554.2.14 +++++ src/version.h 22 Nov 2005 10:50:55 -0000 1.554.2.15 ++@@ -1,11 +1,11 @@ ++ /* ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ ++ #undef VERSION ++-#define VERSION "1.38.1" ++-#define BDATE "14 November 2005" ++-#define LSMDATE "14Nov05" +++#define VERSION "1.38.2" +++#define BDATE "20 November 2005" +++#define LSMDATE "20Nov05" ++ ++ /* Debug flags */ ++ #undef DEBUG ++Index: src/dird/catreq.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v ++retrieving revision 1.77.2.1 ++retrieving revision 1.77.2.2 ++diff -u -r1.77.2.1 -r1.77.2.2 ++--- src/dird/catreq.c 26 Oct 2005 14:02:04 -0000 1.77.2.1 +++++ src/dird/catreq.c 22 Nov 2005 10:50:55 -0000 1.77.2.2 ++@@ -10,7 +10,7 @@ ++ * Basic tasks done here: ++ * Handle Catalog services. ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ /* ++ Copyright (C) 2001-2005 Kern Sibbald ++@@ -117,6 +117,7 @@ ++ if (sscanf(bs->msg, Find_media, &Job, &index, &pool_name, &mr.MediaType) == 4) { ++ memset(&pr, 0, sizeof(pr)); ++ bstrncpy(pr.Name, pool_name, sizeof(pr.Name)); +++ unbash_spaces(pr.Name); ++ ok = db_get_pool_record(jcr, jcr->db, &pr); ++ if (ok) { ++ mr.PoolId = pr.PoolId; ++Index: src/dird/ua_restore.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v ++retrieving revision 1.101.2.1 ++retrieving revision 1.101.2.2 ++diff -u -r1.101.2.1 -r1.101.2.2 ++--- src/dird/ua_restore.c 26 Oct 2005 14:02:04 -0000 1.101.2.1 +++++ src/dird/ua_restore.c 22 Nov 2005 10:50:55 -0000 1.101.2.2 ++@@ -10,7 +10,7 @@ ++ * ++ * Kern Sibbald, July MMII ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ /* ++ Copyright (C) 2002-2005 Kern Sibbald ++@@ -409,7 +409,7 @@ ++ } ++ done = true; ++ switch (do_prompt(ua, "", _("Select item: "), NULL, 0)) { ++- case -1: /* error */ +++ case -1: /* error or cancel */ ++ return 0; ++ case 0: /* list last 20 Jobs run */ ++ gui_save = ua->jcr->gui; ++Index: src/dird/ua_run.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v ++retrieving revision 1.71 ++retrieving revision 1.71.2.1 ++diff -u -r1.71 -r1.71.2.1 ++--- src/dird/ua_run.c 10 Aug 2005 16:35:19 -0000 1.71 +++++ src/dird/ua_run.c 22 Nov 2005 10:50:55 -0000 1.71.2.1 ++@@ -4,7 +4,7 @@ ++ * ++ * Kern Sibbald, December MMI ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ /* ++ Copyright (C) 2001-2005 Kern Sibbald ++@@ -851,6 +851,8 @@ ++ bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); ++ } ++ goto try_again; +++ case -1: /* error or cancel */ +++ goto bail_out; ++ default: ++ goto try_again; ++ } ++Index: src/dird/ua_select.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v ++retrieving revision 1.65.2.1 ++retrieving revision 1.65.2.2 ++diff -u -r1.65.2.1 -r1.65.2.2 ++--- src/dird/ua_select.c 12 Nov 2005 17:30:52 -0000 1.65.2.1 +++++ src/dird/ua_select.c 22 Nov 2005 10:50:55 -0000 1.65.2.2 ++@@ -4,7 +4,7 @@ ++ * ++ * Kern Sibbald, October MMI ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ /* ++ Copyright (C) 2001-2005 Kern Sibbald ++@@ -149,7 +149,9 @@ ++ } ++ } ++ UnlockRes(); ++- do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)); +++ if (do_prompt(ua, _("Storage"), _("Select Storage resource"), name, sizeof(name)) < 0) { +++ return NULL; +++ } ++ store = (STORE *)GetResWithName(R_STORAGE, name); ++ return store; ++ } ++@@ -170,7 +172,9 @@ ++ } ++ } ++ UnlockRes(); ++- do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)); +++ if (do_prompt(ua, _("FileSet"), _("Select FileSet resource"), name, sizeof(name)) < 0) { +++ return NULL; +++ } ++ fs = (FILESET *)GetResWithName(R_FILESET, name); ++ return fs; ++ } ++@@ -202,7 +206,9 @@ ++ } ++ } ++ UnlockRes(); ++- do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)); +++ if (do_prompt(ua, _("Catalog"), _("Select Catalog resource"), name, sizeof(name)) < 0) { +++ return NULL; +++ } ++ catalog = (CAT *)GetResWithName(R_CATALOG, name); ++ } ++ return catalog; ++@@ -225,7 +231,9 @@ ++ } ++ } ++ UnlockRes(); ++- do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)); +++ if (do_prompt(ua, _("Job"), _("Select Job resource"), name, sizeof(name)) < 0) { +++ return NULL; +++ } ++ job = (JOB *)GetResWithName(R_JOB, name); ++ return job; ++ } ++@@ -246,7 +254,9 @@ ++ } ++ } ++ UnlockRes(); ++- do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)); +++ if (do_prompt(ua, _("Job"), _("Select Restore Job"), name, sizeof(name)) < 0) { +++ return NULL; +++ } ++ job = (JOB *)GetResWithName(R_JOB, name); ++ return job; ++ } ++@@ -269,7 +279,9 @@ ++ } ++ } ++ UnlockRes(); ++- do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)); +++ if (do_prompt(ua, _("Client"), _("Select Client (File daemon) resource"), name, sizeof(name)) < 0) { +++ return NULL; +++ } ++ client = (CLIENT *)GetResWithName(R_CLIENT, name); ++ return client; ++ } ++@@ -551,7 +563,9 @@ ++ } ++ } ++ UnlockRes(); ++- do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)); +++ if (do_prompt(ua, _("Pool"), _("Select Pool resource"), name, sizeof(name)) < 0) { +++ return NULL; +++ } ++ pool = (POOL *)GetResWithName(R_POOL, name); ++ return pool; ++ } ++@@ -673,12 +687,16 @@ ++ * Returns: -1 on error ++ * index base 0 on success, and choice ++ * is copied to prompt if not NULL +++ * prompt is set to the chosen prompt item string ++ */ ++ int do_prompt(UAContext *ua, const char *automsg, const char *msg, char *prompt, int max_prompt) ++ { ++ int i, item; ++ char pmsg[MAXSTRING]; ++ +++ if (prompt) { +++ *prompt = 0; +++ } ++ if (ua->num_prompts == 2) { ++ item = 1; ++ if (prompt) { ++@@ -698,15 +716,11 @@ ++ bsendmsg(ua, "%6d: %s\n", i, ua->prompt[i]); ++ } ++ ++- if (prompt) { ++- *prompt = 0; ++- } ++- ++ for ( ;; ) { ++ /* First item is the prompt string, not the items */ ++ if (ua->num_prompts == 1) { ++ bsendmsg(ua, _("Selection is empty!\n")); ++- item = 0; /* list is empty ! */ +++ item = -1; /* list is empty ! */ ++ break; ++ } ++ if (ua->num_prompts == 2) { ++@@ -741,7 +755,7 @@ ++ free(ua->prompt[i]); ++ } ++ ua->num_prompts = 0; ++- return item - 1; +++ return item>0 ? item-1 : item; ++ } ++ ++ ++Index: src/dird/ua_update.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v ++retrieving revision 1.7 ++retrieving revision 1.7.2.1 ++diff -u -r1.7 -r1.7.2.1 ++--- src/dird/ua_update.c 28 Aug 2005 12:22:02 -0000 1.7 +++++ src/dird/ua_update.c 22 Nov 2005 10:50:55 -0000 1.7.2.1 ++@@ -5,7 +5,7 @@ ++ * ++ * Kern Sibbald, September MM ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ /* ++ Copyright (C) 2000-2005 Kern Sibbald ++@@ -590,7 +590,7 @@ ++ update_all_vols_from_pool(ua); ++ return 1; ++ default: /* Done or error */ ++- bsendmsg(ua, _("Selection done.\n")); +++ bsendmsg(ua, _("Selection terminated.\n")); ++ return 1; ++ } ++ } ++Index: src/filed/acl.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v ++retrieving revision 1.10.2.1 ++retrieving revision 1.10.2.2 ++diff -u -r1.10.2.1 -r1.10.2.2 ++--- src/filed/acl.c 14 Nov 2005 20:20:38 -0000 1.10.2.1 +++++ src/filed/acl.c 22 Nov 2005 10:50:55 -0000 1.10.2.2 ++@@ -26,7 +26,7 @@ ++ * ++ * Written by Preben 'Peppe' Guldberg, December MMIV ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ /* ++ Copyright (C) 2004-2005 Kern Sibbald ++@@ -140,7 +140,7 @@ ++ ++ if ((acl_text = acl_get(jcr->last_fname)) != NULL) { ++ len = pm_strcpy(jcr->acl_text, acl_text); ++- free(acl_text); +++ actuallyfree(acl_text); ++ return len; ++ } ++ return -1; ++@@ -270,7 +270,7 @@ ++ if ((n = getacl(jcr->last_fname, n, acls)) > 0) { ++ if ((acl_text = acltostr(n, acls, FORM_SHORT)) != NULL) { ++ len = pm_strcpy(jcr->acl_text, acl_text); ++- free(acl_text); +++ actuallyfree(acl_text); ++ return len; ++ } ++ } ++Index: src/findlib/bfile.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v ++retrieving revision 1.40 ++retrieving revision 1.40.2.1 ++diff -u -r1.40 -r1.40.2.1 ++--- src/findlib/bfile.c 10 Aug 2005 16:35:19 -0000 1.40 +++++ src/findlib/bfile.c 22 Nov 2005 10:50:55 -0000 1.40.2.1 ++@@ -5,7 +5,7 @@ ++ * ++ * Kern Sibbald, April MMIII ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ * ++ */ ++ /* ++@@ -623,13 +623,10 @@ ++ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) ++ { ++ POOLMEM *rsrc_fname; ++- size_t fname_len; ++ ++- fname_len = strlen(fname); ++ rsrc_fname = get_pool_memory(PM_FNAME); ++- bstrncpy(rsrc_fname, fname, fname_len + 1); ++- bstrncpy(rsrc_fname + fname_len, _PATH_RSRCFORKSPEC, ++- strlen(_PATH_RSRCFORKSPEC) + 1); +++ pm_strcpy(rsrc_fname, fname); +++ pm_strcat(rsrc_fname, _PATH_RSRCFORKSPEC); ++ bopen(bfd, rsrc_fname, flags, mode); ++ free_pool_memory(rsrc_fname); ++ return bfd->fid; ++Index: src/lib/bnet_server.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v ++retrieving revision 1.39 ++retrieving revision 1.39.2.1 ++diff -u -r1.39 -r1.39.2.1 ++--- src/lib/bnet_server.c 18 Aug 2005 15:37:40 -0000 1.39 +++++ src/lib/bnet_server.c 22 Nov 2005 10:50:55 -0000 1.39.2.1 ++@@ -16,7 +16,7 @@ ++ * Originally written by Kern Sibbald for inclusion in apcupsd, ++ * but heavily modified for Bacula ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ ++ #include "bacula.h" ++@@ -153,7 +153,6 @@ ++ /* Error, get out */ ++ foreach_dlist(fd_ptr, &sockfds) { ++ close(fd_ptr->fd); ++- free((void *)fd_ptr); ++ } ++ Emsg1(M_FATAL, 0, _("Error in select: %s\n"), be.strerror()); ++ break; ++Index: src/stored/autochanger.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v ++retrieving revision 1.47.2.3 ++retrieving revision 1.47.2.4 ++diff -u -r1.47.2.3 -r1.47.2.4 ++--- src/stored/autochanger.c 12 Nov 2005 17:30:53 -0000 1.47.2.3 +++++ src/stored/autochanger.c 22 Nov 2005 10:50:55 -0000 1.47.2.4 ++@@ -4,7 +4,7 @@ ++ * ++ * Kern Sibbald, August MMII ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ /* ++ Copyright (C) 2002-2005 Kern Sibbald ++@@ -163,6 +163,7 @@ ++ rtn_stat = -1; /* hard error */ ++ } ++ Dmsg2(400, "load slot %d status=%d\n", slot, status); +++ unlock_changer(dcr); ++ } else { ++ status = 0; /* we got what we want */ ++ dev->Slot = slot; /* set currently loaded slot */ ++@@ -174,7 +175,6 @@ ++ } else { ++ rtn_stat = 0; /* no changer found */ ++ } ++- unlock_changer(dcr); ++ free_pool_memory(changer); ++ return rtn_stat; ++ ++Index: src/stored/status.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/stored/status.c,v ++retrieving revision 1.44.2.1 ++retrieving revision 1.44.2.2 ++diff -u -r1.44.2.1 -r1.44.2.2 ++--- src/stored/status.c 6 Oct 2005 07:04:13 -0000 1.44.2.1 +++++ src/stored/status.c 22 Nov 2005 10:50:55 -0000 1.44.2.2 ++@@ -3,7 +3,7 @@ ++ * ++ * Kern Sibbald, May MMIII ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ * ++ */ ++ /* ++@@ -264,6 +264,7 @@ ++ bool found = false; ++ int bps, sec; ++ JCR *jcr; +++ DCR *dcr; ++ char JobName[MAX_NAME_LENGTH]; ++ char b1[30], b2[30], b3[30]; ++ ++@@ -273,7 +274,8 @@ ++ bnet_fsend(user, _("%s Job %s waiting for Client connection.\n"), ++ job_type_to_str(jcr->JobType), jcr->Job); ++ } ++- if (jcr->dcr && jcr->dcr->device) { +++ dcr = jcr->dcr; +++ if (dcr && dcr->device) { ++ bstrncpy(JobName, jcr->Job, sizeof(JobName)); ++ /* There are three periods after the Job name */ ++ char *p; ++@@ -282,13 +284,16 @@ ++ *p = 0; ++ } ++ } ++- bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\" device=\"%s\"\n"), +++ bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\"\n" +++ " pool=\"%s\" device=\"%s\"\n"), ++ job_level_to_str(jcr->JobLevel), ++ job_type_to_str(jcr->JobType), ++ JobName, ++ jcr->JobId, ++- jcr->dcr->VolumeName, ++- jcr->dcr->device->device_name); +++ dcr->VolumeName, +++ dcr->pool_name, +++ dcr->dev?dcr->dev->print_name(): +++ dcr->device->device_name); ++ sec = time(NULL) - jcr->run_time; ++ if (sec <= 0) { ++ sec = 1; ++Index: src/stored/stored_conf.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/stored/stored_conf.c,v ++retrieving revision 1.76 ++retrieving revision 1.76.2.1 ++diff -u -r1.76 -r1.76.2.1 ++--- src/stored/stored_conf.c 9 Sep 2005 09:40:04 -0000 1.76 +++++ src/stored/stored_conf.c 22 Nov 2005 10:50:55 -0000 1.76.2.1 ++@@ -3,7 +3,7 @@ ++ * ++ * Kern Sibbald, March MM ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ /* ++ Copyright (C) 2000-2005 Kern Sibbald ++@@ -222,16 +222,16 @@ ++ res->res_dev.hdr.name, ++ res->res_dev.media_type, res->res_dev.device_name, ++ res->res_dev.label_type); ++- sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d\n", +++ sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n", ++ res->res_dev.max_rewind_wait, res->res_dev.min_block_size, ++- res->res_dev.max_block_size); +++ res->res_dev.max_block_size, res->res_dev.max_changer_wait); ++ sendit(sock, " max_jobs=%d max_files=%" lld " max_size=%" lld "\n", ++ res->res_dev.max_volume_jobs, res->res_dev.max_volume_files, ++ res->res_dev.max_volume_size); ++ sendit(sock, " max_file_size=%" lld " capacity=%" lld "\n", ++ res->res_dev.max_file_size, res->res_dev.volume_capacity); ++- sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); ++- sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", +++ sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); +++ sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", ++ res->res_dev.max_spool_size, res->res_dev.max_job_spool_size); ++ if (res->res_dev.changer_res) { ++ sendit(sock, " changer=%p\n", res->res_dev.changer_res); ++Index: src/tray-monitor/tray-monitor.c ++=================================================================== ++RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v ++retrieving revision 1.25.2.1 ++retrieving revision 1.25.2.2 ++diff -u -r1.25.2.1 -r1.25.2.2 ++--- src/tray-monitor/tray-monitor.c 1 Oct 2005 10:20:18 -0000 1.25.2.1 +++++ src/tray-monitor/tray-monitor.c 22 Nov 2005 10:50:55 -0000 1.25.2.2 ++@@ -4,7 +4,7 @@ ++ * ++ * Nicolas Boichat, August MMIV ++ * ++- * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ +++ * Version $Id: 1.38.1-to-1.38.2.patch,v 1.1.2.3 2005/11/22 10:52:49 kerns Exp $ ++ */ ++ ++ /* ++@@ -881,7 +881,7 @@ ++ } ++ ++ if (item->D_sock == NULL) { ++- g_slist_append(*list, (void *)_("Cannot connect to daemon.\n")); +++ g_slist_append(*list, g_string_new(_("Cannot connect to daemon.\n"))); ++ changeStatusMessage(item, _("Cannot connect to daemon.")); ++ item->state = error; ++ item->oldstate = error; ++Index: updatedb/kes-1.38 ++=================================================================== ++RCS file: updatedb/kes-1.38 ++diff -N updatedb/kes-1.38 ++--- updatedb/kes-1.38 3 Nov 2005 14:54:28 -0000 1.1.2.1 +++++ /dev/null 1 Jan 1970 00:00:00 -0000 ++@@ -1,19 +0,0 @@ ++- Technical notes on version 1.38 ++- Kern Sibbald ++- ++-General: ++- ++-Changes to 1.38.0: ++-- Modify configure.in to add execute option to sqlite3 catalog ++- scripts. ++-- Create update_xxx_table_8_to_9 scripts for updatedb ++-- Fix wrong variable in bpipe.c debug output reported by user. ++-- Fix improper placement of encode_and_send_attributes() in ++- FD backup.c causing first file of non-portable Win32 backup ++- to have wrong stream. Reported by Thorsten. ++-- Move the -lcrypt for PostgreSQL after the PostgreSQL libs in ++- autoconf/bacula-macros/db.m4 as suggested by user. Fixes bug #457. ++-- Remove @STATIC_CONS@ from tray-monitor Makefile as suggested ++- by user. Fixes bug #456. ++- ++-Released 1.38.0 (28Oct05): 31 October 2005 +Index: patches/patches-1.38.0 +=================================================================== +RCS file: patches/patches-1.38.0 +diff -N patches/patches-1.38.0 +Index: patches/patches-1.38.1 +=================================================================== +RCS file: patches/patches-1.38.1 +diff -N patches/patches-1.38.1 +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ patches/patches-1.38.1 22 Nov 2005 10:50:55 -0000 1.1.2.2 +@@ -0,0 +1,14 @@ ++20Nov05 1.38.1-to-1.38.2.patch ++ This patch fixes the following bugs: ++ ++- Fix crash in tray-monitor when daemon disconnects. Bug #479. ++- Fix bnet-server bug found on OpenBSD. Bug #486 (bug originator ++ says this patch does not fix his problem) ++- Fix cancel failure bug. Bug #481 ++- Fix failure when Pool name has spaces. Bug #487 ++- Fix SD crash in autochanger code. Mutex failure. Bug #488 ++- Fix a couple of free()s in src/filed/acl.c ++- Fix memory overrun in bfile.c in building OS X resource ++ fork filename. Bug #489 ++ ++ Index: src/version.h =================================================================== RCS file: /cvsroot/bacula/bacula/src/version.h,v retrieving revision 1.554.2.14 -diff -u -r1.554.2.14 version.h +retrieving revision 1.554.2.15 +diff -u -r1.554.2.14 -r1.554.2.15 --- src/version.h 14 Nov 2005 14:21:58 -0000 1.554.2.14 -+++ src/version.h 21 Nov 2005 12:53:37 -0000 -@@ -3,9 +3,9 @@ ++++ src/version.h 22 Nov 2005 10:50:55 -0000 1.554.2.15 +@@ -1,11 +1,11 @@ + /* +- * Version $Id: version.h,v 1.554.2.14 2005/11/14 14:21:58 kerns Exp $ ++ * Version $Id: version.h,v 1.554.2.15 2005/11/22 10:50:55 kerns Exp $ */ #undef VERSION @@ -69,15 +7589,16 @@ Index: src/dird/catreq.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/catreq.c,v retrieving revision 1.77.2.1 -diff -u -r1.77.2.1 catreq.c +retrieving revision 1.77.2.2 +diff -u -r1.77.2.1 -r1.77.2.2 --- src/dird/catreq.c 26 Oct 2005 14:02:04 -0000 1.77.2.1 -+++ src/dird/catreq.c 21 Nov 2005 12:53:37 -0000 ++++ src/dird/catreq.c 22 Nov 2005 10:50:55 -0000 1.77.2.2 @@ -10,7 +10,7 @@ * Basic tasks done here: * Handle Catalog services. * - * Version $Id: catreq.c,v 1.77.2.1 2005/10/26 14:02:04 kerns Exp $ -+ * Version $Id: catreq.c,v 1.79 2005/10/11 20:40:52 kerns Exp $ ++ * Version $Id: catreq.c,v 1.77.2.2 2005/11/22 10:50:55 kerns Exp $ */ /* Copyright (C) 2001-2005 Kern Sibbald @@ -93,33 +7614,45 @@ Index: src/dird/ua_restore.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_restore.c,v retrieving revision 1.101.2.1 -diff -u -r1.101.2.1 ua_restore.c +retrieving revision 1.101.2.2 +diff -u -r1.101.2.1 -r1.101.2.2 --- src/dird/ua_restore.c 26 Oct 2005 14:02:04 -0000 1.101.2.1 -+++ src/dird/ua_restore.c 21 Nov 2005 12:53:37 -0000 ++++ src/dird/ua_restore.c 22 Nov 2005 10:50:55 -0000 1.101.2.2 @@ -10,7 +10,7 @@ * * Kern Sibbald, July MMII * - * Version $Id: ua_restore.c,v 1.101.2.1 2005/10/26 14:02:04 kerns Exp $ -+ * Version $Id: ua_restore.c,v 1.102 2005/10/25 17:06:42 kerns Exp $ ++ * Version $Id: ua_restore.c,v 1.101.2.2 2005/11/22 10:50:55 kerns Exp $ */ /* Copyright (C) 2002-2005 Kern Sibbald -@@ -573,6 +573,7 @@ - } - return 2; - -+ case -2: /* Period entered to cancel */ - case 11: /* Cancel or quit */ - return 0; +@@ -409,7 +409,7 @@ } + done = true; + switch (do_prompt(ua, "", _("Select item: "), NULL, 0)) { +- case -1: /* error */ ++ case -1: /* error or cancel */ + return 0; + case 0: /* list last 20 Jobs run */ + gui_save = ua->jcr->gui; Index: src/dird/ua_run.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_run.c,v retrieving revision 1.71 -diff -u -r1.71 ua_run.c +retrieving revision 1.71.2.1 +diff -u -r1.71 -r1.71.2.1 --- src/dird/ua_run.c 10 Aug 2005 16:35:19 -0000 1.71 -+++ src/dird/ua_run.c 21 Nov 2005 12:53:38 -0000 ++++ src/dird/ua_run.c 22 Nov 2005 10:50:55 -0000 1.71.2.1 +@@ -4,7 +4,7 @@ + * + * Kern Sibbald, December MMI + * +- * Version $Id: ua_run.c,v 1.71 2005/08/10 16:35:19 nboichat Exp $ ++ * Version $Id: ua_run.c,v 1.71.2.1 2005/11/22 10:50:55 kerns Exp $ + */ + /* + Copyright (C) 2001-2005 Kern Sibbald @@ -851,6 +851,8 @@ bsendmsg(ua, _("You must set the bootstrap file to NULL to be able to specify a JobId.\n")); } @@ -133,15 +7666,16 @@ Index: src/dird/ua_select.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_select.c,v retrieving revision 1.65.2.1 -diff -u -r1.65.2.1 ua_select.c +retrieving revision 1.65.2.2 +diff -u -r1.65.2.1 -r1.65.2.2 --- src/dird/ua_select.c 12 Nov 2005 17:30:52 -0000 1.65.2.1 -+++ src/dird/ua_select.c 21 Nov 2005 12:53:39 -0000 ++++ src/dird/ua_select.c 22 Nov 2005 10:50:55 -0000 1.65.2.2 @@ -4,7 +4,7 @@ * * Kern Sibbald, October MMI * - * Version $Id: ua_select.c,v 1.65.2.1 2005/11/12 17:30:52 kerns Exp $ -+ * Version $Id: ua_select.c,v 1.66 2005/11/12 17:31:19 kerns Exp $ ++ * Version $Id: ua_select.c,v 1.65.2.2 2005/11/22 10:50:55 kerns Exp $ */ /* Copyright (C) 2001-2005 Kern Sibbald @@ -269,9 +7803,19 @@ Index: src/dird/ua_update.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/dird/ua_update.c,v retrieving revision 1.7 -diff -u -r1.7 ua_update.c +retrieving revision 1.7.2.1 +diff -u -r1.7 -r1.7.2.1 --- src/dird/ua_update.c 28 Aug 2005 12:22:02 -0000 1.7 -+++ src/dird/ua_update.c 21 Nov 2005 12:53:39 -0000 ++++ src/dird/ua_update.c 22 Nov 2005 10:50:55 -0000 1.7.2.1 +@@ -5,7 +5,7 @@ + * + * Kern Sibbald, September MM + * +- * Version $Id: ua_update.c,v 1.7 2005/08/28 12:22:02 kerns Exp $ ++ * Version $Id: ua_update.c,v 1.7.2.1 2005/11/22 10:50:55 kerns Exp $ + */ + /* + Copyright (C) 2000-2005 Kern Sibbald @@ -590,7 +590,7 @@ update_all_vols_from_pool(ua); return 1; @@ -285,15 +7829,16 @@ Index: src/filed/acl.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/filed/acl.c,v retrieving revision 1.10.2.1 -diff -u -r1.10.2.1 acl.c +retrieving revision 1.10.2.2 +diff -u -r1.10.2.1 -r1.10.2.2 --- src/filed/acl.c 14 Nov 2005 20:20:38 -0000 1.10.2.1 -+++ src/filed/acl.c 21 Nov 2005 12:53:39 -0000 ++++ src/filed/acl.c 22 Nov 2005 10:50:55 -0000 1.10.2.2 @@ -26,7 +26,7 @@ * * Written by Preben 'Peppe' Guldberg, December MMIV * - * Version $Id: acl.c,v 1.10.2.1 2005/11/14 20:20:38 kerns Exp $ -+ * Version $Id: acl.c,v 1.11 2005/11/14 20:20:20 kerns Exp $ ++ * Version $Id: acl.c,v 1.10.2.2 2005/11/22 10:50:55 kerns Exp $ */ /* Copyright (C) 2004-2005 Kern Sibbald @@ -319,9 +7864,19 @@ Index: src/findlib/bfile.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/findlib/bfile.c,v retrieving revision 1.40 -diff -u -r1.40 bfile.c +retrieving revision 1.40.2.1 +diff -u -r1.40 -r1.40.2.1 --- src/findlib/bfile.c 10 Aug 2005 16:35:19 -0000 1.40 -+++ src/findlib/bfile.c 21 Nov 2005 12:53:39 -0000 ++++ src/findlib/bfile.c 22 Nov 2005 10:50:55 -0000 1.40.2.1 +@@ -5,7 +5,7 @@ + * + * Kern Sibbald, April MMIII + * +- * Version $Id: bfile.c,v 1.40 2005/08/10 16:35:19 nboichat Exp $ ++ * Version $Id: bfile.c,v 1.40.2.1 2005/11/22 10:50:55 kerns Exp $ + * + */ + /* @@ -623,13 +623,10 @@ int bopen_rsrc(BFILE *bfd, const char *fname, int flags, mode_t mode) { @@ -342,9 +7897,19 @@ Index: src/lib/bnet_server.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/lib/bnet_server.c,v retrieving revision 1.39 -diff -u -r1.39 bnet_server.c +retrieving revision 1.39.2.1 +diff -u -r1.39 -r1.39.2.1 --- src/lib/bnet_server.c 18 Aug 2005 15:37:40 -0000 1.39 -+++ src/lib/bnet_server.c 21 Nov 2005 12:53:39 -0000 ++++ src/lib/bnet_server.c 22 Nov 2005 10:50:55 -0000 1.39.2.1 +@@ -16,7 +16,7 @@ + * Originally written by Kern Sibbald for inclusion in apcupsd, + * but heavily modified for Bacula + * +- * Version $Id: bnet_server.c,v 1.39 2005/08/18 15:37:40 kerns Exp $ ++ * Version $Id: bnet_server.c,v 1.39.2.1 2005/11/22 10:50:55 kerns Exp $ + */ + + #include "bacula.h" @@ -153,7 +153,6 @@ /* Error, get out */ foreach_dlist(fd_ptr, &sockfds) { @@ -357,15 +7922,16 @@ Index: src/stored/autochanger.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/stored/autochanger.c,v retrieving revision 1.47.2.3 -diff -u -r1.47.2.3 autochanger.c +retrieving revision 1.47.2.4 +diff -u -r1.47.2.3 -r1.47.2.4 --- src/stored/autochanger.c 12 Nov 2005 17:30:53 -0000 1.47.2.3 -+++ src/stored/autochanger.c 21 Nov 2005 12:53:39 -0000 ++++ src/stored/autochanger.c 22 Nov 2005 10:50:55 -0000 1.47.2.4 @@ -4,7 +4,7 @@ * * Kern Sibbald, August MMII * - * Version $Id: autochanger.c,v 1.47.2.3 2005/11/12 17:30:53 kerns Exp $ -+ * Version $Id: autochanger.c,v 1.51 2005/11/12 17:31:19 kerns Exp $ ++ * Version $Id: autochanger.c,v 1.47.2.4 2005/11/22 10:50:55 kerns Exp $ */ /* Copyright (C) 2002-2005 Kern Sibbald @@ -385,19 +7951,113 @@ diff -u -r1.47.2.3 autochanger.c free_pool_memory(changer); return rtn_stat; +Index: src/stored/status.c +=================================================================== +RCS file: /cvsroot/bacula/bacula/src/stored/status.c,v +retrieving revision 1.44.2.1 +retrieving revision 1.44.2.2 +diff -u -r1.44.2.1 -r1.44.2.2 +--- src/stored/status.c 6 Oct 2005 07:04:13 -0000 1.44.2.1 ++++ src/stored/status.c 22 Nov 2005 10:50:55 -0000 1.44.2.2 +@@ -3,7 +3,7 @@ + * + * Kern Sibbald, May MMIII + * +- * Version $Id: status.c,v 1.44.2.1 2005/10/06 07:04:13 kerns Exp $ ++ * Version $Id: status.c,v 1.44.2.2 2005/11/22 10:50:55 kerns Exp $ + * + */ + /* +@@ -264,6 +264,7 @@ + bool found = false; + int bps, sec; + JCR *jcr; ++ DCR *dcr; + char JobName[MAX_NAME_LENGTH]; + char b1[30], b2[30], b3[30]; + +@@ -273,7 +274,8 @@ + bnet_fsend(user, _("%s Job %s waiting for Client connection.\n"), + job_type_to_str(jcr->JobType), jcr->Job); + } +- if (jcr->dcr && jcr->dcr->device) { ++ dcr = jcr->dcr; ++ if (dcr && dcr->device) { + bstrncpy(JobName, jcr->Job, sizeof(JobName)); + /* There are three periods after the Job name */ + char *p; +@@ -282,13 +284,16 @@ + *p = 0; + } + } +- bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\" device=\"%s\"\n"), ++ bnet_fsend(user, _("%s %s job %s JobId=%d Volume=\"%s\"\n" ++ " pool=\"%s\" device=\"%s\"\n"), + job_level_to_str(jcr->JobLevel), + job_type_to_str(jcr->JobType), + JobName, + jcr->JobId, +- jcr->dcr->VolumeName, +- jcr->dcr->device->device_name); ++ dcr->VolumeName, ++ dcr->pool_name, ++ dcr->dev?dcr->dev->print_name(): ++ dcr->device->device_name); + sec = time(NULL) - jcr->run_time; + if (sec <= 0) { + sec = 1; +Index: src/stored/stored_conf.c +=================================================================== +RCS file: /cvsroot/bacula/bacula/src/stored/stored_conf.c,v +retrieving revision 1.76 +retrieving revision 1.76.2.1 +diff -u -r1.76 -r1.76.2.1 +--- src/stored/stored_conf.c 9 Sep 2005 09:40:04 -0000 1.76 ++++ src/stored/stored_conf.c 22 Nov 2005 10:50:55 -0000 1.76.2.1 +@@ -3,7 +3,7 @@ + * + * Kern Sibbald, March MM + * +- * Version $Id: stored_conf.c,v 1.76 2005/09/09 09:40:04 kerns Exp $ ++ * Version $Id: stored_conf.c,v 1.76.2.1 2005/11/22 10:50:55 kerns Exp $ + */ + /* + Copyright (C) 2000-2005 Kern Sibbald +@@ -222,16 +222,16 @@ + res->res_dev.hdr.name, + res->res_dev.media_type, res->res_dev.device_name, + res->res_dev.label_type); +- sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d\n", ++ sendit(sock, " rew_wait=%d min_bs=%d max_bs=%d chgr_wait=%d\n", + res->res_dev.max_rewind_wait, res->res_dev.min_block_size, +- res->res_dev.max_block_size); ++ res->res_dev.max_block_size, res->res_dev.max_changer_wait); + sendit(sock, " max_jobs=%d max_files=%" lld " max_size=%" lld "\n", + res->res_dev.max_volume_jobs, res->res_dev.max_volume_files, + res->res_dev.max_volume_size); + sendit(sock, " max_file_size=%" lld " capacity=%" lld "\n", + res->res_dev.max_file_size, res->res_dev.volume_capacity); +- sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); +- sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", ++ sendit(sock, " spool_directory=%s\n", NPRT(res->res_dev.spool_directory)); ++ sendit(sock, " max_spool_size=%" lld " max_job_spool_size=%" lld "\n", + res->res_dev.max_spool_size, res->res_dev.max_job_spool_size); + if (res->res_dev.changer_res) { + sendit(sock, " changer=%p\n", res->res_dev.changer_res); Index: src/tray-monitor/tray-monitor.c =================================================================== RCS file: /cvsroot/bacula/bacula/src/tray-monitor/tray-monitor.c,v retrieving revision 1.25.2.1 -diff -u -r1.25.2.1 tray-monitor.c +retrieving revision 1.25.2.2 +diff -u -r1.25.2.1 -r1.25.2.2 --- src/tray-monitor/tray-monitor.c 1 Oct 2005 10:20:18 -0000 1.25.2.1 -+++ src/tray-monitor/tray-monitor.c 21 Nov 2005 12:53:39 -0000 ++++ src/tray-monitor/tray-monitor.c 22 Nov 2005 10:50:55 -0000 1.25.2.2 @@ -4,7 +4,7 @@ * * Nicolas Boichat, August MMIV * - * Version $Id: tray-monitor.c,v 1.25.2.1 2005/10/01 10:20:18 kerns Exp $ -+ * Version $Id: tray-monitor.c,v 1.26 2005/09/28 19:24:57 kerns Exp $ ++ * Version $Id: tray-monitor.c,v 1.25.2.2 2005/11/22 10:50:55 kerns Exp $ */ /* @@ -410,3 +8070,29 @@ diff -u -r1.25.2.1 tray-monitor.c changeStatusMessage(item, _("Cannot connect to daemon.")); item->state = error; item->oldstate = error; +Index: updatedb/kes-1.38 +=================================================================== +RCS file: updatedb/kes-1.38 +diff -N updatedb/kes-1.38 +--- updatedb/kes-1.38 3 Nov 2005 14:54:28 -0000 1.1.2.1 ++++ /dev/null 1 Jan 1970 00:00:00 -0000 +@@ -1,19 +0,0 @@ +- Technical notes on version 1.38 +- Kern Sibbald +- +-General: +- +-Changes to 1.38.0: +-- Modify configure.in to add execute option to sqlite3 catalog +- scripts. +-- Create update_xxx_table_8_to_9 scripts for updatedb +-- Fix wrong variable in bpipe.c debug output reported by user. +-- Fix improper placement of encode_and_send_attributes() in +- FD backup.c causing first file of non-portable Win32 backup +- to have wrong stream. Reported by Thorsten. +-- Move the -lcrypt for PostgreSQL after the PostgreSQL libs in +- autoconf/bacula-macros/db.m4 as suggested by user. Fixes bug #457. +-- Remove @STATIC_CONS@ from tray-monitor Makefile as suggested +- by user. Fixes bug #456. +- +-Released 1.38.0 (28Oct05): 31 October 2005 diff --git a/bacula/src/.cvsignore b/bacula/src/.cvsignore index 07944ff029..463e48169e 100644 --- a/bacula/src/.cvsignore +++ b/bacula/src/.cvsignore @@ -7,4 +7,3 @@ testprogs host.h perlgui python -pyqt diff --git a/bacula/src/cats/update_sqlite_tables.in b/bacula/src/cats/update_sqlite_tables.in index 37be54689a..d0d9e743d3 100755 --- a/bacula/src/cats/update_sqlite_tables.in +++ b/bacula/src/cats/update_sqlite_tables.in @@ -1,6 +1,6 @@ #!/bin/sh # -# shell script to update SQLite from version 1.36 to 1.38 +# shell script to update SQLite from version 1.36 to 1.37.12 # echo " " echo "This script will update a Bacula SQLite database from version 8 to 9" diff --git a/bacula/src/console/.cvsignore b/bacula/src/console/.cvsignore index d2b54c74a8..3a7ec3075f 100644 --- a/bacula/src/console/.cvsignore +++ b/bacula/src/console/.cvsignore @@ -8,4 +8,3 @@ bconsole bconsole.conf startit stopit -static-bconsole diff --git a/bacula/src/dird/msgchan.c b/bacula/src/dird/msgchan.c index fbe9d5e136..9da9150771 100644 --- a/bacula/src/dird/msgchan.c +++ b/bacula/src/dird/msgchan.c @@ -180,8 +180,10 @@ int start_storage_daemon_job(JCR *jcr, alist *store, int append) * associated with each Storage. It selects the first * available one. * + * Note, the outer loop is not yet implemented. */ foreach_alist(storage, store) { +// storage = (STORE *)store->first(); pm_strcpy(store_name, storage->hdr.name); bash_spaces(store_name); pm_strcpy(media_type, storage->media_type); diff --git a/bacula/src/dird/ua_cmds.c b/bacula/src/dird/ua_cmds.c index 734943bb49..127f5a5299 100644 --- a/bacula/src/dird/ua_cmds.c +++ b/bacula/src/dird/ua_cmds.c @@ -1263,6 +1263,7 @@ static void do_mount_cmd(UAContext *ua, const char *command) return; } set_storage(jcr, store); + drive = get_storage_drive(ua, store); Dmsg3(120, "Found storage, MediaType=%s DevName=%s drive=%d\n", diff --git a/bacula/src/filed/restore.c b/bacula/src/filed/restore.c index f218a6a7e1..e2686298d2 100644 --- a/bacula/src/filed/restore.c +++ b/bacula/src/filed/restore.c @@ -35,7 +35,6 @@ static char rec_header[] = "rechdr %ld %ld %ld %ld %ld"; #ifdef HAVE_LIBZ static const char *zlib_strerror(int stat); #endif - int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen, uint64_t *addr, int flags); @@ -227,7 +226,7 @@ void do_restore(JCR *jcr) attr->data_stream = decode_stat(attr->attr, &attr->statp, &attr->LinkFI); - if (!is_restore_stream_supported(attr->data_stream)) { + if (!is_stream_supported(attr->data_stream)) { if (!non_support_data++) { Jmsg(jcr, M_ERROR, 0, _("%s stream not supported on this Client.\n"), stream_to_ascii(attr->data_stream)); @@ -291,12 +290,6 @@ void do_restore(JCR *jcr) || stream == STREAM_WIN32_GZIP_DATA) { flags |= FO_GZIP; } - - if (is_win32_stream(stream) && !have_win32_api()) { - set_portable_backup(&bfd); - flags |= FO_WIN32DECOMP; /* "decompose" BackupWrite data */ - } - if (extract_data(jcr, &bfd, sd->msg, sd->msglen, &fileAddr, flags) < 0) { extract = false; bclose(&bfd); @@ -541,14 +534,7 @@ int32_t extract_data(JCR *jcr, BFILE *bfd, POOLMEM *buf, int32_t buflen, Dmsg2(30, "Write %u bytes, total before write=%s\n", wsize, edit_uint64(jcr->JobBytes, ec1)); } - if (flags & FO_WIN32DECOMP) { - if (!processWin32BackupAPIBlock(bfd, wbuf, wsize)) { - berrno be; - Jmsg2(jcr, M_ERROR, 0, _("Write error in Win32 Block Decomposition on %s: %s\n"), - jcr->last_fname, be.strerror(bfd->berrno)); - return -1; - } - } else if (bwrite(bfd, wbuf, wsize) != (ssize_t)wsize) { + if (bwrite(bfd, wbuf, wsize) != (ssize_t)wsize) { berrno be; Jmsg2(jcr, M_ERROR, 0, _("Write error on %s: %s\n"), jcr->last_fname, be.strerror(bfd->berrno)); diff --git a/bacula/src/findlib/bfile.c b/bacula/src/findlib/bfile.c index 61cd8dc797..cf76737a7a 100644 --- a/bacula/src/findlib/bfile.c +++ b/bacula/src/findlib/bfile.c @@ -12,14 +12,19 @@ Copyright (C) 2003-2005 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ @@ -92,140 +97,6 @@ const char *stream_to_ascii(int stream) } } - -void int64_LE2BE(int64_t* pBE, const int64_t v) -{ - /* convert little endian to big endian */ - if (htonl(1) != 1L) { /* no work if on little endian machine */ - memcpy(pBE, &v, sizeof(int64_t)); - } else { - int i; - uint8_t rv[sizeof(int64_t)]; - uint8_t *pv = (uint8_t *) &v; - - for (i = 0; i < 8; i++) { - rv[i] = pv[7 - i]; - } - memcpy(pBE, &rv, sizeof(int64_t)); - } -} - - -void int32_LE2BE(int32_t* pBE, const int32_t v) -{ - /* convert little endian to big endian */ - if (htonl(1) != 1L) { /* no work if on little endian machine */ - memcpy(pBE, &v, sizeof(int32_t)); - } else { - int i; - uint8_t rv[sizeof(int32_t)]; - uint8_t *pv = (uint8_t *) &v; - - for (i = 0; i < 4; i++) { - rv[i] = pv[3 - i]; - } - memcpy(pBE, &rv, sizeof(int32_t)); - } -} - - -bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize) -{ - /* pByte contains the buffer - dwSize the len to be processed. function assumes to be - called in successive incremental order over the complete - BackupRead stream beginning at pos 0 and ending at the end. - */ - - PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT* pContext = &(bfd->win32DecompContext); - bool bContinue = false; - int64_t dwDataOffset = 0; - int64_t dwDataLen; - - /* Win32 Stream Header size without name of stream. - * = sizeof (WIN32_STREAM_ID)- sizeof(WCHAR*); - */ - int32_t dwSizeHeader = 20; - - do { - if (pContext->liNextHeader >= dwSize) { - dwDataLen = dwSize-dwDataOffset; - bContinue = false; /* 1 iteration is enough */ - } - else { - dwDataLen = pContext->liNextHeader-dwDataOffset; - bContinue = true; /* multiple iterations may be necessary */ - } - - /* flush */ - /* copy block of real DATA */ - if (pContext->bIsInData) { - if (bwrite(bfd, ((char *)pBuffer)+dwDataOffset, dwDataLen) != (ssize_t)dwDataLen) - return false; - } - - if (pContext->liNextHeader < dwSize) {/* is a header in this block ? */ - int32_t dwOffsetTarget; - int32_t dwOffsetSource; - - if (pContext->liNextHeader < 0) { - /* start of header was before this block, so we - * continue with the part in the current block - */ - dwOffsetTarget = -pContext->liNextHeader; - dwOffsetSource = 0; - } else { - /* start of header is inside of this block */ - dwOffsetTarget = 0; - dwOffsetSource = pContext->liNextHeader; - } - - int32_t dwHeaderPartLen = dwSizeHeader-dwOffsetTarget; - bool bHeaderIsComplete; - - if (dwHeaderPartLen <= dwSize-dwOffsetSource) - /* header (or rest of header) is completely available - in current block - */ - bHeaderIsComplete = true; - else { - /* header will continue in next block */ - bHeaderIsComplete = false; - dwHeaderPartLen = dwSize-dwOffsetSource; - } - - /* copy the available portion of header to persistent copy */ - memcpy(((char *)&pContext->header_stream)+dwOffsetTarget, ((char *)pBuffer)+dwOffsetSource, dwHeaderPartLen); - - /* recalculate position of next header */ - if (bHeaderIsComplete) { - /* convert stream name size (32 bit little endian) to machine type */ - int32_t dwNameSize; - int32_LE2BE (&dwNameSize, pContext->header_stream.dwStreamNameSize); - dwDataOffset = dwNameSize+pContext->liNextHeader+dwSizeHeader; - - /* convert stream size (64 bit little endian) to machine type */ - int64_LE2BE (&(pContext->liNextHeader), pContext->header_stream.Size); - pContext->liNextHeader += dwDataOffset; - - pContext->bIsInData = pContext->header_stream.dwStreamId == WIN32_BACKUP_DATA; - if (dwDataOffset == dwSize) - bContinue = false; - } - else { - /* stop and continue with next block */ - bContinue = false; - pContext->bIsInData = false; - } - } - } while (bContinue); - - /* set "NextHeader" relative to the beginning of the next block */ - pContext->liNextHeader-= dwSize; - - return TRUE; -} - /* =============================================================== @@ -293,22 +164,22 @@ bool have_win32_api() /* - * Return true if we support the stream - * false if we do not support the stream - * - * This code is running under Win32, so we - * do not need #ifdef on MACOS ... + * Return 1 if we support the stream + * 0 if we do not support the stream */ -bool is_restore_stream_supported(int stream) +bool is_stream_supported(int stream) { + /* No Win32 backup on this machine */ switch (stream) { - -/* Streams known not to be supported */ #ifndef HAVE_LIBZ case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: + return 0; #endif + case STREAM_WIN32_DATA: + case STREAM_WIN32_GZIP_DATA: + return have_win32_api(); + case STREAM_MACOS_FORK_DATA: case STREAM_HFSPLUS_ATTRIBUTES: return false; @@ -317,9 +188,7 @@ bool is_restore_stream_supported(int stream) #ifdef HAVE_LIBZ case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: #endif - case STREAM_WIN32_DATA: case STREAM_UNIX_ATTRIBUTES: case STREAM_FILE_DATA: case STREAM_MD5_SIGNATURE: @@ -345,7 +214,7 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) POOLMEM *win32_fname_wchar; DWORD dwaccess, dwflags, dwshare; - + /* Convert to Windows path format */ win32_fname = get_pool_memory(PM_FNAME); win32_fname_wchar = get_pool_memory(PM_FNAME); @@ -464,8 +333,6 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) } bfd->errmsg = NULL; bfd->lpContext = NULL; - bfd->win32DecompContext.bIsInData = false; - bfd->win32DecompContext.liNextHeader = 0; free_pool_memory(win32_fname_wchar); free_pool_memory(win32_fname); return bfd->mode == BF_CLOSED ? -1 : 1; @@ -664,18 +531,17 @@ bool set_prog(BFILE *bfd, char *prog, JCR *jcr) } -/* - * This code is running on a non-Win32 machine - */ -bool is_restore_stream_supported(int stream) + +bool is_stream_supported(int stream) { /* No Win32 backup on this machine */ - switch (stream) { + switch (stream) { #ifndef HAVE_LIBZ case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: #endif + case STREAM_WIN32_DATA: + case STREAM_WIN32_GZIP_DATA: #ifndef HAVE_DARWIN_OS case STREAM_MACOS_FORK_DATA: case STREAM_HFSPLUS_ATTRIBUTES: @@ -686,9 +552,7 @@ bool is_restore_stream_supported(int stream) #ifdef HAVE_LIBZ case STREAM_GZIP_DATA: case STREAM_SPARSE_GZIP_DATA: - case STREAM_WIN32_GZIP_DATA: #endif - case STREAM_WIN32_DATA: case STREAM_UNIX_ATTRIBUTES: case STREAM_FILE_DATA: case STREAM_MD5_SIGNATURE: @@ -701,13 +565,43 @@ bool is_restore_stream_supported(int stream) case STREAM_MACOS_FORK_DATA: case STREAM_HFSPLUS_ATTRIBUTES: #endif - case 0: /* compatibility with old tapes */ + case 0: /* compatibility with old tapes */ return true; } - return false; + return 0; } +/* Old file reader code */ +#ifdef xxx + if (bfd->prog) { + POOLMEM *ecmd = get_pool_memory(PM_FNAME); + ecmd = edit_job_codes(bfd->jcr, ecmd, bfd->prog, fname); + const char *pmode; + if (flags & O_RDONLY) { + pmode = "r"; + } else { + pmode = "w"; + } + bfd->bpipe = open_bpipe(ecmd, 0, pmode); + if (bfd->bpipe == NULL) { + bfd->berrno = errno; + bfd->fid = -1; + free_pool_memory(ecmd); + return -1; + } + free_pool_memory(ecmd); + if (flags & O_RDONLY) { + bfd->fid = fileno(bfd->bpipe->rfd); + } else { + bfd->fid = fileno(bfd->bpipe->wfd); + } + errno = 0; + return bfd->fid; + } +#endif + + int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) { /* Open reader/writer program */ @@ -721,10 +615,6 @@ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode) bfd->berrno = errno; Dmsg1(400, "Open file %d\n", bfd->fid); errno = bfd->berrno; - - bfd->win32DecompContext.bIsInData = false; - bfd->win32DecompContext.liNextHeader = 0; - return bfd->fid; } diff --git a/bacula/src/findlib/bfile.h b/bacula/src/findlib/bfile.h index dc724fa7d4..a38e53c1c1 100644 --- a/bacula/src/findlib/bfile.h +++ b/bacula/src/findlib/bfile.h @@ -6,17 +6,22 @@ * Kern Sibbald May MMIII */ /* - Copyright (C) 2003-2005 Kern Sibbald + Copyright (C) 2000-2005 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ @@ -36,28 +41,6 @@ struct Python_IO { }; #endif - -/* this should physically correspond to WIN32_STREAM_ID - * from winbase.h on Win32. We didn't inlcude cStreamName - * as we don't use it and don't need it for a correct struct size. - */ - -#define WIN32_BACKUP_DATA 1 - -typedef struct _BWIN32_STREAM_ID { - int32_t dwStreamId; - int32_t dwStreamAttributes; - int64_t Size; - int32_t dwStreamNameSize; -} BWIN32_STREAM_ID, *LPBWIN32_STREAM_ID ; - - -typedef struct _PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT { - int64_t liNextHeader; - bool bIsInData; - BWIN32_STREAM_ID header_stream; -} PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT; - /* ======================================================= * * W I N D O W S @@ -91,8 +74,6 @@ struct BFILE { char *prog; /* reader/writer program if any */ JCR *jcr; /* jcr for editing job codes */ Python_IO pio; /* Python I/O routines */ - PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT win32DecompContext; /* context for decomposition of win32 backup streams */ - int use_backup_decomp; /* set if using BackupRead Stream Decomposition */ }; HANDLE bget_handle(BFILE *bfd); @@ -113,8 +94,6 @@ struct BFILE { char *prog; /* reader/writer program if any */ JCR *jcr; /* jcr for editing job codes */ Python_IO pio; /* Python I/O routines */ - PROCESS_WIN32_BACKUPAPIBLOCK_CONTEXT win32DecompContext; /* context for decomposition of win32 backup streams */ - int use_backup_decomp; /* set if using BackupRead Stream Decomposition */ }; #endif @@ -126,7 +105,7 @@ bool set_portable_backup(BFILE *bfd); bool set_prog(BFILE *bfd, char *prog, JCR *jcr); bool have_win32_api(); bool is_portable_backup(BFILE *bfd); -bool is_restore_stream_supported(int stream); +bool is_stream_supported(int stream); bool is_win32_stream(int stream); char *xberror(BFILE *bfd); /* DO NOT USE -- use berrno class */ int bopen(BFILE *bfd, const char *fname, int flags, mode_t mode); @@ -139,6 +118,4 @@ ssize_t bwrite(BFILE *bfd, void *buf, size_t count); off_t blseek(BFILE *bfd, off_t offset, int whence); const char *stream_to_ascii(int stream); -bool processWin32BackupAPIBlock (BFILE *bfd, void *pBuffer, ssize_t dwSize); - #endif /* __BFILE_H */ diff --git a/bacula/src/findlib/find.h b/bacula/src/findlib/find.h index cb1e44e002..798fa25940 100755 --- a/bacula/src/findlib/find.h +++ b/bacula/src/findlib/find.h @@ -7,14 +7,19 @@ Copyright (C) 2001-2005 Kern Sibbald This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ @@ -85,7 +90,6 @@ enum { #define FO_NO_HARDLINK (1<<15) /* don't handle hard links */ #define FO_IGNORECASE (1<<16) /* Ignore file name case */ #define FO_HFSPLUS (1<<17) /* Resource forks and Finder Info */ -#define FO_WIN32DECOMP (1<<18) /* Use BackupRead decomposition */ struct s_included_file { struct s_included_file *next; diff --git a/bacula/src/gnome2-console/.cvsignore b/bacula/src/gnome2-console/.cvsignore index d1324549a1..37844ba1f1 100644 --- a/bacula/src/gnome2-console/.cvsignore +++ b/bacula/src/gnome2-console/.cvsignore @@ -6,4 +6,3 @@ gnome-console.conf 2 3 main.c -static-gnome-console diff --git a/bacula/src/lib/Makefile.in b/bacula/src/lib/Makefile.in index 862ebf8d80..018628ccc2 100644 --- a/bacula/src/lib/Makefile.in +++ b/bacula/src/lib/Makefile.in @@ -24,7 +24,7 @@ dummy: LIBSRCS = alloc.c attr.c base64.c berrno.c bsys.c bget_msg.c \ bnet.c bnet_server.c \ - bpipe.c bshm.c bsnprintf.c btime.c \ + bpipe.c bshm.c btime.c \ cram-md5.c crc32.c daemon.c edit.c fnmatch.c \ hmac.c idcache.c jcr.c lex.c alist.c dlist.c \ md5.c message.c mem_pool.c parse_conf.c \ @@ -37,7 +37,7 @@ LIBSRCS = alloc.c attr.c base64.c berrno.c bsys.c bget_msg.c \ LIBOBJS = alloc.o attr.o base64.o berrno.o bsys.o bget_msg.o \ bnet.o bnet_server.o \ - bpipe.o bshm.o bsnprintf.o btime.o \ + bpipe.o bshm.o btime.o \ cram-md5.o crc32.o daemon.o edit.o fnmatch.o \ hmac.o idcache.o jcr.o lex.o alist.o dlist.o \ md5.o message.o mem_pool.o parse_conf.o \ @@ -99,15 +99,7 @@ sha1sum: sha1.o $(CXX) -DSHA1_SUM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c $(CXX) $(LDFLAGS) -L. -o $@ sha1.o $(LIBS) $(DLIB) -lbac $(OPENSSL_LIBS) -lm rm -f sha1.o - $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) sha1.c - -bsnprintf: bsnprintf.o - rm -f bsnprintf.o - $(CXX) -DTEST_PROGRAM $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsnprintf.c - $(CXX) $(LDFLAGS) -L. -o $@ bsnprintf.o $(LIBS) $(DLIB) -lbac $(OPENSSL_LIBS) -lm - rm -f bsnprintf.o - $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) bsnprintf.c - + $(CXX) $(DEFS) $(DEBUG) -c $(CPPFLAGS) -I$(srcdir) -I$(basedir) $(DINCLUDE) $(CFLAGS) md5.c install: diff --git a/bacula/src/lib/bsnprintf.c b/bacula/src/lib/bsnprintf.c deleted file mode 100644 index bd6c2a19d4..0000000000 --- a/bacula/src/lib/bsnprintf.c +++ /dev/null @@ -1,913 +0,0 @@ -/* - * Copyright Patrick Powell 1995 - * - * This code is based on code written by Patrick Powell - * (papowell@astart.com) It may be used for any purpose as long - * as this notice remains intact on all source code distributions. - * - * Adapted for Bacula -- note there were lots of bugs in - * the original code: %lld and %s were seriously broken, and - * with FP turned off %f seg faults. - * Kern Sibbald, November MMV - * - * Version $Id$ - */ - - -#include "bacula.h" -#define FP_OUTPUT 1 /* Bacula uses floating point */ - -/* - Temp only for me -- NOT YET READY FOR USE -- seems to work fine - on Linux, but doesn't build correctly on Win32 - */ -#ifdef USE_BSNPRINTF - -#ifdef HAVE_LONG_DOUBLE -#define LDOUBLE long double -#else -#define LDOUBLE double -#endif - -int bvsnprintf(char *buffer, int32_t maxlen, const char *format, va_list args); -static int32_t fmtstr(char *buffer, int32_t currlen, int32_t maxlen, - char *value, int flags, int min, int max); -static int32_t fmtint(char *buffer, int32_t currlen, int32_t maxlen, - int64_t value, int base, int min, int max, int flags); - -#ifdef FP_OUTPUT -# ifdef HAVE_FCVTL -# define fcvt fcvtl -# endif -static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, - LDOUBLE fvalue, int min, int max, int flags); -#else -#define fmtfp(b, c, m, f, min, max, fl) currlen -#endif - -#define outch(c) {int len=currlen; if (currlen++ < maxlen) { buffer[len] = (c);}} - - -/* format read states */ -#define DP_S_DEFAULT 0 -#define DP_S_FLAGS 1 -#define DP_S_MIN 2 -#define DP_S_DOT 3 -#define DP_S_MAX 4 -#define DP_S_MOD 5 -#define DP_S_CONV 6 -#define DP_S_DONE 7 - -/* format flags - Bits */ -#define DP_F_MINUS (1 << 0) -#define DP_F_PLUS (1 << 1) -#define DP_F_SPACE (1 << 2) -#define DP_F_NUM (1 << 3) -#define DP_F_ZERO (1 << 4) -#define DP_F_UP (1 << 5) -#define DP_F_UNSIGNED (1 << 6) -#define DP_F_DOT (1 << 7) - -/* Conversion Flags */ -#define DP_C_INT16 1 -#define DP_C_INT32 2 -#define DP_C_LDOUBLE 3 -#define DP_C_INT64 4 - -#define char_to_int(p) ((p)- '0') -#define MAX(p,q) (((p) >= (q)) ? (p) : (q)) - -/* - You might ask why does Bacula have it's own printf routine? Well, - There are two reasons: 1. Here (as opposed to library routines), we - define %d and %ld to be 32 bit; %lld and %q to be 64 bit. 2. We - disable %n for security reasons. - */ - -int bsnprintf(char *str, int32_t size, const char *fmt, ...) -{ - va_list arg_ptr; - int len; - - va_start(arg_ptr, fmt); - len = bvsnprintf(str, size, fmt, arg_ptr); - va_end(arg_ptr); - return len; -} - - -int bvsnprintf(char *buffer, int32_t maxlen, const char *format, va_list args) -{ - char ch; - int64_t value; - char *strvalue; - int min; - int max; - int state; - int flags; - int cflags; - int32_t currlen; - int base; - int junk; -#ifdef FP_OUTPUT - LDOUBLE fvalue; -#endif - - state = DP_S_DEFAULT; - currlen = flags = cflags = min = 0; - max = -1; - ch = *format++; - *buffer = 0; - - while (state != DP_S_DONE) { - if ((ch == '\0') || (currlen >= maxlen)) - state = DP_S_DONE; - - switch (state) { - case DP_S_DEFAULT: - if (ch == '%') { - state = DP_S_FLAGS; - } else { - outch(ch); - } - ch = *format++; - break; - case DP_S_FLAGS: - switch (ch) { - case '-': - flags |= DP_F_MINUS; - ch = *format++; - break; - case '+': - flags |= DP_F_PLUS; - ch = *format++; - break; - case ' ': - flags |= DP_F_SPACE; - ch = *format++; - break; - case '#': - flags |= DP_F_NUM; - ch = *format++; - break; - case '0': - flags |= DP_F_ZERO; - ch = *format++; - break; - default: - state = DP_S_MIN; - break; - } - break; - case DP_S_MIN: - if (isdigit((unsigned char)ch)) { - min = 10 * min + char_to_int(ch); - ch = *format++; - } else if (ch == '*') { -#ifdef SECURITY_PROBLEM - min = va_arg(args, int); -#else - junk = va_arg(args, int); -#endif - ch = *format++; - state = DP_S_DOT; - } else - state = DP_S_DOT; - break; - case DP_S_DOT: - if (ch == '.') { - state = DP_S_MAX; - flags |= DP_F_DOT; - ch = *format++; - } else - state = DP_S_MOD; - break; - case DP_S_MAX: - if (isdigit((unsigned char)ch)) { - if (max < 0) - max = 0; - max = 10 * max + char_to_int(ch); - ch = *format++; - } else if (ch == '*') { -#ifdef SECURITY_PROBLEM - max = va_arg(args, int); -#else - junk = va_arg(args, int); -#endif - ch = *format++; - state = DP_S_MOD; - } else - state = DP_S_MOD; - break; - case DP_S_MOD: - switch (ch) { - case 'h': - cflags = DP_C_INT16; - ch = *format++; - break; - case 'l': - cflags = DP_C_INT32; - ch = *format++; - if (ch == 'l') { /* It's a long long */ - cflags = DP_C_INT64; - ch = *format++; - } - break; - case 'L': - cflags = DP_C_LDOUBLE; - ch = *format++; - break; - default: - break; - } - state = DP_S_CONV; - break; - case DP_S_CONV: - switch (ch) { - case 'd': - case 'i': - if (cflags == DP_C_INT16) { - value = va_arg(args, int32_t); - } else if (cflags == DP_C_INT32) { - value = va_arg(args, int32_t); - } else if (cflags == DP_C_INT64) { - value = va_arg(args, int64_t); - } else { - value = va_arg(args, int); - } - currlen = fmtint(buffer, currlen, maxlen, value, 10, min, max, flags); - break; - case 'X': - case 'x': - case 'o': - case 'u': - if (ch == 'o') { - base = 8; - } else if (ch == 'x') { - base = 16; - } else if (ch == 'X') { - base = 16; - flags |= DP_F_UP; - } else { - base = 10; - } - flags |= DP_F_UNSIGNED; - if (cflags == DP_C_INT16) { - value = va_arg(args, uint32_t); - } else if (cflags == DP_C_INT32) { - value = (long)va_arg(args, uint32_t); - } else if (cflags == DP_C_INT64) { - value = (int64_t) va_arg(args, uint64_t); - } else { - value = (long)va_arg(args, unsigned int); - } - currlen = fmtint(buffer, currlen, maxlen, value, base, min, max, flags); - break; - case 'f': - if (cflags == DP_C_LDOUBLE) { - fvalue = va_arg(args, LDOUBLE); - } else { - fvalue = va_arg(args, double); - } - currlen = fmtfp(buffer, currlen, maxlen, fvalue, min, max, flags); - break; - case 'E': - flags |= DP_F_UP; - case 'e': - if (cflags == DP_C_LDOUBLE) { - fvalue = va_arg(args, LDOUBLE); - } else { - fvalue = va_arg(args, double); - } - currlen = fmtfp(buffer, currlen, maxlen, fvalue, min, max, flags); - break; - case 'G': - flags |= DP_F_UP; - case 'g': - if (cflags == DP_C_LDOUBLE) { - fvalue = va_arg(args, LDOUBLE); - } else { - fvalue = va_arg(args, double); - } - currlen = fmtfp(buffer, currlen, maxlen, fvalue, min, max, flags); - break; - case 'c': - outch(va_arg(args, int)); - break; - case 's': - strvalue = va_arg(args, char *); - currlen = fmtstr(buffer, currlen, maxlen, strvalue, flags, min, max); - break; - case 'p': - strvalue = va_arg(args, char *); - currlen = fmtint(buffer, currlen, maxlen, (long)strvalue, 16, min, max, flags); - break; - case 'n': - if (cflags == DP_C_INT16) { - int16_t *num; - num = va_arg(args, int16_t *); -#ifdef SECURITY_PROBLEM - *num = currlen; -#endif - } else if (cflags == DP_C_INT32) { - int32_t *num; - num = va_arg(args, int32_t *); -#ifdef SECURITY_PROBLEM - *num = (int32_t)currlen; -#endif - } else if (cflags == DP_C_INT64) { - int64_t *num; - num = va_arg(args, int64_t *); -#ifdef SECURITY_PROBLEM - *num = (int64_t)currlen; -#endif - } else { - int32_t *num; - num = va_arg(args, int32_t *); -#ifdef SECURITY_PROBLEM - *num = (int32_t)currlen; -#endif - } - break; - case '%': - outch(ch); - break; - case 'w': - /* not supported yet, treat as next char */ - ch = *format++; - break; - default: - /* Unknown, skip */ - break; - } - ch = *format++; - state = DP_S_DEFAULT; - flags = cflags = min = 0; - max = -1; - break; - case DP_S_DONE: - break; - default: - /* hmm? */ - break; /* some picky compilers need this */ - } - } - if (currlen < maxlen - 1) { - buffer[currlen] = '\0'; - } else { - buffer[maxlen - 1] = '\0'; - } - return currlen; -} - -static int32_t fmtstr(char *buffer, int32_t currlen, int32_t maxlen, - char *value, int flags, int min, int max) -{ - int padlen, strln; /* amount to pad */ - int cnt = 0; - - if (value == 0) { - value = ""; - } - - if (flags & DP_F_DOT && max < 0) { /* Max not specified */ - max = 0; - } else if (max < 0) { - max = maxlen; - } - strln = strlen(value); - if (strln > max) { - strln = max; /* truncate to max */ - } - padlen = min - strln; - if (padlen < 0) { - padlen = 0; - } - if (flags & DP_F_MINUS) { - padlen = -padlen; /* Left Justify */ - } - - while (padlen > 0) { - outch(' '); - --padlen; - } - while (*value && (cnt < max)) { - outch(*value++); - ++cnt; - } - while (padlen < 0) { - outch(' '); - ++padlen; - } - return currlen; -} - -/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */ - -static int32_t fmtint(char *buffer, int32_t currlen, int32_t maxlen, - int64_t value, int base, int min, int max, int flags) -{ - int signvalue = 0; - uint64_t uvalue; - char convert[20]; - int place = 0; - int spadlen = 0; /* amount to space pad */ - int zpadlen = 0; /* amount to zero pad */ - int caps = 0; - - if (max < 0) { - max = 0; - } - - uvalue = value; - - if (!(flags & DP_F_UNSIGNED)) { - if (value < 0) { - signvalue = '-'; - uvalue = -value; - } else if (flags & DP_F_PLUS) { /* Do a sign (+/i) */ - signvalue = '+'; - } else if (flags & DP_F_SPACE) { - signvalue = ' '; - } - } - - if (flags & DP_F_UP) { - caps = 1; /* Should characters be upper case? */ - } - - do { - convert[place++] = (caps ? "0123456789ABCDEF" : "0123456789abcdef") - [uvalue % (unsigned)base]; - uvalue = (uvalue / (unsigned)base); - } while (uvalue && (place < 20)); - if (place == 20) { - place--; - } - convert[place] = 0; - - zpadlen = max - place; - spadlen = min - MAX(max, place) - (signvalue ? 1 : 0); - if (zpadlen < 0) - zpadlen = 0; - if (spadlen < 0) - spadlen = 0; - if (flags & DP_F_ZERO) { - zpadlen = MAX(zpadlen, spadlen); - spadlen = 0; - } - if (flags & DP_F_MINUS) - spadlen = -spadlen; /* Left Justifty */ - -#ifdef DEBUG_SNPRINTF - printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", - zpadlen, spadlen, min, max, place); -#endif - - /* Spaces */ - while (spadlen > 0) { - outch(' '); - --spadlen; - } - - /* Sign */ - if (signvalue) { - outch(signvalue); - } - - /* Zeros */ - if (zpadlen > 0) { - while (zpadlen > 0) { - outch('0'); - --zpadlen; - } - } - - /* Digits */ - while (place > 0) { - outch(convert[--place]); - } - - /* Left Justified spaces */ - while (spadlen < 0) { - outch(' '); - ++spadlen; - } - return currlen; -} - -#ifdef FP_OUTPUT - -static LDOUBLE abs_val(LDOUBLE value) -{ - LDOUBLE result = value; - - if (value < 0) - result = -value; - - return result; -} - -static LDOUBLE pow10(int exp) -{ - LDOUBLE result = 1; - - while (exp) { - result *= 10; - exp--; - } - - return result; -} - -static long round(LDOUBLE value) -{ - long intpart; - - intpart = (long)value; - value = value - intpart; - if (value >= 0.5) - intpart++; - - return intpart; -} - -static int32_t fmtfp(char *buffer, int32_t currlen, int32_t maxlen, - LDOUBLE fvalue, int min, int max, int flags) -{ - int signvalue = 0; - LDOUBLE ufvalue; -#ifndef HAVE_FCVT - char iconvert[20]; - char fconvert[20]; -#else - char iconvert[311]; - char fconvert[311]; - char *result; - int dec_pt, sig; - int r_length; - extern char *fcvt(double value, int ndigit, int *decpt, int *sign); -#endif - int iplace = 0; - int fplace = 0; - int padlen = 0; /* amount to pad */ - int zpadlen = 0; - int caps = 0; - int64_t intpart; - int64_t fracpart; - - /* - * AIX manpage says the default is 0, but Solaris says the default - * is 6, and sprintf on AIX defaults to 6 - */ - if (max < 0) - max = 6; - - ufvalue = abs_val(fvalue); - - if (fvalue < 0) - signvalue = '-'; - else if (flags & DP_F_PLUS) /* Do a sign (+/i) */ - signvalue = '+'; - else if (flags & DP_F_SPACE) - signvalue = ' '; - -#if 0 - if (flags & DP_F_UP) - caps = 1; /* Should characters be upper case? */ -#endif - -#ifndef HAVE_FCVT - intpart = (long)ufvalue; - - /* - * Sorry, we only support 9 digits past the decimal because of our - * conversion method - */ - if (max > 9) - max = 9; - - /* We "cheat" by converting the fractional part to integer by - * multiplying by a factor of 10 - */ - fracpart = round((pow10(max)) * (ufvalue - intpart)); - - if (fracpart >= pow10(max)) { - intpart++; - fracpart -= (int64_t)pow10(max); - } -#ifdef DEBUG_SNPRINTF - printf("fmtfp: %g %d.%d min=%d max=%d\n", - (double)fvalue, intpart, fracpart, min, max); -#endif - - /* Convert integer part */ - do { - iconvert[iplace++] = - (caps ? "0123456789ABCDEF" : "0123456789abcdef")[intpart % 10]; - intpart = (intpart / 10); - } while (intpart && (iplace < 20)); - if (iplace == 20) - iplace--; - iconvert[iplace] = 0; - - /* Convert fractional part */ - do { - fconvert[fplace++] = - (caps ? "0123456789ABCDEF" : "0123456789abcdef")[fracpart % 10]; - fracpart = (fracpart / 10); - } while (fracpart && (fplace < 20)); - if (fplace == 20) - fplace--; - fconvert[fplace] = 0; -#else /* use fcvt() */ - if (max > 310) - max = 310; -# ifdef HAVE_FCVTL - result = fcvtl(ufvalue, max, &dec_pt, &sig); -# else - result = fcvt(ufvalue, max, &dec_pt, &sig); -# endif - - r_length = strlen(result); - - /* - * Fix broken fcvt implementation returns.. - */ - - if (r_length == 0) { - result[0] = '0'; - result[1] = '\0'; - r_length = 1; - } - - if (r_length < dec_pt) - dec_pt = r_length; - - if (dec_pt <= 0) { - iplace = 1; - iconvert[0] = '0'; - iconvert[1] = '\0'; - - fplace = 0; - - while (r_length) - fconvert[fplace++] = result[--r_length]; - - while ((dec_pt < 0) && (fplace < max)) { - fconvert[fplace++] = '0'; - dec_pt++; - } - } else { - int c; - - iplace = 0; - for (c = dec_pt; c; iconvert[iplace++] = result[--c]); - iconvert[iplace] = '\0'; - - result += dec_pt; - fplace = 0; - - for (c = (r_length - dec_pt); c; fconvert[fplace++] = result[--c]); - } -#endif /* HAVE_FCVT */ - - /* -1 for decimal point, another -1 if we are printing a sign */ - padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); - zpadlen = max - fplace; - if (zpadlen < 0) { - zpadlen = 0; - } - if (padlen < 0) { - padlen = 0; - } - if (flags & DP_F_MINUS) { - padlen = -padlen; /* Left Justifty */ - } - - if ((flags & DP_F_ZERO) && (padlen > 0)) { - if (signvalue) { - outch(signvalue); - --padlen; - signvalue = 0; - } - while (padlen > 0) { - outch('0'); - --padlen; - } - } - while (padlen > 0) { - outch(' '); - --padlen; - } - if (signvalue) { - outch(signvalue); - } - - while (iplace > 0) { - outch(iconvert[--iplace]); - } - - -#ifdef DEBUG_SNPRINTF - printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen); -#endif - - /* - * Decimal point. This should probably use locale to find the correct - * char to print out. - */ - if (max > 0) { - outch('.'); - while (fplace > 0) { - outch(fconvert[--fplace]); - } - } - - while (zpadlen > 0) { - outch('0'); - --zpadlen; - } - - while (padlen < 0) { - outch(' '); - ++padlen; - } - return currlen; -} -#endif /* FP_OUTPUT */ - - -#ifdef TEST_PROGRAM - -#ifndef LONG_STRING -#define LONG_STRING 1024 -#endif -int main(void) -{ - char buf1[LONG_STRING]; - char buf2[LONG_STRING]; - -#ifdef FP_OUTPUT - char *fp_fmt[] = { - "%-1.5f", - "%1.5f", - "%123.9f", - "%10.5f", - "% 10.5f", - "%+22.9f", - "%+4.9f", - "%01.3f", - "%4f", - "%3.1f", - "%3.2f", - "%.0f", - "%.1f", - NULL - }; - double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996, - 0.9996, 1.996, 4.136, 6442452944.1234, 0 - }; -#endif - char *int_fmt[] = { - "%-1.5d", - "%1.5d", - "%123.9d", - "%5.5d", - "%10.5d", - "% 10.5d", - "%+22.33d", - "%01.3d", - "%4d", - "%-1.5ld", - "%1.5ld", - "%123.9ld", - "%5.5ld", - "%10.5ld", - "% 10.5ld", - "%+22.33ld", - "%01.3ld", - "%4ld", - NULL - }; - long int_nums[] = { -1, 134, 91340, 341, 0203, 0 }; - - char *ll_fmt[] = { - "%-1.8lld", - "%1.8lld", - "%123.9lld", - "%5.8lld", - "%10.5lld", - "% 10.8lld", - "%+22.33lld", - "%01.3lld", - "%4lld", - NULL - }; - int64_t ll_nums[] = { -1976, 789134567890LL, 91340, 34123, 0203, 0 }; - - char *s_fmt[] = { - "%-1.8s", - "%1.8s", - "%123.9s", - "%5.8s", - "%10.5s", - "% 10.3s", - "%+22.1s", - "%01.3s", - "%s", - "%10s", - "%3s", - "%3.0s", - "%3.s", - NULL - }; - char *s_nums[] = { "abc", "def", "ghi", "123", "4567", "a", "bb", "ccccccc", NULL}; - - - int x, y; - int fail = 0; - int num = 0; - - printf("Testing snprintf format codes against system sprintf...\n"); - -#ifdef FP_OUTPUT - for (x = 0; fp_fmt[x] != NULL; x++) - for (y = 0; fp_nums[y] != 0; y++) { - bsnprintf(buf1, sizeof(buf1), fp_fmt[x], fp_nums[y]); - sprintf(buf2, fp_fmt[x], fp_nums[y]); - if (strcmp(buf1, buf2)) { - printf - ("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - fp_fmt[x], buf1, buf2); - fail++; - } - num++; - } -#endif - - for (x = 0; int_fmt[x] != NULL; x++) - for (y = 0; int_nums[y] != 0; y++) { - int pcount, bcount; - bcount = bsnprintf(buf1, sizeof(buf1), int_fmt[x], int_nums[y]); - printf("%s\n", buf1); - pcount = sprintf(buf2, int_fmt[x], int_nums[y]); - if (bcount != pcount) { - printf("bsnprintf count %d doesn't match sprintf count %d\n", - bcount, pcount); - } - if (strcmp(buf1, buf2)) { - printf - ("bsnprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - int_fmt[x], buf1, buf2); - fail++; - } - num++; - } - - for (x = 0; ll_fmt[x] != NULL; x++) { - for (y = 0; ll_nums[y] != 0; y++) { - int pcount, bcount; - bcount = bsnprintf(buf1, sizeof(buf1), ll_fmt[x], ll_nums[y]); - printf("%s\n", buf1); - pcount = sprintf(buf2, ll_fmt[x], ll_nums[y]); - if (bcount != pcount) { - printf("bsnprintf count %d doesn't match sprintf count %d\n", - bcount, pcount); - } - if (strcmp(buf1, buf2)) { - printf - ("bsnprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - ll_fmt[x], buf1, buf2); - fail++; - } - num++; - } - } - - for (x = 0; s_fmt[x] != NULL; x++) { - for (y = 0; s_nums[y] != 0; y++) { - int pcount, bcount; - bcount = bsnprintf(buf1, sizeof(buf1), s_fmt[x], s_nums[y]); - printf("%s\n", buf1); - pcount = sprintf(buf2, s_fmt[x], s_nums[y]); - if (bcount != pcount) { - printf("bsnprintf count %d doesn't match sprintf count %d\n", - bcount, pcount); - } - if (strcmp(buf1, buf2)) { - printf - ("bsnprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n", - s_fmt[x], buf1, buf2); - fail++; - } - num++; - } - } - - - printf("%d tests failed out of %d.\n", fail, num); -} -#endif /* TEST_PROGRAM */ - -#endif /* USE_BSNPRINTF */ diff --git a/bacula/src/lib/bsys.c b/bacula/src/lib/bsys.c index 67c163242b..d41d971077 100644 --- a/bacula/src/lib/bsys.c +++ b/bacula/src/lib/bsys.c @@ -216,8 +216,6 @@ void *bcalloc (size_t size1, size_t size2) return buf; } -/* Code now in src/lib/bsnprintf.c */ -#ifndef USE_BSNPRINTF #define BIG_BUF 5000 /* @@ -261,7 +259,6 @@ int bvsnprintf(char *str, int32_t size, const char *format, va_list ap) return len; #endif } -#endif /* USE_BSNPRINTF */ #ifndef HAVE_LOCALTIME_R diff --git a/bacula/src/lib/signal.c b/bacula/src/lib/signal.c index 3b06e2f08a..f9be096f4d 100644 --- a/bacula/src/lib/signal.c +++ b/bacula/src/lib/signal.c @@ -245,7 +245,7 @@ void init_signals(void terminate(int sig)) sig_names[SIGWAITING] = _("No runnable lwp"); #endif #ifdef SIGLWP - sig_names[SIGLWP] = _("SIGLWP special signal used by thread library"); + sig_name[SIGLWP] = _("SIGLWP special signal used by thread library"); #endif #ifdef SIGFREEZE sig_names[SIGFREEZE] = _("Checkpoint Freeze"); diff --git a/bacula/src/stored/askdir.c b/bacula/src/stored/askdir.c index b9f4340b6c..08176ce3a9 100644 --- a/bacula/src/stored/askdir.c +++ b/bacula/src/stored/askdir.c @@ -477,7 +477,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) stat = wait_for_sysop(dcr); if (dev->poll) { - Dmsg1(000, "Poll timeout in create append vol on device %s\n", dev->print_name()); + Dmsg1(400, "Poll timeout in create append vol on device %s\n", dev->print_name()); continue; } @@ -486,7 +486,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) Mmsg(dev->errmsg, _("Max time exceeded waiting to mount Storage Device %s for Job %s\n"), dev->print_name(), jcr->Job); Jmsg(jcr, M_FATAL, 0, "%s", dev->errmsg); - Dmsg1(000, "Gave up waiting on device %s\n", dev->print_name()); + Dmsg1(400, "Gave up waiting on device %s\n", dev->print_name()); return false; /* exceeded maximum waits */ } continue; @@ -503,7 +503,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) Jmsg(jcr, M_WARNING, 0, _("pthread error in mount_next_volume stat=%d ERR=%s\n"), stat, be.strerror(stat)); } - Dmsg1(000, "Someone woke me for device %s\n", dev->print_name()); + Dmsg1(400, "Someone woke me for device %s\n", dev->print_name()); /* If no VolumeName, and cannot get one, try again */ P(dev->mutex); @@ -531,7 +531,7 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr) } set_jcr_job_status(jcr, JS_Running); dir_send_job_status(jcr); - Dmsg0(000, "leave dir_ask_sysop_to_mount_create_appendable_volume\n"); + Dmsg0(400, "leave dir_ask_sysop_to_mount_create_appendable_volume\n"); return true; } diff --git a/bacula/src/stored/bextract.c b/bacula/src/stored/bextract.c index 92fcbd7618..a882a883d3 100644 --- a/bacula/src/stored/bextract.c +++ b/bacula/src/stored/bextract.c @@ -293,7 +293,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) if (file_is_included(ff, attr->fname) && !file_is_excluded(ff, attr->fname)) { attr->data_stream = decode_stat(attr->attr, &attr->statp, &attr->LinkFI); - if (!is_restore_stream_supported(attr->data_stream)) { + if (!is_stream_supported(attr->data_stream)) { if (!non_support_data++) { Jmsg(jcr, M_ERROR, 0, _("%s stream not supported on this Client.\n"), stream_to_ascii(attr->data_stream)); diff --git a/bacula/src/stored/dev.c b/bacula/src/stored/dev.c index 7dc108cab7..b01c670383 100644 --- a/bacula/src/stored/dev.c +++ b/bacula/src/stored/dev.c @@ -359,25 +359,24 @@ void DEVICE::open_tape_device(DCR *dcr, int omode) /* Use system open() */ while ((fd = ::open(dev_name, mode+nonblocking, MODE_RW)) < 0) { berrno be; - dev_errno = errno; - Dmsg5(050, "Open omode=%d mode=%x nonblock=%d error errno=%d ERR=%s\n", - omode, mode, nonblocking, errno, be.strerror()); - if (dev_errno == EINTR || dev_errno == EAGAIN) { + Dmsg2(100, "Open error errno=%d ERR=%s\n", errno, be.strerror()); + if (errno == EINTR || errno == EAGAIN) { Dmsg0(100, "Continue open\n"); continue; } /* Busy wait for specified time (default = 5 mins) */ - if (dev_errno == EBUSY && timeout-- > 0) { + if (errno == EBUSY && timeout-- > 0) { Dmsg2(100, "Device %s busy. ERR=%s\n", print_name(), be.strerror()); bmicrosleep(1, 0); continue; } /* IO error (no volume) try 10 times every 6 seconds */ - if (dev_errno == EIO && ioerrcnt-- > 0) { + if (errno == EIO && ioerrcnt-- > 0) { bmicrosleep(5, 0); Dmsg0(100, "Continue open\n"); continue; } + dev_errno = errno; Mmsg2(errmsg, _("Unable to open device %s: ERR=%s\n"), print_name(), be.strerror(dev_errno)); /* Stop any open timer we set */ diff --git a/bacula/src/stored/match_bsr.c b/bacula/src/stored/match_bsr.c index b4aa6831c3..122d322824 100755 --- a/bacula/src/stored/match_bsr.c +++ b/bacula/src/stored/match_bsr.c @@ -169,7 +169,7 @@ BSR *find_next_bsr(BSR *root_bsr, DEVICE *dev) Dmsg2(300, "No nxt_bsr use_pos=%d repos=%d\n", root_bsr->use_positioning, root_bsr->reposition); return NULL; } - Dmsg2(300, "use_pos=%d repos=%d\n", root_bsr->use_positioning, root_bsr->reposition); + Dmsg2(100, "use_pos=%d repos=%d\n", root_bsr->use_positioning, root_bsr->reposition); root_bsr->mount_next_volume = false; for (bsr=root_bsr; bsr; bsr=bsr->next) { if (bsr->done || !match_volume(bsr, bsr->volume, &dev->VolHdr, 1)) { @@ -252,7 +252,7 @@ static BSR *find_smallest_volfile(BSR *found_bsr, BSR *bsr) bool match_set_eof(BSR *bsr, DEV_RECORD *rec) { BSR *rbsr = rec->bsr; - Dmsg1(300, "match_set %d\n", rbsr != NULL); + Dmsg1(100, "match_set %d\n", rbsr != NULL); if (!rbsr) { return false; } @@ -261,7 +261,7 @@ bool match_set_eof(BSR *bsr, DEV_RECORD *rec) if (rbsr->count && rbsr->found >= rbsr->count) { rbsr->done = true; rbsr->root->reposition = true; - Dmsg2(500, "match_set_eof reposition count=%d found=%d\n", + Dmsg2(100, "match_set_eof reposition count=%d found=%d\n", rbsr->count, rbsr->found); return true; } @@ -284,19 +284,19 @@ static int match_all(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec, goto no_match; } if (!match_volfile(bsr, bsr->volfile, rec, 1)) { - Dmsg2(300, "Fail on file. bsr=%d rec=%d\n", bsr->volfile->efile, + Dmsg2(100, "Fail on file. bsr=%d rec=%d\n", bsr->volfile->efile, rec->File); goto no_match; } if (!match_sesstime(bsr, bsr->sesstime, rec, 1)) { - Dmsg2(300, "Fail on sesstime. bsr=%d rec=%d\n", + Dmsg2(100, "Fail on sesstime. bsr=%d rec=%d\n", bsr->sesstime->sesstime, rec->VolSessionTime); goto no_match; } /* NOTE!! This test MUST come after the sesstime test */ if (!match_sessid(bsr, bsr->sessid, rec)) { - Dmsg2(300, "Fail on sessid. bsr=%d rec=%d\n", + Dmsg2(100, "Fail on sessid. bsr=%d rec=%d\n", bsr->sessid->sessid, rec->VolSessionId); goto no_match; } @@ -449,7 +449,7 @@ static int match_volfile(BSR *bsr, BSR_VOLFILE *volfile, DEV_RECORD *rec, bool d if (!(rec->state & REC_ISTAPE)) { return 1; /* All File records OK for this match */ } -// Dmsg3(300, "match_volfile: sfile=%d efile=%d recfile=%d\n", +// Dmsg3(100, "match_volfile: sfile=%d efile=%d recfile=%d\n", // volfile->sfile, volfile->efile, rec->File); if (volfile->sfile <= rec->File && volfile->efile >= rec->File) { return 1; @@ -466,7 +466,7 @@ static int match_volfile(BSR *bsr, BSR_VOLFILE *volfile, DEV_RECORD *rec, bool d if (volfile->done && done) { bsr->done = true; bsr->root->reposition = true; - Dmsg2(300, "bsr done from volfile rec=%d volefile=%d\n", + Dmsg2(100, "bsr done from volfile rec=%d volefile=%d\n", rec->File, volfile->efile); } return 0; @@ -503,7 +503,7 @@ static int match_sesstime(BSR *bsr, BSR_SESSTIME *sesstime, DEV_RECORD *rec, boo if (sesstime->done && done) { bsr->done = true; bsr->root->reposition = true; - Dmsg0(300, "bsr done from sesstime\n"); + Dmsg0(100, "bsr done from sesstime\n"); } return 0; } @@ -549,7 +549,7 @@ static int match_findex(BSR *bsr, BSR_FINDEX *findex, DEV_RECORD *rec, bool done if (findex->done && done) { bsr->done = true; bsr->root->reposition = true; - Dmsg1(300, "bsr done from findex %d\n", rec->FileIndex); + Dmsg1(100, "bsr done from findex %d\n", rec->FileIndex); } return 0; } diff --git a/bacula/src/version.h b/bacula/src/version.h index c308c8273e..1449e2409e 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -3,7 +3,7 @@ */ #undef VERSION -#define VERSION "1.39.0" +#define VERSION "1.38.2" #define BDATE "20 November 2005" #define LSMDATE "20Nov05" @@ -15,7 +15,7 @@ #define TRACE_FILE 1 /* If this is set stdout will not be closed on startup */ -#define DEVELOPER 1 +/* #define DEVELOPER 1 */ /* #define USE_BSNPRINTF */ diff --git a/bacula/src/win32/README.vc8 b/bacula/src/win32/README.vc8 index 9ed93221e9..1164e45b47 100644 --- a/bacula/src/win32/README.vc8 +++ b/bacula/src/win32/README.vc8 @@ -7,12 +7,8 @@ the official way to build the released FD. See README.win32 for the "official" instructions.) What you need to download: -- Visual C++ 2005 Express Edition (2MB + 66MB) - http://msdn.microsoft.com/vstudio/express/visualc/download/ - NOTE: You may want to download the whole CD for offline usage - instead of the web installer, as Microsoft will - start to charge for VC++ one year after the product launch - (launch was in November 2005, see VC++ FAQ). +- Visual C++ Express Edition Beta 2 (2MB + 66MB) + http://lab.msdn.microsoft.com/express/visualc/default.aspx - Windows® Server 2003 SP1 Platform SDK Full Download (385MB) http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en @@ -77,15 +73,7 @@ Build instructions: /bacula/src/win32/compat/compat.h + Repeat the operation for the "Unicode Debug" configuration if needed. -Deploy instructions - Bacula: - + To deploy bacula on Windows clients, create a setup using NSIS - (Nullsoft Scriptable Install System). - http://nsis.sourceforge.net/Download - + Modify the default \bacula\src\win32\winbacula.nsi.in - script to include your own customizations. - Also change all references to msvcr71.dll to msvcr80.dll to - reflect the DLL used by VC++ 2005 + Open /bacula/src/win32/bacula.sln + Launch Build->Configuration Manager, then select your configuration. + Then run Build->Build Solution (this will build wx-console, bconsole and bacula-fd). diff --git a/regress/.cvsignore b/regress/.cvsignore deleted file mode 100644 index 16455a941f..0000000000 --- a/regress/.cvsignore +++ /dev/null @@ -1,11 +0,0 @@ -build -bin -test.out -weird-files -weird-files2 -diff -tmp -working -Makefile -test1.out -time.out diff --git a/regress/Makefile.in b/regress/Makefile.in deleted file mode 100644 index d5d82a5053..0000000000 --- a/regress/Makefile.in +++ /dev/null @@ -1,72 +0,0 @@ -# -# Makefile for Bacula regression testing -# -# Note, Makefile is built from Makefile.in, which you should not really -# need to change, by envoking: -# -# ./config -# e.g. -# -# ./config kern.conf -# -# - -# suck in user's configuration -@CONFIG@ - -first_rule: all - -all: - -setup: bacula - -# -# Some machines cannot handle the sticky bit and other garbage that -# is in weird-files, so we load and run it only on Linux machines. -# -bacula: all sed - @rm -rf bin build weird-files tmp - (if test x`uname` = xLinux -o x`uname` = xFreeBSD ; then \ - tar xfz weird-files.tar.gz ;\ - fi) - rm -rf tmp working - mkdir tmp working - echo "Doing: scripts/setup ${BACULA_SOURCE} ${EMAIL} ${WHICHDB} ${TCPWRAPPERS}" - scripts/setup ${BACULA_SOURCE} ${EMAIL} ${WHICHDB} ${TCPWRAPPERS} ${SMTP_HOST} - -sed: - echo "Doing: scripts/do_sed ${EMAIL} ${TAPE_DRIVE} ${AUTOCHANGER} ${AUTOCHANGER_PATH} ${TAPE_DRIVE1} ${SMTP_HOST}" - scripts/do_sed ${EMAIL} ${TAPE_DRIVE} ${AUTOCHANGER} ${AUTOCHANGER_PATH} ${TAPE_DRIVE1} ${SMTP_HOST} - -# Run all non-root userid tests -test: - ./all-non-root-tests - -# run all file and tape tests -full_test: - ./all-tape-and-file-tests - -# These tests require you to run as root -root_test: - ./all-root-tests - -clean: - scripts/cleanup - rm -f /tmp/file-list - rm -f tmp/* working/* - rm -f test.out - rm -f diff - rm -f 1 2 3 scripts/1 scripts/2 scripts/3 tests/1 tests/2 tests/3 - @find . -name .#* -exec $(RMF) {} \; - -# Reset our userid after running as root -reset: - chown -R ${USER}:${USER} . tmp working - scripts/cleanup - rm -f /tmp/file-list tmp/file-list - rm -f tmp/* working/* - -distclean: clean - rm -rf bin build weird-files weird-files weird-files2 tmp working - rm -f scripts/*.conf - diff --git a/regress/README b/regress/README deleted file mode 100644 index 5c121b2ecd..0000000000 --- a/regress/README +++ /dev/null @@ -1,115 +0,0 @@ - Bacula Regression - Kern Sibbald - -This is Bacula's regression script directory. - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -Warning!!!! Make sure not to run it on the same system -with your production Catalog because the tables will all -be cleared. You can run it on the your production system -if you use a different database. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - -To set it up, create your personal configuration file, by -copying prototype.conf to xxx.conf or simply editing prototype.conf -directly. - -Then edit your conf file and define appropriate values -for the variables that are in that file. If you want to see -a real example, look at kern.conf, but please don't use my -email address! - -Make sure that depkgs is pre-built if it isn't -already: (cd your-depkgs; make sqlite). -Using the .conf file, you can now select between any Catalog type: -SQLite, SQLite3, MySQL, or PostgreSQL. Be aware, however, if you -use an installed database on a production server, running these -tests will delete all the tables !!!!!!!!!!!!!!!!!! I run my -tests on a non-production machine, and in addition, I normally use -SQLite as the database, while my production uses MySQL. - -Then do: - - ./config xxx.conf - make setup - -You run the above one time. This will build a Makefile from -Makefile.in and your xxx.conf file, copy the Bacula source, -configure, build it, and configure all the Bacula scripts -and conf files. If you change your source, you will need to -redo this command. - -Then you can run any of the tests in the tests subdirectory. -Each test whose name ends in -root requires you to be root for -a resonable run. Each test is totally independent of any other -test. Aside from the required "make setup", each test is totally -self-initalizing and should clean up after itself. - -Not all the tests yet report OK. This is simply because there are -some spurious differences that I haven't yet taken the time to -eliminate. The working scrips as of 24 Apr 03 are (this is -way out of date!): - -backup-bacula-test -sparse-test -compressed-test -sparse-compressed-test -two-jobs-test -wierd-files-test -verify-vol-test - -The tests expect you to execute them from the main regress -directory! - -You can run all the disk based tests by doing: - - ./do_file - -You can run all the disk and most of the tape tests by doing: - - ./do_all - -Each of the above calls one or more scripts. By looking at the -scripts available in this directory, you can see that there are a number -of options for running tests. - -You can run them individually as: - - tests/two-jobs-test - -or all non-root tests (my normal testing under my account) - - ./all-non-root-tests - -or all tests (I only run these before a production release): - - su - ./all-tests - - -after running the root tests, while still root, it is a good idea -to do: - - make reset - -this cleans up any files that may be created with root permissions. - -If you want to add more tests, do so by putting the shell script -in the tests subdirectory. Be careful when adding (or better not) -new clients, pools, and such to the test-bacula-dir.conf.in file -as it may invalidate a good number of tests, which respond to -questions by answering with a number (i.e. the order of the selection -list is known). It might be better to add your own testb-bacula... -configuration file. - -To avoid re-doing a make setup if you have made a change to the -conf files, and you do not need a new copy of the source, you can simply do: - - make sed - -Debugging failed tests: -The simplest thing to do is to edit tests/xxxx where xxxx is the name of -the test, and change the line "debug=0" to "debug=1". If the test has -not been updated to have the debug variable, please notify Kern, and I -will be happy to fix it -- I am upgrading them one at a time. diff --git a/regress/all-non-root-2tape-tests b/regress/all-non-root-2tape-tests deleted file mode 100755 index 5201731263..0000000000 --- a/regress/all-non-root-2tape-tests +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# Run all tape tests -# -tests/test0 -tests/two-volume-tape -tests/incremental-2tape -echo " " -echo " " -echo "2 Tape Test results" -cat test.out -scripts/cleanup diff --git a/regress/all-non-root-tape-tests b/regress/all-non-root-tape-tests deleted file mode 100755 index 5a64aad4c3..0000000000 --- a/regress/all-non-root-tape-tests +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -# -# Run all tape tests -# -cp test.out test1.out -tests/test0 -tests/backup-bacula-tape -tests/bscan-tape -tests/btape-fill-tape -tests/fixed-block-size-tape -tests/four-concurrent-jobs-tape -tests/four-jobs-tape -tests/incremental-tape -tests/relabel-tape -tests/restore-by-file-tape -tests/small-file-size-tape -tests/truncate-bug-tape -echo " " -echo " " -echo "Test results" -cat test.out -scripts/cleanup diff --git a/regress/all-non-root-tests b/regress/all-non-root-tests deleted file mode 100755 index be1bf01045..0000000000 --- a/regress/all-non-root-tests +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -# -# Run all tests -# -tests/test0 -echo " " -tests/auto-label-test -tests/backup-bacula-test -tests/bextract-test -tests/bscan-test -tests/bsr-opt-test -tests/compressed-test -tests/concurrent-jobs-test -tests/differential-test -tests/four-concurrent-jobs-test -tests/four-jobs-test -tests/incremental-test -tests/query-test -tests/recycle-test -tests/restore2-by-file-test -tests/restore-by-file-test -tests/restore-disk-seek-test -tests/six-vol-test -tests/span-vol-test -tests/sparse-compressed-test -tests/sparse-test -tests/two-jobs-test -tests/two-vol-test -tests/verify-vol-test -tests/weird-files2-test -tests/weird-files-test -echo " " -echo "Test results" -cat test.out -scripts/cleanup diff --git a/regress/all-root-tests b/regress/all-root-tests deleted file mode 100755 index 3f077bba4c..0000000000 --- a/regress/all-root-tests +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# Run all root tests -# -rm -f test.out -tests/dev-test-root -tests/etc-test-root -tests/lib-test-root -tests/usr-tape-root -cat test.out -scripts/cleanup diff --git a/regress/all-tape-and-file-tests b/regress/all-tape-and-file-tests deleted file mode 100755 index 9235dc996b..0000000000 --- a/regress/all-tape-and-file-tests +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# -# Run all tests -# -./all-non-root-tests -./endtime -if [ ! -e bin/tape_options ] ; then - touch bin/tape_options -fi -./all-non-root-tape-tests diff --git a/regress/all-tests b/regress/all-tests deleted file mode 100755 index b1b2b35e86..0000000000 --- a/regress/all-tests +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# -# Run all tests -# -./all-non-root-tests -./all-root-tests -cat test.out -scripts/cleanup diff --git a/regress/config b/regress/config deleted file mode 100755 index 4bc4f52703..0000000000 --- a/regress/config +++ /dev/null @@ -1,9 +0,0 @@ -#/bin/sh -# -# First argument is expected to be a user's configuration file -# -if ! test -e $1 ; then - echo "Arg1 must specify a config file (e.g. prototype.conf)" - exit 1 -fi -sed -e "/@CONFIG@/r $1" -e "s/@CONFIG@//" Makefile.in >Makefile diff --git a/regress/do_all b/regress/do_all deleted file mode 100755 index ba1ad3f83a..0000000000 --- a/regress/do_all +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -/home/kern/bacula/bin/startmysql -make setup -./starttime -if [ ! -e bin/tape_options ] ; then - touch bin/tape_options -fi -./all-tape-and-file-tests -./endtime -if [ ! -e bin/tape_options ] ; then - touch bin/tape_options -fi -./all-non-root-2tape-tests -./endtime diff --git a/regress/do_all_tapes b/regress/do_all_tapes deleted file mode 100755 index dd07d2ec99..0000000000 --- a/regress/do_all_tapes +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -make setup -./all-non-root-tape-tests diff --git a/regress/do_file b/regress/do_file deleted file mode 100755 index 5fe0a82ecb..0000000000 --- a/regress/do_file +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# /home/kern/bacula/bin/startmysql -make setup -./starttime -./all-non-root-tests -./endtime diff --git a/regress/endtime b/regress/endtime deleted file mode 100755 index faf419f70d..0000000000 --- a/regress/endtime +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/python -from time import time as now - -t = now() -fn = open('time.out', 'r') -s = fn.readline() -fn.close() -diff = t - float(s) -h = int(diff / 3600) -m = int((diff - h * 3600) / 60) -sec = diff - h * 3600 - m * 60 -print 'Total time = %d:%02d:%02d or %d secs' % (h, m, sec, t - float(s)) diff --git a/regress/file b/regress/file deleted file mode 100755 index 8f2089051b..0000000000 --- a/regress/file +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -./all-non-root-tests diff --git a/regress/freebsd.conf b/regress/freebsd.conf deleted file mode 100644 index 3d41bd0f1e..0000000000 --- a/regress/freebsd.conf +++ /dev/null @@ -1,26 +0,0 @@ -# Where to get the source to be tested -# BACULA_SOURCE="${HOME}/bacula/branch-1.36.2" -BACULA_SOURCE="${HOME}/bacula/k" - -# Where to send email !!!!! Change me !!!!!!! -EMAIL=kern@sibbald.com -SMTP_HOST="matou.sibbald.com" - -# Full "default" path where to find sqlite (no quotes!) -SQLITE_DIR=${HOME}/bacula/depkgs/sqlite - -TAPE_DRIVE="/dev/nsa0" -# if you don't have an autochanger set AUTOCHANGER to /dev/null -AUTOCHANGER="/dev/sg0" -# For two drive tests -- set to /dev/null if you do not have it -TAPE_DRIVE1="/dev/null" - -# This must be the path to the autochanger including its name -AUTOCHANGER_PATH="/usr/local/sbin/mtx" - -# Set your database here -WHICHDB?="--with-sqlite=${SQLITE_DIR}" -#WHICHDB="--with-mysql=${HOME}/mysql" - -# Set this to "--with-tcp-wrappers" or "--without-tcp-wrappers" -TCPWRAPPERS="--with-tcp-wrappers" diff --git a/regress/kern.conf b/regress/kern.conf deleted file mode 100644 index b50b77d6d9..0000000000 --- a/regress/kern.conf +++ /dev/null @@ -1,29 +0,0 @@ -# Where to get the source to be tested -# BACULA_SOURCE="${HOME}/bacula/branch-1.38.1" -BACULA_SOURCE="${HOME}/bacula/k" - -# Where to send email !!!!! Change me !!!!!!! -EMAIL=kern@sibbald.com -SMTP_HOST="localhost" - -# Full "default" path where to find sqlite (no quotes!) -#SQLITE_DIR=${HOME}/bacula/depkgs/sqlite3 -SQLITE_DIR=${HOME}/bacula/depkgs/sqlite - -TAPE_DRIVE="/dev/nst0" -# if you don't have an autochanger set AUTOCHANGER to /dev/null -AUTOCHANGER="/dev/sg0" -# For two drive tests -- set to /dev/null if you do not have it -TAPE_DRIVE1="/dev/nst1" - -# This must be the path to the autochanger including its name -AUTOCHANGER_PATH="/usr/sbin/mtx" - -# Set your database here -WHICHDB?="--with-sqlite=${SQLITE_DIR}" -#WHICHDB="--with-mysql=${HOME}/mysql" -#WHICHDB="--with-postgresql" - -# Set this to "--with-tcp-wrappers" or "--without-tcp-wrappers" -TCPWRAPPERS="--with-tcp-wrappers" - diff --git a/regress/misc-tests b/regress/misc-tests deleted file mode 100644 index dd2734c56b..0000000000 --- a/regress/misc-tests +++ /dev/null @@ -1,2 +0,0 @@ -tests/btape-fill-full-tape -tests/eot-fail-tape diff --git a/regress/prototype.conf b/regress/prototype.conf deleted file mode 100644 index 28f5d3ee5e..0000000000 --- a/regress/prototype.conf +++ /dev/null @@ -1,46 +0,0 @@ -# -# Prototype personal configuration file for the regression -# scripts. Either edit this file directly, or better copy -# it elsewhere so it won't get overwritten. -# - -# -# Where to get the source to be tested -# -BACULA_SOURCE= - -# Where to send email messages -# -EMAIL= -SMTP_HOST=localhost - -# Full "default" path where to find sqlite. -# This is only used if you do not specify a database override on the -# make command. -# -# N.B. DON'T PUT QOUTES AROUND THE PATH. -# -SQLITE_DIR=${HOME}/bacula/depkgs/sqlite - -# -# The device name of your tape drive if you have one -# -TAPE_DRIVE=/dev/nst0 -TAPE_DRIVE1=/dev/null - -# -# if you don't have an autochanger set AUTOCHANGER to /dev/null -# -AUTOCHANGER=/dev/sg0 - -# -# This must be the path to the autochanger including its name -# -AUTOCHANGER_PATH=/bin/mtx - -# Set your database here -WHICHDB?="--with-sqlite=${SQLITE_DIR}" -#WHICHDB="--with-mysql=${HOME}/mysql" - -# Set this to "--with-tcp-wrappers" or "--without-tcp-wrappers" -TCPWRAPPERS="--with-tcp-wrappers" diff --git a/regress/run b/regress/run deleted file mode 100755 index d48e2623c6..0000000000 --- a/regress/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -bin/bacula start -bin/bconsole -c bin/bconsole.conf diff --git a/regress/scripts/.cvsignore b/regress/scripts/.cvsignore deleted file mode 100644 index 1b72890398..0000000000 --- a/regress/scripts/.cvsignore +++ /dev/null @@ -1,23 +0,0 @@ -new-test-bacula-dir.conf -bacula-dir.conf -bacula-fd.conf -bacula-sd.conf -console.conf -bconsole.conf -test-bacula-dir.conf -test-bacula-fd.conf -test-bacula-sd.conf -test-console.conf -testa-bacula-dir.conf -bacula-dir-tape.conf -bacula-sd-tape.conf -bacula-sd-2tape.conf -cleanup-tape -cleanup-2tape -prepare-two-tapes -cleanup-2drive -bacula-sd-2drive.conf -bacula-sd-win32-tape.conf -bacula-sd-2drive.conf -bacula-dir-win32-tape.conf -win32-bacula-dir-tape.conf diff --git a/regress/scripts/bacula-dir-tape.conf.in b/regress/scripts/bacula-dir-tape.conf.in deleted file mode 100644 index 0c05d19202..0000000000 --- a/regress/scripts/bacula-dir-tape.conf.in +++ /dev/null @@ -1,163 +0,0 @@ -# -# Default Bacula Director Configuration file -# -# The only thing that MUST be changed is to add one or more -# file or directory names in the Include directive of the -# FileSet resource. -# -# For Bacula release 1.33 -# -# You might also want to change the default email address -# from root to your address. See the "mail" and "operator" -# directives in the Messages resource. -# - -Director { # define myself - Name = @hostname@-dir - DIRport = 8101 # where we listen for UA connections - QueryFile = "@scriptdir@/query.sql" - WorkingDirectory = "@working_dir@" - PidDirectory = "@piddir@" - Maximum Concurrent Jobs = 4 - Password = "pNvX1WiXnwv2C/F7E52LGvw6rKjbbPvu2kyuPa9pVaL3" - Messages = Daemon -} - -# -# Define the main nightly save backup job -# By default, this job will back up to disk in /tmp -Job { - Name = "NightlySave" - Type = Backup - Client=@hostname@-fd - FileSet="Full Set" - Storage = DDS-4 - Messages = Standard - Pool = Default - Write Bootstrap = "@working_dir@/NightlySave.bsr" - Maximum Concurrent Jobs = 4 - SpoolData = yes -# Prefer Mounted Volumes = no -} - - -# Standard Restore template, to be changed by Console program -Job { - Name = "RestoreFiles" - Type = Restore - Client=@hostname@-fd - FileSet="Full Set" - Storage = DDS-4 - Messages = Standard - Pool = Default - Where = /tmp/bacula-restores -} - - -# List of files to be backed up -FileSet { - Name = "Full Set" - Include { Options { signature=MD5 } - File = &1 >/dev/null -@output tmp/dir.out -status dir -@output tmp/fd.out -status client -@output tmp/sd.out -status $1 -@output -quit -END_OF_DATA -grep "No Jobs running." tmp/dir.out 2>&1 >/dev/null -if [ $? != 0 ] ; then - echo " " - echo " !!!! Zombie Jobs in Director !!!!" - echo " !!!! Zombie Jobs in Director !!!!" >>test.out - echo " " -fi -grep "No Jobs running." tmp/fd.out 2>&1 >/dev/null -if [ $? != 0 ] ; then - echo " " - echo " !!!! Zombie Jobs in File daemon !!!!" - echo " !!!! Zombie Jobs in File daemon !!!!" >>test.out - echo " " -fi -grep "No Jobs running." tmp/sd.out 2>&1 >/dev/null -if [ $? != 0 ] ; then - echo " " - echo " !!!! Zombie Jobs in Storage daemon !!!!" - echo " !!!! Zombie Jobs in Storage daemon !!!!" >>test.out - echo " " -fi -grep "ERROR" tmp/log*.out 2>&1 >/dev/null -if [ $? = 0 ] ; then - echo " " - echo " !!!! ERROR in log output !!!!" - echo " !!!! ERROR in log output !!!!" >>test.out - echo " " -fi -grep "Fatal Error" tmp/log*.out 2>&1 >/dev/null -if [ $? = 0 ] ; then - echo " " - echo " !!!! Fatal Error in log output !!!!" - echo " !!!! Fatal Error in log output !!!!" >>test.out - echo " " -fi - diff --git a/regress/scripts/cleanup b/regress/scripts/cleanup deleted file mode 100755 index bca32b328d..0000000000 --- a/regress/scripts/cleanup +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -# -# Cleanup left over files -- both before and after test run -# -rm -rf /tmp/TestVolume001 /tmp/bacula-restores /tmp/Small* -rm -rf tmp/original tmp/bacula-restores tmp/Small* tmp/TestVolume* -rm -rf tmp/restored tmp/largefile tmp/bscan.bsr tmp/log*.out -rm -rf /tmp/sed_tmp /tmp/file-list -rm -rf tmp/build tmp/restore-list tmp/restore2-list -rm -rf tmp/fd.out tmp/dir.out tmp/sd.out -rm -rf working/log tmp/TEST-* -rm -rf working/*restore*.bsr - -bin/bacula stop 2>&1 >/dev/null -cd bin -./drop_bacula_tables >/dev/null 2>&1 -./make_bacula_tables >/dev/null 2>&1 -./grant_bacula_privileges >/dev/null 2>&1 -cd .. diff --git a/regress/scripts/cleanup-2drive.in b/regress/scripts/cleanup-2drive.in deleted file mode 100755 index 32b27c019e..0000000000 --- a/regress/scripts/cleanup-2drive.in +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh -# -# Cleanup left over files -- both before and after test run -# -scripts/cleanup - -if test x@autochanger@ != x/dev/null; then - slot=`bin/mtx-changer @autochanger@ loaded 0 @tape_drive1@ 1` - echo "Slot $slot in drive 1" - if test x$slot != x0 ; then - echo "unload slot $slot in drive 1" - bin/mtx-changer @autochanger@ unload $slot @tape_drive1@ 1 - fi - slot=`bin/mtx-changer @autochanger@ loaded 0 @tape_drive@ 0` - echo "Slot $slot in drive 0" - if test x$slot != x0 ; then - echo "unload slot $slot in drive 0" - bin/mtx-changer @autochanger@ unload $slot @tape_drive@ 0 - fi - - - slot=`bin/mtx-changer @autochanger@ loaded 0 @tape_drive1@ 1` - if test x$slot != x2; then - echo "load slot 2 in drive 1" - bin/mtx-changer @autochanger@ load 2 @tape_drive1@ 1 - fi - echo "WEOF drive 1" - mt -f @tape_drive1@ rewind - mt -f @tape_drive1@ weof - echo "unload slot 2 in drive 1" - bin/mtx-changer @autochanger@ unload 2 @tape_drive1@ 1 - - slot=`bin/mtx-changer @autochanger@ loaded 0 @tape_drive@ 0` - echo "Slot $slot in drive 0" - if test x$slot != x1; then - echo "load slot 1 in drive 0" - bin/mtx-changer @autochanger@ load 1 @tape_drive@ 0 - fi - echo "WEOF drive 0" - mt -f @tape_drive@ rewind - mt -f @tape_drive@ weof - echo "unload slot 1 from drive 0" - bin/mtx-changer @autochanger@ unload 1 @tape_drive@ 0 -fi diff --git a/regress/scripts/cleanup-2tape.in b/regress/scripts/cleanup-2tape.in deleted file mode 100755 index 0f33ec95c7..0000000000 --- a/regress/scripts/cleanup-2tape.in +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -# -# Cleanup left over files -- both before and after test run -# -scripts/cleanup - -if test x@autochanger@ != x/dev/null; then - drive=`bin/mtx-changer @autochanger@ loaded 0 dummy 0` - if test x${drive} != x2; then - bin/mtx-changer @autochanger@ unload 0 @tape_drive@ 0 - bin/mtx-changer @autochanger@ load 2 @tape_drive@ 0 - fi - mt -f @tape_drive@ rewind - mt -f @tape_drive@ weof -fi - - -# -# If we have an autochanger always load tape in slot 1 -# -if test x@autochanger@ != x/dev/null; then - drive=`bin/mtx-changer @autochanger@ loaded 0 dummy 0` - if test x${drive} != x1; then - bin/mtx-changer @autochanger@ unload 0 @tape_drive@ 0 - bin/mtx-changer @autochanger@ load 1 @tape_drive@ 0 - fi -fi - -mt -f @tape_drive@ rewind -mt -f @tape_drive@ weof diff --git a/regress/scripts/cleanup-tape.in b/regress/scripts/cleanup-tape.in deleted file mode 100755 index 98ed537766..0000000000 --- a/regress/scripts/cleanup-tape.in +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# -# Cleanup left over files -- both before and after test run -# -scripts/cleanup - -mt -f @tape_drive@ rewind -mt -f @tape_drive@ weof diff --git a/regress/scripts/copy-2drive-confs b/regress/scripts/copy-2drive-confs deleted file mode 100755 index 1f5c3475a2..0000000000 --- a/regress/scripts/copy-2drive-confs +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -/bin/cp -f scripts/bacula-dir-tape.conf bin/bacula-dir.conf -/bin/cp -f scripts/bacula-sd-2drive.conf bin/bacula-sd.conf -/bin/cp -f scripts/test-bacula-fd.conf bin/bacula-fd.conf -/bin/cp -f scripts/test-console.conf bin/bconsole.conf -outf="tmp/sed_tmp" -echo "s%# Autochanger = yes% Autochanger = yes%g" >${outf} -cp bin/bacula-dir.conf tmp/1 -sed -f ${outf} tmp/1 >bin/bacula-dir.conf diff --git a/regress/scripts/copy-2tape-confs b/regress/scripts/copy-2tape-confs deleted file mode 100755 index 587e5ff1d3..0000000000 --- a/regress/scripts/copy-2tape-confs +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -/bin/cp -f scripts/bacula-dir-tape.conf bin/bacula-dir.conf -/bin/cp -f scripts/bacula-sd-2tape.conf bin/bacula-sd.conf -/bin/cp -f scripts/test-bacula-fd.conf bin/bacula-fd.conf -/bin/cp -f scripts/test-console.conf bin/bconsole.conf -outf="tmp/sed_tmp" -echo "s%# Autochanger = yes% Autochanger = yes%g" >${outf} -cp bin/bacula-dir.conf tmp/1 -sed -f ${outf} tmp/1 >bin/bacula-dir.conf diff --git a/regress/scripts/copy-confs b/regress/scripts/copy-confs deleted file mode 100755 index d1e6cc1c36..0000000000 --- a/regress/scripts/copy-confs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -/bin/cp -f scripts/bacula-dir.conf bin/bacula-dir.conf -/bin/cp -f scripts/bacula-sd.conf bin/bacula-sd.conf -/bin/cp -f scripts/bacula-fd.conf bin/bacula-fd.conf -/bin/cp -f scripts/bconsole.conf bin/bconsole.conf diff --git a/regress/scripts/copy-tape-confs b/regress/scripts/copy-tape-confs deleted file mode 100755 index 588dddc35b..0000000000 --- a/regress/scripts/copy-tape-confs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -/bin/cp -f scripts/bacula-dir-tape.conf bin/bacula-dir.conf -/bin/cp -f scripts/bacula-sd-tape.conf bin/bacula-sd.conf -/bin/cp -f scripts/test-bacula-fd.conf bin/bacula-fd.conf -/bin/cp -f scripts/test-console.conf bin/bconsole.conf diff --git a/regress/scripts/copy-test-confs b/regress/scripts/copy-test-confs deleted file mode 100755 index 61b120f610..0000000000 --- a/regress/scripts/copy-test-confs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -/bin/cp -f scripts/new-test-bacula-dir.conf bin/bacula-dir.conf -/bin/cp -f scripts/test-bacula-sd.conf bin/bacula-sd.conf -/bin/cp -f scripts/test-bacula-fd.conf bin/bacula-fd.conf -/bin/cp -f scripts/test-console.conf bin/bconsole.conf diff --git a/regress/scripts/copy-testa-confs b/regress/scripts/copy-testa-confs deleted file mode 100755 index 6b5f30c3ef..0000000000 --- a/regress/scripts/copy-testa-confs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -/bin/cp -f scripts/testa-bacula-dir.conf bin/bacula-dir.conf -/bin/cp -f scripts/test-bacula-sd.conf bin/bacula-sd.conf -/bin/cp -f scripts/test-bacula-fd.conf bin/bacula-fd.conf -/bin/cp -f scripts/test-console.conf bin/bconsole.conf diff --git a/regress/scripts/copy-win32-confs b/regress/scripts/copy-win32-confs deleted file mode 100755 index fa698a3ceb..0000000000 --- a/regress/scripts/copy-win32-confs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -/bin/cp -f scripts/win32-bacula-dir-tape.conf bin/bacula-dir.conf -/bin/cp -f scripts/win32-bacula-sd-tape.conf bin/bacula-sd.conf -/bin/cp -f scripts/win32-bacula-fd.conf bin/bacula-fd.conf -/bin/cp -f scripts/test-console.conf bin/bconsole.conf diff --git a/regress/scripts/do_sed b/regress/scripts/do_sed deleted file mode 100755 index 3315e38e29..0000000000 --- a/regress/scripts/do_sed +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh -# -if test $# != 6 ; then - echo "First arg must be email name" - echo " and the second must be a tape drive" - echo " and the third must be a tape control name or /dev/null" - echo " and the fourth must be the full path to the mtx program" - echo " and the fifth must be tape drive 1 or /dev/null" - echo " and the sixth must be the smtp or email host" - exit 1 -fi -out="/tmp/sed_tmp" -cwd=`pwd` -host=`hostname | tr '.' ' ' | cut -f 1 -d ' '` -if test x$host = x ; then - host=localhost -fi -host="localhost" -# Create sed command script -echo "s%@sbindir@%${cwd}/bin%g" >${out} -echo "s%@scriptdir@%${cwd}/bin%g" >>${out} -echo "s%@working_dir@%${cwd}/working%g" >>${out} -echo "s%@piddir@%${cwd}/working%g" >>${out} -echo "s%@subsysdir@%${cwd}/working%g" >>${out} -echo "s%@job_email@%${1}%g" >>${out} -echo "s%@tape_drive@%${2}%g" >>${out} -echo "s%@autochanger@%${3}%g" >>${out} -echo "s%@tmpdir@%${cwd}/tmp%g" >>${out} -echo "s%@hostname@%${host}%g" >>${out} -echo "s%@changer_path@%${4}%g" >>${out} -echo "s%@tape_drive1@%${5}%g" >>${out} -echo "s%@smtp_host@%${6}%g" >>${out} - -# process .in files with sed script -sed -f ${out} ${cwd}/scripts/test-bacula-dir.conf.in >${cwd}/scripts/test-bacula-dir.conf -sed -f ${out} ${cwd}/scripts/new-test-bacula-dir.conf.in >${cwd}/scripts/new-test-bacula-dir.conf -sed -f ${out} ${cwd}/scripts/testa-bacula-dir.conf.in >${cwd}/scripts/testa-bacula-dir.conf -sed -f ${out} ${cwd}/scripts/test-bacula-fd.conf.in >${cwd}/scripts/test-bacula-fd.conf -sed -f ${out} ${cwd}/scripts/test-bacula-sd.conf.in >${cwd}/scripts/test-bacula-sd.conf -sed -f ${out} ${cwd}/scripts/test-console.conf.in >${cwd}/scripts/test-console.conf -sed -f ${out} ${cwd}/scripts/bacula-dir-tape.conf.in >${cwd}/scripts/bacula-dir-tape.conf -sed -f ${out} ${cwd}/scripts/win32-bacula-dir-tape.conf.in >${cwd}/scripts/win32-bacula-dir-tape.conf -sed -f ${out} ${cwd}/scripts/bacula-sd-tape.conf.in >${cwd}/scripts/bacula-sd-tape.conf -sed -f ${out} ${cwd}/scripts/bacula-sd-2tape.conf.in >${cwd}/scripts/bacula-sd-2tape.conf -sed -f ${out} ${cwd}/scripts/bacula-sd-2drive.conf.in >${cwd}/scripts/bacula-sd-2drive.conf -sed -f ${out} ${cwd}/scripts/cleanup-tape.in >${cwd}/scripts/cleanup-tape -sed -f ${out} ${cwd}/scripts/cleanup-2tape.in >${cwd}/scripts/cleanup-2tape -sed -f ${out} ${cwd}/scripts/cleanup-2drive.in >${cwd}/scripts/cleanup-2drive -sed -f ${out} ${cwd}/scripts/prepare-two-tapes.in >${cwd}/scripts/prepare-two-tapes -cp ${cwd}/bin/bacula-sd.conf /tmp/bac$$ -sed s%/tmp%${cwd}/tmp%g /tmp/bac$$ >${cwd}/bin/bacula-sd.conf -chmod 777 ${cwd}/scripts/cleanup-*tape ${cwd}/scripts/cleanup-*drive ${cwd}/scripts/prepare-two-tapes -rm -f /tmp/bac$$ -cp ${cwd}/bin/mtx-changer /tmp/bac$$ -sed "s%^MTX.*$%MTX=${4}%g" /tmp/bac$$ >${cwd}/bin/mtx-changer -chmod 777 ${cwd}/bin/mtx-changer - -# get proper SD tape definitions -touch ${cwd}/bin/tape_options -if test x`uname` = xLinux ; then - cp -f ${cwd}/scripts/linux_tape_options ${cwd}/bin/tape_options -fi -if test x`uname` = xFreeBSD ; then - cp -f ${cwd}/scripts/freebsd_tape_options ${cwd}/bin/tape_options -fi - -rm -f ${out} -rm -f /tmp/bac$$ diff --git a/regress/scripts/exclude-dev-test b/regress/scripts/exclude-dev-test deleted file mode 100644 index 4165ea1ae7..0000000000 --- a/regress/scripts/exclude-dev-test +++ /dev/null @@ -1,5 +0,0 @@ -dev/ptmx -dev/pts -dev/rd/c5d2 -dev/rd -dev/shm diff --git a/regress/scripts/exclude-etc-test b/regress/scripts/exclude-etc-test deleted file mode 100644 index f59ca8df2a..0000000000 --- a/regress/scripts/exclude-etc-test +++ /dev/null @@ -1 +0,0 @@ -etc/mail/statistics diff --git a/regress/scripts/exclude-lib-test b/regress/scripts/exclude-lib-test deleted file mode 100644 index 5be32f443b..0000000000 --- a/regress/scripts/exclude-lib-test +++ /dev/null @@ -1,5 +0,0 @@ -lib/ld-2.2.5.so -lib/libtermcap.so.2.0.8 -lib/libc-2.2.5.so -lib/libnsl-2.2.5.so -lib/libnss_files-2.2.5.so diff --git a/regress/scripts/flist b/regress/scripts/flist deleted file mode 100644 index 019eb57a0f..0000000000 --- a/regress/scripts/flist +++ /dev/null @@ -1,22 +0,0 @@ -/build/configure -/build/src/stored/bextract -/build/src/tools/testfind -/build/Makefile.in -/build/src/dird/bacula-dir -/build/src/console/bconsole -/build/src/filed/bacula-fd -/build/src/findlib/find_one.c -/build/src/jcr.h -/build/platforms/Makefile.in -/build/platforms/redhat/Makefile.in -/build/scripts/Makefile.in -/build/src/filed/win32/winservice.cpp -/build/src/filed/restore.c -/build/autoconf/configure.in -/build/examples/afs-bacula -/build/src/win32/winbacula.nsi.in -/build/autoconf/configure.in -/build/src/version.h -/build/src/lib/message.c -/build/src/lib/bnet_server.c -/build/src/lib/libbac.a diff --git a/regress/scripts/freebsd_tape_options b/regress/scripts/freebsd_tape_options deleted file mode 100644 index 05be3449c4..0000000000 --- a/regress/scripts/freebsd_tape_options +++ /dev/null @@ -1,8 +0,0 @@ -# -# FreeBSD tape drive options -# -Hardware End of Medium = no -Fast Forward Space File = no -BSF at EOM = yes -Backward Space Record = no -TWO EOF = yes diff --git a/regress/scripts/linux_osst_tape_options b/regress/scripts/linux_osst_tape_options deleted file mode 100644 index 5def0c08cb..0000000000 --- a/regress/scripts/linux_osst_tape_options +++ /dev/null @@ -1,7 +0,0 @@ - Minimum Block Size = 32768 - Maximum Block Size = 32768 - Hardware End of Medium = yes - BSF at EOM = yes - Fast Forward Space File = yes - Two EOF = no - diff --git a/regress/scripts/linux_tape_options b/regress/scripts/linux_tape_options deleted file mode 100644 index 601eb82aa5..0000000000 --- a/regress/scripts/linux_tape_options +++ /dev/null @@ -1 +0,0 @@ -# nothing needed for Linux diff --git a/regress/scripts/new-test-bacula-dir.conf.in b/regress/scripts/new-test-bacula-dir.conf.in deleted file mode 100644 index a91b7c4390..0000000000 --- a/regress/scripts/new-test-bacula-dir.conf.in +++ /dev/null @@ -1,312 +0,0 @@ -# -# Default Bacula Director Configuration file -# -# The only thing that MUST be changed is to add one or more -# file or directory names in the Include directive of the -# FileSet resource. -# -# For Bacula release 1.33 -# -# You might also want to change the default email address -# from root to your address. See the "mail" and "operator" -# directives in the Messages resource. -# - -Director { # define myself - Name = @hostname@-dir - DIRport = 8101 # where we listen for UA connections - QueryFile = "@scriptdir@/query.sql" - WorkingDirectory = "@working_dir@" - PidDirectory = "@piddir@" - SubSysDirectory = "@subsysdir@" - Maximum Concurrent Jobs = 4 - Password = "pNvX1WiXnwv2C/F7E52LGvw6rKjbbPvu2kyuPa9pVaL3" # Console password - Messages = Standard -} - -# -# Define the main nightly save backup job -# By default, this job will back up to disk in /tmp -Job { - Name = "NightlySave" - Type = Backup - Client=@hostname@-fd - FileSet="Full Set" - Storage = File - Messages = Standard - Pool = Default - Write Bootstrap = "@working_dir@/NightlySave.bsr" - Maximum Concurrent Jobs = 4 - SpoolData=yes -} - -Job { - Name = "MonsterSave" - Type = Backup - Client=@hostname@-fd - FileSet="Full Set" - Storage = File1 - Messages = Standard - Pool = Default - Write Bootstrap = "@working_dir@/NightlySave.bsr" -} - - -Job { - Name = "VerifyVolume" - Type = Verify - Level = VolumeToCatalog - Client=@hostname@-fd - FileSet="Full Set" - Storage = File - Messages = Standard - Pool = Default - Write Bootstrap = "@working_dir@/NightlySave.bsr" -} - - -Job { - Name = "SparseTest" - Type = Backup - Client=@hostname@-fd - FileSet="SparseSet" - Storage = File - Messages = Standard - Pool = Default - Write Bootstrap = "@working_dir@/NightlySave.bsr" -} - -Job { - Name = "CompressedTest" - Type = Backup - Client=@hostname@-fd - FileSet="CompressedSet" - Storage = File - Messages = Standard - Pool = Default - Maximum Concurrent Jobs = 4 - Write Bootstrap = "@working_dir@/NightlySave.bsr" -} - -Job { - Name = "SparseCompressedTest" - Type = Backup - Client=@hostname@-fd - FileSet="SparseCompressedSet" - Storage = File - Messages = Standard - Pool = Default - Write Bootstrap = "@working_dir@/NightlySave.bsr" -} - - -# Backup the catalog database (after the nightly save) -Job { - Name = "BackupCatalog" - Type = Backup - Client=@hostname@-fd - FileSet="Catalog" -# Schedule = "WeeklyCycleAfterBackup" - Storage = File - Messages = Standard - Pool = Default - # This creates an ASCII copy of the catalog - RunBeforeJob = "@sbindir@/make_catalog_backup -u bacula" - # This deletes the copy of the catalog - RunAfterJob = "@sbindir@/delete_catalog_backup" - Write Bootstrap = "@working_dir@/BackupCatalog.bsr" -} - -# Standard Restore template, to be changed by Console program -Job { - Name = "RestoreFiles" - Type = Restore - Client=@hostname@-fd - FileSet="Full Set" - Storage = File - Messages = Standard - Pool = Default - Where = /tmp/bacula-restores -} - - -# List of files to be backed up -FileSet { - Name = "Full Set" - Include { Options { signature=MD5 } - File = &1 >/dev/null -cd bin -./drop_bacula_tables >/dev/null 2>&1 -./make_bacula_tables >/dev/null 2>&1 -./grant_bacula_privileges 2>&1 >/dev/null -cd .. - -scripts/copy-2drive-confs -scripts/cleanup-2drive -echo "${cwd}/tmp/build" >/tmp/file-list -if test ! -d ${cwd}/tmp/build ; then - mkdir ${cwd}/tmp/build -fi -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -cd ${cwd}/tmp -echo "${cwd}/tmp/build/ficheriro1.txt" >restore-list -echo "${cwd}/tmp/build/ficheriro2.txt" >>restore-list -cd ${cwd} - -echo " " -echo " " -echo " === Starting 2drive-incremental-2tape test ===" -echo " === Starting 2drive-incremental-2tape test ===" >>working/log -echo " " - -# Write out bconsole commands -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=1 Pool=Default drive=0 -label storage=DDS-4 volume=TestVolume002 slot=2 Pool=Default drive=1 -run job=NightlySave yes -run job=NightlySave yes -wait -status storage=DDS-4 -messages -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -echo "ficheriro1.txt" >${cwd}/tmp/build/ficheriro1.txt -echo "ficheriro2.txt" >${cwd}/tmp/build/ficheriro2.txt - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -@# Force Incremental on the second Volume -update volume=TestVolume001 VolStatus=Used -status storage=DDS-4 -@#setdebug level=400 storage=DDS-4 -run level=Incremental job=NightlySave yes -wait -status storage=DDS-4 -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores -7 -<${cwd}/tmp/restore-list - -yes -wait -messages -@$out -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -# -# Delete .c files because we will only restored the txt files -# -rm -f tmp/build/*.c -diff -r tmp/build tmp/bacula-restores${cwd}/tmp/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! 2drive-incremental-2tape test Bacula source failed!!! !!!!! " - echo " !!!!! 2drive-incremental-2tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== 2drive-incremental-2tape test Bacula source OK ===== " - echo " ===== 2drive-incremental-2tape test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/auto-label-test b/regress/tests/auto-label-test deleted file mode 100755 index 2e020e766b..0000000000 --- a/regress/tests/auto-label-test +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -# -# Test if Bacula can automatically create a Volume label. -# - -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -cp ${cwd}/bin/bacula-dir.conf ${cwd}/tmp/1 -sed "s%# Label Format% Label Format%" ${cwd}/tmp/1 >${cwd}/bin/bacula-dir.conf - -echo " " -echo " " -echo " === Starting auto-label-test at `date +%R:%S` ===" -echo " === Starting auto-label-test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -status all -status all -list pools -messages -@$out tmp/log1.out -run job=CompressedTest storage=File yes -list pools -list volumes -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File -unmark * -mark * -count -ls * -dir * -find Makefile -pwd -lsmark -estimate -? -help -done -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! auto-label-test failed!!! !!!!! " - echo " !!!!! auto-label-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== auto-label-test OK ===== " - echo " ===== auto-label-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/backup-bacula-tape b/regress/tests/backup-bacula-tape deleted file mode 100755 index 37c42382a5..0000000000 --- a/regress/tests/backup-bacula-tape +++ /dev/null @@ -1,145 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# to a tape then restore it, we do that twice to ensure that -# we can correctly append to a tape. -# We also use the purge and the relabel commands as -# well as a pile of status storage commands. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape - -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting Backup Bacula tape test at `date +%R:%S` ===" -echo " === Starting Backup Bacula tape test at `date +%R:%S` ===" >>working/log -echo " " - -# Write out bconsole commands -cat <tmp/bconcmds -@output /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -purge volume=TestVolume001 -relabel pool=Default storage=DDS-4 oldVolume=TestVolume001 volume=TestVolume002 slot=0 -purge volume=TestVolume002 -relabel pool=Default storage=DDS-4 oldVolume=TestVolume002 volume=TestVolume001 slot=0 -run job=NightlySave yes -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -@sleep 1 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -@sleep 1 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -@sleep 1 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -@sleep 1 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -status storage=DDS-4 -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select all storage=DDS-4 done -yes -wait -list volumes -messages -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -bin/bacula stop 2>&1 >/dev/null -# -# Now do a second backup after making a few changes -# -touch ${cwd}/build/src/dird/*.c -echo "test test" > ${cwd}/build/src/dird/xxx - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -list volumes -run job=NightlySave yes -wait -list volumes -messages -@# -@# now do a second restore -@# -@$out tmp/log2.out -list volumes -restore where=${cwd}/tmp/bacula-restores select all storage=DDS-4 done -yes -wait -list volumes -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -scripts/check_for_zombie_jobs storage=DDS-4 - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Backup Bacula tape test failed!!! !!!!! " - echo " !!!!! Backup Bacula tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== Backup Bacula tape test OK ===== " - echo " ===== Backup Bacula tape test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/backup-bacula-test b/regress/tests/backup-bacula-test deleted file mode 100755 index 3b33a17c5a..0000000000 --- a/regress/tests/backup-bacula-test +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# then restore it. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-confs -scripts/cleanup - -echo " " -echo " " -echo " === Starting Backup Bacula Test at `date +%R:%S` ===" -echo " === Starting Backup Bacula Test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label volume=TestVolume001 -run job=Client1 yes -status storage=File -status storage=File -status storage=File -status storage=File -status storage=File -status storage=File -sleep 1 -status storage=File -status storage=File -status storage=File -status storage=File -status storage=File -sleep 1 -status storage=File -status storage=File -status storage=File -status storage=File -status storage=File -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select all done -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Backup Bacula Test failed!!! !!!!! " - echo " !!!!! Backup Bacula Test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== Backup Bacula Test OK ===== " - echo " ===== Backup Bacula Test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/bextract-test b/regress/tests/bextract-test deleted file mode 100755 index b51f48f533..0000000000 --- a/regress/tests/bextract-test +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory but -# split the archive into two volumes, then build a BSR with -# the restore command and use bextract to restore the files. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting bextract-test at `date +%R:%S` ===" -echo " === Starting bextract-test at `date +%R:%S` ===" >working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File1 volume=TestVolume001 -label storage=File1 volume=TestVolume002 -update Volume=TestVolume001 MaxVolBytes=3000000 -run job=NightlySave storage=File1 yes -wait -messages -@# -@# now build the bsr file -@# -@$out tmp/log2.out -restore bootstrap=${cwd}/working/restore.bsr where=${cwd}/tmp/bacula-restores select all storage=File1 done -no -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File1 -bin/bacula stop 2>&1 >/dev/null -mkdir -p ${cwd}/tmp/bacula-restores -bin/bextract -b working/restore.bsr -c bin/bacula-sd.conf ${cwd}/tmp ${cwd}/tmp/bacula-restores 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! bextract-test Bacula source failed!!! !!!!! " - echo " !!!!! bextract-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== bextract-test Bacula source OK ===== " - echo " ===== bextract-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/bscan-tape b/regress/tests/bscan-tape deleted file mode 100755 index 6fe38d0bb2..0000000000 --- a/regress/tests/bscan-tape +++ /dev/null @@ -1,178 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the compressed option -# then backup four times, each with incremental then -# do a bscan and restore. -# It should require at least 4 different bsrs. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape -echo "${cwd}/build" >/tmp/file-list - -cp ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1 -sed "s%# Maximum File Size% Maximum File Size%" ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf - -echo " " -echo " " -echo " === Starting bscan-tape at `date +%R:%S` ===" -echo " === Starting bscan-tape at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -estimate job=NightlySave listing -estimate job=NightlySave listing -estimate job=NightlySave listing -messages -@$out tmp/log1.out -setdebug level=2 storage=DDS-4 -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -run job=NightlySave yes -wait -run job=NightlySave level=Full yes -wait -run job=NightlySave level=Full yes -wait -messages -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -scripts/check_for_zombie_jobs storage=DDS-4 -echo "Backup 1 done" -# make some files for the incremental to pick up -touch ${cwd}/build/src/dird/*.c ${cwd}/build/src/dird/*.o -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o - -# -# run a second job -# -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -run job=NightlySave level=Incremental yes -wait -messages -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -echo "Backup 2 done" -touch ${cwd}/build/src/dird/*.c -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o -# -# run a third job -# -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -run job=NightlySave level=Incremental yes -wait -messages -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -echo "Backup 3 done" -# make some files for the incremental to pick up -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o -#echo "abc" > ${cwd}/build/src/lib/dummy -# -# run a fourth job -# - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -run job=NightlySave level=Incremental yes -wait -messages -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -echo "Backup 4 done" -# -# now drop and recreate the database -# -cd bin -./drop_bacula_tables >/dev/null 2>&1 -./make_bacula_tables >/dev/null 2>&1 -./grant_bacula_privileges 2>&1 >/dev/null -cd .. - -bin/bacula stop 2>&1 >/dev/null -echo "volume=TestVolume001" >tmp/bscan.bsr -bin/bscan -w working -m -s -v -b tmp/bscan.bsr -c bin/bacula-sd.conf DDS-4 2>&1 >/dev/null -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@$out /dev/null -messages -@$out tmp/log2.out -@# -@# now do a restore -@# -restore where=${cwd}/tmp/bacula-restores select all storage=DDS-4 done -yes -wait -messages -@$out -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=DDS-4 -rm -f ${cwd}/build/src/lib/dummy -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! bscan-tape Bacula source failed!!! !!!!! " - echo " !!!!! bscan-tape failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== bscan-tape Bacula source OK ===== " - echo " ===== bscan-tape OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/bscan-test b/regress/tests/bscan-test deleted file mode 100755 index cff1a52022..0000000000 --- a/regress/tests/bscan-test +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory but -# split the archive into two volumes then bscan it -# into the catalog after the backup. It also to a limited -# extent tests the purge volume and delete volume commands. -# - -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting bscan-test at `date +%R:%S` ===" -echo " === Starting bscan-test at `date +%R:%S` ===" >working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File1 -TestVolume001 -label storage=File1 -TestVolume002 -update Volume=TestVolume001 MaxVolBytes=3000000 -run job=NightlySave storage=File1 -yes -wait -messages -@$out /dev/null -@# -@# now purge the Volume -@# -purge volume=TestVolume001 -purge volume=TestVolume002 -delete volume=TestVolume001 -yes -delete volume=TestVolume002 -yes -messages -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File1 -bin/bacula stop 2>&1 >/dev/null -echo "volume=TestVolume001|TestVolume002" >tmp/bscan.bsr -bin/bscan -w working -m -s -v -b tmp/bscan.bsr -c bin/bacula-sd.conf ${cwd}/tmp 2>&1 >/dev/null -#bin/bscan -w working -m -s -v -b tmp/bscan.bsr -c bin/bacula-sd.conf ${cwd}/tmp -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -#bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! bscan-test Bacula source failed!!! !!!!! " - echo " !!!!! bscan-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== bscan-test Bacula source OK ===== " - echo " ===== bscan-test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/bsr-opt-test b/regress/tests/bsr-opt-test deleted file mode 100755 index e2bf556bee..0000000000 --- a/regress/tests/bsr-opt-test +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory but -# split the archive into two volumes, then restore -# files on only one of the volumes and ensure that -# the other volume is not used. I.e. bsr optimization -# works. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting bsr-opt-test at `date +%R:%S` ===" -echo " === Starting bsr-opt-test at `date +%R:%S` ===" >working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File1 volume=TestVolume001 -label storage=File1 volume=TestVolume002 -update Volume=TestVolume001 MaxVolBytes=3000000 -run job=NightlySave storage=File1 yes -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore bootstrap=${cwd}/working/restore.bsr where=${cwd}/tmp/bacula-restores select storage=File1 -unmark * -cd ${cwd}/build/src/cats -mark * -ls -done -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File1 -bin/bacula stop 2>&1 >/dev/null -# -# This test is not really reliable. What we want to do is -# to select files on only one Volume, then insure here -# that only one Volume is chosen. -# -grep TestVolume002 working/restore.bsr 2>&1 >/dev/null -bsrstat=$? -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build/src/cats tmp/bacula-restores${cwd}/build/src/cats 2>&1 >/dev/null -if [ $? != 0 -o $bsrstat != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! bsr-opt-test Bacula source failed!!! !!!!! " - echo " !!!!! bsr-opt-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - elif [ $bsrstat != 0 ] ; then - echo " !!!!! Volume selection error !!!!! " - echo " !!!!! Volume selection error !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== bsr-opt-test Bacula source OK ===== " - echo " ===== bsr-opt-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/btape-fill-full-tape b/regress/tests/btape-fill-full-tape deleted file mode 100755 index c61e5ddc3d..0000000000 --- a/regress/tests/btape-fill-full-tape +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -# -# Test the fill command in btape -# -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape - -echo " " -echo " " -echo " === Starting btape fill test at `date +%R:%S` ===" -echo " === Starting btape fill test at `date +%R:%S` ===" >>working/log -echo " " - -bin/btape -c bin/bacula-sd.conf DDS-4 <&1 >tmp/log1.out -fill -s - -quit -END_OF_DATA - - -grep "^The last block on the tape matches\. Test succeeded\." tmp/log1.out 2>&1 >/dev/null -if [ $? != 0 ] ; then - echo " " - echo " " - echo " !!!!! btape fill test failed!!! !!!!! " - echo " !!!!! btape fill test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== btape fill test OK ===== " - echo " ===== btape fill test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/btape-fill-tape b/regress/tests/btape-fill-tape deleted file mode 100755 index c97fd11f2b..0000000000 --- a/regress/tests/btape-fill-tape +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# -# Test the fill command in btape -# -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape - -echo "${cwd}/build" >/tmp/file-list - -cp ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1 -sed "s%# MaximumVolumeSize% MaximumVolumeSize%" ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf - -echo " " -echo " " -echo " === Starting btape fill test at `date +%R:%S` ===" -echo " === Starting btape fill test at `date +%R:%S` ===" >>working/log -echo " " -exit -bin/btape -c bin/bacula-sd.conf DDS-4 <&1 >tmp/log1.out -fill -s - -quit -END_OF_DATA - - -grep "^The last block on the tape matches\. Test succeeded\." tmp/log1.out 2>&1 >/dev/null -if [ $? != 0 ] ; then - echo " " - echo " " - echo " !!!!! btape fill test failed!!! !!!!! " - echo " !!!!! btape fill test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== btape fill test OK ===== " - echo " ===== btape fill test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/compressed-test b/regress/tests/compressed-test deleted file mode 100755 index c373a58785..0000000000 --- a/regress/tests/compressed-test +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the compressed option -# then restore it. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting compressed-test at `date +%R:%S` ===" -echo " === Starting compressed-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -exit -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@tee /dev/null -status all -status all -messages -@tee tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest storage=File yes -wait -messages -@# -@# now do a restore -@# -@tee tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File -unmark * -mark * -done -yes -wait -messages -@tee -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! compressed-test Bacula source failed!!! !!!!! " - echo " !!!!! compressed-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== compressed-test Bacula source OK ===== " - echo " ===== compressed-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/concurrent-jobs-test b/regress/tests/concurrent-jobs-test deleted file mode 100755 index dafddc5880..0000000000 --- a/regress/tests/concurrent-jobs-test +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh -# -# Run two jobs at the same time -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/tmp/largefile" >/tmp/file-list -if test -c /dev/urandom ; then -# Create 56MB file with random data - echo "Creating a 56MB file with random data ..." - dd if=/dev/urandom of=${cwd}/tmp/largefile bs=1024 count=55000 -else - echo "Creating a 56MB file with bacula-dir data ..." - dd if=bin/bacula-dir of=${cwd}/tmp/1 bs=1024 count=1000 - cat ${cwd}/tmp/1 ${cwd}/tmp/1 ${cwd}/tmp/1 ${cwd}/tmp/1 ${cwd}/tmp/1 >${cwd}/tmp/2 - rm -f ${cwd}/tmp/1 - cat ${cwd}/tmp/2 ${cwd}/tmp/2 ${cwd}/tmp/2 ${cwd}/tmp/2 ${cwd}/tmp/2 >>${cwd}/tmp/3 - rm -f ${cwd}/tmp/2 - cat ${cwd}/tmp/3 ${cwd}/tmp/3 ${cwd}/tmp/3 ${cwd}/tmp/3 ${cwd}/tmp/3 >${cwd}/tmp/largefile - rm -f ${cwd}/tmp/3 -fi - -echo "largefile created" - -echo " " -echo " " -echo " === Starting concurrent-jobs-test at `date +%R:%S` ===" -echo " === Starting concurrent-jobs-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null 2>&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest level=Full yes -run job=CompressedTest level=Full yes -run job=CompressedTest level=Full yes -run job=CompressedTest level=Full yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File -unmark * -mark * -done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff tmp/largefile tmp/bacula-restores${cwd}/tmp/largefile 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! concurrent-jobs-test Bacula source failed!!! !!!!! " - echo " !!!!! concurrent-jobs-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== concurrent-jobs-test Bacula source OK ===== " - echo " ===== concurrent-jobs-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/dev-test-root b/regress/tests/dev-test-root deleted file mode 100755 index a03287550f..0000000000 --- a/regress/tests/dev-test-root +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# then restore it. -# -MUID=`/usr/bin/id -u` -if [ $MUID != 0 ] ; then - echo " " - echo "You must be root to run this test." - echo " ===== !!!! dev-test-root not run !!!! ===== " - echo " ===== !!!! dev-test-root not run !!!! ===== " >>test.out - echo " " - exit 1 -fi -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "/dev" >/tmp/file-list - -echo " " -echo " " -echo " === Starting dev-test-root test ===" -echo " " -echo " === Note, this test can fail for trivial ===" -echo " === reasons on non-Linux systems. ===" -echo " " -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -cd / -${cwd}/bin/testls -e ${cwd}/scripts/exclude-etc-test dev >${cwd}/tmp/original -cd ${cwd}/tmp/bacula-restores -${cwd}/bin/testls -e ${cwd}/scripts/exclude-etc-test dev >${cwd}/tmp/restored -cd ${cwd}/tmp -# -# Use sed to cut out parts that *always* change -# -cat >sed.scr <1 -sed -f sed.scr 1 | sort >original -# -mv -f restored 1 -sed -f sed.scr 1 | sort >restored -rm -f sed.scr -# -cd ${cwd} -diff tmp/original tmp/restored 2>&1 1>/dev/null -if [ $? != 0 ] ; then - echo " " - echo " " - echo " ===== !!!! dev-test-root failed !!!! ===== " - echo " ===== !!!! dev-test-root failed !!!! ===== " >>test.out - echo " " -else - echo " ===== dev-test-root OK ===== " - echo " ===== dev-test-root OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/differential-test b/regress/tests/differential-test deleted file mode 100755 index 3182e98cb7..0000000000 --- a/regress/tests/differential-test +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory then create some -# new files, do a differential and restore those two files. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/tmp/build" >/tmp/file-list -mkdir ${cwd}/tmp/build -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -cd ${cwd}/tmp -echo "${cwd}/tmp/build/ficheriro1.txt" >restore-list -echo "${cwd}/tmp/build/ficheriro2.txt" >>restore-list -cd ${cwd} - -echo " " -echo " " -echo " === Starting differential-test at `date +%R:%S` ===" -echo " === Starting differential-test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File volume=TestVolume002 -label storage=File volume=TestVolume001 -run job=CompressedTest yes -wait -messages -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File -echo "ficheriro1.txt" >${cwd}/tmp/build/ficheriro1.txt -echo "ficheriro2.txt" >${cwd}/tmp/build/ficheriro2.txt - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -@# Force differential on the second Volume -update volume=TestVolume002 VolStatus=Used -run level=differential job=CompressedTest yes -wait -messages -@$out -END_OF_DATA - -if test "$debug" -eq 1 ; then - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File -echo "ficheriro2.txt" >${cwd}/tmp/build/ficheriro2.txt - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -run level=incremental job=CompressedTest yes -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores storage=File file=<${cwd}/tmp/restore-list -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -# -# Delete .c files because we will only restore the txt files -# -rm -f tmp/build/*.c -diff -r tmp/build tmp/bacula-restores${cwd}/tmp/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! differential-test Bacula source failed!!! !!!!! " - echo " !!!!! differential-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== differential-test Bacula source OK ===== " - echo " ===== differential-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/eot-fail-tape b/regress/tests/eot-fail-tape deleted file mode 100755 index 049b745c92..0000000000 --- a/regress/tests/eot-fail-tape +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# to two tapes where the maximum tape file size is set to 1M -# -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape - -echo "${cwd}/build" >/tmp/file-list - -out="tmp/sed_tmp" -echo "s%# Maximum File Size% Maximum File Size%g" >${out} -cp -f ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1 -sed -f ${out} ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf - -echo " " -echo " " -echo " === Starting eot-fail-tape test at `date +%R:%S` ===" -echo " === Starting eot-fail-tape test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start -d100 -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@tee /dev/null -messages -@tee tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -update Volume=TestVolume001 MaxVolBytes=3000000 -run job=NightlySave yes -wait -messages -@# -@# now do a restore -@# -@tee tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select all storage=DDS-4 done -yes -wait -messages -@tee -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=DDS-4 - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! eot-fail-tape test Bacula source failed!!! !!!!! " - echo " !!!!! eot-fail-tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== eot-fail-tape test Bacula source OK ===== " - echo " ===== eot-fail-tape test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/etc-test-root b/regress/tests/etc-test-root deleted file mode 100755 index 859745edf3..0000000000 --- a/regress/tests/etc-test-root +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# then restore it. -# -MUID=`/usr/bin/id -u` -if [ $MUID != 0 ] ; then - echo " " - echo "You must be root to run this test." - echo " ===== !!!! etc-test-root not run !!!! ===== " - echo " ===== !!!! etc-test-root not run !!!! ===== " >>test.out - echo " " - exit 1 -fi -echo " " -echo " " -echo " === Starting /etc save/restore test ===" -echo " " -echo " " -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "/etc" >/tmp/file-list - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -cd / -${cwd}/bin/testls -e ${cwd}/scripts/exclude-etc-test etc >${cwd}/tmp/1 -cd ${cwd}/tmp/bacula-restores -${cwd}/bin/testls -e ${cwd}/scripts/exclude-etc-test etc >${cwd}/tmp/2 -sort <${cwd}/tmp/1 >${cwd}/tmp/original -sort <${cwd}/tmp/2 >${cwd}/tmp/restored -rm -f ${cwd}/tmp/1 ${cwd}/tmp/2 -cd ${cwd} -diff tmp/original tmp/restored 2>&1 1>/dev/null -if [ $? != 0 ] ; then - echo " " - echo " " - echo " ===== !!!! etc-test-root failed !!!! ===== " - echo " ===== !!!! etc-test-root failed !!!! ===== " >>test.out - echo " " -else - echo " ===== etc-test-root OK ===== " - echo " ===== etc-test-root OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/fixed-block-size-tape b/regress/tests/fixed-block-size-tape deleted file mode 100755 index 69982162c2..0000000000 --- a/regress/tests/fixed-block-size-tape +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# to a tape where we set the minimum and maximum block -# sizes. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape -echo "${cwd}/build" >/tmp/file-list - -cp ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1 -echo "s%# Maximum Block Size% Maximum Block Size%" >${cwd}/tmp/2 -echo "s%# Minimum Block Size% Minimum Block Size%" >>${cwd}/tmp/2 -sed -f ${cwd}/tmp/2 ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf -if [ $? != 0 ] ; then - echo " " - echo " " - echo "!!!! sed problem in Fixed Block Size test !!!!!" - echo " " - exit 1 -fi -rm -f ${cwd}/tmp/1 ${cwd}/tmp/2 - -echo " " -echo " " -echo " === Starting Fixed Block Size test at `date +%R:%S` ===" -echo " === Starting Fixed Block Size test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -run job=NightlySave yes -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=DDS-4 -unmark * -mark * -done -yes -wait -messages -@$out -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -scripts/check_for_zombie_jobs storage=DDS-4 - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Fixed Block Size test Bacula source failed!!! !!!!! " - echo " !!!!! Fixed Block Size test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== Fixed Block Size test Bacula source OK ===== " - echo " ===== Fixed Block Size test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/four-concurrent-jobs-tape b/regress/tests/four-concurrent-jobs-tape deleted file mode 100755 index 9831c6686f..0000000000 --- a/regress/tests/four-concurrent-jobs-tape +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh -# -# Run two jobs at the same time -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape - -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting four-concurrent-jobs-tape at `date +%R:%S` ===" -echo " === Starting four-concurrent-jobs-tape at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -run job=NightlySave level=Full Storage=DDS-4 yes -run job=NightlySave level=Full Storage=DDS-4 yes -run job=NightlySave level=Full Storage=DDS-4 yes -run job=NightlySave level=Full Storage=DDS-4 yes -@sleep 2 -status dir -@sleep 5 -messages -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=DDS-4 -unmark * -mark * -done -yes -wait -messages -@$out -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! four-concurrent-jobs-tape Bacula source failed!!! !!!!! " - echo " !!!!! four-concurrent-jobs-tape failed!!! !!!!! " >>test.out - echo " " - exit 1 -else - echo " ===== four-concurrent-jobs-tape Bacula source OK ===== " - echo " ===== four-concurrent-jobs-tape OK ===== " >>test.out - scripts/cleanup - exit 0 -fi diff --git a/regress/tests/four-concurrent-jobs-test b/regress/tests/four-concurrent-jobs-test deleted file mode 100755 index 95d1368525..0000000000 --- a/regress/tests/four-concurrent-jobs-test +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -# -# Run two jobs at the same time -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting four-concurrent-jobs-test at `date +%R:%S` ===" -echo " === Starting four-concurrent-jobs-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File1 -TestVolume001 -label storage=File1 -TestVolume002 -update Volume=TestVolume001 MaxVolBytes=100000000 -@#50000000 -@#12 -run job=NightlySave level=Full Storage=File1 -yes -reload -run job=NightlySave level=Full Storage=File1 -yes -reload -run job=NightlySave level=Full Storage=File1 -yes -reload -run job=NightlySave level=Full Storage=File1 -yes -reload -reload -reload -reload -@sleep 2 -status dir -reload -@sleep 5 -messages -reload -reload -wait -reload -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File1 -unmark * -mark * -done -yes -wait -reload -reload -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File1 - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! four-concurrent-jobs-test Bacula source failed!!! !!!!! " - echo " !!!!! four-concurrent-jobs-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " - exit 1 -else - echo " ===== four-concurrent-jobs-test Bacula source OK ===== " - echo " ===== four-concurrent-jobs-test OK ===== " >>test.out -# scripts/cleanup - exit 0 -fi diff --git a/regress/tests/four-jobs-tape b/regress/tests/four-jobs-tape deleted file mode 100755 index 92e2e95765..0000000000 --- a/regress/tests/four-jobs-tape +++ /dev/null @@ -1,175 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the compressed option -# then backup four times, each with incremental then finally restore. -# It should require at least 4 different bsrs. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting four-jobs-tape at `date +%R:%S` ===" -echo " === Starting four-jobs-tape at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -estimate job=NightlySave listing -estimate job=NightlySave listing -estimate job=NightlySave listing -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -run job=NightlySave yes -wait -messages -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -echo "Backup 1 done" -# make some files for the incremental to pick up -touch ${cwd}/build/src/dird/*.c ${cwd}/build/src/dird/*.o -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o - -# -# run a second job -# -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -run job=NightlySave level=Incremental yes -wait -messages -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -echo "Backup 2 done" -touch ${cwd}/build/src/dird/*.c -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o -# -# run a third job -# -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -run job=NightlySave level=Incremental yes -wait -messages -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -echo "Backup 3 done" -# make some files for the incremental to pick up -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o -# -# run a fourth job -# -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -run job=NightlySave level=Incremental yes -wait -messages -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -echo "Backup 4 done" -# -# now do several restores to ensure we cleanup between jobs -# -cat <tmp/bconcmds -@$out /dev/null -restore where=${cwd}/tmp/bacula-restores select all done -yes -wait -restore where=${cwd}/tmp/bacula-restores select all done -yes -wait -@$out tmp/log2.out -@# -@# now unmount the tape and start two restores -@# at the same time -@# -unmount storage=DDS-4 -restore where=${cwd}/tmp/bacula-restores select all done -yes -restore where=${cwd}/tmp/bacula-restores select -unmark * -mark * -done -yes -mount storage=DDS-4 -wait -messages -@$out -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! four-jobs-tape Bacula source failed!!! !!!!! " - echo " !!!!! four-jobs-tape failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== four-jobs-tape Bacula source OK ===== " - echo " ===== four-jobs-tape OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/four-jobs-test b/regress/tests/four-jobs-test deleted file mode 100755 index ec9eb53648..0000000000 --- a/regress/tests/four-jobs-test +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the compressed option -# then backup four times, each with incremental then finally restore. -# It should require at least 4 different bsrs. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting four-jobs-test at `date +%R:%S` ===" -echo " === Starting four-jobs-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -estimate job=CompressedTest listing -estimate job=CompressedTest listing -estimate job=CompressedTest listing -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -echo "Backup 1 done" -# make some files for the incremental to pick up -touch ${cwd}/build/src/dird/*.c ${cwd}/build/src/dird/*.o -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o - -# -# run a second job -# -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run job=CompressedTest -yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -echo "Backup 2 done" -touch ${cwd}/build/src/dird/*.c -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o -# -# run a third job -# -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -echo "Backup 3 done" -# make some files for the incremental to pick up -touch ${cwd}/build/src/lib/*.c ${cwd}/build/src/lib/*.o -# -# run a fourth job -# -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -echo "Backup 4 done" -# -# now do several restores to ensure we cleanup between jobs -# -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -restore where=${cwd}/tmp/bacula-restores select all storage=File done -yes -wait -restore where=${cwd}/tmp/bacula-restores select all storage=File done -yes -wait -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File -unmark * -mark * -done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! four-jobs-test Bacula source failed!!! !!!!! " - echo " !!!!! four-jobs-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== four-jobs-test Bacula source OK ===== " - echo " ===== four-jobs-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/incremental-2tape b/regress/tests/incremental-2tape deleted file mode 100755 index 086f28aa52..0000000000 --- a/regress/tests/incremental-2tape +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory then create some -# new files, do an Incremental and restore those two files. -# -# This script uses the autochanger and two tapes -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi -cwd=`pwd` -bin/bacula stop 2>&1 >/dev/null -cd bin -./drop_bacula_tables >/dev/null 2>&1 -./make_bacula_tables >/dev/null 2>&1 -./grant_bacula_privileges 2>&1 >/dev/null -cd .. - -scripts/copy-2tape-confs -scripts/cleanup-2tape -echo "${cwd}/tmp/build" >/tmp/file-list -if test ! -d ${cwd}/tmp/build ; then - mkdir ${cwd}/tmp/build -fi -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -cd ${cwd}/tmp -echo "${cwd}/tmp/build/ficheriro1.txt" >restore-list -echo "${cwd}/tmp/build/ficheriro2.txt" >>restore-list -cd ${cwd} - -echo " " -echo " " -echo " === Starting incremental-2tape test ===" -echo " === Starting incremental-2tape test ===" >>working/log -echo " " - -# Write out bconsole commands -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=1 Pool=Default drive=0 -label storage=DDS-4 volume=TestVolume002 slot=2 Pool=Default drive=0 -run job=NightlySave yes -wait -messages -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -echo "ficheriro1.txt" >${cwd}/tmp/build/ficheriro1.txt -echo "ficheriro2.txt" >${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -# -# Delete .c files because we will only restored the txt files -# -rm -f tmp/build/*.c -diff -r tmp/build tmp/bacula-restores${cwd}/tmp/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! incremental-2tape test Bacula source failed!!! !!!!! " - echo " !!!!! incremental-2tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== incremental-2tape test Bacula source OK ===== " - echo " ===== incremental-2tape test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/incremental-tape b/regress/tests/incremental-tape deleted file mode 100755 index 4b827d7eb7..0000000000 --- a/regress/tests/incremental-tape +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory then create some -# new files, do an Incremental and restore those two files. -# -cwd=`pwd` - -scripts/copy-tape-confs -scripts/cleanup-tape -echo "${cwd}/tmp/build" >/tmp/file-list -if test ! -d ${cwd}/tmp/build ; then - mkdir ${cwd}/tmp/build -fi -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -cd ${cwd}/tmp -echo "${cwd}/tmp/build/ficheriro1.txt" >restore-list -echo "${cwd}/tmp/build/ficheriro2.txt" >>restore-list -cd ${cwd} - -echo " " -echo " " -echo " === Starting incremental-tape test at `date +%R:%S` ===" -echo " === Starting incremental-tape test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -run job=NightlySave yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=DDS-4 -echo "ficheriro1.txt" >${cwd}/tmp/build/ficheriro1.txt -echo "ficheriro2.txt" >${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run level=Incremental job=NightlySave yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores storage=DDS-4 -7 -<${cwd}/tmp/restore-list - -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=DDS-4 -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -# -# Delete .c files because we will only restored the txt files -# -rm -f tmp/build/*.c -diff -r tmp/build tmp/bacula-restores${cwd}/tmp/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! incremental-tape test Bacula source failed!!! !!!!! " - echo " !!!!! incremental-tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== incremental-tape test Bacula source OK ===== " - echo " ===== incremental-tape test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/incremental-test b/regress/tests/incremental-test deleted file mode 100755 index b7345e95d3..0000000000 --- a/regress/tests/incremental-test +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory then create some -# new files, do an Incremental and restore those two files. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/tmp/build" >/tmp/file-list -mkdir ${cwd}/tmp/build -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -cd ${cwd}/tmp -echo "${cwd}/tmp/build/ficheriro1.txt" >restore-list -echo "${cwd}/tmp/build/ficheriro2.txt" >>restore-list -cd ${cwd} - -echo " " -echo " " -echo " === Starting incremental-test at `date +%R:%S` ===" -echo " === Starting incremental-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -label storage=File volume=TestVolume002 -run job=CompressedTest yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -# -# Now create two new files to be restored later -# -sleep 1 -echo "ficheriro1.txt" >${cwd}/tmp/build/ficheriro1.txt -cp -f ${cwd}/tmp/build/dird.c ${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -@# Force Incremental on the second Volume -update volume=TestVolume001 VolStatus=Used -run level=Differential job=CompressedTest yes -wait -messages -quit -END_OF_DATA -sleep 1 -touch ${cwd}/tmp/build/ficheriro1.txt -touch ${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run level=Incremental job=CompressedTest yes -wait -messages -quit -END_OF_DATA -sleep 1 -cd ${cwd}/tmp/build -cp -f ficheriro2.txt 1 -sed "s%a%b%g" 1 >ficheriro2.txt -rm -f 1 -cd ${cwd} -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run level=Differential job=CompressedTest yes -wait -messages -quit -END_OF_DATA -sleep 1 -touch ${cwd}/tmp/build/ficheriro1.txt -touch ${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run level=Incremental job=CompressedTest yes -wait -messages -quit -END_OF_DATA -sleep 1 -touch ${cwd}/tmp/build/ficheriro1.txt -touch ${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run level=Incremental job=CompressedTest yes -wait -messages -quit -END_OF_DATA -sleep 1 -touch ${cwd}/tmp/build/ficheriro1.txt -touch ${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run level=Incremental job=CompressedTest yes -wait -messages -quit -END_OF_DATA -sleep 1 -touch ${cwd}/tmp/build/ficheriro1.txt -touch ${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run level=Incremental job=CompressedTest yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores storage=File file=<${cwd}/tmp/restore-list -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -# -# Delete .c files because we will only restored the txt files -# -rm -f tmp/build/*.c -diff -r tmp/build tmp/bacula-restores${cwd}/tmp/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! incremental-test Bacula source failed!!! !!!!! " - echo " !!!!! incremental-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== incremental-test Bacula source OK ===== " - echo " ===== incremental-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/lib-tape-root b/regress/tests/lib-tape-root deleted file mode 100755 index 8701602d4e..0000000000 --- a/regress/tests/lib-tape-root +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the /lib directory -# then restore it. -# -cwd=`pwd` -bin/bacula stop 2>&1 >/dev/null -cd bin -./drop_bacula_tables >/dev/null 2>&1 -./make_bacula_tables >/dev/null 2>&1 -./grant_bacula_privileges 2>&1 >/dev/null -cd .. - -scripts/copy-tape-confs -scripts/cleanup-tape -echo "/lib" >/tmp/file-list -echo " " -echo " " -echo " === Starting lib-tape-root test ===" -echo " " -echo " " -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -cd / -${cwd}/bin/testls -e ${cwd}/scripts/exclude-usr-test lib >${cwd}/tmp/original -cd ${cwd}/tmp/bacula-restores -${cwd}/bin/testls -e ${cwd}/scripts/exclude-usr-test lib >${cwd}/tmp/restored -cd ${cwd}/tmp -sed s%.*lib/kbd/consolefonts$%lib/kbd/consolefonts% original >1 -sort <1 >original -# -sed s%.*lib/kbd/consolefonts$%lib/kbd/consolefonts% restored >1 -sort <1 >restored -rm -f 1 -# -cd ${cwd} -diff tmp/original tmp/restored 2>&1 1>/dev/nul -if [ $? != 0 ] ; then - echo " " - echo " " - echo " ===== lib-tape-root failed!!! ===== " - echo " ===== lib-tape-root failed!!! ===== " >>test.out - echo " " -else - echo " ===== lib-tape-root OK ===== " - echo " ===== lib-tape-root OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/lib-test-root b/regress/tests/lib-test-root deleted file mode 100755 index 7efeb34779..0000000000 --- a/regress/tests/lib-test-root +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# then restore it. -# -MUID=`/usr/bin/id -u` -if [ $MUID != 0 ] ; then - echo " " - echo "You must be root to run this test." - echo " ===== !!!! lib-test-root not run !!!! ===== " - echo " ===== !!!! lib-test-root not run !!!! ===== " >>test.out - echo " " - exit 1 -fi -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "/lib" >/tmp/file-list - -echo " " -echo " " -echo " === Starting /lib save/restore test ===" -echo " " -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -cd / -${cwd}/bin/testls -e ${cwd}/scripts/exclude-lib-test lib >${cwd}/tmp/original -cd ${cwd}/tmp/bacula-restores -${cwd}/bin/testls -e ${cwd}/scripts/exclude-lib-test lib >${cwd}/tmp/restored -cd ${cwd}/tmp -sed s%.*lib/kbd/consolefonts$%lib/kbd/consolefonts% original >1 -sort <1 >original -# -sed s%.*lib/kbd/consolefonts$%lib/kbd/consolefonts% restored >1 -sort <1 >restored -rm -f 1 -# -cd ${cwd} -diff tmp/original tmp/restored 2>&1 1>/dev/nul -if [ $? != 0 ] ; then - echo " " - echo " " - echo " ===== !!!! lib-test-root failed !!!! ===== " - echo " ===== !!!! lib-test-root failed !!!! ===== " >>test.out - echo " " -else - echo " ===== lib-test-root OK ===== " - echo " ===== lib-test-root OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/query-test b/regress/tests/query-test deleted file mode 100755 index 20c459e62a..0000000000 --- a/regress/tests/query-test +++ /dev/null @@ -1,130 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory then create some -# new files, do a Decremental then a bunch of query commands -# and finally restore the two files. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/tmp/build" >/tmp/file-list -mkdir ${cwd}/tmp/build -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -cd ${cwd}/tmp -echo "${cwd}/tmp/build/ficheriro1.txt" >restore-list -echo "${cwd}/tmp/build/ficheriro2.txt" >>restore-list -cd ${cwd} - -echo " " -echo " " -echo " === Starting query-test at `date +%R:%S` ===" -echo " === Starting query-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -label storage=File volume=TestVolume002 -run job=CompressedTest yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -echo "ficheriro1.txt" >${cwd}/tmp/build/ficheriro1.txt -echo "ficheriro2.txt" >${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -@# Force decremental on the second Volume -update volume=TestVolume001 VolStatus=Used -run level=decremental job=CompressedTest yes -wait -messages -@output -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -echo "ficheriro2.txt" >${cwd}/tmp/build/ficheriro2.txt -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run level=incremental job=CompressedTest yes -wait -messages -@# -@# Now do the queries -@# -query -1 -query -2 -ficheriro1.txt -query -3 -${cwd}/tmp/build/ -ficheriro1.txt -Client1 -query -7 -TestVolume001 -query -8 -1 -query -9 -Client1 -query -10 -Default -query -11 -query -12 -query -13 -1 -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores storage=File file=<${cwd}/tmp/restore-list -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -# -# Delete .c files because we will only restored the txt files -# -rm -f tmp/build/*.c -diff -r tmp/build tmp/bacula-restores${cwd}/tmp/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! query-test Bacula source failed!!! !!!!! " - echo " !!!!! query-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== query-test Bacula source OK ===== " - echo " ===== query-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/recycle-test b/regress/tests/recycle-test deleted file mode 100755 index fd1c383d84..0000000000 --- a/regress/tests/recycle-test +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory but -# create three volumes and do six backups causing the -# volumes to be recycled, and cycling through the volumes -# twice. Tests maxvoljobs and volretention. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting recycle-test at `date +%R:%S` ===" -echo " === Starting recycle-test at `date +%R:%S` ===" >working/log -echo " " - -#bin/bacula start 2>&1 >/dev/null -bin/bacula start -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -label storage=File1 volume=TestVolume001 -label storage=File1 volume=TestVolume002 -label storage=File1 volume=TestVolume003 -update Volume=TestVolume001 volretention=10s -update Volume=TestVolume001 maxvoljobs=1 -update Volume=TestVolume002 volretention=10s -update Volume=TestVolume002 maxvoljobs=1 -update Volume=TestVolume003 volretention=10s -update Volume=TestVolume003 maxvoljobs=1 -list volumes -run job=NightlySave storage=File1 level=full yes -wait -messages -list volumes -run job=NightlySave storage=File1 level=full yes -wait -messages -list volumes -run job=NightlySave storage=File1 level=full yes -wait -messages -list volumes -@sleep 10 -run job=NightlySave storage=File1 level=full yes -wait -messages -list volumes -run job=NightlySave storage=File1 level=full yes -wait -messages -@output tmp/log1.out -list volumes -run job=NightlySave storage=File1 level=full yes -wait -messages -list volumes -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File1 -unmark * -mark * -done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File1 -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! recycle-test Bacula source failed!!! !!!!! " - echo " !!!!! recycle-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== recycle-test Bacula source OK ===== " - echo " ===== recycle-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/relabel-tape b/regress/tests/relabel-tape deleted file mode 100755 index 295c279065..0000000000 --- a/regress/tests/relabel-tape +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the compressed option -# then backup four times, each with incremental then finally restore. -# It should require at least 4 different bsrs. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting relabel-tape at `date +%R:%S` ===" -echo " === Starting relabel-tape at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -run job=NightlySave level=Full yes -wait -messages -add pool=Default -0 -TestVolume002 -0 -no -update volume=TestVolume001 -1 -4 -. -run job=NightlySave level=Full yes -@sleep 20 -unmount -unmount -purge volume=TestVolume001 -relabel oldvolume=TestVolume001 volume=TestVolume003 slot=0 pool=Default -list volumes -messages -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -echo "Backup done" -# -# now do several restores to ensure we cleanup between jobs -# -cat <tmp/bconcmds -@$out /dev/null -restore where=${cwd}/tmp/bacula-restores select all done -yes -wait -restore where=${cwd}/tmp/bacula-restores select all done -yes -wait -@$out tmp/log2.out -@# -@# now unmount the tape and start two restores -@# at the same time -@# -unmount storage=DDS-4 -restore where=${cwd}/tmp/bacula-restores select all done -yes -restore where=${cwd}/tmp/bacula-restores select -unmark * -mark * -done -yes -mount storage=DDS-4 -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -dstat=$? -if [ $dstat != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! relabel-tape Bacula source failed!!! !!!!! " - echo " !!!!! relabel-tape failed!!! !!!!! " >>test.out - echo "diff=$dstat backup=$bstat restore=$rstat" - echo " " -else - echo " ===== relabel-tape Bacula source OK ===== " - echo " ===== relabel-tape OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/restore-by-file-tape b/regress/tests/restore-by-file-tape deleted file mode 100755 index 647c204e89..0000000000 --- a/regress/tests/restore-by-file-tape +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# to a tape where the maximum tape file size is set to 1M -# then restore a few files from it. Note, by setting the maximum -# file size to 1M, it runs very slow. There are about 64 files that -# are created during each of the two backups. -# -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape -echo "${cwd}/build" >/tmp/file-list -sed s%\^%${cwd}% ${cwd}/scripts/flist >${cwd}/tmp/restore2-list - -cp ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1 -sed "s%# Maximum File Size% Maximum File Size%" ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf - -echo " " -echo " " -echo " === Starting restore-by-file-tape test at `date +%R:%S` ===" -echo " === Starting restore-by-file-tape test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -run job=NightlySave level=Full yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores storage=DDS-4 file=<${cwd}/tmp/restore2-list -yes -wait -messages -@output -quit -END_OF_DATA -dstat=0 -scripts/check_for_zombie_jobs storage=DDS-4 -# -# We need to stop and start Bacula to -# test appending to a previously written tape -# -bin/bacula stop 2>&1 >/dev/null -bin/bacula start 2>&1 >/dev/null -for i in `cat ${cwd}/tmp/restore2-list`; do - diff $i ${cwd}/tmp/bacula-restores$i - if [ $? != 0 ] ; then - dstat=1 - fi -done -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -if [ $dstat != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! restore-by-file-tape test Bacula source failed!!! !!!!! " - echo " !!!!! restore-by-file-tape test failed!!! !!!!! " >>test.out - echo " " - bin/bacula stop 2>&1 >/dev/null - exit 1 -else - echo " First of two restores OK " -fi -rm -rf ${cwd}/tmp/bacula-restores -# -# Now do a second backup and restore -# -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run job=NightlySave level=Full yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores -7 -<${cwd}/tmp/restore2-list - -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=DDS-4 -bin/bacula stop 2>&1 >/dev/null -for i in `cat ${cwd}/tmp/restore2-list`; do - diff $i ${cwd}/tmp/bacula-restores$i - if [ $? != 0 ] ; then - dstat=1 - fi -done -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -if [ $dstat != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! restore-by-file-tape test Bacula source failed!!! !!!!! " - echo " !!!!! restore-by-file-tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== restore-by-file-tape test Bacula source OK ===== " - echo " ===== restore-by-file-tape test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/restore-by-file-test b/regress/tests/restore-by-file-test deleted file mode 100755 index b4a39c963b..0000000000 --- a/regress/tests/restore-by-file-test +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the compressed option -# then restore it. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/tmp/build" >/tmp/file-list -mkdir ${cwd}/tmp/build -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -cd ${cwd}/tmp/build -ls >../1 -cd .. -sed s%\^%${cwd}/tmp/build/% 1 >restore-list -rm -f 1 -cd ${cwd} - -echo " " -echo " " -echo " === Starting restore-by-file-test at `date +%R:%S` ===" -echo " === Starting restore-by-file-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores storage=File -7 -<${cwd}/tmp/restore-list - -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r tmp/build tmp/bacula-restores${cwd}/tmp/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! restore-by-file-test Bacula source failed!!! !!!!! " - echo " !!!!! restore-by-file-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== restore-by-file-test Bacula source OK ===== " - echo " ===== restore-by-file-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/restore-disk-seek-test b/regress/tests/restore-disk-seek-test deleted file mode 100755 index 9dd157abc2..0000000000 --- a/regress/tests/restore-disk-seek-test +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/sh -# -# Run a backup of the full bacula build directory, but with the -# Maximum File Size set. Then do a restore of a few files to kick in -# disk seeking (not yet enabled), and ensure that the restored files -# match. Even though disk seeking is not yet enabled, this is a good test, -# and once it is enabled, this will test it. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/tmp/build" >/tmp/file-list -rm -rf ${cwd}/tmp/build -mkdir ${cwd}/tmp/build -# Copy only the .c files (to be restored) -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -cd ${cwd}/tmp/build -ls >../1 -cd .. -sed s%\^%${cwd}/tmp/build/% 1 >restore-list -# At this point restore-list contains the list -# of files we will restore -rm -f 1 -cd ${cwd} -# Now backup *everything* -rm -rf ${cwd}/tmp/build -mkdir ${cwd}/tmp/build -cp -fp ${cwd}/build/src/dird/* ${cwd}/tmp/build -# Enable MaximumFileSize -cp ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1 -sed "s%# Maximum File Size% Maximum File Size%" ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf - -echo " " -echo " " -echo " === Starting restore-disk-seek-test at `date +%R:%S` ===" -echo " === Starting restore-disk-seek-test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest yes -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -sql -select * from JobMedia; - -restore bootstrap=${cwd}/tmp/kern.bsr where=${cwd}/tmp/bacula-restores storage=File -7 -<${cwd}/tmp/restore-list - -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -# Now setup a control directory of only what we *should* restore -rm -rf ${cwd}/tmp/build -mkdir ${cwd}/tmp/build -cp -p ${cwd}/build/src/dird/*.c ${cwd}/tmp/build -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r tmp/build tmp/bacula-restores${cwd}/tmp/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! restore-disk-seek-test Bacula source failed!!! !!!!! " - echo " !!!!! restore-disk-seek-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== restore-disk-seek-test Bacula source OK ===== " - echo " ===== restore-disk-seek-test OK ===== " >>test.out -# scripts/cleanup -# rm -rf ${cwd}/tmp/build -fi diff --git a/regress/tests/restore2-by-file-test b/regress/tests/restore2-by-file-test deleted file mode 100755 index cfbf2cbc83..0000000000 --- a/regress/tests/restore2-by-file-test +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the compressed option -# then restore a few selected files. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list -sed s%\^%${cwd}% ${cwd}/scripts/flist >${cwd}/tmp/restore2-list - -echo " " -echo " " -echo " === Starting restore2-by-file-test at `date +%R:%S` ===" -echo " === Starting restore2-by-file-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores storage=File file=<${cwd}/tmp/restore2-list -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -dstat=0 -for i in `cat ${cwd}/tmp/restore2-list`; do - diff $i ${cwd}/tmp/bacula-restores$i - if [ $? != 0 ] ; then - dstat=1 - fi -done -if [ $dstat != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! restore2-by-file-test Bacula source failed!!! !!!!! " - echo " !!!!! restore2-by-file-test failed!!! !!!!! " >>test.out - echo " " - echo "Backup term status = $bstat" - echo "Restore term status = $rstat" - echo "Diff status = $dstat" - echo " " -else - echo " ===== restore2-by-file-test Bacula source OK ===== " - echo " ===== restore2-by-file-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/six-vol-test b/regress/tests/six-vol-test deleted file mode 100755 index bdf6f846dc..0000000000 --- a/regress/tests/six-vol-test +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/sh -# -# Create a 60MB file with random bytes. Back it up to 6 Volumes -# each constrained to 10MB using the automatic labeling feature. -# - -if test ! -c /dev/urandom ; then - echo "No random device. Test skipped.\n" - exit 0 -fi -cwd=`pwd` -scripts/copy-testa-confs -scripts/cleanup -echo "${cwd}/tmp/largefile" >/tmp/file-list -# Create 56MB file with random data -echo "Creating a 56MB file with random data ..." -dd if=/dev/urandom of=${cwd}/tmp/largefile bs=1024 count=55000 -echo "largefile created" - -echo " " -echo " " -echo " === Starting six-vol-test at `date +%R:%S` ===" -echo " === Starting six-vol-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run job=MultiVol storage=File yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File -unmark * -mark * -done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff tmp/largefile tmp/bacula-restores${cwd}/tmp/largefile 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! six-vol-test Bacula source failed!!! !!!!! " - echo " !!!!! six-vol-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== six-vol-test Bacula source OK ===== " - echo " ===== six-vol-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/small-file-size-tape b/regress/tests/small-file-size-tape deleted file mode 100755 index 4f8b0115d5..0000000000 --- a/regress/tests/small-file-size-tape +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# to a tape where the maximum tape file size is set to 1M -# -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape - -echo "${cwd}/build" >/tmp/file-list -cp ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1 -sed "s%# Maximum File Size% Maximum File Size%" ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf - -echo " " -echo " " -echo " === Starting Small File Size test at `date +%R:%S` ===" -echo " === Starting Small File Size test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -setdebug level=2 storage=DDS-4 -run job=NightlySave yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=DDS-4 -unmark * -mark * -done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=DDS-4 -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Small File Size test Bacula source failed!!! !!!!! " - echo " !!!!! Small File Size test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== Small File Size test Bacula source OK ===== " - echo " ===== Small File Size test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/span-vol-test b/regress/tests/span-vol-test deleted file mode 100755 index dd9f08d9fd..0000000000 --- a/regress/tests/span-vol-test +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory but -# split the archive into four volumes, two of which are -# totally full. I.e. make sure that bsr selects all tapes -# including those fully spanned. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting span-vol-test at `date +%R:%S` ===" -echo " === Starting span-vol-test at `date +%R:%S` ===" >working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File1 volume=TestVolume004 -label storage=File1 volume=TestVolume003 -label storage=File1 volume=TestVolume002 -label storage=File1 volume=TestVolume001 -update Volume=TestVolume004 MaxVolBytes=3000000 -update Volume=TestVolume003 MaxVolBytes=3000000 -update Volume=TestVolume002 MaxVolBytes=3000000 -run job=NightlySave storage=File1 yes -wait -list volumes -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File1 -unmark * -mark * -done -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File1 -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! span-vol-test Bacula source failed!!! !!!!! " - echo " !!!!! span-vol-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== span-vol-test Bacula source OK ===== " - echo " ===== span-vol-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/sparse-compressed-test b/regress/tests/sparse-compressed-test deleted file mode 100755 index dde29ece61..0000000000 --- a/regress/tests/sparse-compressed-test +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the Sparse option -# then restore it. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list -bin/bacula stop 2>&1 >/dev/null - -echo " " -echo " " -echo " === Starting sparse-compressed-test at `date +%R:%S` ===" -echo " === Starting sparse-compressed-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=SparseCompressedTest yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select all storage=File done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! sparse-compressed-test Bacula source failed!!! !!!!! " - echo " !!!!! sparse-compressed-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== sparse-compressed-test Bacula source OK ===== " - echo " ===== sparse-compressed-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/sparse-test b/regress/tests/sparse-test deleted file mode 100755 index 0e01188d6c..0000000000 --- a/regress/tests/sparse-test +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the Sparse option -# then restore it. -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting sparse-test at `date +%R:%S` ===" -echo " === Starting sparse-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=SparseTest yes -wait -messages -@# -@# now do a restore -@# -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File -unmark * -mark * -done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! sparse-test Bacula source failed!!! !!!!! " - echo " !!!!! sparse-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== sparse-test Bacula source OK ===== " - echo " ===== sparse-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/test0 b/regress/tests/test0 deleted file mode 100755 index 0d0edd0b85..0000000000 --- a/regress/tests/test0 +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo " " >test.out -rm -f bin/working/* diff --git a/regress/tests/truncate-bug-tape b/regress/tests/truncate-bug-tape deleted file mode 100755 index 040540d2ad..0000000000 --- a/regress/tests/truncate-bug-tape +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/sh -# -# Test for a tape truncation bug. -# -cwd=`pwd` - -scripts/copy-tape-confs -scripts/cleanup-tape -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting truncate-bug-tape test at `date +%R:%S` ===" -echo " === Starting truncate-bug-tape test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default -@# do a bunch of saves so we have 12 files on the tape -run job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -run level=Full job=NightlySave yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=DDS-4 -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -@# -@# now do a restore -@# -restore where=${cwd}/tmp/bacula-restores storage=DDS-4 -3 -@# select JobId=4 (i.e. file five on the tape) -4 -cd ${cwd}/build -@# mark a single file -mark configure -done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=DDS-4 -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log2.out -run level=Full job=NightlySave yes -wait -messages -quit -END_OF_DATA -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Backup OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! truncate-bug-tape test Bacula source failed!!! !!!!! " - echo " !!!!! truncate-bug-tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== truncate-bug-tape test Bacula source OK ===== " - echo " ===== truncate-bug-tape test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/two-jobs-test b/regress/tests/two-jobs-test deleted file mode 100755 index 8768362464..0000000000 --- a/regress/tests/two-jobs-test +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory using the compressed option -# then backup a second time and finally restore it -# -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting two-jobs-test at `date +%R:%S` ===" -echo " === Starting two-jobs-test at `date +%R:%S` ===" >>working/log -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -setdebug level=15 storage=File -@output /dev/null -messages -@output /dev/null -estimate job=CompressedTest listing -estimate job=CompressedTest listing -estimate job=CompressedTest listing -messages -@output tmp/log1.out -label storage=File volume=TestVolume001 -run job=CompressedTest yes -wait -messages -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -echo "Backup 1 done" -touch ${cwd}/build/src/dird/*.c -# -# run a second job -# -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -@output /dev/null -messages -@output tmp/log1.out -run job=CompressedTest -yes -wait -messages -@# -@# now do several restores to ensure we cleanup between jobs -@# -@output /dev/null -restore where=${cwd}/tmp/bacula-restores select all storage=File done -yes -wait -restore where=${cwd}/tmp/bacula-restores select all storage=File done -yes -wait -@output tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File -unmark * -mark * -done -yes -wait -messages -@output -quit -END_OF_DATA -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! two-jobs-test Bacula source failed!!! !!!!! " - echo " !!!!! two-jobs-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== two-jobs-test Bacula source OK ===== " - echo " ===== two-jobs-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/two-pool-tape b/regress/tests/two-pool-tape deleted file mode 100755 index e84cbecd57..0000000000 --- a/regress/tests/two-pool-tape +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/sh -# -# This is Arno's test. It uses two pools, two tapes, and -# an autochanger. Note, the Director has three Pools in its -# conf: Default, Full, and Inc. Default is used in the -# NightlySave job by default. What is backed up is what -# is in /tmp/file-list, which is by default the Bacula -# source code (i.e. the build directory). -# -debug=1 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi -cwd=`pwd` -scripts/cleanup -scripts/copy-2tape-confs -scripts/prepare-two-tapes - -# Make a relatively large backup set 50 x source code directory -echo "${cwd}/build" >/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list -echo "${cwd}/build" >>/tmp/file-list - -echo " " -echo " " -echo " === Starting Two Pool Tape test at `date +%R:%S` ===" -echo " === Starting Two Pool Tape test at `date +%R:%S` ===" >>working/log -echo " " -# Write out bconsole commands to a file -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=1 pool=Full drive=0 -label storage=DDS-4 volume=TestVolume002 slot=2 pool=Default drive=0 -run job=NightlySave level=Full pool=Default yes -@# wait between starting jobs -@sleep 60 -@#setdebug level=100 storage=DDS-4 -run job=NightlySave level=Full pool=Full yes -@sleep 10 -messages -@sleep 10 -messages -@sleep 10 -status storage=DDS-4 -messages -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select all storage=DDS-4 done -yes -wait -messages -@$out -quit -END_OF_DATA - -# start Bacula and run bconsole commands -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -# Make sure no jobs are still running (debug check) -scripts/check_for_zombie_jobs storage=DDS-4 - -# stop Bacula -bin/bacula stop 2>&1 >/dev/null -# Check if backup done correctly -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Two Pool Tape test Bacula source failed!!! !!!!! " - echo " !!!!! Two Pool Tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== Two Pool Tape test Bacula source OK ===== " - echo " ===== Two Pool Tape test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/two-vol-test b/regress/tests/two-vol-test deleted file mode 100755 index 876b8fa011..0000000000 --- a/regress/tests/two-vol-test +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory but -# split the archive into two volumes -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting two-vol-test at `date +%R:%S` ===" -echo " === Starting two-vol-test at `date +%R:%S` ===" >working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File1 volume=TestVolume002 -label storage=File1 volume=TestVolume001 -update Volume=TestVolume002 MaxVolBytes=3000000 -run job=NightlySave storage=File1 yes -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select all storage=File1 done -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=File1 -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! two-vol-test Bacula source failed!!! !!!!! " - echo " !!!!! two-vol-test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== two-vol-test Bacula source OK ===== " - echo " ===== two-vol-test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/two-volume-tape b/regress/tests/two-volume-tape deleted file mode 100755 index fc7d9fa15a..0000000000 --- a/regress/tests/two-volume-tape +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# to two tapes where the maximum tape file size is set to 1M -# Note, this test simulates the tape filling and writing to -# the next tape. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi -cwd=`pwd` -scripts/cleanup -scripts/copy-2tape-confs -scripts/prepare-two-tapes - -echo "${cwd}/build" >/tmp/file-list - -outf="tmp/sed_tmp" -echo "s%# Maximum File Size% Maximum File Size%g" >${outf} -cp ${cwd}/bin/bacula-sd.conf ${cwd}/tmp/1 -sed -f ${outf} ${cwd}/tmp/1 >${cwd}/bin/bacula-sd.conf - -echo " " -echo " " -echo " === Starting Two Volume Tape test at `date +%R:%S` ===" -echo " === Starting Two Volume Tape test at `date +%R:%S` ===" >>working/log -echo " " -# Write out bconsole commands -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=1 pool=Default drive=0 -label storage=DDS-4 volume=TestVolume002 slot=2 pool=Default drive=0 -update Volume=TestVolume001 MaxVolBytes=3000000 pool=Default drive=0 -@#setdebug level=1000 client -run job=NightlySave yes -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select all storage=DDS-4 done -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -scripts/check_for_zombie_jobs storage=DDS-4 - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff -r build tmp/bacula-restores${cwd}/build 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Two Volume Tape test Bacula source failed!!! !!!!! " - echo " !!!!! Two Volume Tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== Two Volume Tape test Bacula source OK ===== " - echo " ===== Two Volume Tape test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/tests/usr-tape-root b/regress/tests/usr-tape-root deleted file mode 100755 index 0f5002d928..0000000000 --- a/regress/tests/usr-tape-root +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the /usr directory -# then restore it. -# -cwd=`pwd` -scripts/copy-tape-confs -scripts/cleanup-tape -echo "/usr" >/tmp/file-list - -echo " " -echo " " -echo " === Starting usr-tape-root test ===" -echo " " -echo " " - -bin/bacula start 2>&1 >/dev/null -bin/bconsole -c bin/bconsole.conf <&1 >/dev/null -cd / -${cwd}/bin/testls -e ${cwd}/scripts/exclude-usr-test lib >${cwd}/tmp/original -cd ${cwd}/tmp/bacula-restores -${cwd}/bin/testls -e ${cwd}/scripts/exclude-usr-test lib >${cwd}/tmp/restored -cd ${cwd}/tmp -sed s%.*lib/kbd/consolefonts$%lib/kbd/consolefonts% original >1 -sort <1 >original -# -sed s%.*lib/kbd/consolefonts$%lib/kbd/consolefonts% restored >1 -sort <1 >restored -rm -f 1 -# -cd ${cwd} -diff tmp/original tmp/restored 2>&1 1>/dev/nul -if [ $? != 0 ] ; then - echo " " - echo " " - echo " ===== !!!! usr-tape-root failed !!!! ===== " - echo " ===== !!!! usr-tape-root failed !!!! ===== " >>test.out - echo " " -else - echo " ===== usr-tape-root OK ===== " - echo " ===== usr-tape-root OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/verify-vol-test b/regress/tests/verify-vol-test deleted file mode 100755 index 2df75d62f8..0000000000 --- a/regress/tests/verify-vol-test +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# then verify the catalog. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting verify Volume Test at `date +%R:%S` ===" -echo " === Starting verify Volume Test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -setdebug level=1 storage=File sd -label storage=File volume=TestVolume001 -run job=NightlySave yes -wait -messages -@# -@# now do a verify volume -@# -@$out ${cwd}/tmp/original -run job=VerifyVolume -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -sleep 2 -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Verify OK" ${cwd}/tmp/original 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Verify Volume failed!!! !!!!! " - echo " !!!!! Verify Volume failed!!! !!!!! " >>test.out - if [ $bstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== Verify Volume Test OK ===== " - echo " ===== Verify Volume Test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/weird-files-test b/regress/tests/weird-files-test deleted file mode 100755 index c8d10aea70..0000000000 --- a/regress/tests/weird-files-test +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# then restore it. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi -if test ! -d weird-files ; then - echo " " - echo "Weird files not configured. Test not run." - exit 0 -fi -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -# -# Note, we save the weird-files directory twice on purpose -# because this causes problems with hard linked files -# that are only saved once. In 1.33, Bacula now deals -# with this situation. -# -echo "${cwd}/weird-files" >/tmp/file-list -echo "${cwd}/weird-files" >>/tmp/file-list - -echo " " -echo " " -echo " === Starting weird filenames test at `date +%R:%S` ===" -echo " === Starting weird filenames test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File -TestVolume001 -run job=NightlySave -yes -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=${cwd}/tmp/bacula-restores select storage=File -unmark * -mark * -done -yes -wait -messages -@$out -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -${cwd}/bin/testls weird-files | sort >${cwd}/tmp/original -cd tmp/bacula-restores${cwd} -${cwd}/bin/testls weird-files | sort >${cwd}/tmp/restored -cd ${cwd} -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff ${cwd}/tmp/original ${cwd}/tmp/restored 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Weird files test failed!!! !!!!! " - echo " !!!!! Weird files test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== Weird files test OK ===== " - echo " ===== Weird files test OK ===== " >>test.out - cd ${cwd} - scripts/cleanup -fi diff --git a/regress/tests/weird-files2-test b/regress/tests/weird-files2-test deleted file mode 100755 index fe5a50c972..0000000000 --- a/regress/tests/weird-files2-test +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# then restore it. -# -debug=0 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -if test ! -d weird-files ; then - echo " " - echo "weird files not configured. Test not run." - exit 0 -fi -cwd=`pwd` -scripts/copy-test-confs -scripts/cleanup -rm -rf weird-files2 -cp -Rp weird-files weird-files2 -echo "${cwd}/weird-files2" >/tmp/file-list - -echo " " -echo " " -echo " === Starting weird-files2 test at `date +%R:%S` ===" -echo " === Starting weird-file2 test at `date +%R:%S` ===" >>working/log -echo " " - -bin/testls weird-files2 >${cwd}/tmp/original - -cat <tmp/bconcmds -@$out /dev/null -messages -@$out tmp/log1.out -label storage=File volume=TestVolume001 -run job=NightlySave yes -wait -messages -@$out -quit -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -scripts/check_for_zombie_jobs storage=File -# -# Now mess up the a hard link, and a soft link -# -cd weird-files2 -rm -f hard-file2 -ln hard-file3 hard-file2 -rm -f soft-file2 -ln -s soft-file3 soft-file2 -cd ${cwd} -cat <tmp/bconcmds -@$out /dev/null -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where= storage=File -5 -unmark * -mark * -done -yes -wait -messages -@$out -quit -END_OF_DATA - -if test "$debug" -eq 1 ; then - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi -scripts/check_for_zombie_jobs storage=File -bin/bacula stop 2>&1 >/dev/null -bin/testls weird-files2 >${cwd}/tmp/restored -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -diff ${cwd}/tmp/original ${cwd}/tmp/restored 2>&1 >/dev/null -if [ $? != 0 -o $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Weird files2 test failed!!! !!!!! " - echo " !!!!! Weird files2 test failed!!! !!!!! " >>test.out - if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " !!!!! Bad Job termination status !!!!! " - echo " !!!!! Bad Job termination status !!!!! " >>test.out - else - echo " !!!!! Restored files differ !!!!! " - echo " !!!!! Restored files differ !!!!! " >>test.out - fi - echo " " -else - echo " ===== Weird files2 test OK ===== " - echo " ===== Weird files2 test OK ===== " >>test.out - cd ${cwd} - scripts/cleanup - rm -rf weird-files2 -fi diff --git a/regress/tests/win32-backup-tape b/regress/tests/win32-backup-tape deleted file mode 100755 index f51252e8b0..0000000000 --- a/regress/tests/win32-backup-tape +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# to a tape then restore it, we do that twice to ensure that -# we can correctly append to a tape. -# -debug=1 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-win32-confs -scripts/cleanup-tape - -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting Win32 Backup tape test at `date +%R:%S` ===" -echo " === Starting Win32 Backup tape test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@output /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default drive=0 -run job=NightlySave yes -@sleep 10 -status storage=DDS-4 -@sleep 30 -messages -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=c:/tmp/bacula-restores select all storage=DDS-4 done -yes -wait -messages -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Win32 Backup tape test failed!!! !!!!! " - echo " !!!!! Win32 Backup tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== Win32 Backup tape test OK ===== " - echo " ===== Win32 Backup tape test OK ===== " >>test.out - scripts/cleanup -fi diff --git a/regress/tests/win32-to-linux-tape b/regress/tests/win32-to-linux-tape deleted file mode 100755 index 7cced61b81..0000000000 --- a/regress/tests/win32-to-linux-tape +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/sh -# -# Run a simple backup of the Bacula build directory -# to a tape then restore it, we do that twice to ensure that -# we can correctly append to a tape. -# -debug=1 -if test "$debug" -eq 1 ; then - out="tee" -else - out="output" -fi - -cwd=`pwd` -scripts/copy-win32-confs -scripts/cleanup-tape - -echo "${cwd}/build" >/tmp/file-list - -echo " " -echo " " -echo " === Starting Win32 Backup tape test at `date +%R:%S` ===" -echo " === Starting Win32 Backup tape test at `date +%R:%S` ===" >>working/log -echo " " - -cat <tmp/bconcmds -@output /dev/null -messages -@$out tmp/log1.out -label storage=DDS-4 volume=TestVolume001 slot=0 pool=Default drive=0 -run job=NightlySave yes -@sleep 10 -status storage=DDS-4 -@sleep 30 -messages -wait -messages -@# -@# now do a restore -@# -@$out tmp/log2.out -restore where=c:/tmp/bacula-restores client=Tibs select all storage=DDS-4 done -yes -wait -messages -END_OF_DATA -if test "$debug" -eq 1 ; then - bin/bacula start - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf -else - bin/bacula start 2>&1 >/dev/null - cat tmp/bconcmds | bin/bconsole -c bin/bconsole.conf 2>&1 >/dev/null -fi - -scripts/check_for_zombie_jobs storage=DDS-4 - -bin/bacula stop 2>&1 >/dev/null -grep "^ Termination: *Backup OK" tmp/log1.out 2>&1 >/dev/null -bstat=$? -grep "^ Termination: *Restore OK" tmp/log2.out 2>&1 >/dev/null -rstat=$? -if [ $bstat != 0 -o $rstat != 0 ] ; then - echo " " - echo " " - echo " !!!!! Win32 Backup tape test failed!!! !!!!! " - echo " !!!!! Win32 Backup tape test failed!!! !!!!! " >>test.out - echo " " -else - echo " ===== Win32 Backup tape test OK ===== " - echo " ===== Win32 Backup tape test OK ===== " >>test.out -# scripts/cleanup -fi diff --git a/regress/weird-files.tar.gz b/regress/weird-files.tar.gz deleted file mode 100644 index f84d1c0a6de310a1caa2fa48237b2eeda3be9bb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1699 zcmaLW`#;nB0|#&xaSo5KOA@EcB)(FM$g$G+Y;<;#xh%zswd0(_p@`08-xMFWFLiP) z>^NKDtbc)2M4ebxF9kpMqbohpgPyp~w@}o0sLIZwfHn1=^xOUT-#6_h zPGjg>e)-~y?iXwBcYS<`tBcV7N9q8FHLJjD%}(oE@@=xN@3&koDWrXD8T#7u$j*r( zS@AcX-Z8islPmSR-rd9Hc9~6&P7{z}&2&9PRS=L~oMWNJtoK;@FZk29jEZml+2eL( z&>KE&on>xok~sdd{NA=J-&mY;{9c1I-3=9a9vaaWc!^4805k6c9ue1X@3(ISFL8{T zW=->`D;GeP!0}B9u;&dR2j6FXD+8uhbgN?jLhllFBIe;D4hF4tLugJH% z{~BrJnIPG0JQ#f-G&4MqNw>(XeacCm?lYu?DqsdY8Ou7@*qOkIBgLWOw{%oYM;*#q zj29pshY2WaiQm2gH*U$l{sf6gW2ym1>-@XBW&dSgT?CkN`x$hihS32=mW6rbFPESJ zn3sAchR8&$&HkE(nJ-V2CmPA&S>SIweAN0p0z)VpfyozQkw72gfHYJZMxa!!4*e@i zw`+MkCcGMAyX4)zy6K$W9Bg_C5%0QjQW|*f>KMx{9~?{2B#A5(d*>T;5!S-E9Z!0Z zK%odC2Rh&mJj!mYc)!|^Vq5{RX$``=5ztnPd#&4gU6*1@37HbGv2hZPEA4!Q{3;az z%SpH^LhEcO12a+as6%fLW%AM7g|v|cKt~yQU|%O)6X-(;2yX@}Z(*aCG1WDB;Pr<~ zjdo8}y060vdx2i&DmDXAL0>liRKXq1=|uRlVnDwfx6jfI3+%Z;QlQ*rv-WvE0zPgW zw~xx+h^CZTBXxPMk~6@*h-x>-49W*Va$ryy0CR7xGR2u+P4#uDu!IbikW}*mTu4B6 zgiQC5fDNGzb_snx+ay!77onp;G_YBZ0eoFMAMbp2XWq*PKJxaksBts+;hJ=rkwh)? zA;R&9QocqDJn1|^0SA%D1D2E>9Ni4yBbx!iH~pCpXoUFY+Eo*eOg1Uzn(YA}I%|sjt9f zMmkE`ISDr47nMmFV-=%H1!-sK`X&GD?Bpg_VnM|5woT98nDfQU(1v;-ZqCv|hLalj zqQYPm7`^=yD8!`(7)cLELYt<9XF$Q{TS2mk`{$8m; z#ljnJGh6>3epu?=UqSS2ljewQ_yTDUSJTl zChgC~fIZ_s#inw^rTp_wPN)FEx}$={aT}D?XDh@S#w+0sUWtQsTsu0O|qYN3$^VeT~Nd+d6$sXyZ2U1ddU{vznEGS5lDk*l~iZ zf;d7D%><_rJQr-t%8|e|sJTtZdg<)unZ#UNIgPvn`6CQO1d}l8oVFqC`D5e_h~u4Q l*!&Z$EKh`rk97O1{J8qr8l>}oGQStB^T*zNtW%+*^AD9Qop}HN -- 2.39.2