]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/ChangeLog
Change to enable_priv
[bacula/bacula] / bacula / ChangeLog
index bf7e3d59ee97b8bfee39d21f70ee823b81470019..96b7fe95c2b6f5d6157475a66fc607c2bb41b70b 100644 (file)
+2003-06-04 Version 1.31 Beta 04Jun03
+- Fix block.c to check errno only in case of return status -1 as 
+  suggested by Justin Gibbs (FreeBSD).
+- Implemented qfill command in btape for quick testing write/read of a tape.
+- Discovered that FreeBSD pthreads re-use the same thread id, which causes
+  the SD to fail when a user leaves a device unmounted (old pid is reused
+  and lock_device() thinks the same thread is calling again leading to
+  inconsistent state). Set id to zero after blocking the device during
+  unmount.
+- A lot of clean up, moving subroutines around for TermCode.
+- Free ua->prompt when Job terminates.
+- Add AutoPrune and Recycle to values copied from Pool resource
+  into Pool record on create/updated.
+- Implemented bsr for Verify VolumeToCatalog. 
+- Improved the Verify Job report using SD and FD term codes.
+- Split tree handling routines from ua_restore.c to ua_tree.c
+- Split bsr routines from ua_restore.c to bsr.c and bsr.h 
+- Fixed clash between FD and SD returned job values. Report now contains
+  values from FD.  Maybe I should change? or give both.
+- Attempt to fix negative use_count for dev packet in SD by adding
+  a couple of open_dev().   This may be cause of Dan's crash.
+- Clear no_wait_id when device is unblocked. This may be cause of Dan's crash.
+- Eliminate old "new lock code".
+- Add configure of mtx-changer for mtx path.
+- Always rewind tape before releasing it (for FreeBSD).
+- StartBlock was one too large for second volume.
+- Fixed restore to display status from both SD and FD.
+- Unified return status message for backup and restore.
+- Corrected segmentation fault reported by Dan when doing "label barcodes"
+  on a File.
+- Corrected a segmentation fault when attempting to send a JobMedia record
+  to the Console -- reported by Dan.
+- Added MySQL documentation for using the threaded libraries.
+- Added new columns and tables to Catalog database.
+- Wrote alter scripts and tested them (thanks to Dan for the help) on
+  MySQL and SQLite.
+- Started using enums where ever possible when passing flags to 
+  subroutines. This helps make the source much more readable.
+- Corrected a bug where a vertical database listing was being used in
+  the query command.
+- Added new argument to parse_args() to prevent command arg overflow.
+- Renamed ua_db_query.c ua_query.c.
+- Split scan.c out of lib/util.c
+- Perhaps I have *finally* fixed the command line history in gnome-console.
+- Added support for smartalloc for any global new or delete command
+  by overloading the global operators.
+- Made the default time with no qualifier day rather than seconds.
+- Fixed a bug in the store_size() routine that improperly converted from
+  double to uint32_t.
+- Started using "bool" where possible.
+- Zap SD session key once it is used.
+- Added *lots* more checking for strcpy -- bstrncpy(), ... 
+- Added CreateTime field to FileSet record and print it to distinguish
+  FileSets. 
+- Print an information message when a new FileSet is created.
+- Include the FileSet date/time in the Job report.
+- Indicate if a Job is upgraded in the Job report and from what previous level.
+- Incremented the database version.
+- Ensure that any DB error message is printed if the start_time of a previous
+  save is not found.
+- Free orphaned buffer in ua_restore.c in case of database error.
+- Implement enum for response DISPLAY_ERROR and NO_DISPLAY
+- Implement enum for create_pool (POOL_OP_CREATE, POOL_OP_UPDATE).
+- Make sure FileSets printed in restore are in order.
+- Add a number of bstrncat, and other protected string operations.
+- Clean up old structs in dird_conf.h
+- Remove all Slot invalidation code.
+- Add Automatic choice message to all do_prompt() calls.
+- Eliminate JobId from restore if not used.
+- Clean up a few error messages.
+- Make fill/unfill commands work correctly in btape.
+- Enhance btape fill and unfill commands.
+- Implement real Pmsg() code so that negative levels work in Dmsg()
+- Implement block number check -- had to turn it off because it doesn't
+  work.  Need to verify that it is the correct block and that block
+  numbers are properly written.
+- Moved readline from depkgs1 to depkgs.
+- Reworked the configure code to handle readline correctly. This was broken
+  mostly due to the fact that the readline routines are nested down one
+  directory.  Also, I missed one header file that was needed (possibly added
+  in a later version).
+- Put correct include on the dependencies make for Console readline.
+- Remove JobMediaId from VOL_PARAMS (no longer needed).
+- Sort VOL_PARAMS by JobMediaId using SQL in cats.
+- Add jcr as argument to block.c read_block... routines so that error
+  messages are immediately displayed.
+- Make bsr_dev() edit an error message if it is turned off and return 0.
+- Add checking for the BlockNumber in the read routines -- lots of
+  false matches are found -- much check writing end.
+- Now sort bsr volumes by JobMediaId -- produces better results.
+- It turns out that under certain circumstances, when doing a restore, the
+  Volumes will not be written to the BSR in the correct order.  I don't
+  know exactly why, but many thanks to Dan Langille for reporting this.
+  The solution is to sort the Vol_Params within each bsr (done), and to
+  sort the bsr chain (not yet implemented). Note, the bsr chain should
+  always be in order unless the user explicitly specifies the JobIds in
+  a different order.          
+- Began implementing C++ structs rather than typedef structs as in C.
+- Added volatile to a lot of variables that are used in two threads at
+  the same time. This should prevent improper optimization.   
+- Fixed a missing space in the "run job=xxx where=" the where was
+  glued to the end of the previous stuff (bootstrap filename). 
+- I *finally* found the cause of the mysterious failure of shell expansion.
+  It was due to the read() getting interrupted!  That's what opening up
+  SIGCHLD will do!
+- Remove unused default tape drive names.
+- Create a new status.c file in stored and split the status code out of dircmd.c
+
+2003-05-22 Version 1.31 Beta 22May03
+- I discovered that C++ permits "prototyping" structures e.g. struct A; is
+  a valid statement. This permitted me to eliminate all the void *jcr, in
+  favor of JCR *jcr, which pointed out a number of bugs in block.c.
+- Change lib/bmisc.c to bsys.c (system routines).
+- Add set_working_directory() to lib/util.c
+- Remove some unneeded setjcr_job_status() since Jmsg(jcr, M_FATAL,...)
+  already sets it.  
+- Do not increment jcr->Errors for Fatal errors -- they represent non-fatal
+  errors.
+- Fix a few more places in FD where Errors was not incremented.
+- Print unexpected (or incorrect) termination message returned from FD.
+- Use switch() instead of giant if statement in verify_vol.c
+- Protect overrun from do_shell_expansion() by passing max length.
+
+2003-05-20 Version 1.31 Beta 20May03
+- Add mandrake to platforms
+- Suppress error messages if no bytes written to tape.
+- Suck up bootstrap file even on error so that Dir sees our error message.
+- Pretty much finish off the Win32 backup code.
+- Add DESTDIR code to autostart for creating non-root rpms
+- Echo input read from a script in Console.
+- Clarify error message for VerifyToCatalog
+- Add error counts in restore for M_NOTSAVED.
+- Adapt bfile.c to handle both Win95 files as well as WinXP files.
+- Add MTIOCERRSTAT for FreeBSD (clear error status).
+- Correct double jobmedia record when cancel at EOM reported by Phil.
+- Correct possible write at beginning of tape during cancel at EOM
+  as reported by Phil.
+- Document in detail how Incremental and Differential jobs work.
+- Add non-fatal error count on backup and restore Job reports.
+- Remove a couple uses of lld -- now prefer to edit and use %s.
+- Fix directory could not be accessed on Win32.
+- Improve message indicating that last Full backup not found. 
+- Fix free() too early in directory traversal code.
+- Prune Jobs with no JobFiles or that have JobStatus!='T'
+- Add a few more command line scans for prune/purge.
+- Restrict valid characters in a Volume name, and document it.
+- Make new Win32 save/restore work. Still a bit more to do.
+- Use reentrant version of mysqlclient library.
+- Use more machine independent way of finding gcc version.
+- Fix race condition in sql_list where messages edited before locking.
+- Lots of testing saving/restoring 6GB files.
+- Add where to restore where=/tmp
+- Complete implementation of Win32 streams in FD. Must test. Also,
+  must implement new streams in SD.
+- Make termination of daemons more "error" tolerant.  
+- Make default "duration" days rather than seconds if there is no modifier.
+- Install bcopy.
+- Add detection of available Win API's so that a single binary will
+  work on all Windows systems.  Reference those APIs through a pointer.
+- Remove use_win_backup_api and enable it in bfile.c if system supports it.
+- Modify dev.c so that it works if MTEOM is not defined (BSDI).
+- Change MT_xxx to BMT_xxx to prevent conflicts with BSDI.
+- Detect strtoll() in configure.
+- Implement replacement for strtoll() for BSDI.
+- Add platform files for BSDI.
+- Use Jmsg() instead of Jmsg1() in acquire because File:line prefixed in dev.c
+- Use Jmsg() in write_block_to_dev() so that no messages are lost.
+- Rework autochanger code in restore to handle case of cassette not in magazine.
+- Implement Windows BackupRead/Write(). I now have permissions right!!!!
+- Additions to the manual (Purging, Autopruning).
+- Add doc to code in autoprune.
+- Begin adding Level = Base.
+- Make Jmsg recognize console and direct messages directly back to it.
+- Hopefully fix mess in mount.c when a tape expires.  
+- Fix restore bug recently introduced due to Unix backwards status convention.
+- New bacula.spec from Scott
+- Add globals for database name and version and print them in traceback.
+- Eliminate SubSysDirectory in each daemon conf file.
+- Implement get_yesno() and get_pint() in UA.
+- Make Jmsg aware of console. Messages now sent directly to Console.
+- Created a single bacula.spec.in for by the MySQL and SQLite builds.
+- Added proper configuration to console.in and gconsole.in
+- Start adding textdomain() code for translating.
+- A number of minor code cleanups.
+- Rework shell expansion just a bit.
+- Add rewind() when releasing a tape before acquiring the next one.
+- Implement addition of Description in Service entry for Win32.
+- Update manual to eliminate unclear autochanger points as mentioned
+  by Dan Langille.
+- Implement DESTDIR everywhere.
+- Rework spec files for 1.31 and combine the main spec and the client
+  only spec making a client package. At the same time, rename the packages
+  so it is a bit clearer to the user. Also fix the build to work
+  as non-root (scriptdir was not prefixed with $RPM_BUILD_ROOT).
+- Correct Auto Changers and all other forms to Autochangers in the
+  manual.
+- John reported needing to do two "mount" requests, and indeed that
+  was the case. It turns out that pthread_cond_timedwait() does not
+  always return zero when awaken by a pthread_cond_signal().
+- Include RunBeforeJob and RunAfterJob output in job output report.
+- Implement a "real" Admin job that prints a mini-job report.
+- Clean up a few error messages in findlib and filed.
+- Recent changes to gnome-console caused initial output to be
+  lost -- now fixed.
+- The Win32 version crashed after each job. After hours, it turns out
+  that when running with LocalSystem privilege (and not as a user), when
+  Cygwin does pthread_kill(id, SIGUSR2), it gets a memory fault.
+- Moved stored/fdmsg.c to lib/bget_msg.c, and moved SD messages to
+  stored.c.  So now bget_msg() can be used by both the SD and FD.
+- Changed Director's bget_msg() to be called bget_dirmsg() to avoid
+  any possible confusion.
+- Implemented bget_msg() in general everywhere in the FD except for
+  job.c where the Dir and FD are communicating.
+- Implemented a Director only heartbeat in the FD for the cases where
+  there is either no connection to the SD or the FD is already reading
+  from the SD.  start_dir_heartbeat() ...
+- Add heartbeat to restore and verify volume.
+- Add "Heartbeat Interval" to Storage resource, which sets interval the
+  SD sends heartbeats to the FD and DIR, 0 disables heartbeats.
+- Add "Heartbeat Interval" to FileDaemon resource, which sets the interval
+  the FD sends heartbeats to the DIR, 0 disables heartbeats. 
+- Added heartbeat from FD to Dir every HB_TIME rather than forwarding
+  SD heartbeats.
+- First cut label dialog.
+- Turn on new semaphore code for simultaneous Jobs.
+- Fix cancel trying to release semaphore's not acquired.
+- Implement get_pint() and get_yesno() for UA.
+- Implement find_arg_with_value() for UA.
+- All command line "slot" to be specified for label command.
+- Rework heartbeat code in FD to correctly terminate.
+- Fix btraceback to use smtp and to eliminate double //
+- Fix "storage" command to include ssl for verify and restores.
+- Add Heartbeat code when SD is waiting on a tape -- heartbeat every 20 mins
+  to keep stateful firewalls from timing out the connections.
+- Fix src/stored/Makefile.in typo causing problems in statically linking
+  btape.  Thanks to Lutz for reporting this.
+- Create an is_client_alive script for checking if a client is alive.
+  Using this script prevents generating error messages.
+- Added corrections and updates to manual provided by Phil -- thanks.
+- Added RequireSSL to each program/daemon configuration.
+- Added EnableSSL to each correspondent for each program.
+- Added the Console resource to the Director (need to
+  implement individual Console authorization).
+
+2003-04-28 Version 1.30 released
+- Fix command history for gnome-console (must malloc).
+- Add two cancel points in acquire_resources(). The job will not
+  be immediately terminated in all cases.
+- The new AutoMount code broke File archives -- fixed.
+- Correct watchdog mutex race introduced yesterday.
+- Add JobLevel to Admin run started by UA.
+- Add -v to daemon startup scripts
+- Implement bmicrosleep(sec, msec);
+- Implement When for "run" command.
+- Remove unsigned from socklen_t definition in hopes it will work better
+  with older systems.
+- Remove code that attempts to set PID dir and SUBSYS dir if they
+  do not exist because it set them to sbindir!
+- Modify mount to initially attempt to read the volume if Bacula
+  wants a tape, none is mounted, and "Automatic Mount = yes" is set.
+- Prohibit setting --sbindir and --with-subsys-dir the same.
+- Fix missing argument that cause Kaboom in update slots.
+- Fix orphaned bsock when UA gets error contacting FD or SD
+- Nearly full implementation of Win Backup API, but it does not
+  work due to lack of permission! Arggg!
+- Implemented restoring directory permissions as they should be.
+- Implemented reasonable regression script.  It found a number of
+  restore errors.
+- Implemented the following @ commands in the console that work directly
+  in the console rather than in the Director.
+    input - read input from a file
+    output - write output to file
+    tee    - tee output to file and terminal
+    time   - print current time
+    version - print current version
+    exit    - quit
+    quit    - quit
+- Implemented new bfile io routines that will permit implementation of
+  Windows native APIs for reading/writing files.
+- By default always update hard links with the prefix, but do
+  not update soft links.  It seems inconsistent, but it is what
+  cp does.
+- Implement wait command in Console that waits until no jobs are running. 
+- Fixed the < code in Include/Excludes, which forgot to skip over the <.
+- Do NOT attempt to chmod() a soft link as it will change the file behind
+  the link!
+- OOPS! Lutz ran into a problem. In attempting to prevent string overflows,
+  I used bstrncpy() on a variable that was malloc'ed thus truncating 
+  Volume names!  Arrrggggg!
+- Lots of documentation of new features.
+- Rework Volume name scanning in console, made much more logical
+  and corrected a bug (confusion in calling sequence).
+- Cleaned up a few error messages in cats adding more info.
+- Add the IP address to error messages due to bad connects to servers.
+- Implement default File output in config files so user can start
+  saving right away without a tape drive.
+- Protect inet_ntoa() with mutex in case it is not thread safe.
+- Eliminate termcap from use in gnome console.
+- Remove unused SD maximum volume files and maximum volume jobs. They
+  are implemented in the Director.
+- Make the default for Incremental and Differential saves to compare
+  against both st_mtime and st_ctime rather than just st_mtime.
+  This includes files moved or copied.
+  Thanks to Matthias Wamser for bringing this fix to our attention.
+- On Win32 clients, make a pass through the include/exclude patterns
+  and change any back slashes to foward slashes. Prevents creating
+  unusable directory names containing both conventions.
+- Move ls -l output on restored files to M_RESTORED class.
+- Make gnome-console compile correctly on RH8.0
+- label barcodes now works.
+- Implemented "update slots".
+- Tweak btape "test" to always print suggestion for re-read last block.
+- Implemented "Cleaning Prefix"
+- Update alter_mysql_tables.in
+- More work on barcodes.
+- Zap VolHdr in SD when attempting to label a tape that is not
+  there.  Prevents false tape names the next label command.
+- First cut of bar code reading is implemented. It doesn't do
+  anything but return the list to the Director.
+- Implemented relabel command that relabels "Purged" Volumes.
+- Check exit code in RunBeforeJob and err the job if it is non-zero.
+- Remove old testsuite -- too complicated
+- Print length when Authorization fails because of bad length.
+- Fix problem of NumVols in Pool getting reset on startup.
+- Implement full listing of DB records by listing them vertically
+  instead of horizontally.
+- Make changes to mysql scripts as suggested by Lutz Kittler
+- Fixed code to write Uname to Client record.
+- Fixed a problem (in btape) where Pmsg() was not printing.
+- Moved re-read last block test to last in "test" command of btape.
+- Lots of new documentation.
+- Fixed newvol.c to handle retrying 10 times if the volume name already exists.
+- Removed int_least16_t from sha1.h because it does not exist on some systems.
+- Release job in SD if canceled and waiting on a mount (better cancellation).
+- Prompt for Client in restore if not specified.
+- Print "Selection is empty!" if no selection list found.
+- Add new spec files and bacula.desktop from Scott.
+- Update client every time a job is run.
+- Add verbose option to daemons for printing more user error info.
+- Test if console works with readline 4.3 (yes, it is OK).
+- Release new depkgs
+- Release new winbacula.
+- Add Uname info to Client DB record.
+- Improve error messages and make them more consistent when a non-existent
+  Device is requested.
+- Separated the -mwindows option so that only Windows programs
+  are built with it (bacula-fd, ...) the tty tools such as console
+  dbcheck, smtp, testfind, ... are now able to be run in a standard
+  Windows DOS box.
+- Add | and < options to Exclude the same as in Include.  
+- Add typed in input to the text window in the gnome-console.
+- Change function that gets the entry text (previously had orphaned buffer).
+- Fix multiple Director problem in gnome-console (thanks to Lutz Kittler).
+- Thanks to Renato, I was able to test Bacula on a FreeBSD tape drive.
+  There are a number of significant differences: 1. reading less than
+  the number of bytes in a record returns an I/O error.  2. ioctl(MTEOM)
+  looses the file position. 3. Reading two two EOF marks (or ioctl(MTEOM))
+  leave you positioned after the second EOF, so you must backspace file
+  to be able to append.
+- Added BSF at EOM = yes/no to Device resource to allow proper positioning
+  at the end of a FreeBSD tape.
+- Made btape "test" do much better testing of error conditions (i.e.
+  it now ensures that the append went well). It will automatically
+  detect problems and apply fixes and then retry the test, if it
+  finally succeeds, it clearly says what directives need changing.
+- Add Scott Barninger's rpm changes to the build environment
+- Add changes to mtx-changer so users can add eject and sleep for
+  certain autochangers.
+- Implemented FreeBSD chflags (user defined flags).
+- Turn restore errors during setting of owner and modes into
+  warning messages -- for restoring files as non-root.
+- Fix how prefixes are handled in restoring soft links.
+- Modified btape "test" command to do only those things that
+  Bacula actually does. There is much more explanation, ...
+- Update manual.
+- Finally had to back up to gcc version 2 from version 3 to avoid version
+  3 nightmares.   
+- Final cygwin tweaks.
+- Move start time to *after* the resource locks are acquired.
+- Unable to duplicate Phil's disabling of Bacula with nmap, but
+  did make the authentication code a bit more conservative for
+  dealing with bad input.
+- Added code to the query command to escape all strings input
+  before substitution and sending to the SQL engine.
+- Escape user entered filenames for restore command.              
+- Cleaned up the waiting code a bit -- using broadcast instead
+  of signal and counting the waiters.
+- Implement new pthreads semaphore code.
+- #define new semaphore code rather than workq on USE_SEMAPHORE.
+- Lots of improvements to the document to address recent support requests.
+- Implement cycle through a set of tapes suggested by Eugeny
+  Fisher with the "RecycleOldestVolume=yes" record in the
+  Pool resource.  Basically this record causes Bacula to purge
+  to oldest tape when no more tapes are found.
+- Correct a number of small incorrect interactions between limit
+  variables during recycling.
+- Corrected a bug in db_create_media_record() where VolMaxFiles and
+  VolMaxJobs was not written to the database.
+- When the Director starts, the Pool record is updated in the
+  database with the current contents of the Pool resource.
+- Corrected bnet_connect() to immediately stop (rather than looping
+  for the timeout period) if there is a fatal error (socket, or
+  hostname to ip).
+- Reworked "purge" code to make purging Volumes easier.
+- Made "list volumes" list the volumes in all pools -- also
+  "list volumes pool=Default" does not produce and error message.
+- List Pool record after doing "update pool".
+- Remove pid file code from Win32 -- not really necessary.
+- Make bnet handle null jcr during cancel rather than crash.
+- Add CygwinInstall.bat and CygwinUnInstall.bat
+- Add db_lock() around newvol.c code to prevent race condition if multiple
+  callers want a new Volume name.
+- Lots of cleanup to Win32 code, with additional error messages.
+- Make Bacula work on Win95 (test for GetAttributesEx).
+- Add better error messages when end of media is reached or volume
+  capacity execed.
+- Turned off signal catching in readline(), necessary to keep console
+  from crashing on ctl-Z with RedHat 8.0.  Thanks to David Craigon for
+  testing this.
+- Make the 3rd and hopefully final change to the Finclude structures.
+  This new version permits multiple sets of options (more code to be
+  written) to be applied against the same set of files. Thus one can
+  have options that with match of *.gz and a different set of options
+  for *.c, ...
+- Integrated GNOME Console font resource code supplied by Phil Stracchino.
+- Check for job_cancelled() in bnet_connect() code to stop wait loop if
+  client not available.
+- Fix early end of file scanning conf file in lex.c, which previously
+  caused ABORT -- now reports error.  This could happen with an unterminated
+  string for example.
+- Move Maximum File Size code before write and detect error on writing EOF.
+- Additional fix for Solaris 2.6 and a bdb.c fix submitted by Armin Buehler.
+- Added detection for Solaris 2.6, which uses older setsockopt() calls.
+- Defined sockopt_val_t for setsockopt() calls.
+- Added fixes sent by Bevan Anderson that fix multiple connects to FD
+  (I zap keys for security, so must put back dummy key).  Also a fix
+  to the Internal database that wrote garbage after the filename in
+  the database.
+- Back out the __SVR4 changes.
+- Add automatic configuration of socklen_t
+- Attempt to fix problems reported by Lutz with multiple simultaneous
+  open file Volumes (experimental code). Serialized acquire. This may
+  fix the problem, but more thought and testing is necessary.
+- Add table of "supported" autochanger models.
+- Add Solaris 2.6 (__SRV4) changes sent by Peter Schmitz.
+- Correct tape selection code in SD (|| => &&). Thanks to Chuck Hemker
+  for the patch.
+- Eliminate FileOptions. Implement new Finclude and Fexclude that
+  have file options contained in it.  New structure must be transmitted
+  to FD.
+- Split Include/Exclude into new inc_conf.c file.
+- Cleanup new Include/Exclude and FileOptions.  Structures in Director
+  now correct.  Must transmit FileOptions to FD.
+- WARNING:  With the adddress and port code in the Catalog you MUST
+  remove old address= and dport= records!!!!!
+- Added code to remove cancelled jobs from the workq -- needs testing.
+- Added first cut AIX from output James MacLean sent me.
+- Second cut of FileOptions.
+- First cut of parsing FileOptions and Counters.
+- Added address:port for MySQL as well as socket for local access.
+- Fixed job.c in filed to properly handle excluded files. Apparently
+  I changed the daemon protocol but forgot to update the code.
+- Enhance testfind to handle include and exclude files
+- Fix getdomainname() prototype for Darwin
+- Added new -u and -g options for specifying userid and groupid to
+  use when running, so that Bacula can reduce its privileges.
+- When Bacula was hanging due to an NFS volume being down, I 
+  fixed a few places in the File daemon where is should have immediately
+  terminated the connection instead of waiting for the Director to do so.
+- Added first cut support for Darwin.
+- Temporarily comment out the O_NOFOLLOW to avoid possible subtle problems.
+- Implemented O_NOFOLLOW in creating files in create_file.c to prevent
+  creating a file at the end of a symbolic link.
+- Use chown() if lchown() does not exist (e.g. Darwin).
+- Always close stdin on startup to avoid having /dev/console attached.
+- Change all DATE occurrences to BDATE because it is used by Cygwin headers.
+- Add printing of Volume names in SD status output.
+- Display all open devices in device chain in SD status output.
+- All changing Pool in console run command.
+- Thanks to Eric Bollengier for pointing out that the run_program()
+  return status was not correctly generated. Now fixed (I hope).
+- Corrected crash in Internal Database getting Volumes.
+- Flush all daemon messages at the end of every job.
+- Fix Install.bat script so that Bacula restarts after reboot on WinNT/2K systems.
+- Minor changes in the gnome-console directory.
+- Integrated in my old Tcl/Tk code into src/tconsole and moved it up
+  from C to C++.  Pretty crude, but it is a beginning.
+- Close syslog() %n exploit in message.c
+- Edit space before each line in gconsole.
+- Added INCEXE structure so we can have FileOptions.
+- Added support for multiple simultaneous open file volumes.
+- Fix hard linked files so that the one saved is always restored.
+- Add * to restore "dir" listing to indicate marked files.
+- Add ability to make md5sum and sha1sum in lib directory.
+- Work a bit more on the new daemon protocol.
+- Use unmask of 022 or more restive
+- Create File volumes with 0640 permissions
+- Added support for SHA1 signature. Need to modify DB to have type.
+- Document SHA1.
+- Work a bit on getting proper child status from bpipe calls.
+- Added Ludwig's mtx-changer to the examples/devices directory.
+- Added a Warning not to use the Internal Database when it is initialized.
+- Compiled and tested SHA1, and added it to the library.
+- Added code to print the "load slot" status after autoloading.
+
+=============================================================================
+2003-01-24 Version 1.29 released
+23Jan03
+- Tightened up permissions on all .conf files to be 640 so they are not
+  world readable.
+22Jan03
+- Added prefixlinks=yes/no Job record to specify applying the Where
+  prefix to absolute soft links.  Code is not yet passed to FD, because
+  FD would then be incompatible with version 1.28.
+- Added skeleton of installation for Gentoo release for Patrick Naubert.
+- Add timer on open() for reading or writing a FIFO file.
+- Put btraceback and btraceback.gdb in sysbin dir (a bit of polution,
+  but at least dumps will work).
+20Jan03
+- Added "append" all messages to a log to default bacula-dir.conf
+- Added WriteBootstrap to default bacula-dir.conf
+- Made smartall.c print "Out of memory" if malloc() fails.
+- Added pthread btimer routines.
+- Added timer to FIFO open statement
+- George was still having problems with VolUseDuration failing.
+  On looking into it, one line of code subtracting 1900 was
+  mysteriously missing from the source -- bizarre.
+18Jan03
+- Yesterday's version corrects all the problems I was
+  previously having, and my production jobs are now completing
+  properly.
+- Added a #define dev_cap() to test the capabilities bits. I just
+  makes the code a bit shorter and a bit simpler.
+- Added phase 1 support for an output fifo device. The big 
+  difference here is that it is a STREAM device, which means that
+  Bacula will only write to it and not read. Thus, Bacula assumes
+  that the correct "Volume" is mounted and will construct a valid
+  label (without needing the Volume to be prelabeled), and write
+  to the device.
+- Added phase 1 support for input from fifo device (suppress re-read,
+  add empty buffer flag).
+17Jan03
+- Improve printout of dbcheck with # files/path fixing.
+- Zap SD authorization code after use.
+- Added <> back to smtp (think about this some)
+- Doc
+16Jan03
+- Massive change to add jcr as the first argument to nearly
+  every db_ call. This is because I was storing the jcr in the
+  db structure, which will not work because everyone shares
+  exactly the same structure.
+- More cleanups of error termination status in filed.
+- Found another bug in message.c where %s was missing in JmsgN. A lot
+  of cleanup in message.c
+- Found places where filename listing was made (restore, verify
+  vol) where the buffer could possibly overrun.
+- Chain include files on the end of the list so that the
+  order will be correct.
+- Rewrote mtx-changer to output one slot per line terminated by
+  a colon followed by an optional Volume Tag for the "list" command.
+  Preparation for handling Volume Tags.
+- My production crash remains elusive. Adding debug code or running
+  under the debugger eliminates the problem. I found a case in
+  message.c where I was extending the message string by two 
+  characters to send it to the console. VERY BAD. Rewritten.
+- Started implementing fifo and program handlers (i.e. streams)
+  in the Storage daemon. Lots to do.
+- Added a trace capability where trace statements are written
+  to a file. Tmsg(). Hopefully this won't be used much.
+- Running lots of "production" saved by scheduling a few minutes
+  after the current time -- slow process ...
+15Jan03
+- Removed <> on From and To in smtp.c as suggested by James MacLean.
+- Added code to suppress spurious error messages during cancel,
+  but I was unable to eliminate all errors -- to be worked
+  on later.
+- Up size of print buffer from 2000 to 5000.
+- My production run failed again. I'm beginnig to suspect 
+  hardware problems because running by hand or under the
+  debugger always works -- we will see.
+- Added Update Volume VolFiles to reset correct tape files 
+  a bit dangerous.
+- Use the mysql_escape_string() rather than internal version.
+14Jan03
+- Cleanup handling of JobStatus by creating a subroutine.
+- Fix a number of minor things with JobStatus.
+- Print FD and SD JobStatus on backup report.
+- Add JCR to findlib -- so now FD stops normally when cancelled.
+- My production Director segment faulted during the second Job.
+  I haven't been able to track it down. After rebuilding, all
+  jobs finished correctly.
+- In investigating the duplicated Paths, I found that there
+  were 10,552 of them -- only Path records. After checking the
+  code, I do not see the reason, but I've enhanced the code to
+  print the full path name.
+- I made a few improvements to tools/dbcheck. Mostly it provides
+  a bit more feedback with verbose mode on when eliminating
+  duplicate filenames or paths.
+13Jan03
+- During four simultaneous backups, the File daemon started
+  detecting buffer corruptions. It turns out to be due to the
+  fact that the smartall.c routines were not thread safe. They
+  are now.
+- Based on input from James MacLean and team, I eliminated a number
+  of places where printf could be recursively called by using "%s".
+- It turns out that because of an error of my understanding of
+  mysql_escape_string(), the last argument was taken as the length
+  of the string to be escaped rather than the maximum length.  I've
+  now corrected all my code -- Thanks James.
+12Jan03
+- George Motter reported problems with UseDurations, and it seems 
+  that there were a number of inconsistencies and problems with
+  FirstWritten and LastWritten.  Hopefully for the most part they
+  are now corrected.  Also fixed LabelDate if done through Console.
+- Try to chase down reasons why there would be buffer overruns.
+  Added P & V around referencing last_fname for status.
+  Rewrote find_one.c with MEMPOOL, but not yet tested enough
+  to commit.
+10Jan03
+- Give extra margin to converting filenames from Unix to Windows
+  in attribs.c of findlib -- dumb cygwin API doesn't provide for
+  a length.
+- Added file:line traceback to size_of_pool_memory, check... and 
+  realloc  in an attept to get closer to the memory overrun reported
+  by James MacLean.
+09Jan03
+- Made yet another fix to quoted string -- paths!  Thanks to
+  Scott Medlock for reporting this.
+- Made | and < work.
+- Implemented FIFO reading/writing. To do so, simply explicitly mention
+  the fifo file (named pipe) in the Include AND add the new option
+  readfifo=yes
+08Jan03
+- Started implementing | and < on Include names.
+- Changed source to . in cats directory as requested by Andrew Kokarev.
+
+=============================================================================
+2003-01-05 Version 1.28b released
+- Corrected a typo of working_directory in bacula-dir.conf
+  reported by James MacLean.
+- Fixed the fact that path and filenames in some cases were not
+  being quoted before going into the database. Many thanks to
+  James MacLean for reporting this.
+
+=============================================================================
+2003-01-05 Version 1.28a released
+- Corrected a missing quote in bacula-dir.conf reported by James MacLean
+
+=============================================================================
+2003-01-05 Version 1.28 released
+General:
+- Implemented Bare Metal Recovery for Linux and manual procedures for Solaris
+- Now using only a single technotes file kes-1.28 and will add to
+  it as the development goes on.
+- Wrote a general purpose bi-directional pipe command. This replaces
+  previous use of pipes as well as the run_program previously used.
+- Make BSRs stop if no more matches are possible.
+- Allow unliminted number of devices in Storage daemon.
+- Allow connections to Storage daemon before all devices are initialized.
+- Better documentation (and btape test command) on using fixed block
+  tape drivers.
+
+Changes submitted this submission:
+04Jan03
+- Add cygreadline5.dll to Win32 release -- needed for console
+03Jan03
+- Add scripts make_catalog_backup and delete_catalog_backup that makes and
+  deletes an ASCII copy of the catalog for backup. An example of how
+  to use it is in the <bacula-src/src/dird/bacula-dir.conf file.
+- Made a nicer column oriented listing of scheduled jobs for "status dir".
+02Jan03
+- Added backup/restore of raw partitions.
+- Corrected restoration of files in root directory (problem with
+  splitting path from file).
+01Jan03
+- Finally decided to cleanup handling of splitting path and filenames
+  in the cats directory. Now the code is in one place sql.c and it
+  is done using Pool memory, so there are no length restrictions.
+31Dec02
+- Add start of Solaris bare metal recovery
+- Add Site Visit usage statistics to Web page
+- Got Bacula listed on www.backupcentral.com
+30Dec02
+- Retest bare metal recovery on Linux 2 times with verify
+- Cleanup printout of verify differences using proper casting to
+  handle shorts and long longs.
+29Dec02
+- Added --enable-client-only to ./configure
+- Modified --enable-static-sd to work better and documented it.
+- Fixed Restore options (never,ifnewer, ...). They now work.
+- Moved the stored.c Resource lock into the allocation thread so
+  that the same thread sets/clears it. This created a problem on
+  FreeBSD.
+28Dec02
+- Added more rescue documentation.
+- Did a spell check of the Bacula doc.
+- Modified bscan to use the working directory as specified in the
+  configuration file as the default.
+25Dec02
+- Fixed an important bug reported by George Motter that caused only
+  the last option on an Include record to be used (all previous options
+  were lost).
+24Dec02
+- Chase down some inconsistencies in creating Media records from
+  the Pool defaults, and in updating/creating the Pool from the
+  resource. Also fixed the cats DB routines to include all
+  fileds (VolUseDuration was missing for example).
+21Dec02
+- Added building static versions of daemon static-bacula-dir, ...
+- Fine tuned the rescue (bare metal) code including support for grub.
+- Added skeleton freebsd rescue
+- Corrected SQL syntax error in autoprune code (JobType => Type).
+- Added error messages for SQL errors in autopruning.
+19Dec02
+- Documented Bare Metal Recovery
+- Create new "rescue" directory containg the Bare Metal Recovery code.
+- Fiddle with SQL a bit for pruning as apparently the last InitCatalog
+  was pruned after the expiration date eventhough it was the ONLY copy!
+  I'm not sure this is fixed yet.
+18Dec02
+- Allow Director to pass a NUL where string to FD (fix in FD).
+- Fix installation mv of query.sql.
+- Make sure btraceback.gdb is not wiped on "make distclean"
+- Corrected a bug in mod of replace options pointed out by Dave Anderson.
+16Dec02
+- Started adding FileOptions ...
+- Fixed  and incorrect print out of the number of files restored (Jarif).
+- Finally fixed EndBlock (and file address for Files) in catalog!
+- Added hostname to tape header as always planned.
+- Removed Level code (will not implement unless strong demand exists).
+- Tweaked bscan to print number of errors ignored before first SOS.
+- Enhanced btape "fill" to permit using one tape and to dump last
+  block before writing and upon read back.
+- Make fsf_dev() return 0 on fail and 1 on success.
+- Use new db_get_job_volume_parameters() to enhance Write Bootstrap to
+  contain more info (start/end file/block, file indexes).
+- Added --enable-static-fd, sd, and dir to configuration to enable making
+  static versions of the daemons.
+13Dec02
+- The btape test program was indicating errors on Adrian's machine
+  using the ATAPI (ide-scsi) tape drive. It turns out that this
+  is a fixed block driver as a consequence, Bacula must be setup
+  to write fixed blocks. btape was not always using the fixed
+  blocks defined in the Bacula config, so that has been updated.
+  It now works fine. A lot of tips added to the Bacula test command 
+  to help guide the user.
+- Documentation of the above significantly improved in the manual.
+12Dec02
+- Added code in watchdog to permit setting and clearing child timers. If
+  the timer expires, the child process is killed.
+- Modified restore to handle differential jobs.
+- Added a new test to the btape "test" command
+09Dec02
+- More documentation of new features (week position in scheduler, bsr).
+- Re-read last block written on full tape to verify it.
+- Fix segmentation fault with btape fill command due to missing FileSet MD5.
+07Dec02
+- Created better SQL input editing routines str_to_int64 and str_to_uint64()
+- Pull Client from database in Console restore command.
+- Create a Unique list of Volumes to be mounted (previously had repeats).
+- Made many of the SQL searches better by using the ClientId rather than the name 
+  in the restore Console command.
+- Modified reading of a tape to include the VolFile info. Once the
+  tape is past the specified file, reading stops.  The BSR now includes
+  both the VolFile and VolBlock. Currently VolBlock is not used.  
+- Handle multiple volumes better by creating a real volume list with all
+  parameters in it.
+- Display "At prompt waiting for input" in gnome console when at subcommand   
+  prompt.
+- Broke ascii to internal and internal to string editing routines out into
+  new lib/edit.c file.
+02Dec02
+- Added a readme and an afs-bacula script to the examples directory
+  that permits Bacula to backup an AFS filesystem. Thanks to
+  Lucas Mingarro for the submission.
+- Added A Sun-desktop autoloader script and Device definition to the
+  examples/devices subdirectory.  Thanks to Lucas Mingarro for the
+  submission.
+- If the WriteBootStrap fails, the job will now be marked in error.
+- Added a week position to the scheduler syntax that allows you to
+  specify 1st, 2nd, 3rd, 4th, or 4th, or first, ... fifth as a week
+  position specification in front of a day. So if you say
+
+    1st sun ...
+
+  the scheduler will start only on the first sunday of the month.  The
+  day specification can also be a day range e.g. sun-fri.
+  This code is untested.
+- Implemented bpipe.h and bpipe.c in src/lib, which defines a bi-directional
+  pipe.  This allows executing other programs and sending them information
+  as well as getting info from them.   
+- Replaced the previous pipe usage with bpipes in RunBeforeJob and   
+  RunAfterJob.
+- The mail program now uses bpipes rather than pipes, which means that any
+  error output will appear in the job output (truly bi-directional).
+- Modified BSR to handle counts and to stop when no more matches are possible.
+  This is untested.
+- Improved error messages in smtp.
+
+=============================================================================
+2002-12-12 Version 1.27d
+- This is a minor update that fixes a segmentation fault in btape
+  as well as reduces non-important error messages in bscan.
+
+2002-11-29 Version 1.27c
+- Yet another silly error duplicating a column name in the SQLite
+  make tables.  No code change, just a make file.
+
+2002-11-29 Version 1.27b
+- Set DB version to 5 in DB make files.
+
+2002-11-28 Version 1.27a
+- Use g++ instead of gcc for testfind in tools 
+
+2002-11-27 Version 1.27 (26Nov02) released 28 November 2002
+
+General: from kes25Nov02
+- Mostly Cygwin changes
+
+Changes submitted this submission:
+- Updated bdb_find.c to have new calling sequence for db_find_job_start_time
+- dird/catreq.c edit in Volume name in error messages to SD
+- attribs.c switch to using the cygwin API to convert from POSIX paths
+  to Win32 paths. This now permits Win32 path specifications in Include
+  statements (all combinations not yet tested).  It also avoids the large
+  number of errors seen by Lutz if a Win32 path is specified in the Dir.
+- Update testfind help and remove set_attribsEx debug code.      
+- Build testfind as default.
+- Turn off debug message in stored/askdir.c
+
+General: from kes21Nov02
+- Another change in the database. You MUST either re-initialize
+  your database or use the appropriate ./alter_xxx_tables in
+  the src/cats directory.
+
+Changes submitted this submission:
+- Additional documentation.
+- Added MaxVolFiles to the database (not yet implemented in code).
+- Increased the database version from 3 to 4.
+- Change VolMaxBytes to MaxVolBytes, which is much more descriptive.
+- Compressed unnecessary spaces out of a lot of SQL statements.
+- Changed many %d to %u where unsigned integers are used.
+- Added the Bacula version and build date to each backup output.
+  This will help knowing what version of Bacula was used.
+- Implemented VolUseDuration MaxVolBytes, MaxVolFiles, and MaxVolJobs
+  based on maximums set in the Volume (Media) record rather than in the
+  resource. This means the values can be individually set on a Volume basis.
+- Allow commas separating Include options (this was a subtle bug).
+- Added maximum string length argments to a number of subroutines to
+  prevent buffer overflows. Most notably was do_prompt().
+- Replaced MANY occurrences of strcpy() with bstrncpy(), which guarantees
+  both that the length is not exceeded and that the string is properly terminated.
+  This has a risk of a certain destabilization -- as does the changes to
+  the SQL noted above.
+- In cram-md5 routine use my_name if gethostname() returns an error.
+- Increase timeout from 2 minutes to 3 minutes in authorization code.
+- Check the full string including \n in authorization.
+- Throw away any response longer than MAXSTRING.
+- Added a number of additional error checks on subroutine return statuses.
+- Replaced as many lld's with edit_uint64 as I could find.
+22Nov02:
+- Added MaxVolBytes to Pool record - had forgotten it. Updated DB version.
+23Nov02
+- Update manual to document new Pool/Volume attributes
+- Correct make_sqlite_tables (typo, plus missing value in Pool)
+- Fix bizarre behavior in gnome-console and console when auth fails.
+- Add Pool attribute query
+- Add a few more error messages in askdir.c
+- More strcpy() conversions to bstrncpy().
+
+General: from kes18Nov02
+- Did a number of cleanups of string copying to limit the length
+  and prevent buffer overflows.
+
+Changes submitted this submission:
+- Added a mutex arount the gethostbyname() so that multiple simultaneous
+  jobs get the correct address.
+- Added the MaxVolJobs to the Media alter tables script for MySQL (forgot it).
+- Changed arg to db_find_job_start_time to be POOLMEM for returning the string.
+- Add the new VolUseDuration and MaxVolJobs to all the db_ routines.
+- Use bstrncpy() in most places in the db_ routines to prevent a bad 
+  database from crashing Bacula (self protection).
+
+General: from kes13Nov02
+- You MUST either re-initialize your databases or use the 
+    ./alter_mysql_tables
+  or  
+    ./alter_sqlite_tables
+  in the <bacula-src>/src/cats directory to modify your database tables.
+- Major improvements to dbcheck including an interactive mode.
+
+Changes submitted this submission:
+- Implemented VolumeUseDuration and MaximumVolumeJobs which control
+  when a tape can be marked Used.
+- New tape status "Used" means it was used and cannot be used any more.
+- Defined utime_t which is 64 bit epoch time in seconds.  btime_t is
+  64 bit epoch time in microseconds.
+- Created alter_xxx_tables to add new columns (VolUseDuration, MaxVolJobs) to
+  database. Incremented db version.
+- Changed a few subroutine names concerning dates to be more descriptive.
+- Fixed several places where the last filename was not stored in JCR in
+  FD verify_vol.c and restore.c
+- Major update to dbcheck.  Unfortunately I used subselects, which work
+  perfectly fine in SQLite, but not at all in MySQL.  I must now rework
+  it for MySQL. What a pain!
+- Removed "Database found" from configure output. It was no longer used or valid.
+- Corrected doc --working-dir => --with-working-dir  Thanks to Tuck for 
+  reporting this.
+- Added the database name to the error message for mismatched DB version.
+- Commented out GMP and CWEB from configure as they are not currently used.
+
+General: from kes09Nov02
+- Converted the manual over to a new format written in wml. This
+  gives navigation buttons on the top and bottom of each page
+  as well as a standard page size.
+- Updated the main Web site, providing a menu bar to the left
+  and much better organization and presentation of the information.
+- Added code to recognize a Volume written with a larger block
+  size than specified. The code automatically adjusts. 
+
+Changes submitted this submission:
+- Created a new scripts directory and moved most of the scripts
+  previously in the main directory there. This cleans things up
+  quite a bit.
+- Moved the randpass stuff into autoconf.
+- ensure that the generic make_bacula_tables and drop_bacula_tables
+  are installed.
+- Added code to filed to allow it to be run from inetd.  Just add the
+  -i option.  I have not tested it.
+
+General: from kes30Oct02
+- Alex found a problem with GZIP compression -- fixed.
+- bacula stript fixes.
+- Segment fault in Director fixed.
+- Added openbsd to platforms
+
+Changes submitted this submission:
+- GZIP compression was broken for large files due to a variable that
+  is changed during the compression. This was relatively easy to fix.
+  However, there were a number of fixes required to make GZIP and SPARSE
+  files work together. Found one more place in bextract where SPARSE_GZIP
+  testing was missing.
+- During testing of the above, I ran into the restore problem of multiple
+  FileSet records. Fixed by including the FileSetId and the MD5 on the
+  selection string, then always using the FileSetId. It is a bit
+  confusing for the user, but ...
+- Francis found a problem with bacula.in (fixed - thanks)
+- I found another problem with bacula.in, so now it REALLY should work
+  on most systems.
+- Added the Replace options code for restores. Not tested.
+- Fixed an ugly stack overrun bug in reading the config file
+  that has been in for a long time.  I found this in testing on FreeBSD
+  where the Director seg faulted.
+
+General: from kes29Oct02
+- Major change to the bnet communications routines.
+
+Changes submitted this submission:
+- Modified the bacula script to use pid files, so this script should
+  now work on more platforms.  Updated devel_bacula as well.
+- Added the full GNU hostname on the configuration print output.
+- Added gettimeofday() to configure, and tweaked a few variables for
+  OpenBSD.
+- Added a chapter to the manual on Porting Bacula to other platforms.
+- Documented in Tips how to use the WriteBootstrap record.
+- Modified bc_types.h to error if 64 bit types are not found.
+- Pass replace option for restore to the FD (no code to use it yet).
+- Modify the FD to pass back the GNU OS string as well as the DISTNAME
+  and DISTVER. This needs to be put in the Client record in the catalog.
+- Major reworking of the bnet routines to eliminate the zero length which
+  previously indicated a signal. This risks to create some subtle communications
+  bugs.  The changes now permit blank lines to be sent from the user to the
+  Director.
+- Found and corrected a few more places where the Win32 attributes were not
+  being recognized.
+- Permit spaces in the Where string (restore) by bashing/unbashing them.
+- Handle quotes correctly in the Console program (actually Dir ua code).
+  Previously they were not handled in the middle of a string.
+- Corrected two error message (error reading file), which previously stated
+  it was a network error.
+- Reworked the files in the binary Windows release. Removed unused programs 
+  and added a README with the copyright as suggested by John. Also added
+  console.exe to the release.
+- Found and corrected an autoloader mount problem where the wrong tape
+  was specified.  Previously it looped, then gave up.  Now it correctly
+  detects the volume is not correct and zaps the Slot in the catalog.
+
+General: from kes23Oct02
+- I have mainly worked on getting all the details of a Restore
+  to work correctly (new tape format, support for Win32 
+  attributes, ...)
+- Trademarked name Bacula.
+- Implement Bacula tape format 11 (1.0 Immortal). This format
+  will be maintained forever.
+- Accept Any Volume is yes by default. This modifies Bacula's behavior
+  when writing tapes.
+
+Changes submitted this submission:
+- Corrected a bug on FreeBSD where CFLAGS would get a "yes". I was
+  unable to reproduce this, but a user confirmed the correction.
+  It was a problem with detection of largefile support, which FreeBSD 
+  has by default.
+- Added a new "license" chapter in the manual. Re-licensed a number of
+  library routines (bnet.c, hmac.c md5.c, cram-md5, ...) with LGPL so that they
+  can be used in proprietary software to access Bacula if so desired.
+- Move Director's AutoChanger doc to correct location (in Storage      
+  resource). 
+- Document why trademark (to protect compatibility).
+- Implement and turned on Bacula tape format 11 (also BB02). This
+  format moves the VolSessionId and VolSessionTime from each record 
+  header into the Block header. This is MUCH more efficient when reading
+  records as now whole blocks can be skipped.   
+  Also added JobStatus in End Of Session record, and added MD5 for
+  FileSet, which is necessary to insure uniqueness.
+- Implement a new Bacula time format for btime_t. It is Epoch time
+  in microseconds (i.e. base 1 Jan 1970 in microseconds).
+  This replaces previous floating point times.
+- Added Win32 extended attributes. In doing so, I moved all attribute
+  handling from src/lib into src/findlib.  Added new streams for 
+  Win32 attributes and for GZIP Win32 attributes.
+- Modified "Accept Any Volume" so that it really permits any volume
+  in the pool to be mounted.  
+- Removed "Mount Anonymous Volumes" from Storage daemon config.
+- Implemented sparse files. You must add "sparse=yes" on the include line
+  for it to be enabled.
+- Print "None" in backup summary rather than 0.0% if there is no compression
+  enabled.
+- Improved error checking in daemon connection/authentication code to prevent
+  garbage data from harming a Bacula daemon.
+- All daemon tools MUST have a config file.
+- Completely strip drive specification on Win32 if a Where prefix is specified.
+- Corrected DB info for writing to files. Now the File Address is stored
+  in File-Block variables in the catalog.
+- All Storage daemon tools now use common code for acquiring/reading
+  Volumes.
+- If a device is unmounted, report it even if the device is not open. This
+  will help inform users who have BLOCKED Bacula by unmounting a drive.
+
+
+=============================================================================
+2002-10-12 Version 1.26 (10Oct02)
+General: from kes10Oct02
+- Changed Job name conventions to avoid : which is an illegal
+  character on Windows.
+
+Changes submitted this submission:
+- Added check for inet_pton to configure.in. If it does not
+  exist (e.g. Windows) use inet_aton
+- Documentation on GZIP.
+- Another restore doc example.
+- Documented btape fill command.
+- Set default restore directory from /tmp to /tmp/bacula-restores
+- Add additional no find error messages to sql_get.c
+- Creating a bootstrap file on Windows failed because the Job name
+  contained colons which are illegal on Windows. Replaced the
+  colons with periods.  This corrects the Windows restore problem.
+- Print number of files to be restored in "restore" command.
+- On Windows systems, if there is a prefix, completely eliminate
+  any drive: at the beginning of a path.
+- Minor corrections to the tree routines to handle Windows
+  files such as c:/ better. Previously it insisted on /c:/, which
+  would then not be found in the catalog for a "dir" command.
+- Modified cd command in restore to try /c: if c: fails.
+- Add a new S_ISWIN32 bit to the st_mode word so that low level
+  routines that create files do not print error messages.
+- More work must be done to restore all Windows files correctly.
+  Currently the following bits are not handled:
+    Archive
+    Hidden
+    System 
+  Also, all the dates are not properly restored.
+
+General: from kes09Oct02
+- More documentation.
+- Implemented new fill command in btape that permits filling
+  a tape and then reading it back to ensure that it works
+  with Bacula.
+
+Changes submitted this submission:
+- Added ReadBytes to JCR, which contains Job bytes read by
+  FD, JobBytes contains compressed output of FD.
+- Modified FD to pass back JobStatus, ReadBytes, JobBytes, ...
+  for backup jobs.  This is upward compatible.
+- Modified backup termination status report to contain the
+  compression ratio 100 * (1 - compressed-bytes/uncompressed-bytes)
+  This will always be zero if no software compression was
+  done, or if you are using a version 1.25 or older FD.
+- Pickup Job termination status of FD in backup, so now
+  the termination status represents the state of all three
+  daemons.
+- Implemented new fill command in btape that permits filling
+  a tape and then reading it back to ensure that it works
+  with Bacula.
+
+General: From kes06Oct02
+- Implemented first major cut of bscan -- program to scan a tape
+  and recreate a Bacula catalog.
+- Fixed lseek() relative negative seek that prevented writing multiple
+  jobs to a File volume.
+- Implemented BB02 tape format -- currently turned off for writing.
+
+Changes submitted this submission:
+- Updated README
+- Implemented new BB02 tape format, which moves the VolSessionId and
+  VolSessionTime from the record headers into the Block header.  It
+  is currently turned off.
+- Implemented new btime time/date format on the tape. This is currently
+  turned off.
+- Added JobStatus to EOS tape label. This is currently turned off.
+- Changed start_block, ... to StartBlock in JCR for uniformity.
+- Print a message telling which tables were dropped/made with  
+  ./drop_bacula_tables.
+- Return JobType and JobLevel in db_get_job_record().
+- Implemented get_current_btime(), which returns btime_t.
+- Bump debug message max size to 2000 bytes.
+- Add btime_t serial/unserial routines.
+- Rework all tape label routines to integrate btime and other
+  label format changes (currently turned off -- for writing).
+- Fix lseek() to always be positive -- block.c
+- Consolidate record, block, and label major #defines in block.h.
+- Major implementation of bscan. Some more minor tweaking will be
+  necessary.  E.g. add multiple records for multiple simultaneous
+  Jobs.
+- Cleanup lseek() to always use off_t as second argument.
+- Add new "created" tape label (EOT_LABEL). This generates a callback
+  to the read_records() routine when the final end of all tapes is
+  reached allowing proper termination and updating of the media records.
+
+General: From kes25Sep02
+- Added means to bind servers to specific address.
+- Documentation
+
+Changes submitted this submission:
+- Added DirAddress, FDAddress, and SDAddress records to the corresponding
+  resources that allow the server to bind to a specific address 
+  rather than any address.  This security improvement was suggested by
+  a user -- thank you.
+- Eliminated deprecated "Address" record from all sample Storage resources.
+- Made quite a lot of improvements to the bscan program. Much more
+  to do. Aside from details, it is able to recreate a database
+  from which you can do a restore.
+- The s option is not accepted on all versions of ar, so replaced it
+  by an explicit ranlib call.
+- Fixed a bug that caused the Director to crash if you rudely bring
+  down the console program in the middle of an SQL command.
+- Fixed a bug (missing break) that caused scheduled Admin jobs to
+  be listed as "Unknown type".
+- Removed old code from Storage daemon that used a separate FD port.
+
+General:  From kes14Sep02
+- Better key generation on non OpenSSL systems.
+- 64 bit file address support if available.
+- Implement autochanger for reading
+- Lots of cleanup of tape reading code.
+- Automatically create all Pool resources when Bacula starts.
+- Implement bscan.c
+- Implement autochanger use via the Console commands "add" and "label"
+- Begin implementation of a regression script 
+- Write bootstrap after ever job
+
+Changes submitted this submission:
+- After noticing that the non OpenSSL random key generator was
+  not good on Solaris, John wrote a very nice randpass generator.
+- Integrated John's makeSessionKey for generating the FD->SD
+  authorization.
+- Statically link tools (doesn't work on Solaris).
+- Document how to debug Bacula (new chapter in the manual)
+- Remove unneeded printing of error message in sql_get.c
+- Free SD description config record (previous oversight)
+- Bash spaces when sending Director names, and unbash them when 
+  received.
+- Ensure no divide by zero in rate computation in backup.c
+- Implement WriteBootstrap in backup.c
+- Allow tape reading to request volume information for any
+  volume.
+- Create all Pool resources at startup.
+- Show only Backup jobs in Restore listing of last 20 Jobs.
+- Handle 64 bit stat packets in restore.
+- Don't do shell expansion on store_dir in config if string 
+  starts with |.  This is used for piping the program for the
+  WriteBootstrap.
+- Ignore SIGHUP -- DéjàGnu was triggering this. 
+- Implement autochanger for reading, many changes to 
+  acquire_device_for_read()
+- Implement callback for reading Volume. Implement in bextract,
+  bls, and bscan.
+- Implement bscan
+- Add count to bsr.
+- Fix Volume in bsr.
+- Move autochanger code to new subroutine in mount.c
+
+=============================================================================
+2002-09-05 Version 1.25a (05Sep02) Released
+- Fix unitialized stack variable in bextract so it
+  will always read the currently mounted tape.
+
+=============================================================================
+2002-09-04 Version 1.25 (01Sep02) Released
+  General:
+- Added .cvsignore files in each directory to cut down on the
+  CVS output when scanning directories and finding Makefiles
+  and such which are not part of the CVS tree.
+
+  Changes submitted this submission:
+- Cleaned up a lot of the error messages in Verify, including
+  indenting.
+- Had to remove some of the "automatic" error message printing
+  in the DB because they are in fact things that come up 
+  for Verify but not really errors.
+
+
+  2002-08-30 Version 1.25 (30Aug02) Beta
+  From kes30Aug02
+- Fixed a bug where only the first file was restored if
+  it is hard linked. The other links were lost.
+- In some cases of restoring to alternate directories, softlinks
+  were not properly restored.
+
+  From kes28Aug02
+  General:
+- Bacula backups now run up to 12 times faster than version 1.24
+- Bacula can run multiple simultaneous Jobs.
+- Had to turn off TRANSACTIONS in SQLite because it doesn't work
+  with multiple simultaneous jobs (I'm working on this).
+- Added a better Job printout for Restore Jobs.
+- Added a save/restore Rate to backup and restore jobs. This
+  does not yet subtract out operator wait time so it will be
+  underestimated it the Job waits on the tape (mount/label).
+- Fixed a major bug caused by free()ing a buffer twice in
+  the Restore code. This made the SD more or less useless after
+  any restore Job. Arrggg!
+- DIR - SD protocol changed, both must be updated at the same time.
+- DIR - FD protocol changed in upward compatible way. Upgrade of   
+  FD not required, but recommended.
+
+  Changes submitted this submission:
+- Added bell to "make" when errors are detected.
+- Changed default compile option from -g to -g -O2
+- Additional documentation as usual -- much based on questions or
+  feedback from users. Thanks.
+- Fixed example config files to use new syntax and to have a 
+  Restore Job.
+- Define ETIME to ETIMEOUT for Irix
+- Added JCR filed to DB structure permitting direct printing error
+  messages from within the Database subroutines.
+  Some error messages may be printed twice as a consequence.
+  When I see them or someone reports them, I will remove the double.
+- Added JCR to the bsock structure. This allows direct printing
+  of network errors from within the network code.
+- Made most "trivial" debug messages have level 100 or greater. This
+  allows for easier debugging of new code using the range below 100.
+- Began replacing all Emsg() with Jmsg() using a NULL as the JCR in    
+  Jmsg() is the same as Emsg().
+- Fixed several crashes in the Director because of malformed config files.
+- Added SpoolAttributes to Job resource.
+- Pass CatalogFiles to SD. If set to no, the attributes are dropped 
+  within the SD rather than being sent to the DIR.
+- Cleaned up a number of information/error messages in user interface.
+  This includes eliminating the "pretty please" response in favor of
+  "yes/no" to delete volumes and pools.
+- Cleaned up quite a number of uninitialized variables reported when going
+  to -O2, most were harmless, but a couple could cause problems.
+- The cd command in restore was not working correctly (it didn't allow some
+  legal cds).
+- Fixed a segmentation violation in the directory tree handling code in 
+  the restore command.
+- Handle a few error conditions in the restore command better.
+- Permit "Where" to be set to nul in modification of a run command.
+- Clarified the error message for Verify if an InitCatalog has not previously
+  been done -- thanks Chuck.
+- Add MaximumConcurrentJobs to FD.
+- Added code to mem_pool to die if a buffer is released twice.
+- Lots of work done on SD for multiple simultaneous jobs. Split device.c
+  into device.c, mount.c and acquire.c
+- Started writing new lock code for SD, but may back it out -- needs more
+  thought. Current code works, but is too complicated. Maybe can simplify it.
+- Cleaned up the SD tools code quite a bit. Added bootstrap to all tools.
+- Ensure that tape session labels are not split across two blocks. This makes
+  reading them back much easier.
+- Fixed another restore bug concerning tape labels on multi-volume saves.
+
+=============================================================================
+2002-08-14 Version 1.24
+  From kes12Aug02
+- Made a new tools directory.
+- Moved smtp into the tools directory.
+- Created a dbcheck program in the tools directory that
+  checks for certain database errors and if requested fixes them.
+- Put the database link flags on DB_LIBS so that it now only is
+  on binaries that actually need it.
+- Document dbcheck and testfind programs.
+- Move testfind to tools directory.
+- Check for FileSet after getting Client name in Restore command.
+  Modify all necessary SQL commands to accept FileSetId.
+- Add a db_get_fileset_record in cats directory.
+- Correct list last 20 files concatenation to be MySQL 
+  dependent. They aren't SQL standard. Use SQL standard || for
+  other SQL programs.
+- Modify dir command in file selection to produce a long form
+  listing of the file/directory name.
+- Add platforms/irix/*.in files to CVS
+- Make Console command scanner accept quoted value fields.
+- If after selecting Client to restore, there are multiple
+  FileSets, ask user to select one.
+- After obtaining JobIds for restore, ensure that there is only
+  one MediaType, and select a Storage resource to be used.
+
+  From kes11Aug02
+- Made restore actually work.
+- Made console and gconsole be configured (requested by Chuck)
+- Updated kernstodo
+- changed fs in Job record to fileset for clarity
+- The console run command was not properly picking up the command
+  line arguments.  Fixed!
+- Changed add/remove/rm to mark/unmark
+- Volume keyword VolumeName was wrong, changed to Volume (in restore bsr).
+- Pass jcr to parse_bsr, and if non-NULL, it will output error messages
+  to Job stream rather than Emsg.
+- Modified lexical scanner to include caller context so that jcr can
+  be stored in lex context allowing error messages to be properly 
+  routed.
+- Renamed the Job message chain to be jcr_msgs. This eliminated the      
+  previous confusion with the default value, now named jcr->messages.
+- Implemented multi-volume bsr records.    
+- Implemented pm_strcat() and pm_strcpy() to cat/add to memory pool
+  buffers in same way as strcat/strcpy, but expanding buffer.
+- Modified db_get_volume_names to handle arbitrarily long Volume list.
+
+  From kes07Aug02
+- If the Console program terminated during the printing of messages,
+  the message file was left locked. This was corrected by using the
+  new read-write lock code.  
+- Implemented Pw() and Vw() for obtaining and releasing a write lock
+  using the rwl_xxx routines.
+- Deleted some old pthread_mutex code from mysql.c
+- In making the Irix port, I previously corrected the base64 routine so 
+  they were not sensitive to the machine definition of char. This made
+  them incompatible with previous versions invalidating MD5 signatures
+  which are in base64 format. I have now corrected this, making the
+  routines compatible with the previous version but also insensitive
+  to the default definition of char.
+- Removed some unnecessary NPRT() usage in signal.c (pointed out by
+  the Irix compiler).
+- Add back BNET_NONO for compatibility with older File daemons.
+- Implement runing a restore Job in the restore command.
+- Make installation of query.sql unconditional. To prevent you own file
+  from being overwritten, give it a different name.
+- Made parse_command_args() in ua take command from ua->cmd, this
+  simplifies it and allows usage in other places -- e.g. building
+  arguments for created run command in restore.
+- Cleaned the naming of s_full_ctx to be s_jobids.
+- Write the bsr created in restore to "working-directory"/restore.bsr
+- Fix bugs in command line scanner in run command -- also some misplaced
+  breaks!
+- Eliminate static cmd in ua_server.c
+- Eliminate segmentation fault when using the Run command in the
+  Console -- forgot to init_msgs().
+
+  From kes06Aug02
+- Did a good amount of documentation.
+- Added sql_cmds.c to CVS, forgot, pointed out by Chuck.
+- Added new platforms/irix directory to CVS
+- Turn off transaction debug code in sql.c
+- Reworked the scheduler so that it handles the same Job starting
+  twice in the same hour. Previously it took one or the other.
+- Tightened up the "slop" in the timings that I programmed to ensure
+  that the same job isn't run twice or that no job was missed.
+- Increase the sleep time.
+- Used job_type_to_str() in status so that Admin jobs are correctly reported.
+- Add internationalization message chars to a number of routines
+  in util.c
+- Make the watchdog timer clear the mutex when it exits.
+- Some tweaks to the Restore command. It needs fixing when a Job spans
+  two or more volumes.
+
+  From kes05Aug02
+- Initial cut at adding Irix File daemon support.
+- Lots of work on the restore command.
+- Take a stab at eliminating the "broken pipe message"
+  when the console program prematurely terminates.
+- Reimplemented transactions for SQLite by keeping
+  them all in the same thread.
+- quit in the Console program now waits for Bacula to
+  quit. To immediately quit, you must enter .quit
+- Eliminated BNET_EOF -- this COULD have some negative consequences
+  on interdaemon communications.
+- Define Job termination status for Admin jobs.
+- Write new bstrncpy() function that guarantees that strcpy is
+  properly terminated.
+- Fixed command input in ua_input.c to accept quoted items as a
+  single field. 
+
+  From kes01Aug02
+- The changes that added indexes to the SQLite database were
+  lost -- thanks to Chuck for pointing this out. Redone.
+- Fixed a problem quoting strings in SQLite. This showed up
+  as database errors with files containing ' or " in the filename.
+- Implemente restore command -- still in progress.
+- Added indexes to all fields in SQLite that exist in MySQL.
+- Moved unused immortal files from src/lib to src/immortal.
+  This will permit splitting depkgs.
+- Started work on adding embedded MySQL. Cannot get the tables
+  to work for the moment. Please don't try to use this option.
+- Convert to using single quotes for enclosing all strings.
+- Implement correct quoting algorithm for SQLite strings.
+  Is dequoting needed?
+- Started centralizing SQL statments in the Director in sql_cmds.c
+- Changed a number of M_ABORTs to M_ERROR_TERM so that program terminates
+  but does not produce a dump.
+- Allow wild-card matches in bsr for Client name, and Job.
+- Change OflineOnUnmount=no as default.
+- Fixed improper printing of filenames containing a space in bls.c
+  Thanks to Carlos for reporting this.
+
+===========================================================================
+2002-07-26 Release 1.23a
+- Fix segmentation fault is FD status.
+- Turn off TRANSACTIONs for SQLite.                        
+
+===========================================================================
+2002-07-23 Release 1.23
+  From kes22Jul02
+- Updated Bacula to handle some minor differences in MySQL 4.0.2
+  (still works with older MySQLs).
+- Updated MySQL documentation to correct some minor errors.
+- Added kernstodo to CVS
+- Fixed create_mysql_database, which I recently accidently broke.
+- Disallow zero length volume names in Console program.
+- Create alter_mysql_tables and alter_sqlite_tables for conversion
+  from 1.22 table format to 1.23 table format.
+
+  From kes20Jul02
+- Investigation of SQLite performace problems reported by Chuck.
+- Updated ChangeLog
+- Updated README
+- made root@localhost the default email address because many smtp
+  servers reject root but accept root@localhost
+- Added an autochangers chapter to the manual.
+- Documented most of the new features in 1.23
+- Modified the SQLite interface code to start a transaction at the
+  beginning of a job and commit it at the end of the job. It
+  also commits it after 10000 changes. Hopefully this will
+  improve performance.
+- Set the default cache pages from 2000 to 10000 for SQLite (i.e.
+  about 15Megs of memory) hoping to improve performance.
+- Terminate last filename referenced in FD prior to copy to
+  avoid race problem with multiple threads and no locking.
+- Enhanced the status output to include the JobType                
+- Print an error message if the email program terminates in error.
+- If your machine has an MTUNLOCK, do it before doing an OFFLINE to
+  ensure that the door is unlocked.
+- Added code to stored/append.c to spool attributes. This is in
+  a testing stage and must be explicitly enabled.
+- Added a no_attributes variable to stored/append.c that prevents
+  the attributes from being sent to the Director. As yet, no way
+  to turn it on.
+- Modified SQLite code so that after 10000 updates any transaction
+  is committed, then restarted. This keeps it from using too much
+  memory.
+- Set the default cache size to 10000 pages (previously 2000).
+- Fixed a segmentation fault on Sun due to no default value for
+  the JobStatus.
+- Added the same indexes to SQLite that I exist in MySQL. This
+  VASTLY reduces CPU usage for lots of inserts.
+- Added spooling to bnet_send().
+
+  From kes18Jul02
+- The following two changes were prompted by questions/suggestions
+  from A Morgan.
+- If you have "AlwaysOpen = no" in your SD Device
+  resource, Bacula will free() the drive when it
+  is finished with the Job.
+- If you have "Offline On Unmount = yes", in your
+  SD Device resource, Bacula will offline (or eject)
+  the tape prior to freeing it.
+- Added Maximum Open Wait to allow open() to wait if drive is busy.
+- Added RunBeforeJob and RunAfterJob records to Job records.
+  This permits running an external program with the following editing
+  codes:
+    %% = %
+    %c = Client's name
+    %d = Director's name
+    %i = JobId
+    %e = Job Exit
+    %j = Job
+    %l = Job Level
+    %n = Job name
+    %t = Job type
+
+  From kes17Jul02
+- Added autochanger support to devices.c
+- Allow user to change Slot in the Volume record.
+- Implemented code in lib to run an external program
+  (tape changer)
+- Implemented a changer script for mtx.
+- Currently the changer commands used are:  
+    loaded -- returns number of slot loaded or 0
+    load   -- loads a specified slot
+    unload -- unloads the device (returns casette to slot)
+- Other changer commands defined but not yet used:
+    list   -- returns list of slots containing a cassette
+    slots  -- returns total number of slots 
+- Implemented ChangerCommand, specified in the SD Device
+  resource, permits editing of:
+      %% = %
+      %a = archive device name
+      %c = changer device name
+      %f = Client's name
+      %j = Job name
+      %o = command
+      %s = Slot base 0
+      %S = Slot base 1
+      %v = Volume name
+- Implemented MaximumChangerWait default 120 seconds. It is 
+  specified in the SD Device resource.
+
+  From kes15Jul02
+- Moved techlogs from main directory to be subdirectory of doc
+- Added code for strerror_r, and detection of gethostbyname_r().
+- The protocol between the Director and the SD has changed.
+- Major rework of SD tape mounting to prepare for Changer commands.
+- Separated Update Media record and Create JobMedia record. These
+  are done from the SD by calling the Director. Need separate Create
+  JobMedia so that when a Job spans a volume, all other Jobs writing
+  the same volume will also have JobMedia records created.
+- Added message to user indicating selection aborted if he enters .
+  to a Console selection request.
+- Create a jobstatus_to_ascii() routine for use in status commands.
+  This makes a single routine from three separate pieces of code.
+  Updated the code to properly handle more (all) termination statuses.
+- Tried to fix the gnome-console to handle history a bit better. There
+  are still some problems with focus not being properly set to the edit
+  box after history replacement.
+- Removed the shutdown() from bnet_close() hoping to fix Console termination
+  errors that are occassionally seen -- no luck.
+- Moved add_str() to lib/util and renamed it add_str_to_pool_mem() so that
+  it can be used to edit Job termination codes and Changer command codes.
+- Reworked how the SD mounts tapes (in device.c) so that control passes through
+  only a single routine. The logic is much simpler than previously, and now
+  adding AutoChanger code is straight forward.
+- Made SD tape mounting much more fault tolerant -- more cases retry instead
+  of terminating the Job.
+- Wrote code to edit_device_codes() for Changer commands. Not yet fully     
+  implemented.
+- Added a ChangerDevice directive to the Device resource. Still need to add
+  ChangerCommand.
+
+  From kes07Jul02
+- This documents what I did while on vacation. 
+- A fair amount of documentation.
+- Implemented Verify Volume to Catalog (needs renaming)
+- Modified the database to include new MarkId field as
+  well as Counters. Database level is incremented from 1 to  2.
+- Added first cut of managing autochangers by implementing Slot in DB.
+- Fixed a good number of M_ERROR messages to be M_FATAL where appropriate.
+  Also converted a number of Emsg() to Jmsg() permitting better Job error
+  messages.
+- First cut at implementing a general packet passing mechanism for bsock
+  to replace printf and sscanf for passing data.     
+- Made make_xxx_tables and drop_xxx_tables and create_xxx_database
+  for bdb as well as sqlite. With this each database has the
+  same set of scripts (with the exception that MySQL has grant_privileges).
+- Modified Makefile to only install the database scripts for the
+  database that you are using.
+- Updated the pdf script to include all the html files.
+- Did quite a lot of documentation.
+- Made Bacula compile correctly with DEBUG turned off.
+- Implemented Pmsg() macros that permit using the debug print
+  routines even with DEBUG off.
+- Updated job_cancelled() macro to handle JS_FatalError.
+- Changed db_find_last_full_verify() to db_find_last_jobid(). This
+  permits working with Verify Volume to Catalog.
+- Removed TRANSACTION code from incrementing NextId for SQLite. 
+- Implemented quick and dirty (not fully functional code) so that
+  console program does not die if ctl-Z is entered. 
+- Cleaned up backup.c a bit adding a bail_out goto to ensure proper
+  handling of errors with minimum code.
+- Added passing Slot back and forth to Storage daemon with Volume info.
+- Implemented Slot in Media record in DB.
+- Implemented first cut of Counter resource in dird_conf.c. A counter
+  resource is part of the Pool resource.
+- Implemented necessary database record. However, the resource doesn't
+  yet create a DB record.
+- Implemented onefs (One File System) and recurse options on Include
+  resource.
+- Implemented autopruning of Verify and Restore Jobs.
+- Did a better job of calculating thread_concurrency() for Sun systems.
+  This permits better multi-threading allowing all the threads to run
+  at the same time.
+- Implemented a wait_for_storage_daemon_termination(), which is used by
+  backup and verify volume.
+- Clarified a number of UA prompts, and add feedback where certain commands
+  completed but printed nothing. (More work to be done here).
+- Added a pile of new code to implement Verify Volume to Catalog. It is sort
+  of a hybrid of "restore" and "verify" in that it actually reads the tape,
+  then compares it to the catalog.  Need Verify Volume to Client.
+- Added a good number of checks for job_cancelled() this should permit
+  quicker and more reliable cancelling of jobs.
+- Fixed one bug in restore where I used ofile instead of lname, which means
+  that if the lname was too long, the memory was not properly reallocated.
+- Cleaned up find_one.c in findlib quite a bit.
+- Link smtp static so that it works even if the libraries are messed up.
+- If mail host is not found, retry with local host in smtp.
+- Added slot and stream to the bootstrap record processing.
+- Do offline on tape cartrige for unmount command. This can be turned off
+  by the user in the config file. OffLineOnUnmount in Device resource.
+- Implemented AutoChanger = yes/no in Device resource.
+
+===========================================================================
+2002-07-07 Release 1.22
+- All the basic Restore code to handle the boostrap file is
+  now implemented with the exception of the Console Restore command.
+- Retained compatibility with previous Restore providing no 
+  bootstrap file is specified. However, the old code (JobId based)
+  will go away in a future release.
+- Fixed a number of segmentation faults in the Console program due
+  to printing of NULL pointers -- thanks to Chuck and his Sun for
+  finding and reporting them -- mostly in ua_output.c.
+
+  From kes25Jun02
+- Null pointers now are printed as *None* if NPRT() is used.
+- At the request of Phil, all resources are now chained in in the
+  order they appear in the config file.
+- Implement Bootstrap record in the Director's config file, which
+  allows you to specify a predefined bootstrap file for Restore Jobs.
+- Allow Bootstrap on the Restore record. This is deprecated.
+- Implemented code to pass the Bootstrap file, if defined, to the
+  File daemon, then from the File daemon to the Storage daemon.
+- Added ability to set Bootstrap file in the Console when running a Restore.
+- Allow scan_error() routine to be passed to lex_open_file(). This permits
+  using lex in the Storage daemon without worrying that it will ABORT on
+  a syntax error.  More work is needed to direct the error messages correctly.
+- Improved error messages a bit when config syntax errors are found.
+- Tested and corrected some errors in match_bsr.c
+- Removed askdir.c from bls and bextract by defining dummy entry points.
+- bextract now has bootstrap pretty well integrated.
+- Changed bextract ABORTs into FATAL and exit(1) or ERROR_TERMINATE.
+  More user friendly.
+- Eliminated at least one lld and replaced it by edit_uint64() 
+- Eliminated a few more _PROTO()s.
+- Corrected a problem with the SQL for in query.sql for 
+  Listing Volumes to Restore All Files
+
+  From kes22Jun02
+- Additional documentation.
+- Reduce the time the jcr mutex is locked in lib/jcr.c
+- More null pointer printing fixes in lib/parse_conf.c (debug output only).
+- Added daemon filename to Kaboom message so I know what daemon died.
+- Fix big bad bug introduced in watchdog.c last update that caused
+  a segmentation violation (forgot to check for NULL pointer).
+- Add a bit more info to bad returns from Stored when starting
+  a job fails.
+
+  From kes21Jun02
+- Fixed scan_to_eol
+- Fixed backup scanning forgot one T_STRING -> T_UNQUOTED_STRING
+- changed all rwlock_t to brwlock_t to avoid conflicts with
+  Solaris library.
+- Added NPRT() macro to allow printing of NULL pointers, which
+  segment fault on Solaris.
+- Cast printing of pid_t to int for Solaris compiler.
+
+  From kes20Jun02
+- Added expect argment to lex_get_token().
+- Added tree.c and tree.h to lib directory.
+
+  From kes19Jun02
+- Improvements to the bootstrap compiler
+- Implemented first cut of bootstrap code in the Storage daemon
+- Modified the authentication code to be more explicit during 
+  failures.
+- Added a few more debug message numbers with more arguments (Dmsg10, ...)
+- Added more and more precise error messages when authentication fails.
+- Implemented new "expect" codes in the lexical scanner that allows
+  the caller to specify what he wants.                   
+- Added integer, positive integer, 64 bit integer, and integer ranges,
+  and name scanning to lex.
+- Implemented new lex code in parse_conf.c, this reduces significantly
+  the code.
+- Hopefully fixed a watchdog race bug that caused the watchdog to time
+  out a line after 1 hour rather than 6 days.
+
+  From kes15Jun02
+- Implemented a Bootstrap file parser and matcher.
+- Implemented first cut of bootstrap code in bextract  
+- Started clarifying different termination codes.
+- Added M_ERROR_TERM to immediately terminate the daemon -- no dump.
+  Also changed a few termination codes as appropriate.
+- Fixed create_jobmedia_record() to include all the fields such as
+  StartFile/EndFile, StartBlock/EndBlock.
+- Print user friendly message when query mode ends.
+- Fixed ls style print routines (bextract, bls, restore) to check
+  buffer size, to print the link if any, and to used edit_uint64()
+  instead of %lld.
+- Moved scan_to_eol() and s_err() to lex.c to avoid dragging in 
+  parse_conf.c for new bsr scanning code.
+- New files: bsr.h, parse_bsr.c and match_bsr.c. parse_bsr.c parses
+  a Bootstrap file, and match_bsr.c matches a bsr against a tape.
+- use strcasecmp() in several places instead of lcase().
+- Add first cut of bootstrap to bextract.
+- Added File Size limit -- writes EOF after limit exeeded.
+
+===========================================================================
+2002-06-12 Release 1.21
+- Fixed several problems with filenames being truncated if
+  they contain spaces. Thanks to the user that reported this.
+- N.B. To get the new queries, after the "make" and 
+  "make install" you must explicitly replace the
+  existing query.sql by query.sql.new.  query.sql is a
+  user configuration file, so it is not overwritten.
+- Added GZIP compression of Included files.  
+- Added additional fields to tape SOS record permitting better
+  recovery with no database.
+- Be sure to remove any !terminate statements you may have
+  in your config files.
+- MUST UPDATE ALL DAEMONS due to protocol change to handle new
+  tape format.
+
+  From kes11Jun02:
+- Updated examples directory with my most recent config files.
+- Modified the M_TERM meaning to mean that Bacula has
+  terminated in error without producing a dump. Previously,
+  it meant that Bacula terminate (with or without error).
+  You should remove any !terminate from your messages
+  resources.
+- Changed the order of the libraries in the link so that
+  tcp wrappers link properly. Thanks Phil for reporting this.
+- A user reported that filenames containing spaces were truncated
+  in bextract. This was indeed the case. They were also truncated
+  in Restore as well as in Verify. They are, hopefully, all fixed
+  now.
+- Made a few error conditions in Verify non-fatal.
+- Modified the Console "query" command to permit multiple SQL
+  statements per command. 
+- Implemented three new "query" options: 
+    List last 10 Full Backups for a Client
+    List Volumes used by selected JobId
+    List Volumes to Restore All Files
+  To use them, simply type "query" to the Console program, and
+  select the one you want.
+- Modified bextract to default to extracting all files (i.e. /).
+- Cleaned up the code in bextract a bit.
+
+  From kes03Jun02:
+- Improve Verify command to include files examined.
+- Eliminate fcntl() locking of the console file and replaced
+  it with a pthreads mutex.
+- Note Director - SD protocol is changed to handle new tape
+  information (Fileset, JobType, JobLevel).
+- Create config.out that contains a summary of ./configure
+  to see what you previously configured: "cat config.out"
+- Implemented GZIP compression.  Added addition syntax to
+  Include { } resource to permit setting of any GZIP compression
+  level:
+     compression=GZIP
+     compression=GZIP1
+     ...
+     compression=GZIP9
+
+  Level 1 is minimum compression and level 9 is maximum. Using just
+  GZIP gives the default (level 6).
+- Enhanced the tape format to include the unique Job name, FileSetName,
+  JobType, and JobLevel in the Start/End of Session records. The code
+  detects that tape level difference and acts accordingly. You can 
+  add data in the new format to old tapes.
+- Fixed an incorrect display message in the prune command.
+- Began implementation of Verify Volume and Verify Data.
+- Cleaned up File daemon restore.c a bit ensuring that termination 
+  cleanup is done and all possible Emsgs are converted to Jmsgs.
+- Modify bls.c to use common setup routines. This reduced the big
+  code duplication that creeped in when I added different listing
+  options. Also, changing tapes is now handled uniformily in a subroutine.
+
+===========================================================================
 2002-05-27 Release 1.20
 - Started documenting Catalog Pruning and Recycling.
   Added catmaintenance.html and recycling.html
 - Cleaned up most of sm_check() to be turned on/off by define
   in version.h
 
+===========================================================================
 2002-05-10 Release 1.19
 - Allow the user to select a new period for pruning.
 - Lots of additions to the manual -- prune and purge
   message resources. Much more work to be done.
 - Moved scanning for time into new library routine string_to_btime().
 
+===========================================================================
 2002-04-22 Release 1.18
 - Applied Phil's configure.in fix for --prefix, ...
 - Fixed bug found by Phil (patch supplied) in updating
 - Turn off gnome options in gnome-console by constructing empty
   argv.
 
+===========================================================================
 2002-04-18 Release 1.17 Kern Sibbald
 - Ensure that platforms Makefiles are called for clean  
   and distclean.
 - Made a local copy of tcpd.h and corrected the function 
   prototype problem for C++.
 
+===========================================================================
 2002-04-14 First public release 1.16 Kern Sibbald
  - Many intervening changes/updates.
 
 2001-09-29 Release 1.0 Kern Sibbald
- - Fixes to problems found at John's
-   installation.
+ - Fixes to problems found at John's installation.
  - See techlogs/kes25Sep01 for details
 
 2001-09-25 Release 1.0 Kern Sibbald
      Archive Device (defines device name)
 
 
-
 2000-03-10 Release 0.3 Kern Sibbald
  - Implemented new base64 encoding for attributes.
    This eliminates some of the error messages in the