Changes per release 6.3 (Mar 1994)
==================================

- Keepalives option, to get rid of stuck daemons when people turn off
their PC while still connected. Files: options.c, hosts_options.5.

- Nice option, to calm down network daemons that take away too much CPU
time. Files: options.c, hosts_options.5.

- Ultrix perversion: the environ global pointer may be null. The
environment replacement routines now check for this. File: environ.c.

- Fixed a few places that still assumed the socket is on standard
input. Fixed some error messages that did not provide access control
file name and line number.  File: options.c.

- Just when I was going to release 6.2 I received code for Dynix/PTX.
That code is specific to PTX 2.x, so I'll keep around my generic
PTX code just in case. The difference is in the handling of UDP
services.  Files:  tli_sequent.[hc].

Changes per release 6.2 (Feb 1994)
==================================

- Resurrected my year-old code to reduce DNS load by appending a dot to
the gethostbyname() argument. This feature is still experimental and it
may go away if it causes more problems than it solves. File: socket.c.

- Auxiliary code for the Pyramid, BSD universe. Karl Vogel figured out
what was missing: yp_get_default_domain() and vfprintf(). Files:
workarounds.c, vfprintf.c.

- Improved support for Dynix/PTX. The wrapper should now be able to
deal with all TLI over IP services. File: ptx.c.

- The try command now uses the hostname that gethostbyaddr() would
return, instead of the hostname returned by gethostbyname(). This can
be significant on systems with NIS that have short host names in the
hosts map. For example, gethostbyname("wzv.win.tue.nl") returns
"wzv.win.tue.nl"; gethostbyaddr(131.155.210.17) returns "wzv", and
that is what we should test with. File: try.c.

Changes per release 6.1 (Dec 1993)
==================================

- Re-implemented all environment access routines. Most systems have
putenv() but no setenv(), some systems have setenv() but no putenv(),
and there are even systems that have neither setenv() nor putenv(). The
benefit of all this is that more systems can now be treated in the same
way. File:  environ.c.

- Workaround for a weird problem with DG/UX when the wrapper is run as
nobody (i.e. fingerd). For some reason the ioctl(fd, I_FIND, "sockmod")
call fails even with socket-based applications. The "fix" is to always
assume sockets when the ioctl(fd, I_FIND, "timod") call fails. File:
fromhost.c. Thanks to Paul de Vries (vries@dutentb.et.tudelft.nl) for
helping me to figure out this one.

- Implemented a workaround for Dynix/PTX and other systems with TLI
that lack some essential support routines. Thanks to Bugs Brouillard
(brouill@hsuseq.humboldt.edu) for the hospitality to try things out.
The trick is to temporarily switch to the socket API to identify the
client, and to switch back to TLI when done.  It still does not work
right for basic network services such as telnet. File: fromhost.c.

- Easy-to-build procedures for SCO UNIX, ConvexOS with UltraNet, EP/IX,
Dynix 3.2, Dynix/PTX. File: Makefile.

- Variable rfc931 timeout. Files: rfc931.c, options.c, log_tcp.h, try.c.

- Further simplification of the rfc931 code. File: rfc931.c.

- The fromhost() interface stinks: I cannot change that, but at least
the from_sock() and from_tli() functions now accept a file descriptor
argument.

- Fixed a buglet: fromhost() would pass a garbage file descriptor to
the isastream() call.

- On some systems the finger client program lives in /usr/bsd. File:
safe_finger.c.

Changes per release 6.0 (Sept 1993)
===================================

- Easy build procedures for common platforms (sun, ultrix, aix, hpux
and others).

- TLI support, System V.4 style (Solaris, DG/UX).

- Username lookup integrated with the access control language.
Selective username lookups are now the default (was: no username
lookups).

- A safer finger command for booby traps. This one solves a host of
possible problems with automatic reverse fingers. Thanks, Borja Marcos
(borjam@we.lc.ehu.es) for some inspiring discussions.

- KNOWN pattern that matches hosts whose name and address are known.

- Cleanup of diagnostics. Errors in access-control files are now shown
with file name and line number.

- With AIX 3.2, hostnames longer than 32 would be truncated.  This
caused hostname verification failures, so that service would be refused
when paranoid mode was enabled.  Found by:  Adrian van Bloois
(A.vanBloois@info.nic.surfnet.nl).

- With some IRIX versions, remote username lookups failed because the
fgets() library function does not handle partial read()s from sockets.
Found by:  Daniel O'Callaghan (danny@austin.unimelb.edu.au).

