- fixed directory browsing in BackupPC_Admin
[BackupPC.git] / ChangeLog
1 #========================================================================
2 #
3 # ChangeLog - change log for BackupPC.
4 #
5 # DESCRIPTION
6 #   Revision history for BackupPC, detailing significant changes between
7 #   versions, most recent first.
8 #
9 # AUTHOR
10 #   Craig Barratt  <cbarratt@users.sourceforge.net>
11 #
12 #========================================================================
13 #
14 # Version __VERSION__, released __RELEASEDATE__.
15 #
16 # See http://backuppc.sourceforge.net.
17 #
18 #========================================================================
19
20 #------------------------------------------------------------------------
21 # Version __VERSION__, __RELEASEDATE__
22 #------------------------------------------------------------------------
23
24 * Support for rsync and rsyncd backup and restore.  Changes to
25   BackupPC_dump, BackupPC_restore, and new modules BackupPC::Xfer::Rsync
26   and BackupPC::Xfer::RsyncFileIO.
27
28 * Added internationalization (i18n) code from Xavier Nicollet,
29   with additions from Guillaume Filion.  Voila!  BackupPC_Admin
30   now supports English and French, and adding more languages is
31   now easy.  New config paramater $Conf{Language} sets the language.
32
33 * Added Spanish translation es.pm from Javier.
34
35 * Added optional user-defined pre/post dump/restore commands, allowing
36   things like database shutdown/startup for dumps.
37
38 * Changed the way hosts are found.
39
40 * Added $Conf{ClientNameAlias}, which allows the name of the physical
41   client machine to be set.  This allows several different backup
42   "hosts" to all refer to the same physical machine, which is
43   convenient if several different types of data need to be backed
44   up, or if different parameters are needed for different parts of
45   the host.
46
47 * Replaced $Conf{PingArgs} with $Conf{PingCmd}, added $Conf{DfCmd},
48   $Conf{NmbLookupCmd} allowing all these commands to be fully
49   configured.  Also, all commands can also now be fragments of
50   perl code.
51
52 * Moved all smbclient commands into the config.pl file so the specific
53   arguments can be customized.  New config parameters are
54   $Conf{SmbClientFullCmd}, $Conf{SmbClientIncrCmd} and
55   $Conf{SmbClientRestoreCmd}.
56
57 * Added new BackupPC::View module that creates views of backups
58   (handling merging etc).  Updated BackupPC_Admin, BackupPC_zipCreate
59   and BackupPC_tarCreate to use BackupPC::View.  This removes lots
60   of merging and mangling code from the higher-level code.
61
62 * Added code from Toby Johnson that allows additional users to be
63   specified in the hosts file; these users can also view/start/stop
64   and restore backups for that host.  Also added a new config
65   setting $Conf{CgiNavBarAdminAllHosts} that allows all hosts to
66   be listed in the left nav bar for admins.
67
68 * Added $Conf{HardLinkMax} (default 31999) which sets the limit on
69   the maximum number of hardlinks per file in the pool.  If a file
70   ever gets to this number of links a new pool file is created to
71   handle additional links.
72
73 * Added $Conf{PerlModuleLoad}, which allows optional additional perl
74   modules to be loaded.
75
76 * Added $Conf{EMailUserDestDomain} and other EMail config settings to
77   allow language-specific default messages to be overridden.
78
79 * Added BPC_FTYPE_DELETED to lib/BackupPC/Attrib.pm, allowing deleted
80   files to be represented in the attrib file correctly.
81
82 * Added support for environment variable BPC_SMB_PASSWD, which is the
83   client's smb password.  This overrides the old environment variable
84   PASSWD.
85
86 * Added taint cleanup for perl5.8 to lib/BackupPC/Lib.pm.
87
88 * Changed $tar_unpack_header format in BackupPC_tarExtract to correctly
89   handle files with trailing spaces.
90
91 * Added catching of SIG_PIPE to BackupPC_dump, and changed catch_signal
92   to ignore multiple signals of the same type.
93
94 * Added binmode(STDIN) to BackupPC_tarExtract, suggested by Pat LoPresti
95   to fix a problem a RedHat8 with perl 5.8.0.  It's unclear why this
96   helps, but it should be benign.  See:
97     http://sourceforge.net/mailarchive/forum.php?thread_id=1853018&forum_id=503
98
99 * Added reporting of the largest number of hardlinks in the pool to the
100   log file.
101
102 * Adding reporting of syntax errors in the per-PC config.pl file.
103
104 * Updated BackupPC_sendEmail to handle language-specific email messages.
105
106 * Allow client (host) names to contain spaces.  Spaces in host names
107   need to be escaped via "\" in the hosts file.  The user of spaces in
108   host names is discouraged, but they should work.  One feature that
109   doesn't work with host names that contain spaces is the highlighting
110   of that name in the log file display in the CGI interface.  There are
111   no plans to fix this.
112
113 * Renamed $Conf{SmbClientTimeout} to $Conf{ClientTimeout}.
114
115 * Fixed all open() calls to use 3 argument form to fix handling of file
116   names with trailing whitespace.  Also fixed CGI interface so these
117   file names are displayed correctly.
118
119 * Fixed new 2.0.0 CGI navigation bug that causes the top-level directory
120   to have a URL "&share=//boot&dir=" instead of "&share=/boot&dir=/".
121   Reported by Pascal Schelcher.  Fixed similar problem reported by
122   Doug Lytle.
123
124 * Added "PerlTaintCheck On" to the mod_perl section in the docs,
125   suggested by Tim Demarest.
126
127 #------------------------------------------------------------------------
128 # Version 1.5.0, 2 Aug 2002
129 #------------------------------------------------------------------------
130
131 * Changed conf/config.pl so that $Conf{TarIncrArgs} uses the --newer
132   option instead of --newer-mtime.  Also removed --atime-preserve from
133   $Conf{TarClientCmd}.  This makes the default settings work better
134   with tripwire.
135
136 * Fixed configure.pl so it correctly detects a running BackupPC <= v1.4.0
137   so it can correctly warn the user to stop it before upgrading.  Reported
138   by David Holland.
139
140 * Added missing ";" to entity escape in EscapeHTML in BackupPC_Admin.
141   Reported by Guillaume Filion.
142
143 * Added LDAP setup to documentation from David Holland.
144
145 * Tar.pm now adds a "." to file paths that start with "/", so that all
146   tar paths are relative.  From Ludovic Drolez.
147
148 #------------------------------------------------------------------------
149 # Version 1.5.0beta0, 30 Jun 2002
150 #------------------------------------------------------------------------
151
152 * A full set of restore options is now supported, including direct
153   restore via smbclient or tar or downloading a zip or tar file.
154
155 * Major additions to CGI script to support better directory navigation,
156   restore features and mod_perl.  Also, file downloads from the CGI
157   interface now correctly preserve the file name and provide the
158   correct Content-Type for the most common types of files.  Improved
159   directory navigation was contributed by Ryan Kucera.
160
161 * New script BackupPC_zipCreate (contributed by Guillaume Filion) is the
162   zip analog of BackupPC_tarCreate.  BackupPC_zipCreate can be used to
163   create a zip archive of any portion of a backup.
164
165 * Substantial additions to BackupPC_tarCreate to support restore,
166   including modifying path names, handling hardlinks, fixing
167   support of old backups without attributes (pre-v1.4.0).  Plus
168   BackupPC_tarCreate is now an offical part of the release.
169   (Lack of support for hardlinks was reported by John Stanley.)
170
171 * BackupPC_tarExtract now supports hardlinks and fixed pooling of
172   attribute files.
173
174 * A unix domain socket is now used for communication between the CGI
175   interface and BackupPC.  The original TCP socket is optional.  Sockets
176   are correctly re-initialized if config.pl is updated with new socket
177   settings.
178
179 * For improved security messages over the unix or TCP socket are protected
180   via an MD5 digest based on a shared secret, a sequence number, a time
181   stamp and a unique per-connection number.
182
183 * Additions to configure.pl to support install of directory navigation
184   images.
185
186 * Fixed case where $Conf{BackupFilesOnly} or $Conf{BackupFilesExclude}
187   were set to a single string or list (in v1.4.0 only the case of
188   hash worked correctly).  Reported by Phillip Bertolus.
189
190 * Fixed case of $Conf{BackoutGoodCnt} == 0.  This setting now makes the
191   client always subject to blackout, matching the comments in config.pl.
192   Also fixed handling of $Conf{BackoutGoodCnt} < 0 in the CGI script
193   reported by Pascal Schelcher.
194
195 * Fixed byte and file totals for tar backups, reported by several users.
196
197 * Fixed --newer-mtime date/timestamp format to make it ISO 8601 compliant,
198   suggested by Erminio Baranzini.
199
200 * Fixed handling of $Conf{BackupFilesOnly} in BackupPC::Xfer::Tar.pm, as
201   well as shell escaping of tar arguments.
202
203 * Fixed entity encoding of 8-bit characters in the CGI interface.
204
205 * Added optional CGI headers in $Conf{CgiHeaders} that by default
206   is set to a no-cache pragma.  Suggested by Benno Zuure.
207
208 #------------------------------------------------------------------------
209 # Version 1.4.0, 16 Mar 2002
210 #------------------------------------------------------------------------
211
212 * BackupPC now supports tar (in addition to smb) for extracting host    
213   data.  This is the most convenient option for linux/unix hosts.
214   Tar can be configured to run over ssh, rsh or to backup a local
215   nfs mount from the host.
216
217 * Support for special files, including symbolic links, fifo, character
218   and block device files has been added, so that all native linux/unix
219   file types can be correctly backed up when using tar transport.
220   Special files are all stored as regular files and the type attributes
221   are used to remember the original file type.
222
223 * All unix file attributes are now saved (and pooled when possible).
224   This includes user and group ownership, permissions, and modification
225   time.  Smbclient also does a reasonable job of emulating unix 
226   permissions (such as mtime), and these attributes get saved too.
227
228 * The new default is to not fill incremental dumps.  configure.pl
229   automatically sets $Conf{IncrFill} to 0.  The default was 1
230   (incrementals were filled with hardlinks).  Since the CGI
231   script does filling at browsing time, there is no need to
232   fill incremental dumps.
233
234 * Backup file names are now stored in "mangled" form. Each node of a
235   path is preceded by "f", and special characters (\n, \r, % and /) are
236   URI-encoded as "%xx", where xx is the ascii character's hex value. So
237   c:/craig/example.txt is now stored as fc/fcraig/fexample.txt. This
238   was done mainly so meta-data could be stored alongside the backup
239   files without name collisions.  In particular, the attributes for the
240   files in a directory are stored in a file called "attrib", and
241   mangling avoids file name collisions (I discarded the idea of having
242   a duplicate directory tree for every backup just to store the
243   attributes). Other meta-data (eg: rsync checksums) could be stored in
244   file names preceded by, eg, "c".  There are two other benefits to
245   mangling: the share name might contain "/" (eg: "/home/craig" for tar
246   transport), and I wanted that represented as a single level in the
247   storage tree.  Secondly, as files are written to NewFileList for later
248   processing by BackupPC_link, embedded newlines in the file's path
249   will cause problems which are avoided by mangling.
250
251   The CGI script undoes the mangling, so it is invisibe to the user.
252   Of course, old (unmangled) backups are still supported by the CGI
253   interface.
254
255 * Various changes to the CGI interface, BackupPC_Admin:
256
257   + Added button that allows users to manually start a full dump in
258     addition to the existing incremental dump.
259
260   + Added display of file attributes when browsing backups.
261
262   + Added an optional holdoff time specified by the user when canceling
263     a backup. BackupPC will not attempt any new backups for at least the
264     specified time. This holdoff time can be changed whether or not a
265     backup is running.
266
267   + Added supports for file mangling, and correct merging of unfilled
268     backups from mangled or unmangled (and compressed or uncompressed)
269     fulls when browsing or restoring.
270
271   + Only displays a "Start Incr Backup" button if there are already some
272     backups.
273
274   + For DHCP hosts, when a user tries to manually start a backup, add
275     a check for the netbios name of both the host the request came
276     from (REMOTE_ADDR) and the last known DHCP address for that host
277     to see if either address matches the host. If not, an error
278     message is display. The previous behavior was that only requests
279     from the client itself succeeded, and requests from other machines
280     quietly failed.
281
282 * Changed the version numbering to X.Y.Z, instead of X.0Y. This release
283   is 1.4.0. The first digit is for major new releases, the middle digit
284   is for significant feature releases and improvements, and the last
285   digit is for bug fixes. You should think of the old 1.00, 1.01, 1.02
286   and 1.03 as 1.0.0, ..., 1.3.0.
287
288 * BackupPC and the CGI script BackupPC_Admin now check that the effective
289   user id is correct to avoid accidentally launching BackupPC as the
290   wrong user or detecting CGI configuration problems.  This behavior
291   can be turned off using the $Conf{BackupPCUserVerify} option.
292
293 * In numerous places changed "Smb" to "Xfer" (eg: log file names) to
294   support generic names for both smb and tar transport methods.  The
295   CGI script checks for old names for backward compatibility.
296
297 * Major changed to Backup_dump to support new tar transport.  All transport
298   specific code moved into BackupPC::Xfer::Smb and BackupPC::Xfer::Tar
299   objects.
300
301 * Added workaround for a bug in Samba's smbclient for files between 2GB
302   and 4GB.  The file size in the tar header is incorrect.  This allows
303   files up to 4GB to work with smbclient, rather than 2GB.  To support
304   files larger than 2GB you must make sure perl is compiled with the
305   uselargefiles option (use "perl -V | egrep largefiles" to check) and
306   the pool directory must be on a file system that supports large files.
307
308 * Moved the pool writing code into a module BackupPC::PoolWrite.  This
309   allows the clever file pool checking (digest, uncompressing, comparing
310   etc with minimum disk IO) to be used easily in multiple places (eg: it
311   is now used for writing attribute files so they can be pooled).
312
313 * Changed MD5 to Digest::MD5 to avoid use of the depreceated MD5 module.
314
315 * Shortened default $Conf{MyPath} so that perl's taint mode is more likely
316   to be happy.  The old $Conf{MyPath} contained /usr/local/bin, which
317   on one user's machine was world writable and perl -T correctly
318   complained about it.
319
320 * Fixed ping command options in Lib.pm so that it works on OpenBSD.
321   Thanks to Kyle Amon for sending the fix.  Decided to move the
322   ping options from Lib.pm into config.pl (as $Conf{PingArgs}) and
323   now configure.pl tries to come up with a sensible default based on
324   the OS.
325
326 * Fixed argument checking in BackupPC_tarExtract to allow '$' in the
327   share name (eg: C$).  Thanks to Jules Agee for this fix.  Also
328   changed the default config.pl so that single quotes are used
329   everywhere so that people don't get tripped up putting '$' inside
330   double-quoted strings.
331
332 #------------------------------------------------------------------------
333 # Version 1.03, 9 Dec 2001
334 #------------------------------------------------------------------------
335
336 * BackupPC now has full support for compression.  There are now two
337   pool areas, the original pool for uncompressed files, and cpool for
338   compressed files. The compression is done by Compress::Zlib.
339   Compression reduces the pool disk usage by around 40%, although your
340   mileage may vary.  Compression is optional and can also be specified on
341   a per-PC basis (although this will cost more pool storage since many
342   backup files will have to be stored in both compressed and
343   uncompressed forms.
344
345 * A new script, BackupPC_compressPool, can be run to compress the entire
346   pool.  This is used once to migrate all the pool data from uncompressed
347   to compressed on existing installations.  Read the documentation
348   (Installing BackupPC/Compressing an existing pool) before running
349   BackupPC_compressPool!
350
351   Alternatively, compression can simply be turned on and all new backups
352   will be compressed. Both old (uncompressed) and new (compressed)
353   backups can be browsed and viewed. Eventually, the old backups will
354   expire and all the pool data will be compressed.  However, until the
355   old backups expire, this approach could require 60% or more additional
356   pool storage space to store both uncompressed and compressed versions
357   of the backup files.
358
359 * Significant improvements to the cgi interface, BackupPC_Admin:
360
361     - much better layout navigation
362     - handles compressed backup files and compressed log files
363     - handles unfilled incremental dumps
364     - better backup directory browsing navigation
365     - reports compression statistics
366     - $Conf{CgiDateFormatMMDD} allows you to set date format (MM/DD or DD/MM)
367     - Additional customization with $Conf{CgiHeaderFontType},
368       $Conf{CgiHeaderFontSize}, $Conf{CgiNavBarBgColor}, and
369       $Conf{CgiHeaderBgColor}.
370
371 * Eliminated BackupPC_queueAll.  BackupPC directly reads the hosts
372   file and queues the PCs itself.  Like config.pl, BackupPC will
373   re-read the hosts file on each wakeup if its modification time
374   changes, or upon a SIGHUP.  This also makes for better behavior
375   when adding a host: if you add hosts, simply send a SIGHUP to
376   BackupPC or wait for the next wakeup.
377
378 * BackupPC_dump now compresses the SmbLOG file if compression is enabled.
379
380 * BackupPC_dump keeps track of compressed file sizes so that compression
381   statistics can be reported by the cgi interface.
382
383 * Aging of old log files now handles compressed log files (.z extension).
384
385 * Added configuration option $Conf{IncrFill} to specify whether
386   incremental dumps should be filled in.  Old behavior was that
387   filling was on.  Now it's optional.  See config.pl for more
388   details.
389
390 * BackupPC_nightly now cleans and generates statistics for both
391   the uncompressed pool and compressed pool (cpool).
392
393 * Added new utility script BackupPC_zcat that can be used to
394   uncompresses BackupPC files.
395
396 * configure.pl offers various options related to compression,
397   depending upon whether this is a new install or upgrade,
398   and whether or not Compress::Zlib is installed.
399
400 * configure.pl now makes a backup copy of config.pl before
401   config.pl is updated.
402
403 * added three new fields to the backups file to handle optional
404   filling and compression stats.
405
406 * Added -e option to BackupPC_dump.  BackupPC now invokes BackupPC_dump -e
407   on each dhcp host once each night to verify that very old backups are
408   expired.  This ensures that very old backups are expired even if
409   the dhcp host has not been on the network for a long time.
410
411 * fixed bug in BackupPC::FileZIO.pm that required Compress::Zlib,
412   even if compression was off.  Thanks to Steve Holmes for reporting
413   this.
414
415 * fixed bug that caused a BackupPC queue to get blocked when a backup
416   cancel attempt was made during the BackupPC_link phase.
417
418 #------------------------------------------------------------------------
419 # Version 1.02, 28 Oct 2001.
420 #------------------------------------------------------------------------
421
422 * Added new script BackupPC_tarExtract to extract the smbclient tar
423   archive. This reduces disk writes by perhaps 90-95% and disk reads by
424   50%. Previously, tar was used to extract and write everything to disk.
425   Then BackupPC_dump would read enough of each file to compute the MD5
426   digest, and then compare the full file with candidate pool files.  So
427   for each 1MB file that matches a single file in the pool, there would
428   be 1MB of disk writes and 2MB of disk reads (to compare two 1MB files).
429
430   BackupPC_tarExtract instead extracts the archive using a 1MB memory
431   buffer.  This allows the MD5 digest to be computed without touching the
432   disk.  Next, any potential pool file compares are done by comparing the
433   pool file against the incoming tar data in memory, which only requires
434   the pool file to be read.  So for each 1MB file that matches a single
435   file in the pool, there are now no disk writes, and only 1MB of reads.
436   BackupPC_tarExtract handles arbitrary size files and repeated
437   potential pool matches.  If the incoming file doesn't match the pool
438   then it is written to disk (once the pool is mature this happens maybe
439   5-10% of the time).
440
441 * Substantial changes to BackupPC_dump:
442
443     + BackupPC_tarExtract is now used in place of tar.
444
445     + BackupPC_dump now reads the output from both smbclient and
446       BackupPC_tarExtract and merges them into SmbLOG.
447
448     + Named pipes are no longer used to connect smbclient to tar
449       (now BackupPC_tarExtract).  Regular pipes are used instead.
450       This avoids the need to system mknod or mkfifo.
451
452     + Locked files on the client that can't be read by smbclient
453       previously were filled with 0x0 bytes by smbclient, meaning
454       tar extracted a useless file filled with 0x0 bytes.  Now,
455       BackupPC_dump watches the output of smbclient and removes
456       any files that smbclient couldn't read.  This avoids storing
457       useless files.  It tries to replace such files with a hard link
458       to a previous dump.  These actions appear in the log file.
459
460 * added new module lib/BackupPC/FileZIO.pm. This handles pool file
461   I/O and is used by BackupPC_tarExtract.  BackupPC::FileIO supports
462   reading and writing compressed and regular files and provides all the
463   hooks for compression support in BackupPC (should be supported in next
464   version). BackupPC::FileIO also does efficient writing of files that
465   contain leading 0x0 bytes (by seeking past the 0x0 bytes). This is
466   helpful when smbclient reads a locked file, and it fills the tar
467   output with a file of the correct size but all 0x0.  Such files will be
468   later removed by BackupPC_dump.  But in the meantime, BackupPC::FileIO
469   writes such files efficiently (as sparse files), meaning just a few
470   blocks of disk space will be needed even if the file is large.
471
472 * alive/dead counting for blackout now works correctly for DHCP hosts.
473
474 * BackupPC resets activeJob on startup, to fix bug when BackupPC was
475   killed and restarted with backups running.
476
477 * added extra non blocking select() in BackupPC to make sure the socket
478   reads don't block.
479
480 * BackupPC avoids queuing multiple BackupPC_queueAll's on the CmdQueue.
481
482 * Updated BackupPC_sendEmail to correctly parse the locked file
483   error from 2.2.1a smbclient, so that missing Outlook file emails
484   can be correctly sent.
485
486 * Changed HostInfoRead() in lib/BackupPC/Lib.pm to lowercase the
487   hostname read from the hosts file.
488
489 * BackupPC_Admin provides general summary when the host name is empty.
490
491 * configure.pl (and BackupPC) now requires perl 5.6.0 or later.
492
493 * configure.pl complains if BackupPC is already running, reminding you
494   to stop it before upgrading.
495
496 * updated documentation, and fixed auto-insertion of config.pl into
497   BackupPC.pod (previously the last config parameter was left out of
498   BackupPC.pod).
499
500 #------------------------------------------------------------------------
501 # Version 1.01, 30 Sep 2001
502 #------------------------------------------------------------------------
503
504 * Documentation cleanup in README, doc/BackupPC.pod, conf/config.pl.
505
506 * BackupPC_sendMail now reads the optional per-PC config file, allowing
507   email configuration parameters to be set on a per-PC basis.
508
509 * Removed the unused 4096-length MD5 digest code in lib/BackupPC/Lib.pm.
510
511 #------------------------------------------------------------------------
512 # Version 1.00, 21 Sep 2001
513 #------------------------------------------------------------------------
514
515 * Initial release of BackupPC on sourceforge.net.