]> git.sur5r.net Git - bacula/bacula/commitdiff
This commit was manufactured by cvs2svn to create tag Release-1.38.2
author(no author) <(no author)@91ce42f0-d328-0410-95d8-f526ca767f89>
Tue, 22 Nov 2005 11:08:20 +0000 (11:08 +0000)
committer(no author) <(no author)@91ce42f0-d328-0410-95d8-f526ca767f89>
Tue, 22 Nov 2005 11:08:20 +0000 (11:08 +0000)
'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

144 files changed:
bacula/.cvsignore
bacula/ChangeLog
bacula/ReleaseNotes
bacula/autoconf/aclocal.m4
bacula/autoconf/configure.in
bacula/configure
bacula/kes-1.37 [new file with mode: 0644]
bacula/kes-1.38
bacula/kes-1.39 [deleted file]
bacula/nb-1.37 [new file with mode: 0644]
bacula/nb-1.38 [deleted file]
bacula/patches/1.38.1-to-1.38.2.patch
bacula/src/.cvsignore
bacula/src/cats/update_sqlite_tables.in
bacula/src/console/.cvsignore
bacula/src/dird/msgchan.c
bacula/src/dird/ua_cmds.c
bacula/src/filed/restore.c
bacula/src/findlib/bfile.c
bacula/src/findlib/bfile.h
bacula/src/findlib/find.h
bacula/src/gnome2-console/.cvsignore
bacula/src/lib/Makefile.in
bacula/src/lib/bsnprintf.c [deleted file]
bacula/src/lib/bsys.c
bacula/src/lib/signal.c
bacula/src/stored/askdir.c
bacula/src/stored/bextract.c
bacula/src/stored/dev.c
bacula/src/stored/match_bsr.c
bacula/src/version.h
bacula/src/win32/README.vc8
regress/.cvsignore [deleted file]
regress/Makefile.in [deleted file]
regress/README [deleted file]
regress/all-non-root-2tape-tests [deleted file]
regress/all-non-root-tape-tests [deleted file]
regress/all-non-root-tests [deleted file]
regress/all-root-tests [deleted file]
regress/all-tape-and-file-tests [deleted file]
regress/all-tests [deleted file]
regress/config [deleted file]
regress/do_all [deleted file]
regress/do_all_tapes [deleted file]
regress/do_file [deleted file]
regress/endtime [deleted file]
regress/file [deleted file]
regress/freebsd.conf [deleted file]
regress/kern.conf [deleted file]
regress/misc-tests [deleted file]
regress/prototype.conf [deleted file]
regress/run [deleted file]
regress/scripts/.cvsignore [deleted file]
regress/scripts/bacula-dir-tape.conf.in [deleted file]
regress/scripts/bacula-sd-2drive.conf.in [deleted file]
regress/scripts/bacula-sd-2tape.conf.in [deleted file]
regress/scripts/bacula-sd-tape.conf.in [deleted file]
regress/scripts/bacula-sd.conf.in [deleted file]
regress/scripts/check_for_zombie_jobs [deleted file]
regress/scripts/cleanup [deleted file]
regress/scripts/cleanup-2drive.in [deleted file]
regress/scripts/cleanup-2tape.in [deleted file]
regress/scripts/cleanup-tape.in [deleted file]
regress/scripts/copy-2drive-confs [deleted file]
regress/scripts/copy-2tape-confs [deleted file]
regress/scripts/copy-confs [deleted file]
regress/scripts/copy-tape-confs [deleted file]
regress/scripts/copy-test-confs [deleted file]
regress/scripts/copy-testa-confs [deleted file]
regress/scripts/copy-win32-confs [deleted file]
regress/scripts/do_sed [deleted file]
regress/scripts/exclude-dev-test [deleted file]
regress/scripts/exclude-etc-test [deleted file]
regress/scripts/exclude-lib-test [deleted file]
regress/scripts/flist [deleted file]
regress/scripts/freebsd_tape_options [deleted file]
regress/scripts/linux_osst_tape_options [deleted file]
regress/scripts/linux_tape_options [deleted file]
regress/scripts/new-test-bacula-dir.conf.in [deleted file]
regress/scripts/prepare-two-tapes.in [deleted file]
regress/scripts/regress-config [deleted file]
regress/scripts/setup [deleted file]
regress/scripts/test-bacula-dir.conf.in [deleted file]
regress/scripts/test-bacula-fd.conf.in [deleted file]
regress/scripts/test-bacula-sd.conf.in [deleted file]
regress/scripts/test-console.conf.in [deleted file]
regress/scripts/testa-bacula-dir.conf.in [deleted file]
regress/scripts/win32-bacula-dir-tape.conf.in [deleted file]
regress/scripts/win32-bacula-fd.conf [deleted file]
regress/scripts/win32-bacula-sd-tape.conf [deleted file]
regress/starttime [deleted file]
regress/tape [deleted file]
regress/tests/.cvsignore [deleted file]
regress/tests/2drive-incremental-2tape [deleted file]
regress/tests/auto-label-test [deleted file]
regress/tests/backup-bacula-tape [deleted file]
regress/tests/backup-bacula-test [deleted file]
regress/tests/bextract-test [deleted file]
regress/tests/bscan-tape [deleted file]
regress/tests/bscan-test [deleted file]
regress/tests/bsr-opt-test [deleted file]
regress/tests/btape-fill-full-tape [deleted file]
regress/tests/btape-fill-tape [deleted file]
regress/tests/compressed-test [deleted file]
regress/tests/concurrent-jobs-test [deleted file]
regress/tests/dev-test-root [deleted file]
regress/tests/differential-test [deleted file]
regress/tests/eot-fail-tape [deleted file]
regress/tests/etc-test-root [deleted file]
regress/tests/fixed-block-size-tape [deleted file]
regress/tests/four-concurrent-jobs-tape [deleted file]
regress/tests/four-concurrent-jobs-test [deleted file]
regress/tests/four-jobs-tape [deleted file]
regress/tests/four-jobs-test [deleted file]
regress/tests/incremental-2tape [deleted file]
regress/tests/incremental-tape [deleted file]
regress/tests/incremental-test [deleted file]
regress/tests/lib-tape-root [deleted file]
regress/tests/lib-test-root [deleted file]
regress/tests/query-test [deleted file]
regress/tests/recycle-test [deleted file]
regress/tests/relabel-tape [deleted file]
regress/tests/restore-by-file-tape [deleted file]
regress/tests/restore-by-file-test [deleted file]
regress/tests/restore-disk-seek-test [deleted file]
regress/tests/restore2-by-file-test [deleted file]
regress/tests/six-vol-test [deleted file]
regress/tests/small-file-size-tape [deleted file]
regress/tests/span-vol-test [deleted file]
regress/tests/sparse-compressed-test [deleted file]
regress/tests/sparse-test [deleted file]
regress/tests/test0 [deleted file]
regress/tests/truncate-bug-tape [deleted file]
regress/tests/two-jobs-test [deleted file]
regress/tests/two-pool-tape [deleted file]
regress/tests/two-vol-test [deleted file]
regress/tests/two-volume-tape [deleted file]
regress/tests/usr-tape-root [deleted file]
regress/tests/verify-vol-test [deleted file]
regress/tests/weird-files-test [deleted file]
regress/tests/weird-files2-test [deleted file]
regress/tests/win32-backup-tape [deleted file]
regress/tests/win32-to-linux-tape [deleted file]
regress/weird-files.tar.gz [deleted file]

