
This file records changes made to the ICSI-modified version of GNU finger.
For major changes from the original GNU version see the file README.ICSI.

--- PATCHLEVEL 1

* include/text-finger.h, lib/text-finger.c, src/in.fingerd.c:
	For brevity, the short finger format omits the message about
	finger .help.  This piece of advice is now given only when a
	long (= outside) finger fails.

* lib/x_showface.c: X11R4 header file fixed. Used to work with R4 XAW_BC,
	but now longer with R5.

* lib/packet.c: Shows more of hostname (up to 10 chars), less of tty location
	(up to 18 chars).  Tty location in utmp is less that 16 chars anyway.

* lib/site/icsi_info.c:  The login info is now identical to what the short
	format would display for a user.  This works by doing a short finger
	on the server host.  It won't look good unless the first change above
	is made, too.

* src/in.fingerd.c: Don't forget to print the header line for packets obtained
	from a real name match.

* support/cpp-Makefile:
	Header dependencies fixed.

A. Stolcke, 12/10/91

--- PATCHLEVEL 2

* src/in.fingerd.c:
	Reading of data files optimized.
	Long fingers of non-local users forwarded to server host.

* include/client.h, src/fingerd.c, src/in.cfingerd.c:
	Added polling from finger servers (gateways).
	Handling of data files optimized, keeps all info in memory.
	Better timestamping of user records.

* include/util.h, lib/util.c:
	Use library functions for case-ignoring string compares where
	possible.

* include/tcp.h, lib/tcp.c:
	Use select() to ensure read() over network is reliable up to
	specified timeout.

* include/packet.c, lib/packet.c:
	read_packets(), write_packets() call made more flexible and useful,
	better error handling.

* lib/x_show_face.c:
	Ensure window is displayed.

* lib/site/icsi_info.c
	Avoid unnecessary inclusion of lastlog header.

* lib/site/Makefile, support/cpp-Makefile:
	Dependencies fixed.

* README.ICSI, support/VERSION, support/ttylocs, support/clients:
	Updated to reflect enhanced functionality.

A. Stolcke, 12/12/91

--- PATCHLEVEL 3

* all files:
	Added rcsid's and proper copyright.
* src/in.cfingerd:
	Avoid getservhost() error messages garbling binary output.
	Print error messages when debugging.
* src/fingerd.c:
	Make SIGHUP handling safe.
* config.h:
	Added LOCAL_NETS configuration.
* doc:
	Man pages for fingerd, cfingerd added.

A. Stolcke, 12/14/91

--- PATCHLEVEL 4

* all files:
	All finger programs and daemons now use the functions from error.c
	for error logging.  Messages have been cleaned up, and the severity
	levels have been reassessed in several cases.

* include/error.h, include/error.c, config.h:
	Now optionally uses syslog(3) to direct messages to system log.
	This can be configured in config.h.

* src/os.c, config.h:
	The use of lastlog is now configurable.  Disable it if you don't
	want it or your system doesn't have it.

* src/fingerd.c:
	Information from a host that is down is discarded only after polling
	failed twice.
	Dummy packets from a gateway are now ignore for user and idle time
	purposes.

A. Stolcke, 12/17/91

--- PATCHLEVEL 5

* lib/site/icsi_info.c, config.h:
	A user's .plan file is now optionally passed through cpp with several
	convenient symbols defined.
* lib/site/icsi_info.c:
	Before reading any user files, in.fingerd does setuid(nobody),
	setgid(nogroup) in case it has to be running as root (eg., on ultrix).
* config.h and others:
	Support for SunView, getttyent(), cpp and compatibility routines
	for alloca() and ualarm() are now configurable.
* src/fingerd.c
	Uses setsid() to detach from terminal on systems that have it.
* lib/os.c, config.h:
	#ifdefs for hpux added.
* lib/getservhost.c, src/fingerd.c, src/in.fingerd.c, src/in.cfingerd.c:
	All two separete finger servers, one for user request, and one
	for polling purposes.
* config.h, support/cpp-Makefile:
	Uses X11Dir macro to configure root of X11 installation.
* src/fingerd.c, lib/error.c:
	Avoid double inclusion of setjmp.h.