- Added a DISCLAIMER document to help you satisfy legal departments.

The extension language module has undergone major revisions and
extensions.  Thanks, John P. Rouillard (rouilj@ra.cs.umb.edu) for
discussions, experiments, and for being a good guinea pig. The
extensions are documented in hosts_options.5, and are enabled by
editing the Makefile STYLE macro definition.

- (Extension language) The ":" separator may now occur within options
as long as it is protected with a backslash. A warning is issued when
a rule ends on ":".

- (Extension language) Better verification mode. When the `try' command
is run, each option function now explains what it would do.

- (Extension language) New "allow" and "deny" keywords so you can now
have all rules within a single file. See "nroff -man hosts_options.5"
for examples.

- (Extension language) "linger" keyword to set the socket linger time
(SO_LINGER). From:  Marc Boucher <marc@cam.org>.

- (Extension language) "severity" keyword to turn the logging noise up
or down. Many sites wanted a means to shut up the program; other sites
wanted to to emphasize specific events.  Adapted from code contributed
by Dave Mitchell <D.Mitchell@dcs.shef.ac.uk>.

Changes per release 5.1 (Mar 1993)
==================================

- The additional protection against source-routing attacks from hosts
that pretend to have someone elses network address has become optional
because it causes kernel panics with SunOS <= 4.1.3.

Changes per release 5.0 (Mar 1993)
==================================

- Additional protection against source-routing attacks from hosts that
pretend to have someone elses network address. For example, the address
of a trusted host within your own network.

- The access control language has been extended with a simple but
powerful operator that greatly simplifies the design of rule sets (ALL:
.foo.edu EXCEPT dialup.foo.edu). Blank lines are permitted, and long
lines can be continued with backslash-newline.

- All configurable stuff, including path names, has been moved into the
Makefile so that you no longer have to hack source code to just
configure the programs.

- Ported to Solaris 2. TLI-based applications not yet supported.
Several workarounds for System V bugs.

- A small loophole in the netgroup lookup code was closed, and the
remote username lookup code was made more portable.

- Still more documentation. The README file now provides tutorial
sections with introductions to client, server, inetd and syslogd.

Changes per release 4.3 (Aug 1992) 
==================================

- Some sites reported that connections would be rejected because
localhost != localhost.domain. The host name checking code now
special-cases localhost (problem reported by several sites).

- The programs now report an error if an existing access control file
cannot be opened (e.g. due to lack of privileges).  Until now, the
programs would just pretend that the access control file does not exist
(reported by Darren Reed, avalon@coombs.anu.edu.au).

- The timeout period for remote userid lookups was upped to 30 seconds,
in order to cope with slow hosts or networks.  If this is too long for
you, adjust the TIMEOUT definition in file rfc931.c (problem reported
by several sites).

- On hosts with more than one IP network interface, remote userid
lookups could use the IP address of the "wrong" local interface.  The
problem and its solution were discussed on the rfc931-users mailing
list.  Scott Schwartz (schwartz@cs.psu.edu) folded the fix into the
rfc931.c module.

- The result of % expansion (in shell commands) is now checked for
stuff that may confuse the shell; it is replaced by underscores
(problem reported by Icarus Sparry, I.Sparry@gdr.bath.ac.uk).

- A portability problem was fixed that caused compile-time problems
on a CRAY (problem reported by Michael Barnett, mikeb@rmit.edu.au).

Changes per release 4.0 (Jun 1992)
==================================

1 - network daemons no longer have to live within a common directory
2 - the access control code now uses both the host address and name
3 - an access control pattern that supports netmasks
4 - additional protection against forged host names
5 - a pattern that matches hosts whose name or address lookup fails
6 - an operator that prevents hosts or services from being matched
7 - optional remote username lookup with the RFC 931 protocol
8 - an optional umask to prevent the creation of world-writable files
9 - hooks for access control language extensions
10 - last but not least, thoroughly revised documentation.

Changes per release 3.0 (Oct 1991)
==================================

Enhancements over the previous release are: support for datagram (UDP
and RPC) services, and execution of shell commands when a (remote host,
requested service) pair matches a pattern in the access control tables.

Changes per release 2.0 (May 1991)
==================================

Enhancements over the previous release are: protection against rlogin
and rsh attacks through compromised domain name servers, optional
netgroup support for systems with NIS (formerly YP), and an extension
of the wild card patterns supported by the access control files.

Release 1.0 (Jan 1991)
