For 1.33 Testing/Documentation:
 - bextract is sending everything to the log file ****FIXME****
-- Document new records in Director. SDAddress SDDeviceName, SDPassword.
+- Document new alias records in Director. SDAddress SDDeviceName, SDPassword.
   FDPassword, FDAddress, DBAddress, DBPort, DBPassword.
 - Document new Include/Exclude ...
 - Add test of exclusion, test multiple Include {} statements.
   and install the esound-dev  package for compiling Console on SuSE.
 - Add an example of using a FIFO in dirdconf.wml 
 - Add an item to the FAQ about running jobs in different timezones.
-                
-For 1.32c
-- Add Volume name to "I cannot write on this volume because"
+- Add some examples of job editing codes.
+- Add Dan's 31 Oct 2003 email on tcpwrappers to Tips.
+- Add to supported autochangers 
+  OS              : FreeBSD-4.9
+  Auto-Changer    : QUALSTAR TLS-4210
+    Manufufactur  : Qualstar
+    Tapes         : 12 (AIT1: 36GB, AIT2: 50GB all uncompressed)
+    Drives        : 2xAIT2 (installed in the Qualstar: SONY SDX-500C AIT2)
+
 
+                
 For 1.33
+- Estimate to Tibs never returns.
+- Fix TimeZone problem!
+- Recycling volume with a Slot requires an operator intervention:
+    rufus-dir: Start Backup JobId 18, Job=kernsave.2003-11-01_21.23.52
+    rufus-dir: Pruned 1 Job on Volume Vol01 from catalog.
+    rufus-dir: There are no Jobs associated with Volume Vol01. Marking it purged.
+    rufus-dir: Recycled volume "Vol01"
+    rufus-sd: Please mount Volume "Vol01" on Storage Device "DDS-4" for Job kernsave.2003-11-01_21.23.52
+    Use "mount" command to release Job.
+- Think about how space could be freed up on a tape -- perhaps this
+  is a Merge or Compact feature that is needed.
+- Modify FileSet, did not upgrade the current Increment job, but
+  waited for the next job to be upgraded.
+- Take a careful look at SetACL http://setacl.sourceforge.net     
+- Implement a where command for the tree telling where a file
+  is located.
+- Take a careful look at Level for the estimate command, maybe make
+  it a command line option.
+- Optimize fsf not to read.
+- Implement Dan's bacula script (email of 26 Oct).
+- Implement autochange testing in btape.
+- Add Volume name to "I cannot write on this volume because"
+- Make restore job check if all the files are actually restored.
+- Make tree walk routines like cd, ls, ... more user friendly
+  by handling spaces better.
 - Write your PID file and chwon root:wheel before drop.
 - Make sure there is no symlink in a file before creating a
   file (attack).
            last update 8 May 2003
 
 Item 1:   Multiple simultaneous Jobs. (done)
-Done -- Restore part needs better implementation to work correctly
-        Also, it needs considerable testing
-
-  What:   Permit multiple simultaneous jobs in Bacula.
-
-  Why:    An enterprise level solution needs to go fast without the
-          need for the system administrator to carefully tweak
-          timing.  Based on the benchmarks, during a full
-          backup, NetWorker typically hit 10 times the bandwidth to
-          the tape compared to Bacula--largely. This is probably due to
-          running parallel jobs and multi-threaded filling of buffers
-          and writing them to tape.  This should also make things work
-          better when you have a mix of fast and slow machines backing
-          up at the same time.
-
-  Notes:  Bacula was designed to run multiple simultaneous jobs. Thus
-          implementing this is a matter of some small cleanups and
-          careful testing.
-
-
-Item 2:   Make the Storage daemon use intermediate file storage to buffer data.
-Deferred -- not necessary yet -- possibly implement with Migration.
-
-  What:   If data is coming into the SD too fast, buffer it to 
-          disk if the user has configured this option.
-
-  Why:    This would be nice, especially if it more or less falls out
-          when implementing (1) above.  If not, it probably should not
-          be given a high priority because fundamentally the backup time
-          is limited by the tape bandwidth.  Even though you may finish a
-          client job quicker by spilling to disk, you still have to
-          eventually get it onto tape.  If intermediate disk buffering
-          allows us to improve write bandwidth to tape, it may make
-          sense.
-
-  Notes:  Whether or not this is implemented will depend upon performance
-          testing after item 1 is implemented.
-
+Done
 
 Item 3:   Write the bscan program -- also write a bcopy program.
 Done
 