* src/fingerd.c, config.h:
	Default polling parameters are now configurable.
* src/fingerd.c:
	Fixed another bug in timestamping.
* src/in.fingerd.c:
	Special fingers conditionalized for various platforms.

Elmar Bartel (bartel@informatik.tu-muenchen.de) provided the patches for
hpux, and suggested several of the others.

A. Stolcke, 12/18/91

--- PATCHLEVEL 6

* lib/error.c, include/error.h:
	New error level LOG_ALERT for non-fatal severe errors.
* config.h, src/fingerd.c, src/in.fingerd.c:
	Default polling parameters now configurable.
* lib/getservhost.c, include/getservhost.h,
  src/in.cfingerd.c, src/in.fingerd.c, src/fingerd.c:
	getservhost() interface Generalized to use bitmasks.
* src/in.fingerd.c:
	Handle .clients, .free requests on local server host.
	Special fingers for HP-UX fixed.
* lib/site/icsi_info.c:
	Print "Plan:" even if not using cpp (bug introduced by CPP_CMD option).

A. Stolcke, 1/15/92

--- PATCHLEVEL 6

* config.h and others:
	Try to capture many of the system dependencies with the SYSV define.
* lib/site/icsi_info.c:
	Handle mailbox atime == mtime correctly.
* config.h, lib/tty.c:
	Generalize kbd/mouse device stating for console access time.
	Defaults for Sun and HP/UX.

A. Stolcke, 3/7/92

--- PATCHLEVEL 7

* config.h, support/cpp-Makefile:
	Interpret undefined X11Dir as default MIT install locations.

* src/fingerd.c, src/in.fingerd.c, src/in.cfingerd.c:
	Do locking on files used for communication between polling daemon
	and client programs.  flock(2) emulation is provided for SYSV
	systems.

* lib/os.c, lib/tty.c:
	Handle empty line names in utmp gracefully.

* src/in.fingerd.c and elsewhere:
	Include version info in .debug output. Update build number on
	every compile.

* src/in.fingerd.c:
	Accept special finger names with leading '-', i.e., as if they
	where options.  Dropped support for '='.

* lib/tty.c:
	Strip comment delimiter from /etc/ttys comment field for systems
	that don't do it for us (e.g., ultrix).

* lib/x_show_face.c:
	Fixed several NULL casts to keep ANSI compilers happy.
	

A. Stolcke, 5/29/92
	
--- PATCHLEVEL 8

* config.h, lib/os.c, lib/tty.c, include/os.h:
	Support reading remote utmp and tty access using HP cluster
	environment. All users on any client in the cluster will be listed
	as if they were logged in to the local machine (with their respective
	hostnames, of course).

* lib/packet.c:
	Now prints devices in /dev/pty/ correctly.

A. Stolcke, 6/29/92

--- PATCHLEVEL 9

* src/fingerd.c, lib/packet.c:
	Check for and eliminate bogus packets in userdata file and returned
	by polled hosts.

* src/vifinger, src/packet2ascii:
	New administrative tools for editing binary data files by hand.

* README.ICSI, support/INSTALL:
	Documented recent changes.

A. Stolcke, 7/1/92

--- PATCHLEVEL 10

* src/fingerd.c, lib/packet.c:
	Check for and eliminate duplicate users in old userdata file.

* src/fingerd.c:
	Poll-debug output now routed to syslog.  Can be toggled with
	SIGUSR1/SIGUSR2.

* lib/packet.c, lib/tty.c, lib/os.c, include/os.h:
	Changes in packet print format:
	- widened hostname field to 12 chars
	- strip local domain off hostname
	- 'Where' field empty when location unknown
	- prefix remote login host with '>' rather than parens (saves one char)

* miscellaneous cleanups and bugfixes.

A. Stolcke, 7/13/92

--- PATCHLEVEL 11

* config.h, lib/os.h:
	Allow utmp structures without ut_host.  See new HAVE_UTHOST config
	define.

* support/cpp-Makefile:
	Provide dummy RANLIB for SystemV.

* config.h:
	Miscellaenous defaults for SGI platform.

