Notable changes in development snapshot 16.1h:
Implemented some fixes necessary to build and operate under
glibc-2.3.2. You will most likely need to use the new version
1.1 of Ezm3 to build CVSup on platforms using glibc-2.3.2.
Notable changes in development snapshot 16.1g:
Fixed a bug that caused the client to crash sometimes when updating
the KDE sources. The crashes were caused by thread stack overflow,
triggered by the unusually large "refuse" files that are often used
in the KDE project.
Added support for preserving access lists in RCS files. Access
lists are rarely used in CVS repositories, and until now CVSup
simply discarded them. However, the KDE project makes extensive use
of access lists, and the lack of support for them caused many fixups
when updating. The support added in this release is only partial.
It does not transfer access lists during an update, but it
preserves any access lists which are already present in the user's
files. Many thanks to Martin Birgmeier for contributing this fix.
Added a new "-f" option to cvsupd which makes it remain in the
foreground rather than becoming a daemon. This makes it possible
to control cvsupd using the "daemontools" package. Many thanks to
Andrew J. Korty for implementing this option.
Fixed an obscure bug in which NFS-related lstat() failures could
cause cvsupd to die with a segmentation violation. The error is
almost impossible to reproduce, and may depend on NFS bugs.
Added a portability fix submitted by Olaf Wagner, which fixed a bug
in the handling of filenames when using the CM3 Modula-3 compiler.
Changed the font of the GUI's "messages" pane to make it legible
on more systems.
Notable changes in development snapshot 16.1f:
Fixed a bug in the updating of setuid/setgid files for some versions
of Linux. The symptom was that the setuid/setgid bits were not
preserved, and CVSup transferred each setuid/setgid file on every
run. This was caused by changes in the Linux kernel which caused
chown() to clear the setuid/setgid bits even when performed by
root.
Fixed a portability bug that broke the build on some versions of
Linux.
Removed some obsolete backward-compatibility code.
Updated some documentation.
Notable changes in development snapshot 16.1e:
Added code in both the client and the server to detect whether the
peer is an old version with the S1G bug. The server will refuse
to serve such clients, and the client will refuse updates from
such a server. In each case, an error message is printed with a
URL that describes the bug and the upgrade procedure.
Fixed a bug in suplib/src/m3makefile which caused the build of
cvpasswd to die with the message, "unable to find interface
(CText)". This occurred with the SRC compiler, but not with the
PM3 compiler.
Notable changes in development snapshot 16.1d:
Fixed a terrible bug which caused CVSup to decode file attribute
values of 10 or more digits incorrectly. This caused file modtimes
to come out wrong once the date passed 1000000000 seconds past the
epoch. This occurred on Sun Sep 9 01:46:40 UTC 2001.
Notable changes in development snapshot 16.1c:
Corrected the fix to handle ECONNABORTED properly. Also expanded it
so that the master server process survives some additional possible
temporary errors (too many open files in the system; out of buffer
space).
Notable changes in development snapshot 16.1b:
Made it a warning rather than a fatal error if the client is unable
to delete a file that it wants to delete. This works around certain
problems in checkout mode where the CVS repository has been manually
altered to change an RCS file into a directory with the same
(checked-out) name.
Fixed the server to stay alive if accept() returns ECONNABORTED.
Traditionally this error was not returned by accept() in most Unix
systems. But in recent versions of FreeBSD this error can be
returned.
Notable changes in development snapshot 16.1a:
Added a new "client class" feature which allows the server to
hide collections or individual branches from specific groups of
clients. Access is controlled by a new "cvsupd.class" file. This
feature is still in flux. If you use it in its current form
you must be prepared to deal with incompatible changes in the
future. Many thanks to Olaf Wagner and Elego Software Solutions
GmbH for developing and
contributing this feature.
Made the necessary changes so that CVSup can be built using the
Critical Mass compiler "cm3" (see http://www.m3.org/). To do this
add "M3=cm3" to the "make" command.
Added "cvsuplog2html" by John Reynolds, a new and improved script
for converting CVSup client logs into HTML pages. It can be found
in the "contrib" subdirectory.
Fixed a bug which sometimes caused hard links to be updated as
separate files when the server was operating in mirror mode ("-s
scanDir" option).
Fixed a bug on Digital Unix and Tru64 Unix systems, where updating a
0-length file in some cases produced the error "Updater failed: foo:
Cannot open: No such device or address".
Fixed a bug which could cause revision 1.1.1.1 to be checked out
when really revision 1.1 should have been gotten. This occurred
with OpenBSD's "src/gnu/egcs/libiberty/hashtab.c" and possibly
other files which were originally created by "cvs add" and then
subsequently had a "cvs import" done on them.
Fixed a bug which caused the server to quit if it encountered an
unreadable directory. Now the server logs a warning and continues
as if the directory were empty.
Fixed a client bug involving symbolic links and checkout mode. If
a directory in the client's tree was actually a symbolic link to a
directory, the client would under certain circumstances delete the
link, replace it with a directory, and populate it with a new copy
of the collection.
Fixed a client bug that sometimes resulted in a segmentation
violation or an ASSERT failure if the filesystem containing the
"base" directory became full during an update.
Fixed a set of related bugs which caused the last line of certain
client and server configuration files to be ignored if its
terminating newline was missing. The files which were affected by
the bug were supfiles and refuse files on the client, and releases
files, list files, and the "${CVSROOT}/CVSROOT/options" file on the
server.
Fixed a bug which could cause the client or server to die if an
existing configuration, including the checkouts files, was moved
from one operating system to a different one.
Added a work-around for an apparent Modula-3 threads package bug
which on extremely rare occasions could cause the master server to
fail to reap a child process.
Notable changes in release 16.1:
Fixed a couple of long-standing bugs in the rsync code which caused
it to miss many compression opportunities. This mode is actually
useful now.
Fixed a server bug that caused the inactivity timeout to fail in
certain situations. If the network connection to a client vanished
just after start-up, the inactivity timer wasn't able to kill the
server process. It would then have to be killed manually. Now the
inactivity timeout should work reliably.
Fixed a bug that affected some versions of Solaris, e.g., Solaris
2.5.1. The server would loop after serving the first client.
Fixed a bug that would kill the client or server after 2 GB of data
(before compression) had gone through the network.
Fixed bug: if the server tried to follow a circular symbolic link,
it was a fatal error.
Added new "norsync" and "rnorsync" commands for the server's list
files, to allow better control over when the rsync algorithm is
used. The use of "norsync" in the releases file is now deprecated;
it should be specified in the list file instead.
Added a command-line option "-A ipaddr" for both client and server.
It causes the sockets to be bound to a specific IP address on the
local host. The option is useful for controlling which network
interface is used.
Added Dom Mitchell's handy "cvsup2html" script to the contrib
directory. It converts cvsup's log output into a web page for
conveniently browsing log messages and diffs. Each filename
becomes a link to the corresponding cvsweb page.
Changed the GUI so that pressing the enter key in the "Filter"
type-in has the same effect as clicking the start button.
Refuse files are explained in better detail in the cvsup(1) manual
page, thanks to some changes submitted by Mark Ovens.
Notable changes in release 16.0:
Implemented strong authentication to control access to the server
when desired. It uses a challenge-response protocol which is immune
to packet sniffing and replay attacks. No passwords are sent over
the network in either direction. Both the client and the server
can independently verify the identities of each other. A new
"-a" option on the client allows it to force the server to prove
its identity. There is a new "cvpasswd" utility which is used
for creating scrambled passwords for the server's authentication
database.
Extended the update algorithm for RCS files to handle arbitrary
"newphrases" attached to deltas. (See rcsfile(5) if you don't
know what "newphrases" means.) Newer versions of CVS use them
when the "PreservePermissions" feature is turned on. This caused
previous versions of CVSup to get checksum mismatches and perform
time-consuming fixups. Note, checkout mode doesn't actually honor
these newphrases yet; but CVS mode mirrors them properly now.
Added a "umask=nnn" option in cvsupfiles to specify the umask to
use when updating a collection. It can be different for each
collection if desired.
Made CVSup preserve file permissions more strictly. It used to
ignore the mode bits masked off by the umask. That was wrong. Now
it enforces (client mode) == ((server mode) & ~(client umask))
exactly. As a result, you may see a few zillion "SetAttrs" messages
the first time you update using this version of CVSup. This is
nothing to be alarmed about. Note: if "preserve" is in your
cvsupfile, the effective umask is forced to 0. That causes the
client's file permissions to be set exactly equal to those on the
server.
Fixed a bug that caused the client to loop if a collection contained
a top-level directory with a one-character name.
Fixed a bug that could cause the client to die if its version of an
RCS file was in fact completely unrelated to the one on the server
even though they had the same name. Now that situation is detected,
and CVSup simply replaces the file wholesale rather than attempting
to edit it.
Fixed the client to clean up better if it is killed by a signal.
Added Joseph Koshy's "cvsupchk" script, which finds extra unwanted
files that may be littering your source tree. Look for it in the
new "contrib" subdirectory of the release.
Added Wolfram Schneider's "cvsup2httplog" script. It converts a
cvsupd log file to standard httpd log file format, so that it can
be analyzed by tools such as webalizer. You'll find it in the new
"contrib" subdirectory.
Added a "cvsupwho" script, inspired by Garrett Wollman, to list the
currently active clients of a CVSup server. Look for it in the new
"contrib" subdirectory.
Changed the default connection mode to multiplexed, since it can
handle all situations that the other modes can handle. Deprecated
active mode, passive mode, and SOCKS mode.
Added a setsockopt(... SO_REUSEADDR ...) call in the server just
before the point where it tries to bind the listen socket on
start-up. This allows the server to be re-started immediately after
you have killed it, even if some of the old connections are still
lingering. Formerly, a "Port in use" error would be reported, and
you would have no choice but to wait until the old connections timed
out.
Added network I/O statistics to the server's final log message
for each client. Also added logging of I/O statistics on a
per-collection basis. The per-collection messages are at "info"
priority, while the others are at "notice" level.
Made some portability fixes for Linux and Digital Unix. The
software now builds and runs whether using SRC Modula-3 or the newer
PM3 release.
Added pre-formatted manual pages to the source distribution. They
are named "*.cat".
Notable changes in release 15.5 (not a public release):
Added a new "-s" client option to greatly reduce the client's disk
load, at significant cost in safety. The option suppresses the
usual stat(2) calls that check the status of each file against what
is recorded in the list (checkouts) file. It makes updates run
quite a bit faster, but it is not safe if there is any possibility
that the client's files might be modified locally in between CVSup
updates. See the caveats in cvsup(1) for more details.
Added a new "-D" client option to skip all updates except file
deletions. This is useful if the client's disk space is very
limited. You can make one run with "-D" to free up as much space
as possible. Then make another run without "-D" to update the
remaining files. If files or directories have been renamed on
the server, this ensures that all of the old versions are deleted
before any of the new ones are created. NOTE: This option is not
implemented yet for checkout mode.
Fixed a signal race in the server. Under extremely rare conditions,
the race caused the master server to hang in an infinite loop.
Fixed the client so that it no longer dies if it fails to delete a
directory. The usual cause is that the user has put an extraneous
file in the directory, making it non-empty even though CVSup thinks
it should be empty. Now the client issues a warning but continues
on.
Made the necessary changes so that CVSup can be compiled by the PM3
release of Modula-3. The SRC release still works too.
Added some portability fixes from Adam Richter.
Notable changes in release 15.4.2:
Implemented an improved bugfix for the same server bug that 15.4.1
had addressed. Sorry, but I just wasn't happy with the original
fix. The original bug was: If a client connection was lost during
a particular narrow time window, it could cause the master server to
die. Manual intervention would then be required in order to restore
service.
Fixed a client bug that showed up if cvsup got a transient failure
and tried again automatically after a delay. The "Inactivity
Timeout" timer from the first connection was still running, and
would kill off the process if it took more than 15 minutes after the
original transient error. It produced log output similar to this:
Connected to freefall.freebsd.org
Rejected by server: Server is going down for maintenance
Will retry at 04:25:13
Retrying
Connected to freefall.freebsd.org
Rejected by server: Server is going down for maintenance
Will retry at 04:34:53
Retrying
Connected to freefall.freebsd.org
Updating collection cvs-all/cvs
Append to CVSROOT/commitlogs/ports
Interrupted
Added references to the CVSup web page in a various places.
Notable changes in release 15.4.1:
This is a bugfix release to correct a problem in the server. Prior
to this release, if a client connection was lost during a particular
narrow time window, it could cause the master server to die. Manual
intervention would then be required in order to restore service.
No changes were made to the client in this release.
Notable changes in release 15.4:
Implemented a "loose" checksumming algorithm for verifying updated
RCS files. The algorithm is still basically MD5, but it carefully
ignores harmless differences (and only harmless differences) in
white space. Thus two RCS files which are logically the same will
have identical checksums, even if they have meaningless differences
in white space. This change was made necessary by recent new
versions of CVS, which introduced some gratuitous changes in the
white space conventions for RCS files. Since CVSup updates RCS
files by disassembling them on the server and putting them together
again on the client, the changes in the conventions for white space
led to spurious checksum mismatches under the old, strict checksum.
Note: Loose checksums require both the client and server to be at
version 15.4 or later. If either is older, then strict checksums
are still used.
Added a "strictrcs" supfile keyword, for those who don't trust the
loose checksums. It causes strict byte-by-byte checksums to be
used for RCS files, as was the default in older versions of CVSup.
Implemented a "nocheckrcs" keyword for client supfiles and server
"releases" files, to suppress the comparison of MD5 checksums for
updated RCS files entirely. Given the new loose checksumming
algorithm, this option is probably not very useful.
Implemented a "norcs" keyword for client supfiles and server
"releases" files, to disable the usual algorithm for updating RCS
files. If this keyword is specified, RCS files are treated the same
as other kinds of files. You can use this to force RCS files to be
updated using the rsync algorithm, for instance.
Fixed things up so that file names containing white space or other
obnoxious characters no longer cause problems. Also, when a release
15.4 or later server or client is connected to an older peer, it is
careful not to mention any files whose names contain white space.
Notable changes in release 15.3:
Implemented a much more flexible access control scheme in the
server. It still uses the "cvsupd.access" file, and the syntax is
backward compatible with the previous versions. But it adds a lot
of capability, supporting both permit and deny rules with per-host
and per-network connection limits. See cvsupd(8) for details.
NOTE: The one incompatibility is that _all_ clients are now subject
to the limit imposed by the server's "-C maxClients" command line
option. If you have been using "-C 0" in conjunction with the
"cvsupd.access" file, you will need to increase the number.
Implemented a new "mirror mode" for servers that are mirroring
files from a master site. It reduces the disk load by orders of
magnitude. Mirror mode is enabled by a new "-s" option to cvsupd.
See cvsupd(8) for full details.
Restructured a recursive function which could cause a thread stack
to overflow in pathological cases involving RCS files with zillions
of deltas. If you have ever seen illegal instruction faults,
segmentation violations, or infinite looping (especially when
updating CVSROOT/modules,v), this is the fix for it.
Fixed the protocol engine so that a lost network connection no
longer can cause a misleading error message. This also fixed a
rare problem (I've only seen it once) in which a lost connection
at exactly the wrong time could abort the server due to an assert
failure.
Made the server processes display pertinent information about what
they are doing in the Unix "ps" listing. [Supported only under
FreeBSD.]
Fixed the server so that the whole thing doesn't die if a fork()
fails.
Improved the error message when a collection is temporarily
unavailable because an NFS server is not responding.
Fixed the Makefiles so that they are much more portable. You should
be able to use them on any Unix system worthy of the name.
Beefed up the "-v" version messages so that the client indicates
whether it is the GUI version, and both the client and server
mention the e-mail address for bug reports.
Added the bug reporting address to the info window in the client's
GUI.
Removed the obsolete "supconv" utility.
Fixed lots of minor bugs.
Notable changes in release 15.2:
Changed the expansion of the "CVSHeader" RCS keyword so that
it deletes "Attic/" from the pathname if it is present. This
prevents the expansion from changing on a branch simply because
the file was killed or brought back to life on the main branch. A
similar change has been made to FreeBSD's RCS and CVS systems.
Fixed the handling of file permissions in checkout mode. Now each
checked out file's execute bits are set based on the permissions
of the corresponding RCS file and the client's umask setting.
This means that checked out shell scripts and similar files will
be executable as they should be.
Fixed the general policy for dealing with file permissions when
"preserve" is not set in the supfile. Formerly, the permissions
were set when CVSup first created each file, and then ignored
after that. Now, CVSup checks the permissions on each update, and
sets them properly within the restrictions imposed by the client's
umask setting.
Made checkout-mode updates more robust against evil manipulations
of RCS files by CVS repository administrators. The client now
records the revision date as well as the revision number for each
checkout-mode file. If the CVS administrator replaces an RCS file
with a completely different RCS file, CVSup will notice that the
dates of corresponding revision numbers are different and realize
that the client's revision m.n doesn't correspond to the server's
idea of what revision m.n is. It will do a full checkout of the
affected file instead of trying to edit it based on bad information.
Formerly, this sort of thing could cause assertion failures and
other embarrassments.
Fixed a bug in the negotiation of file attribute support which could
cause an assertion failure if "preserve" mode was used between a
server [or client] running under FreeBSD and a client [or server]
running under a non-FreeBSD OS such as Linux.
Eliminated this server warning message: "Could not generate edits
for foo,v 1.1.2.1 -> 1.1.1.1.2.1: 36: Non-existent revision number
1.1.2.1 -- attempting full checkout". The message was too scary,
and it typically didn't represent a situation that required human
intervention.
Fixed several portability problems, based on experiences with HP-UX
10.20, Linux, Digital Unix, and SunOS.
Improved the error messages emitted by the client when a corrupted
or truncated "checkouts" file is detected. They now suggest what
to do about it. Also eliminated an assertion failure that could
arise in this situation.
Added extra validity checks for the deltas received from the server,
to ensure that the edits will apply cleanly to the client's file
before attempting to apply them. This eliminates a few potential
assertion failures.
Notable changes in release 15.1:
Implemented a new "multiplexed" mode of operation which should
eliminate all of the obstacles to using CVSup behind a firewall.
In multiplexed mode, only a single TCP connection from the client
to the server is used. A built-in packet layer multiplexes the
four data streams over the single connection. This mode is
enabled by specifying "-P m" on the cvsup command line. It works
with or without SOCKS.
Fixed a potential security problem: In certain circumstances
it was possible for the client to create a setuid file with the
wrong owner.
Made the client and server deal better with files such as log
files which often grow on the server while they are being
transferred. The fix is duplicated in both the client and server,
so that a current version of either is sufficient to get the
improved behavior.
Made the client and the server log the software version of the
other, if it is known. Of course, it is only known if it is this
version or later.
Fixed a GUI bug: The "other" statistics weren't reset properly when
starting a new update.
In checkout mode, made the system deal better with broken CVS
repositories that have file deaths recorded on the vendor branch.
Fixed a bug in the handling of the client's "-i pattern" options and
the equivalent "filter" type-in when in checkout mode. Specifying
a directory did not cause an update of all files under it when in
checkout mode; it was necessary to specify a pattern like "dir/*".
Added a new server option "-e" to suppress the usual redirection of
the standard output and standard error to "/dev/null". This really
helps to diagnose crashes when they happen. Please use it!
Notable changes in release 15.0:
Added the ability to update only selected files from a collection,
by specifying file name patterns with a new "-i " command line
option on the client. The GUI also has a type-in field where
patterns can be entered, separated by spaces.
Added the ability to update all kinds of files, including symbolic
links, hard links, and device nodes.
Added support for mirroring directories exactly. I.e., empty
directories on the server are now preserved on the client.
Added the ability to preseve all file attributes, including owner,
group, modes, and flags. This is under control of a new "preserve"
keyword in the supfile.
Changed the client's default verbosity level from "-L 0" to "-L 1".
Added support for the "symlink" and "rsymlink" directives on the
server, to control which symbolic links are followed and which
are updated as links.
Added support for specifying patterns and/or non-directory files
in the server's "upgrade" and "always" directives.
Added support for multiple patterns on the server's "upgrade",
"always", and "omitany" directives, as well as on the new "symlink"
and "rsymlink" directives.
Enhanced server's "-c" option to accept a colon-separated list
of directories for searching for collections, so that the
collections no longer all need to be in the same place.
Eliminated the client's "-d" and "-D" command line options. They
were never very useful, and I had other purposes in mind for those
letters. (See the next item.)
Added a new "-d delLimit" option for specifying the maximum number
of files that may be deleted by the client before it decides that
something is seriously wrong. The "-d" conflicts with older
versions' uses of "-d". But there should be little confusion,
because the new version requires a numeric argument while the
old one accepted no arguments.
Significantly sped up the processing of the client's "checkouts"
file. This eliminates a long delay that had been observed between
updating the last collection and shutting down.
Added support for the non-standard RCS keyword "CVSHeader". It
expands the same as "Header", except that the pathname comes out
as relative to the prefix rather than as absolute. Assuming the
prefix is the root of the CVS repository, this gives relative
pathnames within the repository.
Added support for defining aliases for existing RCS keywords, and
for enabling and disabling the recognition of individual keywords.
This is controlled on a repository-wide basis by directives in a
file "/CVSROOT/options" on the server.
Added checking of file sizes in addition to modtimes during the
initial culling phase. This adds some network traffic, but it
also adds a degree of safety. It doesn't seem to slow things
down much for typical updates.
Added the "fnmatch" sources to the distribution, so that CVSup
can be built on platforms that lack a full-featured version of
it.
The static binaries for FreeBSD now include a distribution of the
client built without the GUI. It is much smaller, and may be
preferred by people who never use the GUI.
Notable changes in release 14.1.4 (a beta release):
Added an inactivity timeout to the client, enabled only in non-GUI
mode. If 15 minutes pass without any network I/O, the update is
terminated with a transient error (so that it will be retried).
This is useful when the client is run from cron.
Added a new "-r maxRetries" command line option for the client,
to cause it to give up after the specified number of retries.
This is a generalization of the old "-1" option, which is equivalent
to "-r 0".
Added checking to ensure that the client-side "checkouts*" file
is sorted properly. CVSup always keeps this file in sorted order.
But if it gets corrupted such that it is no longer sorted, mass
deletions can result. This actually happened on a system that
had faulty RAM. A 1-bit error changed a "/" to something else.
Added checksumming and fixups for all kinds of file updates.
Formerly, this was done only for updates that modified (edited)
existing files. Now, even files that are sent verbatim are
checked.
Fixed a bug in searching for the revision in effect on a certain
date. Example: Searching on the trunk. The head is 2.2. The
selected revision is 1.7. Because the first components were
different, the code erroneously considered the file to be dead
on the given date. The fix treats the trunk as a special case.
The bug affected just a few files, and only when checkout mode
was used on the main branch with "date=yy.mm.dd.hh.mm.ss".
Added support for the "execute" keyword, for executing server-specified
commands on the client when certain files are updated.
Added new client options "-e" and "-E", to enable and disable
the "execute" feature.
Fixed the server's logging so that it now works to specify "-l
/dev/stdout" on the command line.
Added the necessary "libmd" sources to the distribution, so it
is no longer necessary to get them separately and install them.
Changed the server so that it will let you run it as root again.
Notable changes in release 14.1.1:
This release was made solely to fix a server bug that was imminently
going to cause problems for the FreeBSD mirror sites. The bug
showed itself in checkout mode. If an RCS file in the repository
had the client's delta _deleted_ from it (i.e., "rcs -o1.15
file.c"), then the server would do a null pointer dereference
and die. Deltas are "never" supposed to be deleted from a
repository, but it may happen in the case of manual repairs.
(Unamusingly, the null pointer dereference happened in the code
that was simply trying to warn about the strange situation.)
There were _no_ client changes between release 14.1 and 14.1.1.
Notable changes in release 14.1:
For both the client and the server, there is now a "-c collDir"
command line option for overriding the name of the subdirectory
where the collection information is maintained. The name used
to be hard-wired to "sup", and that is still the default.
If the client's prefix directory for a collection doesn't exist,
it is no longer a fatal error. A warning is produced and the
offending collection is skipped, but the others are still processed
normally. If the prefix is a symbolic link pointing to "SKIP",
the warning is suppressed.
Fixed a server problem that caused certain pathological updates in
checkout mode to take damned near forever.
Fixed a problem that caused fixups to be performed for certain
RCS files that were corrupted to begin with. The files had incorrect
dates on some revisions, because they had been hacked up by hand.
That caused the client to write out the delta texts in the wrong
order. Since there was a way to work around this dubious situation, I
implemented it.
Changed the logic surrounding the time stamp comparisons between
files on the client and files on the server, eliminating a
miniscule possibility of missed updates. Now, the system can
detect it if a file happens to have been modified independently
on both the client and the server at exactly the same time. The
file is recognized as possibly needing an update, even though
its time stamp is the same on the client and the server.
Fixed the client's lock file handling ("-l" option) so that the
lock remains held during the intervals between retries. Formerly,
the lock was released during those intervals, rendering it fairly
useless for avoiding multiple stacked up processes from cron
jobs.
Added a check to make sure it is possible to get the client host's
own IP address before starting up the GUI. Formerly, misconfigured
hosts (e.g., incorrect host name) would result in a baffling
"IP.FatalError" message.
Changed the priorities for syslog messages from the server so
that messages associated with individual client connections are
logged at "info" level rather than "notice". For simple syslog.conf
setups, that takes these mostly informational messages out of
/var/log/messages, where they caused a lot of clutter. The
logging still isn't perfect, as a few more serious messages now
also come out at "info" level. Nevertheless, the new situation
is an improvement.
Added a new "-k" command line option for the client, intended
for debugging. This option causes the bad temporary files to be
saved for files requiring fixups due to incorrect edits. The
fixups are still performed, regardless.
Further improved the server's handling of corrupted RCS files.
In virtually all circumstances, the server should now be able to
issue warnings for corrupted RCS files and carry on with the
remaining updates.
Beefed up the semantic checking of RCS files, to detect some more
pernicious kinds of corruption.
Added a "norsync" option which can be specified in the server's
"releases" files. It allows the server to disable the use of
the rsync algorithm for selected collections and releases. This
is beneficial for CVS repositories, where CVSup's "append" updates
work better and more efficiently than the rsync algorithm.
Added additional server checks of the filenames received from
the client, to ensure that the server cannot be spoofed into
delivering files from outside its collections.
Notable changes in release 14.0:
CVSup now uses Tridgell & Mackerras' "rsync" algorithm for updating
non-RCS files. It is enabled by default, though it can be turned
off for individual collections by specifying the "norysnc" keyword.
The supfile can now have special collections named "*default" to
specify default parameters for subsequent collections.
The "base" and "host" supfile settings can now be overridden on
the client's command line.
The client now supports multiple "refuse" files: a global one
which applies to all collections; a per-collection one; and one
that is specific to a release+tag within its collection.
There is now a client option to specify a lock file, to prevent
multiple cvsup processes from interfering with each other. It
is useful when the client is run periodically from cron, to avoid
trouble if a job runs unusually long because of network problems.
The client now refuses to create the "base" or "prefix" directory
for any collection. Instead, it emits a diagnostic if either
directory doesn't exist. As a special case, if the "prefix" is
a symbolic link pointing to a nonexistent file named "SKIP", the
associated collection will be skipped without complaint.
The default "base" for the client is now "/usr/local/etc/cvsup".
Both the server's and client's "prefix" directories are now
interpreted relative to their base directories, if they are not
absolute pathnames.
The client now silently refuses to set the setuid, setgid, and
sticky bits in files that it creates or updates.
The client now does a better job of cleaning up its temporary
files when it is killed by a signal.
The client now tries harder to look up the IP address of the
server host.
There is a new "keywordprefix" keyword for the server's "releases"
file. It specifies a prefix that is used when constructing the
pathnames generated by the Header and Source RCS keywords. This
allows the actual repositories to be in different places on
different machines, while still producing identical expansions
of the RCS keywords.
The server will now accept connections from certain "friends"
listed in a configuration file, regardless of whether the maximum
number of simultaneous connections has been exceeded.
The server can now do its logging via syslog.
The server log messages have been cleaned up quite a bit.
The server now logs any repository problems that it notices,
e.g., unparsable RCS files, non-RCS files in the Attic, and so
forth.
The server now ignores any "hostbase" specified in the client's
supfile. A new server argument "-b base" specifies the base
directory. The default is now "/usr/local/etc/cvsup".
The server now validates all collection names to make sure they
contain no slashes and are not equal to "." or "..".
The server now checks for certain errors earlier, before becoming
a daemon.
All of the programs except the server now install into
"/usr/local/bin". The server still installs into "/usr/local/sbin".
Fixed a bug in the ordering of the "branches" list in the RCS file,
which on very rare occasions caused a "fixup" to be required.
Fixed a bug which could cause the client to hang trying to flush
its network buffers after the user pressed the "stop" button in
the GUI.
Fixed a bug that caused the client to complain "file exists" when
trying to create directories leading up to a new file, if the
pathname contained a "." (current directory) component in it.
This prevented "upgrade ." from being used in the server collection
list files. Unfortunately, since it's a client-side bug, such
lines still should not be used for a while, until older releases
of the client have evaporated away.
Fixed a bug which produced a misleading error message when a
failure occurred in making the directories leading up to the
temporary file that is used for the list file in the client.
When bad tokens or protocol errors are encountered, the offending
text is no longer included in the error message. Sometimes it
contained voluminous amounts of garbage.
Messages reporting errors in the client-side list files are
accompanied by line numbers now.
Notable changes in release 13.5:
Support SOCKS, using a new add-on library in ports/lang/modula-3-socks.
Add command line options "-z" and "-Z" for directly controlling the
"compress" option, overriding what is in the supfile. Likewise, add
"-d" and "-D" for overriding the "delete" option.
Make the client retry automatically when transient failures occur.
This is done only in batch (non-GUI) mode. Retries use randomized
exponential backoff. The retry delay starts out at about 5 minutes,
and increases to a maximum of about 2 hours.
Programs are now built fully dynamically linked by default. If
"-DSTATIC" is in the "M3FLAGS" environment variable, then they are
linked fully static. If "-DM3STATIC" is present, then the Modula-3
libraries are linked statically, and the system libraries are linked
dynamically. (This used to be the default.)
It is now possible to build the client without the GUI, by adding
"-DNOGUI" to the "M3FLAGS" environment variable.
Notable changes in release 13.4:
Detect and send changes to the RCS keyword expansion mode.
Formerly, these (rare) changes were ignored. That caused checksum
mismatches, which slowed down updates because the whole files had
to be sent as fixups.
Report 0-byte appends as what they really are, i.e., touches.
Add a new statistics line for them.
Make the command line option handling comply better with POSIX.
Fix supconv to handle recent changes to the example "ports-supfile"
in FreeBSD-current.
Add a timeout to kill a server process when it has been inactive
too long (15 minutes). This replaces the TCP keepalives that were
added in the previous release.
Add a hack to the server to make it easier to shut it down in a
controlled manner. If a file "cvsupd-HALT" exists in the directory
from which the server was started, and if it is newer than the
time when the server was started, then the server will reject
all new incoming connection requests.
Make some changes to the zlib interface to eliminate the potential for
an unsafe interaction with the garbage collector.
FreeBSD binary releases are now built with a new version of the
Modula-3 runtime that has a thread-safe version of malloc built
into it. This cures some vexing core dumps that had been happening
from time to time.
Add work-arounds for the worst of the problems associated with malloc
packages that are not thread-safe. These are not complete, however.
I will probably incorporate a (hopefully portable) thread-safe malloc
in the next release.
Eliminate several FreeBSD-specific constructs that caused
portability problems on other platforms. There is a good chance
now that this software will compile and run out-of-the-box on
most POSIX systems with standard SRC Modula-3 installations.
Notable changes in release 13.3:
Implement a passive mode for establishing the data connection,
to help people who live behind firewalls. Passive mode is similar
to ftp's passive mode: all TCP connections are initiated from
the client. See the "-P -" option in cvsup(1).
Make the system much more resiliant in the face of errors in the
server's CVS repository, such as unreadable files and garbled
RCS files. Almost all such situations now lead to simple warnings,
rather than fatal errors.
Make it a warning rather than a fatal error when the client
specifies an invalid collection.
Fix the broken "refuse" file handling.
Make the server refuse to run as root, for security reasons.
Fix a bug that could cause a fatal error to occur in certain
situations involving local check-ins to RCS files in the CVS
repository.
Fix a server bug encountered during SOCKS testing. Note: This
release of CVSup still does not work with SOCKS.
Enable TCP keepalives on the server.
Notable changes in release 13.2:
Fix a bug that caused the server to give up when an RCS file in the
repository got really out of whack. This happened only when it was
trying to update a client file in checkout mode. Now the server falls
back upon checking out a fresh copy of the file.
Notable changes in release 13.1:
Fix a bug that caused the server to leave zombie processes under
FreeBSD-current.
Fix a bug that caused the build to fail on a manual page problem
under FreeBSD-current.
Permit more control over which TCP ports are used, making it more
convenient to use the client behind a firewall. See the new "-P"
option in cvsup(1).
Support building static, dynamic, or partly dynamic executables.
"Partly dynamic" means the system libraries are dynamic, but the
Modula-3 runtime libraries are static. See "Install" for details.
For now, I am still putting fully static executables in the binary
distributions.
Respond more quickly to the interrupt button on the client GUI.
Fix the supconv utility to handle the ports collection better.
Make supconv install properly, and add a manual page for it.
Add various enhancements to the manual pages.
Release 13.0:
Initial public release.