-  What:   Write a program that reads a Bacula tape and puts all the 
-          appropriate data into the catalog. This allows recovery
-          from a tape that is no longer in the database, or it allows
-          re-creation of a database if lost.
+Item 5:   Implement Label templates
+Done 
 
-  Why:    This is a fundamental robustness and disaster recovery tool
-          which will increase the comfort level of a sysadmin
-          considering adopting Bacula.
+Item 6:   Write a regression script.
+Done --   Continue to expand its testing.
 
-  Notes:  A skeleton of this program already exists, but much work
-          needs to be done. Implementing this will also make apparent
-          any deficiencies in the current Bacula tape format.
+Item 9:   Add SSL to daemon communications.
+For now, implement with stunnel
 
+Item 10:  Define definitive tape format.
+Done (version 1.27)
 
+--- Not completed
 Item 4:   Implement Base jobs.
 
   What:   A base job is sort of like a Full save except that you 
           the e. DIR must send FD a list of files/attribs, and the FD must
           search the list and compare it for each file to be saved.
 
+Item 2:   Make the Storage daemon use intermediate file storage to buffer data.
+Deferred -- not necessary yet -- possibly implement with Migration.
 
-Item 5:   Implement Label templates
-Done 
-
-  What:   This is a mechanism whereby Bacula can automatically create
-          a tape label for new tapes according to a detailed specification
-          provided by the user.
-
-  Why:    It is a major convenience item for folks who use automated label
-          creation.
-
-  Notes:  Bacula already has a working form of automatic tape label
-          creation, but it is very crude. The design for the complete
-          tape labeling project is already documented in the manual.
-
-
-Item 6:   Write a regression script.
-Done --   Continue to expand its testing.
-
-  What:   This is an automatic script that runs and tests as many features
-          of Bacula as possible. The output is compared to previous
-          versions of Bacula and any differences are reported.
-
-  Why:    This is an enormous help in preventing introduction of new
-          errors in parts of the program that already work correctly.
+  What:   If data is coming into the SD too fast, buffer it to 
+          disk if the user has configured this option.
 
-  Notes:  This probably should be ranked higher, it's something the typical
-          user doesn't see.  Depending on how it's implemented, it may
-          make sense to defer it until the archival tape format and
-          user interface mature.
+  Why:    This would be nice, especially if it more or less falls out
+          when implementing (1) above.  If not, it probably should not
+          be given a high priority because fundamentally the backup time
+          is limited by the tape bandwidth.  Even though you may finish a
+          client job quicker by spilling to disk, you still have to
+          eventually get it onto tape.  If intermediate disk buffering
+          allows us to improve write bandwidth to tape, it may make
+          sense.
 
+  Notes:  Whether or not this is implemented will depend upon performance
+          testing after item 1 is implemented.
 
 Item 7:   GUI for interactive restore
 Item 8:   GUI for interactive backup
           own files will in most cases be on a Windows machine running
           Exploder.
 
-
-Item 9:   Add SSL to daemon communications.
-
-  What:   This provides for secure communications between the daemons.
-
-  Why:    This would allow doing backup across the Internet without
-          privacy concerns (or with much less concern).
-
-  Notes:  The vast majority of near term potential users will be backing up
-          a single site over a LAN and, correctly or not, they probably
-          won't be concerned with security, at least not enough to go to
-          the trouble to set up keys, etc. to screw things down.  We suspect
-          that many users genuinely interested in multi-site backup
-          already run some form of VPN software in their internetwork
-          connections, and are willing to delegate security to that layer.
-
-
-Item 10:  Define definitive tape format.
-Done (version 1.27)
-
-  What:   Define that definitive tape format that will not change 
-          for the next millennium.
-
-  Why:    Stability, security.
-
-  Notes:  See notes for item 11 below.
-
-
 Item 11:  New daemon communication protocol.
 
   What:   The current daemon to daemon protocol is basically an ASCII
 
 
 Done: (see kernsdone for more)