index d447ee6f7a233afb6517ad5d788f481382fcdb2d..9d9a15180d23a11671cf2839029f67772fb25c99 100644 (file)
@@ -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
index edd6b404bd1d55ce82c36d1b91dd188c7a32afbc..b74ee95511e23da314fc748b6b332fa81d55e1dc 100644 (file)
@@ -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.                  
index d0efbc54d12433035329da9c9c7cb1927c200358..363546204e67eec96d3a4fee1f05930a02a7b4d9 100644 (file)
@@ -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).
index 94de0926c608479b5bd429b1e77b0e64933b7e06..8458af0159a43748f08fbf794a2805fc0756f9f9 100644 (file)
@@ -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.
index 44c232f29e7a219c8b546eac054a42301d2e79af..1844cb79fe6254857e236b14a9fa98d0d94ceab8 100644 (file)
@@ -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"
index a19250e0d583f5137991ad4a8f690c23c62a30c7..48c8e5a5bfab9d4d7046d78cb78f70bfbc482af7 100755 (executable)
@@ -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 (file)
index 0000000..6a7697f
--- /dev/null
@@ -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 <ghen@telenet.be>
+- 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" <tboyda@daou.com>
+- 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 <peter@ifm.liu.se> 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
+  <A.Ford@ford-mason.co.uk>
+- 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 <sleemburg@jvc.nl> for
+  improper scanning of schedule resource:
+  Run = Level=Full Pool=Catalog daily at 1:20
+- Apply patch from Chris Lee <labmonkey42@gmail.com> 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 <kreios@gmail.com> 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 <freebsd@paped.com>
+- Apply Unicode fixes for Win32 from "Thorsten Engel" 
+  <thorsten.engel@matrix-computer.com>
+- 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 <olivier.mehani@linbox.com>
+- 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 <hson@ludd.luth.se>
+  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 <calle@calle.in-berlin.de>
+  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 <peppe@wielders.org>'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 <peppe@wielders.org>
+  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 <peppe@wielders.org>
+  alist fix patch.
+- Remove duplicate code from chksum.h (mentioned by Preben).
+13Dec04
+- Integrate Tim Oberfoell <oberfoell@web.de> patch to ACLs
+  to handle both the "standard" and "default" ACLs.
+12Dec04
+- Integrated Preben 'Peppe' Guldberg <peppe@wielders.org>
+  three cleanup patches (btest, verify, find).
+- Integrated Preben 'Peppe' Guldberg <peppe@wielders.org>
+  three cleanup patches (backup, chksum, and verify)
+09Dec04
+- Integrated Preben 'Peppe' Guldberg <peppe@wielders.org>
+  patch to avoid doing MTIOCGET on OSes that do not support
+  it such as OpenBSD.
+- Integrated Preben 'Peppe' Guldberg <peppe@wielders.org>
+  patch to add filesystem type matching to FileSets in the
+  Options resource.
+- Integrated Preben 'Peppe' Guldberg <peppe@wielders.org>
+  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 <peppe@wielders.org>
+  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 <jamieff@inline.net>
+  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 <dbosso@lsit.ucsb.edu>
+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.
index ead3818bdae7c1f9c250c087c4d348b7429a0dd7..f3491fef9accc72733955d55d5e5cffff67aa12e 100644 (file)
@@ -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 (file)
index e04221e..0000000
+++ /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 (file)
index 0000000..b9bcce6
--- /dev/null
@@ -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 (file)
index b12fa90..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-              Technical notes on version 1.38  
-                      Nicolas Boichat
-
-General:
-
-Release 1.38.0: 31 October 2005
index 3c8e9b6485b36ddf28d1a7e61dd8e38f76049261..a75062c69dc9381b46e2718a0942c347b6aa49da 100644 (file)
@@ -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 <al at its-lehmann dot de>
++  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 <peter at ifm.liu dot se>
++   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 <joshua dot kugler at uaf dot edu>
++          Marek Bajon <mbajon at bimsplus dot com dot pl>
++  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 <bacula-1.38.1-source>
++   ./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 <al at its-lehmann dot de>
+++  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 <peter at ifm.liu dot se>
+++   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 <joshua dot kugler at uaf dot edu>
+++          Marek Bajon <mbajon at bimsplus dot com dot pl>
+++  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 <bacula-1.38.1-source>
+++   ./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 <al at its-lehmann dot de>
++++  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 <peter at ifm.liu dot se>
++++   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 <joshua dot kugler at uaf dot edu>
++++          Marek Bajon <mbajon at bimsplus dot com dot pl>
++++  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 <bacula-1.38.1-source>
++++   ./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 <al at its-lehmann dot de>
+++++  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 <peter at ifm.liu dot se>
+++++   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 <joshua dot kugler at uaf dot edu>
+++++          Marek Bajon <mbajon at bimsplus dot com dot pl>
+++++  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 <bacula-1.38.1-source>
+++++   ./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 <al at its-lehmann dot de>
++++++  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 <peter at ifm.liu dot se>
++++++   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 <joshua dot kugler at uaf dot edu>
++++++          Marek Bajon <mbajon at bimsplus dot com dot pl>
++++++  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 <bacula-1.38.1-source>
++++++   ./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 <al at its-lehmann dot de>
+++++++  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 <peter at ifm.liu dot se>
+++++++   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 <joshua dot kugler at uaf dot edu>
+++++++          Marek Bajon <mbajon at bimsplus dot com dot pl>
+++++++  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 <bacula-1.38.1-source>
+++++++   ./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 <al at its-lehmann dot de>
++++++++  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 <peter at ifm.liu dot se>
++++++++   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 <joshua dot kugler at uaf dot edu>
++++++++          Marek Bajon <mbajon at bimsplus dot com dot pl>
++++++++  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 <bacula-1.38.1-source>
++++++++   ./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
index 07944ff029180030c6dcc82e78c68170a4081733..463e48169ea2f63ef07126327b955f3af717cc27 100644 (file)
@@ -7,4 +7,3 @@ testprogs
 host.h
 perlgui
 python
-pyqt
index 37be54689a249a16d939eeccc6f783000e4a1e8d..d0d9e743d3221c1b5b250b1d284b507efd7ea6e1 100755 (executable)
@@ -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"
index d2b54c74a8226e1ca3a9b46b9804e82eaae93095..3a7ec3075f107b26b47423ea3bacb8dd6bb654ff 100644 (file)
@@ -8,4 +8,3 @@ bconsole
 bconsole.conf
 startit
 stopit
-static-bconsole
index fbe9d5e13607daf8986b990705a610f6a75dc3e7..9da9150771622c76305603fcbdca15b57bf555cd 100644 (file)
@@ -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);
index 734943bb497642b17415d9f9c9dcf4ea4784f41d..127f5a52994ba524dec6ee665f0b0e774ade2e14 100644 (file)
@@ -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",
index f218a6a7e1b0c8da28ade955cd4d36ef9cdbce94..e2686298d22fcd9035ef25fa837ccabf02337dd2 100644 (file)
@@ -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));
index 61cd8dc79792920d6e174bd5933a5f239d8faf19..cf76737a7a8dbb5fe619a80f7ca6966f7bbd4572 100644 (file)
    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;
 }
 
index dc724fa7d431e27e94b32d9295c4b99cc54cd2e1..a38e53c1c1d2463c1ece075b1b4130ae2811d6cc 100644 (file)
@@ -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 */
index cb1e44e002fcf81740240158630ce711619ab33c..798fa25940dec7dc39ba153e6bd41d2a25c444fc 100755 (executable)
@@ -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;
index d1324549a1bb704da3096cd1c26df559e09c9073..37844ba1f1a9792667fc0c3333f01d77fc2fd8e8 100644 (file)
@@ -6,4 +6,3 @@ gnome-console.conf
 2
 3
 main.c
-static-gnome-console
index 862ebf8d809273da56aacd95f14c04377b833af9..018628ccc2698565e5421e70ecfe2e6aaf26cedf 100644 (file)
@@ -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 (file)
index bd6c2a1..0000000
+++ /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 = "<NULL>";
-   }
-
-   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 */
index 67c163242b42e007efc8d36f1ed75ba3477afae4..d41d971077e1f040925d71b410f20390a9e6ea76 100644 (file)
@@ -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
 
index 3b06e2f08a31df3ff507968dce583740605f1d00..f9be096f4ded48f00b25b897ab66a83b9c6e29c3 100644 (file)
@@ -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");
index b9f4340b6c500c3d73482b19a4007c4d4ac019f3..08176ce3a9d992acc26b4b2ce011e88389e41b6e 100644 (file)
@@ -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;
 }
 
index 92fcbd761857fb362f1bfd10e9a39de87215a712..a882a883d39df5b77e881cb73473da5e8afcbc01 100644 (file)
@@ -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));
index 7dc108cab7eb336bd7a42e8a4716c489d8b34879..b01c6703832aa9026432f799a4c7e6b40f39ad93 100644 (file)
@@ -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 */
index b4aa6831c30ba403f32a1762c7fe46d1dccd9640..122d3228240fec99e6cc639d6e7c7700bf0127a9 100755 (executable)
@@ -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;
 }
