              Technical notes on version 1.6 25Nov
                       29 November 2001
                        Kern Sibbald

General:

Changes submitted this submission:
- Updating to the latest version of CYGWIN was abandoned 
  because Bacula errors and kxvt consumes 100% of the CPU.
- Added HAVE_GETOPT_LONG for long command line options (not yet
  used).
- MANY updates and enhancements to the manual.
- Eliminated virtually all use of MAXSTRING in favor of
  dynamically allocated memory. A bit more work is needed,
  but there should be few places left where overflow can occur.
- Fixed most static variables that hold names to be allocated
  as MAX_NAME_LENGTH. The same for times with MAX_TIME_LENGTH.
- Began adding the new JobName code. The JobName will replace
  the old JobId, and is composed of the Job resource name
  followed by the date and the time. The time is guaranteed
  to be unique for each Job.
- Moved the Start/End File and the Start/End Block from the
  Job record to the JobMedia record. This permits proper 
  handling of multi-volumes for a Job.  The new JobMedia
  values are not yet stored in the database because
  it requires a database modification. I'll do that for
  next release.
- Try a second time to open the MySQL database if it fails.
- Added preliminary code for implementing verification
  of tape and data on the tape.
- Added lock and unlock calls around code that accesses
  resources in the Director. When fully implemented this
  will permit re-reading the config file at any time.
- Add use count to resources. Not yet totally implemented.
- Removed Start/End File/Block from termination message
  as there can be one for each volume.  Print JobName.
- Get Start/End File/Block from Storage daemon for each
  Volume.  Not yet stored in the database.
- Move message destination chain and bit mask into the
  JCR when the Job starts. Now I can implement multiple  
  message resources.
- Pass the new JobName to the Storage and File daemons.
  More work required to completely cut over to it.
- Wait for the Storage daemon to terminate the Job before
  the Director terminates the Job.  This corrects all
  race conditions with messages destined for a particular
  Job but ending up with a different Job.
- Modify the Console program so that immediately after a
  Label, it will by default issue a Mount command. This
  can be turned on/off with the Automount command in the
  Console program.
- Updated the Console program to use dynamic memory just
  about everywhere.
- Started modifying the Console program to deal with Job names
  in addition to JobIds. Much more work to be done.
- Made fairly extensive changes to the print_run_time()
  routines, which print the time/date of the next scheduled
  job -- assuming it is within 24 hours of the current time.
  It should do a much better job of getting it right. Previously,
  Jobs run hourly did not display correctly in the status
  output.
- Each daemon now requires a WorkingDirectory. This is necessary
  so that it can write mail messages to disk, then send them
  at the end of a Job.
- Enhanced the Console Cancel command to send the cancel
  to the File daemon as well as the Storage daemon.  It can
  also cancel a job that is waiting execution.
- Replaced a number of dir->msglen=0; bnet_send() with
  bnet_sig() calls.
- If the path_max or name_max is less than 1024, set it to
  1024. Hopefully this will solve the shutdown crashes on
  the File daemon on Win2000.
- Added a few bytes extra on certain dynamically allocated
  strings in the File daemon hoping to catch a possible
  buffer overrun condition causing the crash on shutdown
  on Win2000 systems.
- Added new options for the mailcommand as follows:

   Edit job codes into main command line
    %% = %
    %j = Job name
    %t = Job type (Backup, ...)
    %e = Job Exit code
    %l = job level
    %c = Client's name
    %r = Recipients
    %d = Director's name

  I'll document this more completely in the manual.