-- Implement new alist in FileSet scanning.
-- bls should continue reading even if it finds Win32 data on the tape.
-  The error should be Warning rather the Error.
-- Add user configurable timeout for connecting to SD.
-- Unsaved Flag in Job record (use JobMissingFiles).
-- Base Flag in Job record.
-- Configure mtx-changer to have correct path to mtx.
-- Add all command line arguments to "update", e.g. slot=nn volStatus=append, ...
-- Make some way so that if a machine is skipped because it is not up 
-  that Bacula will continue retrying for a specified period of time --
-  periodically.
-- Implement all command line args on run.
-- Implement command line "restore" args.
-- Implement "restore current select=no"
-- Restore file modified before date
-- Restore -- do nothing but show what would happen
-- Add estimate to Console commands
-- Use read_record.c in SD code.
-- Fix read_record to handle multiple sessions.
-- Tip from Steve Allam
-  mt -f /dev/nst0 defblksize 0
-- Document "status" in the console.
-- Document driving console from shell script.
-- Write JobMedia records with max file size is reached on tape.
-- Handle the case of multiple JobMedia records pending (i.e. the
-  thread is slow and multiple situations requiring a JobMedia
-  record occur).
-- Do performance analysis on the restore tree routines.
-- Fix maximum file size (block.c) to generate JobMedia records.
-- Make the default file size 1GB on the tape.
-- Implement forward spacing between files.
-- Add Machine type (Linux/Windows) to Status report for daemons. 
-  Look at src/host.h
-- Use repositioning at the beginning of the tape.                   
-- Do full check the command line args in update (e.g. VolStatus ...).
-- Specify list of files to restore
-- Implement ClientRunBeforeJob and ClientRunAfterJob.
-- Make | and < work on FD side.
-- Check to see if "blocked" is set during restore.
-- Figure out what is interrupting sql command in console.
-- Make new job print warning User Unmounted Tape.
-- Test recycling and purging (code changed in db_find_next_volume and
-  in recycle.c).
-- Document SDConnectTimeout (in FD).
-- Add restore by filename test.
-- Document restore by files.
-- Make variable expansion work correctly.
-- Implement List Volume Job=xxx  or List scheduled volumes or Status Director 
-- Copy static programs into install directory.
-- Think about changing Storage resource Device record to be
-  SDDeviceName.
-- Add RunBeforeJob and RunAfterJob to the Client program.
-- Need return status on read_cb() from read_records(). Need multiple
-  records -- one per Job, maybe a JCR or some other structure with
-  a block and a record.
-- LabelFormat on tape volume apparently creates the db record but 
-  never actually labels the volume.
-- Recycling a volume when two jobs are using it is going to break. Fixed.
-- Document list nextvol and new format status dir.
-- Client files in Win32 with Unix eol conventions doesn't work.
-- Either fix or document that fill command in btape can be
-  compressed enormously by the hardware - a 36GB tape wrote 750GB!
-- Add multiple character duration qualifiers.
-- Require some modifer.
-- Restrict characters permitted in a Resource name, and don't permit
-  duplicate names.
-- Figure out some way to ignore or get past checksum errors in
-  reading.
-- The SD spooling file gets created even if it is not used.
-- Look at Cleaning tape in ua_label.c for media create/update 
-- Add regression testing to the manual
-- End time: in job output of rescheduled job is time of first run.
-- Document list nextvol and status output.
-- Separate Dir heartbeat in FD from the SD heartbeat.
-- Fix sparse file handeling so that it always reads a multiple
-  of 512. Currently, it subtracts 8 bytes (for faddr).
-  Kludged with #ifdef for FreeBSD.
-- Document that Volume pruning can delete last Full backup and
-  hence you will not have a valid backup.
-- Clarify the fact that having the Bacula cygwin1.dll loaded
-  is not the same as having cygwin installed.
-- Document that it is safe to use the drive when the lights stop flashing.
-- Document all the status codes JobLevel, JobType, JobStatus.
-- Add GUI interface to manual
-- Combine the 3 places that search run records for the next
-  job. Use find_job_pool() modified in ua_output.c
-- Test connect timeouts.
-- Fix FreeBSD build with tcp_wrapper -- should not have -lnsl
-- Implement fast block rejection.
-- I want to restore by file to some date.
----- 1.32b released
-- Figure out a way to move Volumes from one pool to another.
-- Implement a RunAfterFailedJob
-- Limit the number of block checksum/header BB01, ... errors printed.
-- If last Full back is purged and an Incremental or Differential remains,
-  Bacula does not promote the Incremental to a Full.
-- Document verify_disk_to_catalog
-- Document delete job command.
-- Document update volume pool and other command line keywords.
-- Add VerifyJob to "run" summary (yes/mod/no) prompt.
-- For listing, eliminate multiple JobIds in restore Jobs listing.
-- Document to start higher priorty jobs before lower ones.
-- suppress "Do not forget to mount the drive!!!" if error
-- Change error message when closing brace left off ...
-- Implement a move Volume from one pool to another.
-- Implement delete Job.
-- Document need to put LabelFormat in quotes.
-- Implement job in VerifyToCatalog
-- Eliminate ua_retention.c (retentioncmd) if possible.
+
+=== after 1.32c
+- John's Full save failed with 1.32c FD and 1.31 Dir no FD status,
+  and no error message.
+
 
           jr->Type, L_FULL, jr->Name, jr->ClientId, jr->FileSetId);
 
       if (jr->Level == L_DIFFERENTIAL) {
-      /* Incremental is since last Full, Incremental, or Differential */
-        /* SQL cmd already edited above */
+        /* SQL cmd for Differential backup already edited above */
 
+      /* Incremental is since last Full, Incremental, or Differential */
       } else if (jr->Level == L_INCREMENTAL) {
         /* 
          * For an Incremental job, we must first ensure
-         *  that a Full backup wase done (cmd edited above)
+         *  that a Full backup was done (cmd edited above)
          *  then we do a second look to find the most recent
          *  backup
          */
-      if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
-         Mmsg2(&mdb->errmsg, _("Query error for start time request: ERR=%s\nCMD=%s\n"), 
-           sql_strerror(mdb), mdb->cmd);
-        db_unlock(mdb);
-        return 0;
-      }
-      if ((row = sql_fetch_row(mdb)) == NULL) {
+        if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
+            Mmsg2(&mdb->errmsg, _("Query error for start time request: ERR=%s\nCMD=%s\n"), 
+              sql_strerror(mdb), mdb->cmd);
+           db_unlock(mdb);
+           return 0;
+        }
+        if ((row = sql_fetch_row(mdb)) == NULL) {
+           sql_free_result(mdb);
+               Mmsg(&mdb->errmsg, _("No prior Full backup Job record found.\n"));
+           db_unlock(mdb);
+           return 0;
+        }
         sql_free_result(mdb);