A. Stolcke, 8/14/92

--- PATCHLEVEL 12

* src/cpp-Makefile:
	Link fingerd with -n to free up binary on diskless machines.
	
* some more fixes for IRIX4.0.

* lib/showface.c, lib/x_show_face.c, lib/sun_show_face.c:
	Renamed finger button to "Finger".  SunView interface is now
	similar to X11.

* lib/x_show_face.c, lib/sun_show_face.c:
	Display finger output in text popup window.

* lib/x_show_face.c, src/Finger.ad:
	General code cleanup, moved all non-essential resources to Finger.ad.

* Makefile, lib/Makefile, support/cpp-Makefile:
	Header dependencies generated by depend target.

* config.h, support/cpp-Makefile:
	Install command is now configurable (default BSD style).

A. Stolcke, 9/3/92

--- PATCHLEVEL 13

* config.h, lib/cpp-Makefile:
	Set compiler options and extra libraries in config.h. This makes the
	NAMESERVER define obsolete, include -lresolv in CcLibs instead.

* lib/bitmap.c, lib/save_x_bitmap:
	Fixed core dumps and bitmap naming on saving.

* lib/in.fingerd.c:
	Restrict .users, .free, .clients to local requests.
	More concise message about users not presently logged in.
	Make sure all lines printed remotely are terminated by CR as
	well as NL.

* doc/finger.man:
	Updated to reflect reality better.

* lib/in.fingerd.c:
	Now support externally implemented finger targets a la GNU
	finger 1.34, but with more flexibility.  See src/targets/README
	for details.
	All non-essential built-in specials have been reimplemented that
	way.

* config.h, lib/in.fingerd.c:
	Support for indirect fingering has to be explicitly enabled in
	config.h, since some might consider it a security hole (or at
	least an invitation for abuse).

* support/cpp-Makefile:
	version.h didn't get regenerated on platforms with compilers
	that cannot generate dependencies.

* src/in.fingerd.c:
	.debug prints last modified times of data files.
	.version prints version only (like GNU finger).

* lib/tty.c:
	Detection of bogus utmp entries now works on HP-UX type pty
	paths (although obviously not for non-local devices in a cluster).
	A warning is logged for each one found.
	
A. Stolcke, 9/14/92

--- PATCHLEVEL 14

* src/fingerd.c:
	Memory copy of userdata wasn't always in sync with file.  Could
	lead to old logins being reported (spotted by metz@iam.unibe.ch).

* lib/packet.c, lib/tcp.c:
	Prevent EOF conditions on sockets from being mistaken for
	incomplete data.  An explicit warning about incomplete finger packets
	is now issued.

* src/fingerd.c:
	Warn about no finger packets returned from clients, but don't mark
	the client as down.

* config.h:
	Change timing defaults: poll interval 30 secs, poll timeout 10 secs.

* src/fingerd.c, src/in.fingerd.c, support/clients:
	New :local option in clients file allows local host polling without
	indirection through in.cfingerd. See support/clients for details.

* lib/x_show_face.c:
	Eliminated remains of non-functional R3 support.

* config.h, src/in.fingerd.c:
	New HAVE_VFORK config define to accomodate machines without vfork().

* lib/site/icsi_info.c:
	Point out bitmap availability in long finger output.

* config.h, src/fingerd.c, doc/finger.man:
	Added support for .fingerrc script a la GNU finger, however 
	with same enhancements as for special target scripts
	(pass finger peer host, interpret exit status).

* config.h, src/fingerd.c, lib/tcp.c:
	Use RFC 931 authentication to identify fingering user (if possible).
	Pass the result on to target scripts and fingerrc.

* config.h, src/fingerd.c:
	Globally change the uid/gid of in.fingerd to specified value
	(typically nobody/nogroup).

* lib/packet.c, lib/tty.c, lib/util.c:
	Cleaned up the way idle time and tty are formatted.  ttys names now
	use up to 3 chars, allowing for pseudo-ttys numbered up to 99.