index c308c8273e62e4f6c93b43f2908411d89ac9375a..1449e2409e5a9ef4f60f74e8a4eae5311ace2ffb 100644 (file)
@@ -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 */
 
index 9ed93221e94c4a2378e8f2da2b75f005fd5de435..1164e45b47402ffd642b5200927498b73d3dcb7b 100644 (file)
@@ -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:
      <dev dir>/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 <dev dir>\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 <dev dir>/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 (file)
index 16455a9..0000000
+++ /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 (file)
index d5d82a5..0000000
+++ /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 <user's configuration>
-# 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 (file)
index 5c121b2..0000000
+++ /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 (executable)
index 5201731..0000000
+++ /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 (executable)
index 5a64aad..0000000
+++ /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 (executable)
index be1bf01..0000000
+++ /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 (executable)
index 3f077bb..0000000
+++ /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 (executable)
index 9235dc9..0000000
+++ /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 (executable)
index b1b2b35..0000000
+++ /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 (executable)
index 4bc4f52..0000000
+++ /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 (executable)
index ba1ad3f..0000000
+++ /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 (executable)
index dd07d2e..0000000
+++ /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 (executable)
index 5fe0a82..0000000
+++ /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 (executable)
index faf419f..0000000
+++ /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 (executable)
index 8f20890..0000000
+++ /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 (file)
index 3d41bd0..0000000
+++ /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 (file)
index b50b77d..0000000
+++ /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 (file)
index dd2734c..0000000
+++ /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 (file)
index 28f5d3e..0000000
+++ /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 (executable)
index d48e262..0000000
+++ /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 (file)
index 1b72890..0000000
+++ /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 (file)
index 0c05d19..0000000
+++ /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 =  </tmp/file-list
-  }
-}
-
-
-#
-# When to do the backups, full backup on first sunday of the month,
-#  differential (i.e. incremental since full) every other sunday,
-#  and incremental backups other days
-Schedule {
-  Name = "WeeklyCycle"
-  Run = Full 1st sun at 1:05
-  Run = Differential 2nd-5th sun at 1:05
-  Run = Incremental mon-sat at 1:05
-}
-
-# Client (File Services) to backup
-Client {
-  Name = @hostname@-fd
-  Address = @hostname@
-  FDPort = 8102
-  Catalog = MyCatalog
-  Password = "xevrjURYoCHhn26RaJoWbeWXEY/a3VqGKp/37tgWiuHc"          # password for FileDaemon
-  File Retention = 30d                # 30 days
-  Job Retention = 180d                # six months
-  AutoPrune = yes                     # Prune expired Jobs/Files
-  Maximum Concurrent Jobs = 4
-}
-
-# Definition of DDS tape storage device
-Storage {
-  Name = DDS-4
-  Address = @hostname@                # N.B. Use a fully qualified name here
-  SDPort = 8103
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"          # password for Storage daemon
-  Device = DDS-4                      # must be same as Device in Storage daemon
-  Media Type = DDS-4                  # must be same as MediaType in Storage daemon
-  Maximum Concurrent Jobs = 4
-# Autochanger = yes
-}
-
-
-# Generic catalog service
-Catalog {
-  Name = MyCatalog
-  dbname = bacula; user = bacula; password = ""
-}
-
-# Reasonable message delivery -- send most everything to email address
-#  and to the console
-Messages {
-  Name = Standard
-  mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
-  operatorcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: Intervention needed for %j\" %r"
-  MailOnError = @job_email@ = all, !terminate
-  operator = @job_email@ = mount
-  console = all, !skipped, !terminate, !restored
-#
-# WARNING! the following will create a file that you must cycle from
-#          time to time as it will grow indefinitely. However, it will
-#          also keep all your messages if the scroll off the console.
-#
-  append = "@working_dir@/log" = all, !skipped
-}
-
-#
-# Message delivery for daemon messages (no job).
-Messages {
-  Name = Daemon
-  mailcommand = "@sbindir@/bsmtp -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula daemon message\" %r"
-  mail = @job_email@ = all, !skipped            
-  console = all, !skipped, !saved
-  append = "@working_dir@/log" = all, !skipped
-}
-
-    
-# Default pool definition
-Pool {
-  Name = Default
-  Pool Type = Backup
-  Recycle = yes                       # Bacula can automatically recycle Volumes
-  AutoPrune = yes                     # Prune expired volumes
-  Volume Retention = 365d             # one year
-  Accept Any Volume = yes             # write on any volume in the pool
-}
-
-Pool {
-  Name = Full
-  Pool Type = Backup
-  Recycle = yes                       # Bacula can automatically recycle Volumes
-  AutoPrune = yes                     # Prune expired volumes
-  Volume Retention = 365d             # one year
-  Accept Any Volume = yes             # write on any volume in the pool
-}
-
-Pool {
-  Name = Inc
-  Pool Type = Backup
-  Recycle = yes                       # Bacula can automatically recycle Volumes
-  AutoPrune = yes                     # Prune expired volumes
-  Volume Retention = 365d             # one year
-  Accept Any Volume = yes             # write on any volume in the pool
-}
diff --git a/regress/scripts/bacula-sd-2drive.conf.in b/regress/scripts/bacula-sd-2drive.conf.in
deleted file mode 100644 (file)
index cf3d543..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# Default Bacula Storage Daemon Configuration file
-#
-#  For Bacula release 1.33
-#
-# You may need to change the name of your tape drive
-#   on the "Archive Device" directive in the Device
-#   resource.  If you change the Name and/or the 
-#   "Media Type" in the Device resource, please ensure
-#   that dird.conf has corresponding changes.
-#
-
-Storage {                             # definition of myself
-  Name = @hostname@-sd
-  SDPort = 8103                  # Director's port      
-  WorkingDirectory = "@working_dir@"
-  Pid Directory = "@piddir@"
-  Subsys Directory = "@subsysdir@"
-}
-
-#
-# List Directors who are permitted to contact Storage daemon
-#
-Director {
-  Name = @hostname@-dir
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-}
-
-#
-# Devices supported by this Storage daemon
-# To connect, the Director's bacula-dir.conf must have the
-#  same Name and MediaType. 
-#
-Autochanger {
-  Name = DDS-4
-  Changer Device = @autochanger@
-  Changer Command ="@scriptdir@/mtx-changer %c %o %S %a %d"
-  Device = Drive-0, Drive-1
-}
-
-Device {
-  Name = Drive-0
-  Media Type = DDS-4
-  Archive Device = @tape_drive@
-  AutomaticMount = yes;               # when device opened, read it
-  Autochanger = yes
-  Drive Index = 0
-  AlwaysOpen = yes;
-  RemovableMedia = yes;
-  @@sbindir@/tape_options
-# Maximum File Size = 1000000
-}
-
-Device {
-  Name = Drive-1
-  Media Type = DDS-4
-  Archive Device = @tape_drive1@
-  AutomaticMount = yes;               # when device opened, read it
-  Autochanger = yes
-  Drive Index = 1
-  AlwaysOpen = yes;
-  RemovableMedia = yes;
-  @@sbindir@/tape_options
-# Maximum File Size = 1000000
-}
-
-
-# 
-# Send all messages to the Director, 
-# mount messages also are sent to the email address
-#
-Messages {
-  Name = Standard
-  director = @hostname@-dir = all, !terminate
-}
diff --git a/regress/scripts/bacula-sd-2tape.conf.in b/regress/scripts/bacula-sd-2tape.conf.in
deleted file mode 100644 (file)
index 84e4c91..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Default Bacula Storage Daemon Configuration file
-#
-#  For Bacula release 1.33
-#
-# You may need to change the name of your tape drive
-#   on the "Archive Device" directive in the Device
-#   resource.  If you change the Name and/or the 
-#   "Media Type" in the Device resource, please ensure
-#   that dird.conf has corresponding changes.
-#
-
-Storage {                             # definition of myself
-  Name = @hostname@-sd
-  SDPort = 8103                  # Director's port      
-  WorkingDirectory = "@working_dir@"
-  Pid Directory = "@piddir@"
-  Subsys Directory = "@subsysdir@"
-}
-
-#
-# List Directors who are permitted to contact Storage daemon
-#
-Director {
-  Name = @hostname@-dir
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-}
-
-#
-# Devices supported by this Storage daemon
-# To connect, the Director's bacula-dir.conf must have the
-#  same Name and MediaType. 
-#
-Autochanger {
-  Name = DDS-4
-  Changer Device = @autochanger@
-  Changer Command ="@scriptdir@/mtx-changer %c %o %S %a %d"
-  Device = Drive-0
-}
-
-Device {
-  Name = Drive-0                   # 
-  Media Type = DDS-4
-  Archive Device = @tape_drive@
-  AutomaticMount = yes;               # when device opened, read it
-  Autochanger = yes
-  Drive Index = 0
-  AlwaysOpen = yes;
-  RemovableMedia = yes;
-  @@sbindir@/tape_options
-# Maximum File Size = 1000000
-}
-
-# 
-# Send all messages to the Director, 
-# mount messages also are sent to the email address
-#
-Messages {
-  Name = Standard
-  director = @hostname@-dir = all, !terminate
-}
diff --git a/regress/scripts/bacula-sd-tape.conf.in b/regress/scripts/bacula-sd-tape.conf.in
deleted file mode 100644 (file)
index 62023f2..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Default Bacula Storage Daemon Configuration file
-#
-#  For Bacula release 1.33
-#
-# You may need to change the name of your tape drive
-#   on the "Archive Device" directive in the Device
-#   resource.  If you change the Name and/or the 
-#   "Media Type" in the Device resource, please ensure
-#   that dird.conf has corresponding changes.
-#
-
-Storage {                             # definition of myself
-  Name = @hostname@-sd
-  SDPort = 8103                  # Director's port      
-  WorkingDirectory = "@working_dir@"
-  Pid Directory = "@piddir@"
-  Subsys Directory = "@subsysdir@"
-}
-
-#
-# List Directors who are permitted to contact Storage daemon
-#
-Director {
-  Name = @hostname@-dir
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-}
-
-#
-# Devices supported by this Storage daemon
-# To connect, the Director's bacula-dir.conf must have the
-#  same Name and MediaType. 
-#
-
-Device {
-  Name = DDS-4                     # 
-  Media Type = DDS-4
-  Archive Device = @tape_drive@
-  AutomaticMount = yes;               # when device opened, read it
-  AlwaysOpen = yes;
-  RemovableMedia = yes;
-  @@sbindir@/tape_options
-# Maximum File Size = 1000000
-# MaximumVolumeSize = 100M
-}
-
-# 
-# Send all messages to the Director, 
-# mount messages also are sent to the email address
-#
-Messages {
-  Name = Standard
-  director = @hostname@-dir = all, !terminate
-}
diff --git a/regress/scripts/bacula-sd.conf.in b/regress/scripts/bacula-sd.conf.in
deleted file mode 100644 (file)
index c035ea9..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# Default Bacula Storage Daemon Configuration file
-#
-#  For Bacula release 1.33
-#
-# You may need to change the name of your tape drive
-#   on the "Archive Device" directive in the Device
-#   resource.  If you change the Name and/or the 
-#   "Media Type" in the Device resource, please ensure
-#   that dird.conf has corresponding changes.
-#
-
-Storage {                             # definition of myself
-  Name = rufus-sd
-  SDPort = 8103                  # Director's port      
-  WorkingDirectory = "/home/kern/bacula/regress/working"
-  Pid Directory = "/home/kern/bacula/regress/working"
-}
-
-#
-# List Directors who are permitted to contact Storage daemon
-#
-Director {
-  Name = rufus-dir
-  Password = "BzlEl8haeFmnv/Lv8V6zDzUBgFFQNsUtny6VkmccQpOy"
-}
-
-#
-# Devices supported by this Storage daemon
-# To connect, the Director's bacula-dir.conf must have the
-#  same Name and MediaType. 
-#
-
-Device {
-  Name = FileStorage
-  Media Type = File
-  Archive Device = @tmpdir@
-  LabelMedia = yes;                   # lets Bacula label unlabeled media
-  Random Access = Yes;
-  AutomaticMount = yes;               # when device opened, read it
-  RemovableMedia = no;
-  AlwaysOpen = no;
-}
-
-#Device {
-#  Name = DDS-4                        # 
-#  Media Type = DDS-4
-#  Archive Device = /dev/nst0
-#  AutomaticMount = yes;               # when device opened, read it
-#  AlwaysOpen = yes;
-#  RemovableMedia = yes;
-#}
-
-#
-# A very old Exabyte with no end of media detection
-#
-#Device {
-#  Name = "Exabyte 8mm"
-#  Media Type = "8mm"
-#  Archive Device = /dev/nst0
-#  Hardware end of medium = No;
-#  AutomaticMount = yes;               # when device opened, read it
-#  AlwaysOpen = Yes;
-#  RemovableMedia = yes;
-#}
-
-# 
-# Send all messages to the Director, 
-# mount messages also are sent to the email address
-#
-Messages {
-  Name = Standard
-  director = rufus-dir = all, !terminate
-}
diff --git a/regress/scripts/check_for_zombie_jobs b/regress/scripts/check_for_zombie_jobs
deleted file mode 100755 (executable)
index 1542f0f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-#
-# Check for zombie jobs (not terminated).
-# Also scan logs for ERROR messages
-#
-bin/bconsole -c bin/bconsole.conf <<END_OF_DATA 2>&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 (executable)
index bca32b3..0000000
+++ /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 (executable)
index 32b27c0..0000000
+++ /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 (executable)
index 0f33ec9..0000000
+++ /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 (executable)
index 98ed537..0000000
+++ /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 (executable)
index 1f5c347..0000000
+++ /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 (executable)
index 587e5ff..0000000
+++ /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 (executable)
index d1e6cc1..0000000
+++ /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 (executable)
index 588dddc..0000000
+++ /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 (executable)
index 61b120f..0000000
+++ /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 (executable)
index 6b5f30c..0000000
+++ /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 (executable)
index fa698a3..0000000
+++ /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 (executable)
index 3315e38..0000000
+++ /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 (file)
index 4165ea1..0000000
+++ /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 (file)
index f59ca8d..0000000
+++ /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 (file)
index 5be32f4..0000000
+++ /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 (file)
index 019eb57..0000000
+++ /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 (file)
index 05be344..0000000
+++ /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 (file)
index 5def0c0..0000000
+++ /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 (file)
index 601eb82..0000000
+++ /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 (file)
index a91b7c4..0000000
+++ /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 =  </tmp/file-list
-  }
-}
-
-FileSet {
-  Name = "SparseSet"
-  Include {
-    Options {
-      signature=MD5 sparse=yes
-    }
-    File = </tmp/file-list
-  }
-}
-
-FileSet {
-  Name = "CompressedSet"
-  Include {
-    Options {
-      signature=MD5 compression=GZIP 
-    }
-    File = </tmp/file-list
-  }
-}
-
-FileSet {
-  Name = "SparseCompressedSet"
-  Include {
-    Options {
-      signature=MD5 compression=GZIP
-    }
-    File = </tmp/file-list
-  }
-}
-
-
-
-#
-# When to do the backups, full backup on first sunday of the month,
-#  differential (i.e. incremental since full) every other sunday,
-#  and incremental backups other days
-Schedule {
-  Name = "WeeklyCycle"
-  Run = Full 1st sun at 1:05
-  Run = Differential 2nd-5th sun at 1:05
-  Run = Incremental mon-sat at 1:05
-}
-
-# This schedule does the catalog. It starts after the WeeklyCycle
-Schedule {
-  Name = "WeeklyCycleAfterBackup"
-  Run = Full sun-sat at 1:10
-}
-
-# This is the backup of the catalog
-FileSet {
-  Name = "Catalog"
-  Include {
-    Options {
-      signature=MD5
-    }
-    File = /home/kern/bacula/regress/bin/working/bacula.sql
-  }
-}
-
-# Client (File Services) to backup
-Client {
-  Name = @hostname@-fd
-  Address = @hostname@
-  FDPort = 8102
-  Catalog = MyCatalog
-  Password = "xevrjURYoCHhn26RaJoWbeWXEY/a3VqGKp/37tgWiuHc"          # password for FileDaemon
-  File Retention = 30d                # 30 days
-  Job Retention = 180d                # six months
-  AutoPrune = yes                     # Prune expired Jobs/Files
-  Maximum Concurrent Jobs = 4
-}
-
-# Definiton of file storage device
-Storage {
-  Name = File
-  Address = @hostname@                # N.B. Use a fully qualified name here
-  SDPort = 8103
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-  Device = FileStorage
-  Media Type = File
-  Maximum Concurrent Jobs = 4
-}
-
-Storage {
-  Name = File1
-  Address = @hostname@                # N.B. Use a fully qualified name here
-  SDPort = 8103
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-  Device = FileStorage1
-  Media Type = File1
-  Maximum Concurrent Jobs = 4
-}
-
-
-# Definition of DLT tape storage device
-#Storage {
-#  Name = DLTDrive
-#  Address = @hostname@                # N.B. Use a fully qualified name here
-#  SDPort = 8103
-#  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"          # password for Storage daemon
-#  Device = "HP DLT 80"                # must be same as Device in Storage daemon
-#  Media Type = DLT8000                # must be same as MediaType in Storage daemon
-#}
-
-# Definition of DDS tape storage device
-#Storage {
-#  Name = SDT-10000
-#  Address = @hostname@                # N.B. Use a fully qualified name here
-#  SDPort = 8103
-#  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"          # password for Storage daemon
-#  Device = SDT-10000                  # must be same as Device in Storage daemon
-#  Media Type = DDS-4                  # must be same as MediaType in Storage daemon
-#}
-
-# Definition of 8mm tape storage device
-#Storage {
-#  Name = "8mmDrive"
-#  Address = @hostname@                # N.B. Use a fully qualified name here
-#  SDPort = 8103
-#  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-#  Device = "Exabyte 8mm"
-#  MediaType = "8mm"
-#}
-
-
-# Generic catalog service
-Catalog {
-  Name = MyCatalog
-  dbname = bacula; user = bacula; password = ""
-}
-
-# Reasonable message delivery -- send most everything to email address
-#  and to the console
-Messages {
-  Name = Standard
-  mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
-  operatorcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: Intervention needed for %j\" %r"
-  MailOnError = @job_email@ = all
-  operator = @job_email@ = mount
-  console = all, !skipped, !terminate, !restored
-#
-# WARNING! the following will create a file that you must cycle from
-#          time to time as it will grow indefinitely. However, it will
-#          also keep all your messages if the scroll off the console.
-#
-  append = "@working_dir@/log" = all, !skipped
-}
-
-Messages {
-  Name = NoEmail
-  mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
-  console = all, !skipped, !terminate
-#
-# WARNING! the following will create a file that you must cycle from
-#          time to time as it will grow indefinitely. However, it will
-#          also keep all your messages if the scroll off the console.
-#
-  append = "@working_dir@/log" = all, !skipped
-}
-
-    
-# Default pool definition
-Pool {
-  Name = Default
-  Pool Type = Backup
-  Recycle = yes                       # Bacula can automatically recycle Volumes
-  AutoPrune = yes                     # Prune expired volumes
-  Volume Retention = 365d             # one year
-  Accept Any Volume = yes             # write on any volume in the pool
-# Label Format = "TEST-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}:${NumVols}"
-}
diff --git a/regress/scripts/prepare-two-tapes.in b/regress/scripts/prepare-two-tapes.in
deleted file mode 100755 (executable)
index f31c0ab..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-#
-# Create two blank tapes
-#
-@changer_path@ -f @autochanger@ unload
-@changer_path@ -f @autochanger@ load 1
-mt -f @tape_drive@ rewind
-mt -f @tape_drive@ weof
-@changer_path@ -f @autochanger@ unload
-@changer_path@ -f @autochanger@ load 2
-mt -f @tape_drive@ rewind
-mt -f @tape_drive@ weof
-#@changer_path@ -f @autochanger@ unload
diff --git a/regress/scripts/regress-config b/regress/scripts/regress-config
deleted file mode 100755 (executable)
index 2fa59ff..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-#
-# This is the configuration script for regression testing
-#
-
-CFLAGS="-g -O2 -Wall" \
- ./configure \
-    --sbindir=$1/bin \
-    --sysconfdir=$1/bin \
-    --mandir=$1/bin \
-    --with-pid-dir=$1/working \
-    --with-subsys-dir=$1/working \
-    --enable-smartalloc \
-    --disable-readline \
-    --with-working-dir=$1/working \
-    --with-dump-email=$2 \
-    --with-job-email=$2 \
-    --with-smtp-host=$5 \
-    $3 \
-    --with-baseport=8101 \
-    $4
-
-exit 0
diff --git a/regress/scripts/setup b/regress/scripts/setup
deleted file mode 100755 (executable)
index 7da3782..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# Script to setup running Bacula regression tests
-#
-cwd=`pwd`
-if [ $# != 5 ] ; then
-   echo "Incorrect number of arguments. Got $#. Need:"
-   echo "setup bacula-src email-address --with-DBNAME --with-tcp-wrappers"
-   echo " "
-   exit 1
-fi
-if [ ! -d $1 ] ; then
-   echo "Arg 1 must be a Bacula release directory."
-   echo " "
-   exit 1
-fi
-rm -rf build bin
-# Copy new source
-echo "Copying source from $1"
-cp -rp $1 build
-cp scripts/regress-config build
-cd build
-rm -f Makefile config.cache
-# Run Bacula configuration, make, install
-./regress-config ${cwd} $2 $3 $4 $5
-make
-make install
-cp src/tools/testls ../bin
-
-cd ..
-bin/bacula stop
-cd bin
-./create_bacula_database bacula
-./drop_bacula_tables bacula
-./make_bacula_tables bacula
-./grant_bacula_privileges bacula
-cd ..
-# Start and stop Bacula to ensure conf files are OK
-bin/bacula start
-bin/bacula stop
-#
-# Save Bacula default conf files for later use
-#
-cp -f bin/*.conf scripts
diff --git a/regress/scripts/test-bacula-dir.conf.in b/regress/scripts/test-bacula-dir.conf.in
deleted file mode 100644 (file)
index 9752660..0000000
+++ /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 = 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 = 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 = </tmp/file-list
-  }
-}
-
-FileSet {
-  Name = "SparseSet"
-  Include { Options { signature=MD5; sparse=yes }
-    File=</tmp/file-list
-  }
-}
-
-FileSet {
-  Name = "CompressedSet"
-  Include {
-    Options { signature=MD5; compression=GZIP }
-    File =</tmp/file-list
-  }
-}
-
-FileSet {
-  Name = "SparseCompressedSet"
-  Include {
-    Options {
-      signature=MD5; compression=GZIP
-    }
-    File= </tmp/file-list
-  }
-}
-
-
-
-#
-# When to do the backups, full backup on first sunday of the month,
-#  differential (i.e. incremental since full) every other sunday,
-#  and incremental backups other days
-Schedule {
-  Name = "WeeklyCycle"
-  Run = Full 1st sun at 1:05
-  Run = Differential 2nd-5th sun at 1:05
-  Run = Incremental mon-sat at 1:05
-}
-
-# This schedule does the catalog. It starts after the WeeklyCycle
-Schedule {
-  Name = "WeeklyCycleAfterBackup"
-  Run = Full sun-sat at 1:10
-}
-
-# This is the backup of the catalog
-FileSet {
-  Name = "Catalog"
-  Include { Options { signature=MD5 }
-     File=/home/kern/bacula/regress/bin/working/bacula.sql
-  }
-}
-
-# Client (File Services) to backup
-Client {
-  Name = @hostname@-fd
-  Address = @hostname@
-  FDPort = 8102
-  Catalog = MyCatalog
-  Password = "xevrjURYoCHhn26RaJoWbeWXEY/a3VqGKp/37tgWiuHc"          # password for FileDaemon
-  File Retention = 30d                # 30 days
-  Job Retention = 180d                # six months
-  AutoPrune = yes                     # Prune expired Jobs/Files
-  Maximum Concurrent Jobs = 4
-}
-
-# Definiton of file storage device
-Storage {
-  Name = File
-  Address = @hostname@                # N.B. Use a fully qualified name here
-  SDPort = 8103
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-  Device = FileStorage
-  Media Type = File
-  Maximum Concurrent Jobs = 4
-}
-
-Storage {
-  Name = File1
-  Address = @hostname@                # N.B. Use a fully qualified name here
-  SDPort = 8103
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-  Device = FileStorage1
-  Media Type = File1
-  Maximum Concurrent Jobs = 4
-}
-
-
-# Definition of DLT tape storage device
-#Storage {
-#  Name = DLTDrive
-#  Address = @hostname@                # N.B. Use a fully qualified name here
-#  SDPort = 8103
-#  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"          # password for Storage daemon
-#  Device = "HP DLT 80"                # must be same as Device in Storage daemon
-#  Media Type = DLT8000                # must be same as MediaType in Storage daemon
-#}
-
-# Definition of DDS tape storage device
-#Storage {
-#  Name = SDT-10000
-#  Address = @hostname@                # N.B. Use a fully qualified name here
-#  SDPort = 8103
-#  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"          # password for Storage daemon
-#  Device = SDT-10000                  # must be same as Device in Storage daemon
-#  Media Type = DDS-4                  # must be same as MediaType in Storage daemon
-#}
-
-# Definition of 8mm tape storage device
-#Storage {
-#  Name = "8mmDrive"
-#  Address = @hostname@                # N.B. Use a fully qualified name here
-#  SDPort = 8103
-#  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-#  Device = "Exabyte 8mm"
-#  MediaType = "8mm"
-#}
-
-
-# Generic catalog service
-Catalog {
-  Name = MyCatalog
-  dbname = bacula; user = bacula; password = ""
-}
-
-# Reasonable message delivery -- send most everything to email address
-#  and to the console
-Messages {
-  Name = Standard
-  mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
-  operatorcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: Intervention needed for %j\" %r"
-  MailOnError = @job_email@ = all
-  operator = @job_email@ = mount
-  console = all, !skipped, !terminate, !restored
-#
-# WARNING! the following will create a file that you must cycle from
-#          time to time as it will grow indefinitely. However, it will
-#          also keep all your messages if the scroll off the console.
-#
-  append = "@working_dir@/log" = all, !skipped
-}
-
-Messages {
-  Name = NoEmail
-  mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
-  console = all, !skipped, !terminate
-#
-# WARNING! the following will create a file that you must cycle from
-#          time to time as it will grow indefinitely. However, it will
-#          also keep all your messages if the scroll off the console.
-#
-  append = "@working_dir@/log" = all, !skipped
-}
-
-#
-# Message delivery for daemon messages (no job).
-Messages {
-  Name = Daemon
-  mailcommand = "@sbindir@/bsmtp -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula daemon message\" %r"
-  mail = @job_email@ = all, !skipped            
-  console = all, !skipped, !saved
-  append = "@working_dir@/log" = all, !skipped
-}
-    
-# Default pool definition
-Pool {
-  Name = Default
-  Pool Type = Backup
-  Recycle = yes                       # Bacula can automatically recycle Volumes
-  AutoPrune = yes                     # Prune expired volumes
-  Volume Retention = 365d             # one year
-  Accept Any Volume = yes             # write on any volume in the pool
-}
diff --git a/regress/scripts/test-bacula-fd.conf.in b/regress/scripts/test-bacula-fd.conf.in
deleted file mode 100644 (file)
index 1879119..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Default  Bacula File Daemon Configuration file
-#
-#  For Bacula release 1.33
-#
-# There is not much to change here except perhaps the
-# File daemon Name to
-#
-
-#
-# List Directors who are permitted to contact this File daemon
-#
-Director {
-  Name = @hostname@-dir
-  Password = "xevrjURYoCHhn26RaJoWbeWXEY/a3VqGKp/37tgWiuHc"
-}
-
-#
-# "Global" File daemon configuration specifications
-#
-FileDaemon {                          # this is me
-  Name = @hostname@-fd
-  FDport = 8102                  # where we listen for the director
-  WorkingDirectory = "@working_dir@"
-  Pid Directory = "@piddir@"
-  SubSys Directory = "@subsysdir@"
-}
-
-# Send all messages except skipped files back to Director
-Messages {
-  Name = Standard
-  director = @hostname@-dir = all, !terminate
-}
diff --git a/regress/scripts/test-bacula-sd.conf.in b/regress/scripts/test-bacula-sd.conf.in
deleted file mode 100644 (file)
index 390e0fb..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#
-# Default Bacula Storage Daemon Configuration file
-#
-#  For Bacula release 1.33
-#
-# You may need to change the name of your tape drive
-#   on the "Archive Device" directive in the Device
-#   resource.  If you change the Name and/or the 
-#   "Media Type" in the Device resource, please ensure
-#   that dird.conf has corresponding changes.
-#
-
-Storage {                             # definition of myself
-  Name = @hostname@-sd
-  SDPort = 8103                  # Director's port      
-  WorkingDirectory = "@working_dir@"
-  Pid Directory = "@piddir@"
-  Subsys Directory = "@subsysdir@"
-}
-
-#
-# List Directors who are permitted to contact Storage daemon
-#
-Director {
-  Name = @hostname@-dir
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-}
-
-#
-# Devices supported by this Storage daemon
-# To connect, the Director's bacula-dir.conf must have the
-#  same Name and MediaType. 
-#
-
-Device {
-  Name = FileStorage
-  Media Type = File
-  Archive Device = @tmpdir@
-  LabelMedia = yes;                   # lets Bacula label unlabelled media
-  Random Access = Yes;
-  AutomaticMount = yes;               # when device opened, read it
-  RemovableMedia = no;
-  AlwaysOpen = no;
-# Maximum File Size = 10KB
-}
-
-Device {
-  Name = FileStorage1
-  Media Type = File1
-  Archive Device = @tmpdir@
-  LabelMedia = yes;                   # lets Bacula label unlabelled media
-  Random Access = Yes;
-  AutomaticMount = yes;               # when device opened, read it
-  RemovableMedia = no;
-  AlwaysOpen = no;
-}
-
-
-#Device {
-#  Name = "HP DLT 80"
-#  Media Type = DLT8000
-#  Archive Device = /dev/nst0
-#  AutomaticMount = yes;               # when device opened, read it
-#  AlwaysOpen = yes;
-#  RemovableMedia = yes;
-#}
-
-#Device {
-#  Name = SDT-7000                     # 
-#  Media Type = DDS-2
-#  Archive Device = /dev/nst0
-#  AutomaticMount = yes;               # when device opened, read it
-#  AlwaysOpen = yes;
-#  RemovableMedia = yes;
-#}
-
-#Device {
-#  Name = Floppy
-#  Media Type = Floppy
-#  Archive Device = /mnt/floppy
-#  RemovableMedia = yes;
-#  Random Access = Yes;
-#  AutomaticMount = yes;               # when device opened, read it
-#  AlwaysOpen = no;
-#}
-
-#
-# A very old Exabyte with no end of media detection
-#
-#Device {
-#  Name = "Exabyte 8mm"
-#  Media Type = "8mm"
-#  Archive Device = /dev/nst0
-#  Hardware end of medium = No;
-#  AutomaticMount = yes;               # when device opened, read it
-#  AlwaysOpen = Yes;
-#  RemovableMedia = yes;
-#}
-
-# 
-# Send all messages to the Director, 
-# mount messages also are sent to the email address
-#
-Messages {
-  Name = Standard
-  director = @hostname@-dir = all, !terminate
-}
diff --git a/regress/scripts/test-console.conf.in b/regress/scripts/test-console.conf.in
deleted file mode 100644 (file)
index 0fe916b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Bacula User Agent (or Console) Configuration File
-#
-
-Director {
-  Name = @hostname@-dir
-  DIRport = 8101
-  address = @hostname@
-  Password = "pNvX1WiXnwv2C/F7E52LGvw6rKjbbPvu2kyuPa9pVaL3"
-}
diff --git a/regress/scripts/testa-bacula-dir.conf.in b/regress/scripts/testa-bacula-dir.conf.in
deleted file mode 100644 (file)
index 1e75eec..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-#
-# TestA   Bacula Director Configuration file
-#
-#  For Bacula release 1.30 (12 April 2003) -- redhat 7.3
-#
-
-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 = 1
-  Password = "pNvX1WiXnwv2C/F7E52LGvw6rKjbbPvu2kyuPa9pVaL3"         # Console password
-  Messages = Standard
-}
-
-
-Job {
-  Name = "MultiVol"
-  Type = Backup
-  Client=@hostname@-fd 
-  Level = Full
-  FileSet="Full Set"
-  Storage = File 
-  Messages = Standard
-  Write Bootstrap = "@working_dir@/SmallVols.bsr"
-  Pool = SmallVols
-  SpoolData = yes
-}
-
-
-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"
-}
-
-
-
-# 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=SHA1 }
-    File =</tmp/file-list
-  }
-}
-
-
-# Client (File Services) to backup
-Client {
-  Name = @hostname@-fd
-  Address = @hostname@
-  FDPort = 8102
-  Catalog = MyCatalog
-  Password = "xevrjURYoCHhn26RaJoWbeWXEY/a3VqGKp/37tgWiuHc"          # password for FileDaemon
-  File Retention = 30d                # 30 days
-  Job Retention = 180d                # six months
-  AutoPrune = yes                     # Prune expired Jobs/Files
-}
-
-# Definiton of file storage device
-Storage {
-  Name = File
-  Address = @hostname@                # N.B. Use a fully qualified name here
-  SDPort = 8103
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-  Device = FileStorage
-  Media Type = File
-}
-
-Storage {
-  Name = File1
-  Address = @hostname@                # N.B. Use a fully qualified name here
-  SDPort = 8103
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-  Device = FileStorage1
-  Media Type = File1
-}
-
-
-# Generic catalog service
-Catalog {
-  Name = MyCatalog
-  dbname = bacula; user = bacula; password = ""
-}
-
-# Reasonable message delivery -- send most everything to email address
-#  and to the console
-Messages {
-  Name = Standard
-  mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
-  operatorcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: Intervention needed for %j\" %r"
-  MailOnError = @job_email@ = all, !terminate
-  operator = @job_email@ = mount
-  console = all, !skipped, !terminate
-
-  append = "@working_dir@/log" = all, !skipped
-}
-
-Messages {
-  Name = NoEmail
-  mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
-  console = all, !skipped, !terminate, !restored
-  append = "@working_dir@/log" = all, !skipped
-}
-
-    
-# Default pool definition
-Pool {
-  Name = Default
-  Pool Type = Backup
-  Recycle = yes                       # Bacula can automatically recycle Volumes
-  AutoPrune = yes                     # Prune expired volumes
-  Volume Retention = 365d             # one year
-  Accept Any Volume = yes             # write on any volume in the pool
-}
-
-Pool {
-  Name = SmallVols
-  Pool Type = Backup
-  Recycle = yes                       # Bacula can automatically recycle Volumes
-  AutoPrune = yes                     # Prune expired volumes
-  Volume Retention = 365d             # one year
-  Accept Any Volume = yes             # write on any volume in the pool
-  Maximum Volumes = 10
-  MaximumVolumeBytes = 10M
-  LabelFormat = Small
-}
diff --git a/regress/scripts/win32-bacula-dir-tape.conf.in b/regress/scripts/win32-bacula-dir-tape.conf.in
deleted file mode 100644 (file)
index 5c2af4f..0000000
+++ /dev/null
@@ -1,160 +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 = rufus-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=Tibs
-  FileSet="Full Set"
-  Storage = DDS-4
-  Messages = Standard
-  Pool = Default
-  Write Bootstrap = "@working_dir@/NightlySave.bsr"
-  Maximum Concurrent Jobs = 4
-  SpoolData = yes
-}
-
-
-# Standard Restore template, to be changed by Console program
-Job {
-  Name = "RestoreFiles"
-  Type = Restore
-  Client=Tibs
-  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"
-  Enable VSS = yes
-  Include { Options { signature=MD5; portable=no  
-      compression=GZIP }
-#   File =  "c:/cygwin"   # big   
-    File =  "c:/cygwin/home/kern/bacula/k"
-  }
-}
-
-
-#
-# When to do the backups, full backup on first sunday of the month,
-#  differential (i.e. incremental since full) every other sunday,
-#  and incremental backups other days
-Schedule {
-  Name = "WeeklyCycle"
-  Run = Full 1st sun at 1:05
-  Run = Differential 2nd-5th sun at 1:05
-  Run = Incremental mon-sat at 1:05
-}
-
-# Client (File Services) to backup
-Client {
-  Name = Tibs
-  Address = tibs
-  FDPort = 9102
-  Catalog = MyCatalog
-  Password = "pNvX1WiXnwv2C/F7E52LGvw6rKjbbPvu2kyuPa9pVaL3"
-  File Retention = 30d                # 30 days
-  Job Retention = 180d                # six months
-  AutoPrune = yes                     # Prune expired Jobs/Files
-  Maximum Concurrent Jobs = 4
-}
-
-Client {
-  Name = localhost-fd
-  Address = localhost
-  FDPort = 8102
-  Catalog = MyCatalog
-  Password = "xevrjURYoCHhn26RaJoWbeWXEY/a3VqGKp/37tgWiuHc"
-  File Retention = 30d                # 30 days
-  Job Retention = 180d                # six months
-  AutoPrune = yes                     # Prune expired Jobs/Files
-  Maximum Concurrent Jobs = 4
-}
-
-
-# Definition of DDS tape storage device
-Storage {
-  Name = DDS-4
-  Address = 192.168.68.112            # N.B. Use a fully qualified name here
-  SDPort = 8103
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"          # password for Storage daemon
-  Device = DDS-4                      # must be same as Device in Storage daemon
-  Media Type = DDS-4                  # must be same as MediaType in Storage daemon
-  AutoChanger = yes
-  Maximum Concurrent Jobs = 4
-}
-
-
-# Generic catalog service
-Catalog {
-  Name = MyCatalog
-  dbname = bacula; user = bacula; password = ""
-}
-
-# Reasonable message delivery -- send most everything to email address
-#  and to the console
-Messages {
-  Name = Standard
-  mailcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
-  operatorcommand = "@sbindir@/bsmtp -h localhost -f \"\(Bacula Regression\) %r\" -s \"Bacula: Intervention needed for %j\" %r"
-  MailOnError = @job_email@ = all, !terminate
-  operator = @job_email@ = mount
-  console = all, !skipped, !terminate, !restored
-#
-# WARNING! the following will create a file that you must cycle from
-#          time to time as it will grow indefinitely. However, it will
-#          also keep all your messages if the scroll off the console.
-#
-  append = "@working_dir@/log" = all, !skipped
-}
-
-#
-# Message delivery for daemon messages (no job).
-Messages {
-  Name = Daemon
-  mailcommand = "@sbindir@/bsmtp -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula daemon message\" %r"
-  mail = @job_email@ = all, !skipped            
-  console = all, !skipped, !saved
-  append = "@working_dir@/log" = all, !skipped
-}
-
-    
-# Default pool definition
-Pool {
-  Name = Default
-  Pool Type = Backup
-  Recycle = yes                       # Bacula can automatically recycle Volumes
-  AutoPrune = yes                     # Prune expired volumes
-  Volume Retention = 365d             # one year
-  Accept Any Volume = yes             # write on any volume in the pool
-}
diff --git a/regress/scripts/win32-bacula-fd.conf b/regress/scripts/win32-bacula-fd.conf
deleted file mode 100644 (file)
index 115b83d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Default  Bacula File Daemon Configuration file
-#
-#  For Bacula release 1.33
-#
-# There is not much to change here except perhaps the
-# File daemon Name to
-#
-
-#
-# List Directors who are permitted to contact this File daemon
-#
-Director {
-  Name = rufus-dir
-  Password = "xevrjURYoCHhn26RaJoWbeWXEY/a3VqGKp/37tgWiuHc"
-}
-
-#
-# "Global" File daemon configuration specifications
-#
-FileDaemon {                          # this is me
-  Name = localhost-fd
-  FDport = 8102                  # where we listen for the director
-  WorkingDirectory = "/home/kern/bacula/regress/working"
-  Pid Directory = "/home/kern/bacula/regress/working"
-  SubSys Directory = "/home/kern/bacula/regress/working"
-}
-
-# Send all messages except skipped files back to Director
-Messages {
-  Name = Standard
-  director = rufus-dir = all, !terminate
-}
diff --git a/regress/scripts/win32-bacula-sd-tape.conf b/regress/scripts/win32-bacula-sd-tape.conf
deleted file mode 100644 (file)
index 8589d67..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Default Bacula Storage Daemon Configuration file
-#
-#  For Bacula release 1.33
-#
-# You may need to change the name of your tape drive
-#   on the "Archive Device" directive in the Device
-#   resource.  If you change the Name and/or the 
-#   "Media Type" in the Device resource, please ensure
-#   that dird.conf has corresponding changes.
-#
-
-Storage {                             # definition of myself
-  Name = localhost-sd
-  SDPort = 8103                  # Director's port      
-  WorkingDirectory = "/home/kern/bacula/regress/working"
-  Pid Directory = "/home/kern/bacula/regress/working"
-  Subsys Directory = "/home/kern/bacula/regress/working"
-}
-
-#
-# List Directors who are permitted to contact Storage daemon
-#
-Director {
-  Name = rufus-dir
-  Password = "ccV3lVTsQRsdIUGyab0N4sMDavui2hOBkmpBU0aQKOr9"
-}
-
-#
-# Devices supported by this Storage daemon
-# To connect, the Director's bacula-dir.conf must have the
-#  same Name and MediaType. 
-#
-
-Device {
-  Name = DDS-4                     # 
-  Media Type = DDS-4
-  Archive Device = /dev/nst0
-  AutomaticMount = yes;               # when device opened, read it
-  AlwaysOpen = yes;
-  RemovableMedia = yes;
-  @/home/kern/bacula/regress/bin/tape_options
-# Maximum File Size = 1000000
-# MaximumVolumeSize = 100M
-}
-
-# 
-# Send all messages to the Director, 
-# mount messages also are sent to the email address
-#
-Messages {
-  Name = Standard
-  director = rufus-dir = all, !terminate
-}
diff --git a/regress/starttime b/regress/starttime
deleted file mode 100755 (executable)
index 5c2bd41..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/python
-from time import time as now 
-
-fn = open('time.out', 'w+')
-fn.write('%s' % now())
-fn.close()
diff --git a/regress/tape b/regress/tape
deleted file mode 100755 (executable)
index 718cefe..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-./all-non-root-tape-tests
diff --git a/regress/tests/.cvsignore b/regress/tests/.cvsignore
deleted file mode 100644 (file)
index 1191247..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-1
-2
diff --git a/regress/tests/2drive-incremental-2tape b/regress/tests/2drive-incremental-2tape
deleted file mode 100755 (executable)
index c460d17..0000000
+++ /dev/null
@@ -1,117 +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-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 <<END_OF_DATA >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 <<END_OF_DATA >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 (executable)
index 2e020e7..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index 37c4238..0000000
+++ /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 <<END_OF_DATA >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 <<END_OF_DATA >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 (executable)
index 3b33a17..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index b51f48f..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index 6fe38d0..0000000
+++ /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 <<END_OF_DATA >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 <<END_OF_DATA >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 <<END_OF_DATA >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 <<END_OF_DATA >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 <<END_OF_DATA 2>&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 (executable)
index cff1a52..0000000
+++ /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 <<END_OF_DATA >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 <<END_OF_DATA 2>&1 >/dev/null
-#bin/bconsole -c bin/bconsole.conf <<END_OF_DATA
-@$out /dev/null
-messages
-@$out tmp/log2.out
-@# 
-@# now do a restore
-@#
-restore bootstrap=${cwd}/tmp/kern.bsr where=${cwd}/tmp/bacula-restores select all storage=File1 done
-yes
-wait
-messages
-@$out
-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 "  !!!!! 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 (executable)
index e2bf556..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index c61e5dd..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index c97fd11..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index c373a58..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index dafddc5..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index a032875..0000000
+++ /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 <<END_OF_DATA
-@output /dev/null
-messages
-@output tmp/log1.out
-label storage=File volume=TestVolume001
-run job=NightlySave yes
-wait
-messages
-@# 
-@# now do a restore
-@#
-@output tmp/log2.out
-restore where=${cwd}/tmp/bacula-restores select all done
-yes
-wait
-messages
-@output
-quit
-END_OF_DATA
-bin/bacula stop 2>&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 <<END_OF_DATA
-s%.*dev$%dev%
-s%.*[0-9][0-9]:[0-9][0-9]:[0-9][0-9] dev/ptmx%dev/ptmx%
-s%.*[0-9][0-9]:[0-9][0-9]:[0-9][0-9] dev/ttyp1%dev/ttyp1%
-s%.*[0-9][0-9]:[0-9][0-9]:[0-9][0-9] dev/null%dev/null%
-END_OF_DATA
-
-# strip file system change messages then sed and sort
-grep -v "Skip: File system change prohibited." original >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 (executable)
index 3182e98..0000000
+++ /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 <<END_OF_DATA >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 <<END_OF_DATA >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 <<END_OF_DATA >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 (executable)
index 049b745..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index 859745e..0000000
+++ /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 <<END_OF_DATA
-@output /dev/null
-messages
-@output tmp/log1.out
-label storage=File
-TestVolume001
-run job=NightlySave
-yes
-wait
-messages
-@# 
-@# now do a restore
-@#
-@output tmp/log2.out
-restore where=${cwd}/tmp/bacula-restores select    
-unmark *
-mark *
-done
-yes
-wait
-messages
-@output
-quit
-END_OF_DATA
-bin/bacula stop 2>&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 (executable)
index 6998216..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index 9831c66..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index 95d1368..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index 92e2e95..0000000
+++ /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 <<END_OF_DATA >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 <<END_OF_DATA >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 <<END_OF_DATA >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 <<END_OF_DATA >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 <<END_OF_DATA >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 (executable)
index ec9eb53..0000000
+++ /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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 (executable)
index 086f28a..0000000
+++ /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 <<END_OF_DATA >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 <<END_OF_DATA
-@$out /dev/null
-messages
-@$out tmp/log1.out
-@# Force Incremental on the second Volume
-update volume=TestVolume001 VolStatus=Used
-run level=Incremental job=NightlySave yes
-wait
-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
-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-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 (executable)
index 4b827d7..0000000
+++ /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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 (executable)
index b7345e9..0000000
+++ /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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 (executable)
index 8701602..0000000
+++ /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 <<END_OF_DATA
-@output /dev/null
-messages
-@output tmp/log1.out
-label storage=DDS-4 Volume=TestVolume001 slot=0
-run job=NightlySave yes
-wait
-messages
-@# 
-@# now do a restore
-@#
-@output tmp/log2.out
-restore where=${cwd}/tmp/bacula-restores select all done
-yes
-wait
-messages
-@output
-quit
-END_OF_DATA
-bin/bacula stop 2>&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 (executable)
index 7efeb34..0000000
+++ /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 <<END_OF_DATA
-@output /dev/null
-messages
-@output tmp/log1.out
-label storage=File
-TestVolume001
-run job=NightlySave
-yes
-wait
-messages
-@# 
-@# now do a restore
-@#
-@output tmp/log2.out
-restore where=${cwd}/tmp/bacula-restores select    
-unmark *
-mark *
-done
-yes
-wait
-messages
-@output
-quit
-END_OF_DATA
-bin/bacula stop 2>&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 (executable)
index 20c459e..0000000
+++ /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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 (executable)
index fd1c383..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index 295c279..0000000
+++ /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 <<END_OF_DATA >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 <<END_OF_DATA >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 (executable)
index 647c204..0000000
+++ /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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 (executable)
index b4a39c9..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index 9dd157a..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index cfbf2cb..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index bdf6f84..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index 4f8b011..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index dd9f08d..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index dde29ec..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index 0e01188..0000000
+++ /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 <<END_OF_DATA 2>&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 (executable)
index 0d0edd0..0000000
+++ /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 (executable)
index 040540d..0000000
+++ /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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 (executable)
index 8768362..0000000
+++ /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 <<END_OF_DATA 2>&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 <<END_OF_DATA 2>&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 (executable)
index e84cbec..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index 876b8fa..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index fc7d9fa..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index 0f5002d..0000000
+++ /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 <<END_OF_DATA
-@output /dev/null
-messages
-@output tmp/log1.out
-label storage=DDS-4 Volume=TestVolume001 slot=0
-run job=NightlySave yes
-wait
-messages
-@# 
-@# now do a restore
-@#
-@output tmp/log2.out
-restore where=${cwd}/tmp/bacula-restores select all done
-yes
-wait
-messages
-@output
-quit
-END_OF_DATA
-bin/bacula stop 2>&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 (executable)
index 2df75d6..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index c8d10ae..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index fe5a50c..0000000
+++ /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 <<END_OF_DATA >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 <<END_OF_DATA >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 (executable)
index f51252e..0000000
+++ /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 <<END_OF_DATA >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 (executable)
index 7cced61..0000000
+++ /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 <<END_OF_DATA >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 (file)
index f84d1c0..0000000
Binary files a/regress/weird-files.tar.gz and /dev/null differ