-            Mmsg(&mdb->errmsg, _("No prior Full backup Job record found.\n"));
-        db_unlock(mdb);
-        return 0;
-      }
-      sql_free_result(mdb);
         /* Now edit SQL command for Incremental Job */
         Mmsg(&mdb->cmd, 
 "SELECT StartTime FROM Job WHERE JobStatus='T' AND Type='%c' AND "
 "Level IN ('%c','%c','%c') AND Name='%s' AND ClientId=%u "
-"ORDER BY StartTime DESC LIMIT 1",
-          jr->Type, L_INCREMENTAL, L_DIFFERENTIAL, L_FULL, jr->Name,
-          jr->ClientId);
-   } else {
+"AND FileSetId=%u ORDER BY StartTime DESC LIMIT 1",
+           jr->Type, L_INCREMENTAL, L_DIFFERENTIAL, L_FULL, jr->Name,
+           jr->ClientId, jr->FileSetId);
+      } else {
          Mmsg1(&mdb->errmsg, _("Unknown level=%d\n"), jr->Level);
         db_unlock(mdb);
         return 0;
-   }
+      }
    } else {
-   Dmsg1(100, "Submitting: %s\n", mdb->cmd);
+      Dmsg1(100, "Submitting: %s\n", mdb->cmd);
       Mmsg(&mdb->cmd, "SELECT StartTime FROM Job WHERE Job.JobId=%u", jr->JobId);
    }
 
-
    if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       pm_strcpy(stime, "");                   /* set EOS */
       Mmsg2(&mdb->errmsg, _("Query error for start time request: ERR=%s\nCMD=%s\n"),