* fingerd, in.cfingerd, in.fingerd:
	Cleaned up the HP cluster support.  The cluster is no longer implicitly
	treated as a single "local" host. Instead
	* fingerd can be directed to poll individual hosts in the cluster
	  using the :local directive; this also means
	* finger .clients gives a meaning full output;
	* finger .local returns only the local logins;
	* in.cfingerd still collects data for all hosts in cluster so the
	  entire cluster can be efficiently polled without running a local
	  fingerd.
	See support/clients for updated info in fingerd configuration.
	Note also that fingerd needs to be restarted to make changes to
	the ttylocs file visible to :local polling.
	
* config.h:
	Moved to config.h-dist, which is included in new config.h so
	local changes can be more easily saved and retrofitted.

A. Stolcke, 11/7/92

--- PATCHLEVEL 15

* lib/os.c:
	Made HP cluster polling more robust by checking whether node
	is up before reading files.  Generate 'down' pseudo-packets if
	appropriate.

* src/fingerd.c, src/in.fingerd.c:
	Keep track of and report down times.
	
A. Stolcke, 11/92/92

--- PATCHLEVEL 16

This version simplifies the run-time configuration process by replacing
the serverhost and clients files, as well as the LOCAL_NETS compile-time
define, by a single file, fingerdir/hostconfig.

Both the new hostconfig and the ttylocs file are now described in Section 5
manual pages.

* lib/os.c:
	New hostname comparison function checks hostname equivalence modulo
	redundant domain qualifiers.  Hostname stripping now also handles
	prefixes of fill domains appended to hostnames.

* lib/util.c, lib/getservhost.c, src/fingerd.c:
	Server and client names and client now read from a single configuration
	file using a generic key lookup routine.  Check out the documentation
	in hostconfig(5).

* lib/tcp.c, config.h:
	The LOCAL_NETS define has been replaced by code that reads local
	IP prefixes from the hostconfig file.

* lib/site/icsi_info.c:
	Use the SMTP lookup module from GNU finger 1.37 to chase down mail
	aliases, with the following fixes:
	* interpret files and pipes as indicators of local delivery;
	* send HELO to identify as finger agent, giving fingering hostname;
	* terminate SMTP connection with QUIT.

* src/in.fingerd.c:
	For unknown users in long format, try mail alias expansion.
	Also, if a long or short finger lookup find no info corresponding to
	a name, try to execute the [lsx]-default target script.  This allows
	overriding the default replies in such cases.

* src/in.fingerd.c:
	Added hostconfig keywords to deny connections on a per-user ("denyuser")
	or per-host ("denyhost") basis.

* src/in.cfingerd.c:
	Warn out stale database file when processing -all-hosts, just like
	in.fingerd.

* config.h-dist:
	Allow MIN_UPDATE_INTERVAL to be adjusted to local conditions.

