2002-11-06 version 2.3 Stable - Ported and tested on Mac OS X Server. Added makefile.osx and platform.c shim module. - Updated copyrights and contact info. Minor corrections to CHANGES file. 2002-03-22 version 2.2 Stable - Added -D_LARGEFILE64_SOURCE to makefiles. This is not strictly necessary, since -D_FILE_OFFSET_BITS=64 automatically selects the 64 bit file interface as the default, but it doesn't hurt anything either. - Corrected numerous minor errors and typos in documentation. - Adjusted arithmetic in get_bytes() to report somewhat more accurate fractional portions of the total data bytes written. - Removed __ from header file identification #define's. 2002-03-21 version 2.1 Stable - Added makefile.hpux for building on HP-UX with the factory c89 compiler. - Fixed minor logic error in the way sizes of large files would be counted. - Added (-f|--src-path) and (-t|--dst-path) options to allow specifying a single source and destination on the command line without having to create a work file. 2002-03-21 version 2.0 Stable - Added Debian packages for both 3.x (woody) and 2.x (potato) - Added -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 to the makefile. This should not (I think) have any effect on systems without Large File Support. None of the 64-bit functions are used explicitly, and lseek / ftell are not used at all. - Removed GCC-isms such as the use of inline functions in order to make source friendlier to any ANSI compiler. Also added -ansi and -pedantic to makefiles for extra annoyance. - SIGINT is now handled the same as SIGTERM. - SIGHUP now causes ssyncd to close and reopen its log file to allow friendly interaction with things like logrotate. - Minor cleanups and adjustments to makefile and binary packages. - Remembered to bump version number this time. 2001-12-21 version 1.9 Stable - Added a proper debian package and a man page. 2001-12-19 version 1.8 Stable - Added SRPM and RPM packages. - Fixed minor silliness in get_flags(). - Added generic init script for /etc/init.d which should work on most Linux distributions. - Added 'make install' and 'make uninstall' targets. - Added strip invocations to makefile. - Consolidated and reworked logging functionality to make more sense and require less hassle. Eliminated ssyncdx target. All targets now have ability to log in three modes [file|syslog| stderr] controlled by the 'log-mode' option. Also added a flag (--no-detach|-F) to make ssyncd not daemonize itself. This can be used along with 'log-mode: stderr' to possibly allow easier debugging if the daemon misbehaves. 2001-12-05 version 1.7 Stable - Implemented test (--test|-X) option which causes a full sync procedure to be run and statistics collected but without any modifications to the destination. - Changed DTMUX options to flags, so '-Dy' is no longer required, just '-D'. - Re-implemented a more sensible 'verbose' mode which just reports updates and deletions at log-level 0. - Tweaked semantics of process_dir again to get update of dir times to make sense in all modes. - Implemented --help and added version number. 2001-12-04 version 1.6 Stable - Removed atime from sync tests (duh). This was based on some paranoia regarding truncate (2) not updating the mtime, but of course that was just silly because, by definition *truncate* would change the *size* of the file. - Implemented no-sync-time, no-sync-meta, no-sync-data options. Using all three of these together would appear to make little sense, but there they are. - Implemented update-only option which specifies that files should be copied only if the source mtime is > the destination mtime. - Fixed minor bug in command line parsing which caused a core dump when unknown options were given. - Ditched EXCESSIVE_TRACING. - More enhancements to statistics. - Added lstat(dst, d) to process_dir *after* recursing through the tree since children may have been added / removed and the old dst stat would be invalid. - Changed implementation of process_reg to compare the contents of symlinks and only update if necessary. It would appear to take no more time to just unlink and re-create them without bothering to compare, but doing so does not seem to follow the principle of least surprise. - Added new target ssyncdx and tweaked copy of daemon.c which is the same except that it doesn't have the detach code in main(). Ssyncdx is linked by default with log_stderr, but will work find with any of the log modules. This version behaves exacly like ssyncd except that it does not detach from the tty and (if linked with log_stderr) sends all of its messages to your terminal. - Added log message in ssync_startup() to show flags in use. 2001-12-03 version 1.5 Stable - Tweaked permissions used for creating and re-creating nodes in check_type(). Originally written to use mode 0000, which only works if you are root and causes sync_data() / sync_meta() to fail if running as a non-root user. 2001-12-03 version 1.4 Stable - Several minor cleanups of untidy or excessively verbose code. - Added configuration option 'priority' used to set the scheduling priority for the ssyncd daemon. Range is from +20 (obsequious) to -20 (extremely rude) ala renice(8) or setpriority(2). - Added getopt.c (shamelessly stolen from GNU gzip) to cover those platforms that don't use glibc or lack getopt() for other reasons. - Added documentation on tuning for large workloads with example config files. - Enclosed a significant amount of tracing code with questionable utility inside #ifdef EXCESSIVE_TRACING. This symbol may be defined if desired to get this code back. These blocks may be eliminated in a future version. - Added an example startup script for /etc/init.d/ (in the examples directory). - Added '+' to the allowable characters in the config file to allow pathnames like 'lost+found' (duh) to work. - Numerous optimizations for time over space including in- lining of the entire hash and list modules and a couple of selected other things from ssync.c. - Changes to the handling of keys for the duplicate inode hash table which results in smaller and more type-appropriate keys. The new key is a struct containing dev_t and ino_t members instead of a char string. This reduces the size of the key and also eliminates the expensive calls to memset() and snprintf() since the new key is populated by simple assignments from the stat strcture. - Changed log level of several messages that were incorrectly classified. - Added elapsed time (HH:MM:SS) to statistics. 2001-11-29 version 1.3 Stable - Fixed a supid thinko which caused handling of hard linked files to work fine on the first run of ssyncd and then fail miserably on subsequent runs. Change made was to add hash_table_free(&dups) ; hash_table_init(&dups) at the start of the while() in main_loop(). 2001-11-28 version 1.2 Stable - Changed sync_meta() to execute lchown() *before* chmod() so that suid, sgid, and sticky bits are properly preserved. Changes of ownership on files reset certain of the special bits. - Fixed process_reg() to properly handle hard links (preserving them as links instead of making multiple copies). - Minor enhancement to get_bytes() to make statistics slightly more accurate. 2001-11-26 version 1.0 Beta - Initial public release