]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/ChangeLog
Server address binding + bscan updates -- see kes25Sep02
[bacula/bacula] / bacula / ChangeLog
index 4123a826250817b2df552ffdd84d9c520dc7aa11..9dafa5c9e60635eccdbdb3f5011094e544b71c55 100644 (file)
@@ -1,3 +1,734 @@
+
+2002-xx-xx Version 1.26 (xxOct02)
+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
+- Fixed the query command bug.
+- Implemented PID files to prevent two copies of Bacula
+  from running at the same time. Be sure you --with-pid-dir
+  points to a working directory.
+- Modified ASSERT() to cause a segmentation violation. This
+  permits a core dump.
+- Worked on gnome-console. It paints better, it tells you if it
+  is ready to accept a command or processing one, and it is
+  almost entirely GTK+ (rather than GNOME, I'm removing GNOME
+  a bit at a time).
+- Limit to 100 the number of tape labeling errors in a single Job.
+- Add some additional ASSERT()s to the database routines. I don't
+  like ASSERTs but they do catch bugs.
+- Tested and debugged recycling of Volumes.  Needed to change
+  the Director-SD protocol slightly.
+- Removed the experimental SIGHUP in the Director as it is a
+  potential source of errors.
+- Added Level, Pool, Messages, and Storage keyword/value scanning
+  to the Schedule Run record.
+- Improved printing of Schedule resources with "show schedules"
+- Do not autoprune Jobs/Files if the Job errs.
+- Updated newvol() to pass back the updated Media record.   
+- Fixed the "update pool" command, which was broken during a much
+  earlier code reorganization.
+- Improved a few of the pruning messages.
+- Removed readline inclusions from gnome-console (hang over from console).
+- Make Jmsg use daemon message handler if no message handler is defined.
+  This is always the case in the SD and FD.
+- Started removing __PROTO(). With C++ prototypes are manditory, so why
+  keep around legacy code.
+- Added a good deal of message internationalization -- more to be done.
+- Move cached Path into mdb structure and use POOLMEM.
+- Fix verify bug introduced last update causing incorrect diffs 
+  by turning off autopruning.
+- Started adding code to distinguish Errors from Fatal Errors.
+- Errors are now counted in message.c for a Job.
+- More POOLMEM cleanups.
+- Implemented Automatic pruning.
+- Implemented Automatic recycling of Volumes.
+- Added PruneJobs/Files/Volumes=yes or no to Job resource. If set,
+  it forces the specified pruning.
+- Modified rwlock to accept multiple nested write lock
+  requests.
+- Modified the cats directory to use the new rwlock mechanism
+  in place of P() and V(). 
+- Defined db_lock(mdb) and db_unlock(mdb). They are in effect
+  transaction locks. 
+- Add CVS Id's to most files.
+- Made first cut at AutoPrune
+- Added new autoprune file that is called at the end of
+  each Job. It then decides when and what to prune and
+  calls the UA prune routines.
+- Modified Run (in Schedule resource) to permit overrides of
+  Level, Pool, Storage, and Messages. (not tested).
+- Added more POOLMEM in place of char.
+- Implemented daemon pid files. This prevents multiple 
+  daemons from running simultaneously. You can run multiple
+  daemons if they listen on different ports.
+- Documented the Schedule resource a bit better.
+- Began gently adding a POOLMEM type (perviously void).
+  For the moment it is a #define to char, but long term
+  it should be its own typedef.
+- Corrected a bit of spacing on the status bar of gnome-console
+- Added Admin and Archive Job types.
+- Implemented multiple Messages resources. Each daemon has
+  its own message resource, which defaults if not defined.
+  Jobs may now have different message handlers.
+- Cleaned up a bit of duplicate code in backup, verify, and
+  restore by creating appropriate subroutines in job.c
+- Added Type, Client, FileSet, and Level resource record
+  definitions to the Director. These can be used in place
+  of the Backup = ..., Verify = ..., ... commands.  This needs
+  documenting.
+- Corrected an incorrect message in the prune code and added
+  the number of Files pruned in the message.
+- Corrected several paint problems with gnome-console.
+- Added a bit of printout in signal handler during traceback.
+- 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.
 
      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