* support/cpp-Makefile, config.h-dist:
	Install new man pages in section 5. Parametrized binary install names
 	with optional `g' prefix (gfinger, gfingerd).

* lib/tty.c:
	Fixed a missing initialization that could lead to core dumps when
	ttylocs file what not installed (found by Elmar Bartel).

* support/cpp-Makefile:
	Improved install.targets.

A. Stolcke, 1/25/93


--- PATCHLEVEL 17

* lib/util.c and others:
	Made host config reading more convenient through use of an implicit
	shared file (the HOSTCONFIGFILE).  Also added general hostname matching
	routine used for localnet, denyhost, and allowindirect.

* src/in.fingerd.c:
	New hostconfig option: allowindirect. Controls indirect fingering
	and replaces compile-time ALLOW_INDIRECT_FINGER.

* config.h-dist, src/finger.c, src/in.fingerd and lib:
	Support for variable field width in short finger output
	(contributed by bartel@informatik.tu-muenchen.de).

* support/install.sh:
	Replacement for systems without BSD-style install, contributed by
	bartel@informatik.tu-muenchen.de.
	Define InstallCmd ../support/install.sh to use it.

* support/cpp-Makefile, lib/Makefile:
	Added support for SaberC/ObjectCenter.

* lib/os.c:
	Support for IRIX /usr/adm/lastlog directory added.
	Use lastlog hostname field if possible to fill in missing ut_host.

* lib/os.c, lib/tty.c:
	TTY location lookup is now robust against alternative spellings of
	a hostname, including varying domain specs.

A. Stolcke, 2/7/93


--- PATCHLEVEL 18

* lib/util.c:
	Added negation (!) to hostname matching routine.

* src/in.fingerd.c:
	Added "logconnect" option to log connections and input lines.

* src/fingerd.c:
	Reopen, not just reread, hostconfig file on SIGHUP.
	Zero unused bytes in clientstatus (so od output is less confusing).

A. Stolcke, 4/12/93


--- PATCHLEVEL 19

* lib/in.fingerd.c:
	Fixed memory deallocation bug with finger .clients (caused seg faults
	on NeXT and possibly others).

* lib/os.c, lib/packet.c, config.h-dist:
	Retrofitted support for accounting info reading (What field).
	Not recommended, though (see WANT_ACCT).
	Note: This entails that there are now 4 print-width specifications.
	If you had changed the value to x,y,z before, this is now equivalent
	to x,0,y,z (i.e., What field is not printed).

* lib/os.c, src/in.fingerd.c:
	Simply leave Name field empty if user has none.

* src/in.fingerd.c, doc/hostconfig.man, support/hostconfig:
	New options "defaultlocal", "defaultremote" to control action
	when no user or target is specified.
	
* src/in.fingerd.c:
	When matching real names, skip dummy packets.

* lib/bitmap.c, include/bitmap.h, lib/read*.c, lib/save*.c:
	Find face bitmaps in  ~user/.face if present.

* lib/mail.c:
	Fixed HELO command reply handling to allow for continuation messages.

* lib/packet.c:
	Eliminated alloca() call from finger_at_address(): caused 11 bytes
	of memory per call to leak on ultrix.

* all source files:
	Added support for compilation with debugging malloc.

* added TAGS and tags files.

A. Stolcke, 8/13/93


--- PATCHLEVEL 20

* lib/mail.c:
	Tweak for sendmail v8: handle multiline greeting banners correctly.
	The SMTP command used for alias expansion can now be configured
	with #define SMTP_EXPAND_CMD.  It defaults to "EXPN", but some sites
	have this disabled, and you might want to change it to "VRFY".

* src/in.fingerd.c:
	Simplify uid/gid change to "nobody" by simply looking up the ids 
	in passwd file.  Login name used is configurable with NOBODY_USER.

* lib/tty.c:
	Generalized the tty name stripping code to handle arbitrary multi-
	component pathnames.

* lib/os.c:
	Take advantage of utmpx file, if available. Config'ed by HAVE_UTMPX.

* Makefiles:
	Allow compilation into platform specific subdirectories using
	pmake's MAKEOBJDIR/.CURDIR variables (while retaining compatibility
	with dumb makes).  E.g., on a sun4, do

		pmake MAKEOBJDIR=sun4.md dirs all

* various portability tweaks to accomodate Solaris2 and OSF/Alpha platforms.
  (based on patches by Igor Metz <metz@iam.unibe.ch> and Rainer Orth
  <ro@TechFak.Uni-Bielefeld.DE>).

A. Stolcke, 1/20/94

-- PATCHLEVEL 21

* lib/util.c:
	Use our own version of toupper() (a macro) based on table lookup.
	Always use our own version of stricmp/strncmp to ensure a fast
	case-insensitive comparison is used.  Thanks to Elmar Bartel
	(bartel@informatik.tu-muenchen.de) for pointing out that gfingerd
	can spend more than 30% of its time in the slow toupper() supplied
	by the C library.
	
* lib/tcp.c:
	Replaced the compile-time NO_LOCAL_AUTH with a more general, new
	option in hostconfig(5). "skipauth" allows disabling of remote user
	identification for any host or domain.

* lib/x_show_face.c:
	Added fallback resources to make this usable in case someone forgets
	to install the app-defaults file (courtesy Elmar Bartel).

* support/clean-userdata:
	A perl script contributed by David Barr <barr@pop.psu.edu> for
	purging the userdata file of entries for users that no longer exist.

* ported to BSD/386 1.1 platform.

A. Stolcke, 3/31/94

-- PATCHLEVEL 22

* lib/tcp.c:
	Replaced the "skipauth" hostconfig attribute with its negation,
	"authenticate".  A positive spec of what connections to authenticate
	seemed more natural.

* lib/os.c:
	Avoid appending "." to hostname when domainname is empty.

* lib/os.c:
	Lastlog querying used to omit users with "*" as passwd, with the
	intent of skipping administrative dummy login names.  This heuristic,
	however, is defeated by systems where passwd is always "*" due to
	shadowing of the encrypted password to non-root users.  The check
	was removed.

* lib/util.c:
	Strip initial whitespace from real user names.
	
* src/in.fingerd:
	Slight revision of .clients output. (a) allow 16 character for IP
	address. (b) don't report hosts as "down" while initial polling
	is still in progress.

* src/fingerd.c:
	Avoid repeating error message explaining why host is down.  Log
	one message the first time, and one when it's back up.

* hostconfig:
	New "domainname" attribute to override or supply otherwise missing
	local domain name.

* Makefiles:
	Generate fingerpaths.h and man pages in MAKEOBJDIR.
	Ensure multi-platform builds aren't confused by each other's
	configurations.

A. Stolcke, 5/14/94

-- PATCHLEVEL 23

* lib/os.c: more efficient acct file lookup and new "acctfile" hostconfig
	attribute

* src/in.fingerd.c: only local connections are allowed to change the output
	field widths from the default.

* src/fingerd.c: ensure userdata modification time is updated even if empty.

* src/in.fingerd.c: finger .users was checking uptodateness of hostdata instead
	of userdata file.

* src/in.fingerd.c: new "longoutput" hostconfig attribute to determine when
	to generate long output.

* src/os.c: added support for xutmp database (found on IRIX, contains remote
	hostname, unlike utmp).

* src/os.c: detect bogus utmp entries by checking existence of associated
	processes (on systems with ut_pid).

* src/fingerd.c: make sure SYSV signal handlers are restored after use.

A. Stolcke, 8/18/94

-- PATCHLEVEL 24

* src/tcp.c: tolerate auth_fd errors that occur when stdin is file or
	pipe instead of socket.

* src/targets: added .busy special target.

* plugged various memory leaks and allocation bug that could cause 
	core dumps when reading ttylocs file.

* lib/os.c: Semantics of entries in ttylocs is changed somewhat.
	"hostname" is a default location for all terminals,
	whereas "hostname:console" is used only when console location
	is determined.  Previously both types of entries where equivalent.

A. Stolcke, 16/11/94

-- PATCHLEVEL 25

* lib/tty.c: Treat KEYBOARD == 0 as a special case that forces zero idletime.

* src/in.fingerd.c: strip CR-LF from connection log messages.

* src/in.fingerd.c: added a non-public finger flag to tell a server
 	in.fingerd that a peer daemon is doing the fingering, allowing
	correct propagation of "long" output option.

	NOTE: This change requires updating the server in.fingerd before or
	at the same time as those on client machines.

* lib/site/icsi_info.c: terminate all output lines with CR-LF.

* lib/os.c: Use console location only for X display 0 (higher numbered displays
	are often X terminals or pseudo-servers).

* src/in.fingerd.c: say when people no longer have an account, instead of
	just not being logged in.

* src/targets: added .down special target.

* src/in.fingerd.c: avoid infinite loop when doing long lookups with substring
	matching on server host.

A. Stolcke, 2/18/95

-- PATCHLEVEL 26

* src/in.cfingerd.c: Added a self-destruct timer to remove hung daemons.

* src/in.fingerd.c: Ditto.

* src/in.fingerd.c: Work around a bug in bad interaction between ctime() and
	getpwnam() in some SunOS4 versions.

* support/cpp-Makefile: No longer try to make fingerd a pure executable
	(breaks with latest gcc).

* src/in.fingerd.c, lib/site/icsi_info.c: Avoid substring matching on
	login names when retrieving logins for long output.

* src/tty.c: work around broken X display managers and terminal emulators
	that stick ":0" in to tty field of the utmp file (treat it at
	a console login).

A. Stolcke, 1/10/96

