Changes since 2.6.1 (several of which where in the 2.6.1nb1 version)
o Added checks for missing "]" and "}" in filename globs, this completes
the file globbing heap corruption vulnerability fix.
o Added checks to the globbing code for overflow of restbuf, and additional
globerr setting and checking to speed up return on error.
o Changed the globbing code to use qsort, much faster when sorting a large
number of strings.
o Handle ftpglob() returning a vector containing just a NULL string, fixes
problems caused by CWD ~{
o Somehow the fix for pasv-allow didn't actually make it into 2.6.1
o Provide a compile-time option to revert NLST to showing directories.
o Fix missing format strings in debugging code.
Adds the following wu-ftpd.org post 2.6.1 patches:
- ftpglob
- missing_format_strings
- nlst-shows-dirs
- pasv-port-allow-correction
The first (ftpglob) covers a potential root compromise.
foo-* to foo-[0-9]*. This is to cause the dependencies to match only the
packages whose base package name is "foo", and not those named "foo-bar".
A concrete example is p5-Net-* matching p5-Net-DNS as well as p5-Net. Also
change dependency examples in Packages.txt to reflect this.
Changes to 2.6.0 include:
o Fix security leaks that could result in a root shell compromise.
o Fix memory leaks in internal ls (this feature still needs more testing;
you should probably not use it on high-traffic production servers yet.)
o Fix up the port-allow command in ftpaccess.
o Merge in the virtual passwd/virtual shadow features of BeroFTPD.
o Some fixes to the configure script.
o SITE MINFO was missed in 2.6.0 when disabling SITE NEWER.
o Fix documentation of data-limit.
Changes in 2.6.0:
o On sigpipe, always log a lost connection.
o Added a log message on attempts to download files marked unretrievable.
o The SITE NEWER feature has been disabled. A compile-time option has been
added to re-enable it. See config.h.noac for more information on this.
o With restricted-uid/gid, CWD to a non-existant directory would display the
full pathname rather than just relative to the user's home. Actually, the
fix catches most cases where this could occur, not just the CWD verb.
o Fixed a bug in the restricted-uid/gid feature which could allow access
outside the user's home directory in some cases.
o Bumped MAXHST (max. hosts allowed on a line) for ftphosts from 10 to 12.
Fixed a bug related to this which can cause the server to crash checking
host access.
o The internal ls (see below) was judged to be unready. It has been disabled
by default but can be enabled with a compile-time option for those who wish
to attempt to debug it (be warned, it has a lot of problems).
o Split the "bad shell or user not in ftpusers" syslog message into two
messages to prevent confusion.
o Filename globs for LIST, NLST and SITE EXEC, as well as a few internal
uses, are cleaned up before processing. For example: */./../* becomes
just *. This prevents certain memory starvation DoS attacks.
o Corrections for RFC compliance can break some clients. If possible, the
broken client should be updated, but a compile-time option has been
added. See the config.h.noac for more information on this.
o Created doc/HOWTO directory and moved VIRTUAL.FTP.SUPPORT and
upload.configuration.HOWTO there.
o Add a README.AUTOCONF file describing the autoconf build in detail.
o UC, Berkeley, has removed the requirement that all advertising material
must include credit to them. Removed the clause from the LICENSE and
the historical licenses in the COPYRIGHT file.
o Added the email-on-upload feature from BeroFTPD. See the ftpaccess man
page for defaults on these added ftpaccess clauses:
mailserver <hostname>
incmail <emailaddress>
mailfrom <emailaddress>
virtual <address> incmail <emailaddress>
virtual <address> mailfrom <emailaddress>
defaultserver incmail <emailaddress>
defaultserver mailfrom <emailaddress>
o Redhat added the -I option to disable RFC931 (AUTH/ident). Added to
the baseline so Redhat users don't see a loss of a feature. Setting
the timeout for rfc931 to zero will do the same thing in the ftpaccess
file.
o The test for whether restricted-uid/restricted-gid applied should have
been done before the chroot so it used the system /etc/passwd and
/etc/group files.
o CDUP when you were already at the home directory, would complain about
you being restricted (if you were). Instead it should give a positive
reply, and do nothing. This makes it behave more like CDUP when you're
not restricted to your home directory.
o deny-uid and deny-gid were being tested for anonymous users. Bad move,
it's too easy to forget to allow them. Use 'defaultserver private' to
keep anonymous users away.
o Correct the operation of the NLST command. Finally. mget should now
work as users expect it to.
o Prevent buffer overruns when processing message files.
o Correct a reference through a NULL pointer when doing S/Key
authentication and the user is not in the passwd file.
o Check the return code from select() when setting up a data connection.
Under some rare conditions it is possible that the select was called
for an fd_set which has no members, hanging the daemon.
o Ensure a pattern of "*" matches everything. The new path_compare (used
on upload and throughput clauses in the ftpaccess file) sets the option
FNM_PATHNAME, so:
* matches everything
/* matches everything
/*/* matches /dogs/toto and /dogs/toto/photos but not /dogs
o setproctitle() support added for UnixWare.
o Removed all FIXES files. Merged their contents into this CHANGES file
(the one you're reading now). The old doc/FIXES directory has been
tar'd and will be placed in the attic when 2.6.0 releases.
o Corrected an error in the MAPPING_CHDIR feature which could be used to
gain root privileges on the server.
o Added -V command-line option to View the copyright and exit.
o Added the privatepw command and documentation.
o Port for FreeBSD corrected.
o Adding the LICENSE file to the baseline.
o Added print_copyright function so our copyright is embedded in the
executables.
o WU-FTPD Development Group copyright headers added. Original Copyright
headers moved into the COPYRIGHT file.
o RCS Ids from 2.4.x removed and new templates added for wu-ftpd.org
usage.
o Make sure the signal context is restored when jumping out of signal
handlers. This was causing signal 11 on some systems.
o Cleaned up the how-to of setting up virtual hosting support.
o Corrected header file dependencies.
o Changed NLST to nlst, necessary as ftpcmd.c #defines NLST.
o Tidied up virtual variables.
o Changed so compiles cleanly on SCO OpenServer 5, UnixWare 2 and
UnixWare 7.
o Anonymous users could get in even though no class was defined for them.
o Support for non-ANSI/ISO compilers has been removed. You MUST have and
ANSI/ISO C compiler. This has been true for some time, all that has
changed is the (incomplete) support for older (K&R) compilers has been
removed.
o Added Kent Landfield's NEWVIRT scheme for extensive virutal hosting.
See the updated documentation on virtual hosting for details.
o ftprestart has been added to the base daemon kit.
o A buffer overrun in the ftpshut command has been corrected. Since, on
most sites, the ftpshut command is only usable by the superuser, this
is not considered a security issue. If you have installed ftpshut with
suid-root permissions (not the default), then there is the possibility
this overrun could be used to leverage root permissions.
o Several new ftpaccess clauses have been added. These allow control of
the various timeouts used within the daemon. The new clauses are:
timeout accept <seconds>
timeout connect <seconds>
timeout data <seconds>
timeout idle <seconds>
timeout maxidle <seconds>
timeout RFC931 <seconds>
o Myriad places where inactivity timeouts were not being properly
detected or handled have been corrected.
The built-in directory listings, both the original NLST and the
build-in LIST (ls), now detect inactivity. The original NLST did
not which could lead to hanging daemons.
C FILE handles for data connections are now always flushed, then
the socket is shutdown cleanly before being closed.
As a side effect, the daemon now more often properly detects
incomplete transfers. This can lead, though, to the xferlog
showing the correct byte count (meaning the daemon read or wrote
that many bytes over the data connection), but still log the
transfer as incomplete (meaning the socket did not properly
shutdown so the client probably missed some data).
o The daemon no longer attempts to replace the system's <arpa/ftp.h>
header when compiling. Instead, it uses its own local copy at all
times.
o The daemon will now wait for the transfer to complete before sending
'Transfer complete' or similar messages. This improves the daemon's
reliability for poorly written clients which take recipt of the message
as indication the transfer has completed rather than reading until the
connection closes.
o Guest and anonymous logout was not recorded on Linux. Removed call to
updwtmp and returned to old method of updating the lastlog.
o Script "vr.sh" is no longer needed. The Development Group will not be
releasing patches to upgrade; they can be obtained from CVS if needed.
o "realpath_on_steroids" is no longer needed. Removed.
o Use a custom version of fnmatch() which changes the rules for matching
file and directory names. The most visible result of this is
noretrieve and allow-retrieve are now much more flexible. See the
ftpaccess manpage for examples.
o Use the correct SPT_TYPE for FreeBSD 2.0 or later.
o Correct the class= logic on the allow-retrieve clause.
o Enhanced DNS extensions. This adds three ftpaccess clauses:
dns refuse_mismatch <filename> [override]
dns refuse_no_reverse <filename> [override]
dns resolveroptions [options]
o Corrected a reference in the manpage for ftpconversions to ftpd.
o The string 'path-filter' is now used in the system logs to describe
problems resulting from failing a path-filter check. The daemon used
to just say 'bad filename' which was misleading to some people.
o Added instruction on how to support PAM on Solaris. Right now this
means hand editing src/config/config.sol and
src/makefiles/Makefile.sol.
o Checking that all platforms use config.h, src/config/config.isc was
found to have forgotten to include the file.
o A security deficency on SunOS 4.1, not having a working getcwd()
function, has been corrected by using the provided function.
Compilation bugs in the portable getcwd() function have been corrected.
o The daemon will no longer hang attempting to close the RFC931 socket
when the remote end is firewalled and does not respond to traffic for
this protocol. This was determined to be inappropriate handling of
SIGALRM; handling for this signal has been cleaned up throughout the
daemon.
o The daemon may now be built using GNU autoconf. This is in the early
stages and not all platforms may be supported. The old build system
will be maintained for at least the 2.6.0 release; until the major
platforms are all known to be supported.
o Two new ftpaccess clauses have been added. These allows the site admin
to selectively allow PORT and PASV data connections where the remote IP
address does not match the remote IP address on the control connection.
The new clauses are:
port-allow <class> [<addrglob> ...]
pasv-allow <class> [<addrglob> ...]
o The daemon now includes an internal 'ls' command.
o Ported to Mac OS/X.
0 Added (limited) support for AFS and DCE user authentication. This is
only know to work on AIX, and needs porting to other platforms. For
now, this requires hand work to enable.
o Added an ftpaccess clause to enable TCP keepalives. This clause is:
keepalive <yes|no>
o You can now specify the xferlog filename for the default server just as
you can for the virtual hosts; in the ftpaccess file. The new clause
is:
xferlog <absolute path>
o ftpaccess manpage cleaned up. Many typos corrected, some techincal
changes. Indentation should now be correct.
o Apache's .indent.pro to the src and support directories. Ran all *.c
and *.h files through it. ftpcmd.y has been indented by hand. The
code is now a lot more readable!
o A bug in the parsing for the deny !nameserved ftpaccess clause has been
corrected.
o Technical corrections in the ftpd manpage.
o Add util/recompress.c as a more generic version of gzip2cmp.c
###########################################################################
Changes in 2.5.0:
o Change the handling of wtmp for GNU libc to use the Os-provided
function updwtmp().
o Prevent some buffer overruns.
o Fix permissions on some files installed by RPM, add the log rotation
control file.
o Change the seteuid() calls for fchown() and chown() for POSIXLY_CORRECT
systems.
o pid file locking in ftpcount (ftpwho) is now consistent with the way
the daemon locks these files.
o Cancel any pending alarm request to stop acl_remove() from being
interrupted then called again via the SIGALRM handler, this should fix
the flock on a bad file descriptor looping problem.
o Use %m in syslog format strings in place of %s and strerror(), this
simplifies #ifdefs.
o For SCO, link ftpcount with libsocket, necessary as it now calls
syslog().
o Added Redhat's RPM SPEC file for building RPMs.
o English corrections in ftpaccess manpage. Technical correction: the
noretrieve/allow-retrieve clauses do NOT support regular expressions.
o Move where ftpglob stuff is defined to avoid compilation errors on some
systems.
o Port to SGI Irix version 4 corrected.
o Overwrite behavior on uploads has been made consistent with shell
usage. The daemon does not change ownership or permissions on
overwrite.
o Corrected the PASV command to bind to the correct interface (local IP
address).
o Removed the OVERWRITE and UPLOAD defines from platform config files;
they are defined in the main config.h header.
o Issuing CWD without any parameters caused a signal 11, crashing the
daemon.
o Port to HP/UX corrected.
o Added ERRATA file to discuss problems with getcwd().
o Added a portable version of the getcwd() function for systems which do
not have it or imcorrectly implement it. NextStep 3 uses this new
function.
o OPIE support was being disabled even though the proper command-line
switches were being set. Corrected the use of opieverify().
o The fatal() function was not declared void; this was causing problems
with some compilers.
o Port to Hitachi HI-UX corrected.
o Some calls to fnmatch() were missing parameters.
o Corrected the 'restricted' user feature. It now works well with most
FTP clients.
o Correct usage of -d vs -e in the install Makefile for a number of
platforms.
o You can now use negated hostnames/addresses on the class ftpaccess
clause.
o Added an ftpaccess clause to specify random text for the initial
greeting:
greeting text <message>
o Corrected password encryption/checking for Digital Unix with C2
security (SECUREOSF).
o Merged the TODO file from the VR series with Stan's TODO file for the
Academ betas.
o Changed the various permission denial messages sent by the daemon to
the client to make it clear the message originated from the server.
o Ports to SCO, Solaris, uxw, ptx and isc corrected.
o Use the newer SEEK_ defines in place of the old BSD L_ defines and
removed the global definition of entry, each function should define it
locally.
o Removed an unnecessary lseek(L_SET) in ftpcount (ftpwho).
o Link ftpcount and ftpshut with ${XXLIBS}.
o Made strsep() definition consistent with BSD and Linux. Add strsep()
definition to conversions.c.
o Added #include <string.h> to ckconfig.c.
o Replaced the _PATH_DEVNULL define with a #include of "pathnames.h" in
popen.c.
o Support long group access passwords if SecureWare or HPUX_10_TRUSTED
are defined (using bigcrypt()).
o Fixed a memory leak in restrict.c.
o Digital Unix version 4 has a working getcwd(); use it instead of
getwd().
o Stop restrict_list_check() from walking off the end of name.
o Added -x command-line option to mean 'log syslog+xferlog'.
o Changed the log ftpaccess clause to allow logging transfers to both the
syslog and xferlog. The log ftpaccess clauses now include:
log syslog
log xferlog
log syslog+xferlog
o Formation of the WU-FTPD Development Group on 1 April, 1999.
2.4.2-VR17 chosen as initial baseline for the daemon.
###########################################################################
Changes in 2.4.2-VR17:
o Gregory A Lundberg resigns as the de-facto maintainer of WU-FTPD. "And
you thought I was joking."
o VIRTUAL is now the default for Solaris; all Solaris systems support
multiple interfaces (IP addresses).
o Fixed complaints involving virtual_len reported by several beta
testers.
o Some of the 'C' source code in ftpcmd.y depended upon a particular
behavior when ANSI/ISO does not define it. Corrected so all compilers
will properly interpret the code.
o Corrected the support for QUOTA on Solaris.
o The GNU EGCS 'C' compiler is broken. A quick check and we can avoid
the brokenness.
o Port to Ultrix corrected.
o The default shell on NextStep wants -d instead of -e. Changed to test
instead of [] since that's more portable; will probably do the same to
other systems in a future release.
o MNTMAXSTR was possibly undefined on Digital Unix 4.0 even when not
using QUOTA_DEVICE, causing compilation errors.
o Added daemonaddress to the ftpaccess manpage.
o Added a note from Chad Price <cprice@molbio.unmc.edu> in src/logwtmp.c
about the brokenness of Solaris' last command.
o It turns out that not all SunOS 4.1 boxes actually have a getcwd()
function.
o The labels unix and __unix__ are depricated on BSD, effecting the logic
for the reponse to the SYST command.
o Added an appnote about OPIE. See src/makefiles/Makefile.lnx for a way
to automatically have the daemon use OPIE. Send your Makefile if you
do something similar for your system.
o Added an appnote about a problem experienced with Trusted Solaris.
o Added doc/misc directory to start collecting interesting tidbits which
may help people get their servers going.
o The FIXES files were really cluttering up the base directory. Moved
them to a directory under doc.
o The 'log security' ftpaccess clause covered all but a few messages
about filesystem operations. It now covers the few it missed.
o Under some conditions _PATH_WTMP was not being set in pathnames.h
o QUOTA is now supported for Solaris.
o Trusted Solaris needed additional functionality in ftpcount (ftpwho).
o File locking in ftpcount (ftpwho) was never completed.
o Port to HP/UX corrected.
o 'make install' now accepts DESTDIR to install into a directory
structure other than the root file system. A number of other optional
parameters are available to override the default ownership of the
installed files. Missing directories are automatically created. File
permisssions were reduced to the minimum necessary.
o Dead code removed.
o The Makefile for Linux now automatically detects if PAM is installed
and compiles the daemon to use it.
o Fix an uninitialized variable in ftpshut which could effect the way the
command works with default values.
o Suppress trailing blanks from the output of a wide 'ps' in the ftpcount
(ftpwho) command. Just making things pretty.
o Updated upload.configuration.HOWTO to describe more of the
configuration having to do with class= rules and overwrite, delete and
rename clauses.
o Added vers.c and edit to 'make cleandir' in the src directory. These
files are automatically created during the build process.
o Added a restrict_check(".") in the LIST command for consistency with
the remainder of the code in ftpcmd.y.
o Corrected the 'restricted' users feature so it would play nicely with
web clients and the way some of them mis-interpret FTP URLs.
Fix long dirname security vulnerability reported on redhat-watch-list@redhat.com
Use ${INSTALL_xxx} variables from pkg system instead of internal defaults
- New, optional Makefile variable HOMEPAGE, specifies a URL for
the home page of the software if it has one.
- The value of HOMEPAGE is used to add a link from the
README.html files.
- pkglint updated to know about it. The "correct" location for
HOMEPAGE in the Makefile is after MAINTAINER, in that same
section.