README for init/getty/login, by poe@daimi.aau.dk

This package contains simpleinit, agetty, and login programs for Linux.
Additional utilities included are: hostname, who, write, wall, users
domainname, hostid, cage and mesg.

Most of this software has been contributed by others, I basically just
ported the things to Linux.

Version 1.49 (20-Jun-97)
	Small patches for new util-linux distribution and glibc compat.
	PAM support in login.c by Erik Troan.

Version 1.48 (6-Jun-97)
	Now changes mode and owner of /dev/vcs devices for console logins.
	After idea by Andries Brouwer.

Version 1.47 (2-Apr-97)
	Got new version of hostid.c and hostid.1 from 
	Sander van Malssen <svm@kozmix.ow.nl>.
	Removed premature endutent() call in login.c, simpleinit.c and 
	agetty.c to be compatible with the changed semantics of gnu libc2. 
	Fix by Jesse Thilo <Jesse.Thilo@pobox.com>.

Version 1.46 (28-Jan-97)
	Several security fixes for login by David Holland (buffer overruns)
	<dholland@hcs.harvard.edu>
	Fixed write.c, to handle a terminating period correctly.
	Re-indented login.c, it was getting too messy.

Version 1.45a (16-Dec-96)
	Better support in login for shadow passwords. Compile with
	-DSHADOW_PWD if you have <shadow.h>. This is on by default.
	By Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>.
	Changed the wtmp locking scheme in login.c,agetty.c,simpleinit.c
	to flock() /etc/wtmplock instead of the wtmp file directly.
	This avoids a denial of service attack.
	Some support for the RB-1 Cryptocard token for challenge/response
	authentication. This needs a DES library, either Eric Young's
	libdes, or the Koontz implementation, see cryptocard.c.
	Initial support patch by Randolph Bentson, 
	<bentson@grieg.seaslug.org>
	Changed getpass() to use fputs() instead of fprintf().

Version 1.44 (13-Nov-96):
	Made isapty() in checktty.c more resilient to 2.0 systems
	that haven't re-MAKEDEV'ed their pty devices.

Version 1.43 (8-Nov-96):
	Fix to checktty.c: PTY's are numbered differently after 1.3,
	blush! Fix by Gerhard Schneider <gs@ilfb.tuwien.ac.at>

Version 1.42c (6-Nov-96):
	Small fix by Gabriel M. Schuyler <schuyler@easiest.com>, to get
	better syslog messages (1 LOGIN FAILURE instead of 2 LOGIN FAILURES).
	Patch butchered by me.

Version 1.42b (30-Sep-96):
	Got patch for checktty.c from Christoph Lameter
	<clameter@miriam.fuller.edu> so it doesn't traverse the groupfile
	"manually" but uses the getgroups() call, this is more efficient
	with large groupfiles and NIS/YP.

Version 1.42a (24-Sep-96):
	Added extra syslog() call to login.c to log all good logins.
	Patch from Steve Philp.

Version 1.41 (20-Jul-96):
	Added security fix to checktty.c by JDS to clear certain lists.
	Patches butchered and ANSI'fied by me.
	Added -n option to agetty to avoid the login prompt.

Version 1.40a (29-Dec-95):
	Added -f <issue_file> option to agetty. Patches from Eric Rasmussen
	<ear@usfirst.org>, but somewhat butchered by me.

Version 1.39 (25-Oct-95):
	Lots of testing and bugfixes in agetty. Now the modem init stuff 
	should finally work (for me). Also wrote modem.agetty as an example
	on how to use agetty with a modem.
	Agetty now also supports baud rates of 38400, 57600, 115200 and
	230400 bps.

Version 1.37 (15-Sep-95):
	Added -I <initstring> and -w options to agetty.c for those that
	use agetty with modems.

Version 1.36 (25-Aug-95): 
	Enhanced /etc/usertty features with group support. Moved this part
	of login.c to checktty.c. One can now define classes of hosts and
	ttys and do access checking based on unix-group membership. See
	login.1. Also time ranges for logins can be specified, for example
	writing the line

	joe	[mon:tue:wed:thu:fri:8-16]@barracuda [mon:tue:wed:thu:fri:0-7:17-23]@joes.pc.at.home [sat:sun:0-23]@joes.pc.at.home

	says that during working hours, Joe may rlogin from the host
	barracuda, whereas outside working hours and in weekends Joe may
	rlogin from his networked PC at home.

	login.c: failures was not properly initialized, it now is. Also
	made sure ALL failures are really logged to syslog.

Version 1.35 (7-Aug-95):
	login.c: Much improved features for the usertty file, allows
	access control based on both hostnames/addresses and line. See the 
	about.usertty file and the man-page.

	Fixed agetty so it doesn't fiddle with the ut_id field in the
	utmp record, this should prevent growing utmps on systems with
	more than 10 login lines. Fix suggested and checked by Alan Wendt 
	<alan@ezlink.com> in his agetty.1.9.1a.

	Agetty now installs as agetty again, not as getty.
	Updated man-page for login(1) to document /etc/usertty changes.

	This has been tested on Linux 1.2.5 with GCC 2.5.8 and libc 4.5.26.

Version 1.33a (20-Jun-95):
	rchatfie@cavern.nmsu.edu ("rc.") suggested that I should remove
	the #ifndef linux around the special logging of dial-up 
	logins. This is now done, so each login via a serial port 
	generates a separate DIALUP syslog entry.

Version 1.33 (5-Jun-95):
	Patch by Ron Sommeling <sommel@sci.kun.nl> and
	jlaiho@ichaos.nullnet.fi (Juha Laiho) for agetty.c, used
	to return a pointer to an automatic variable in get_logname().
	Many patches from or via Rickard Faith <faith@cs.unc.edu>, fixing
	man-pages etc, now defaults to using /var/log/wtmp and /var/run/utmp
	according to the new FSSTND.

	Fix in login.c for CPU eating bug when a remote telnet client dies
	while logging in.

	This is for Linux 1.2, GCC 2.6.2 or later.

Version 1.32b (12-Mar-95):
	Login now sets the tty group to "tty" instead of "other". Depending
	on compile-time define USE_TTY_GROUP the tty mode is set to 0620 or
	0600 instead of 0622. All as per suggestion by Rik Faith and the
	linux-security list.
	Write/wall now strips control chars except BEL (\007). Again after
	suggestion by Rik Faith.

Version 1.32a
	Urgent security patch from Alvaro M. Echevarria incorporated into
	login.c. This is really needed on machines running YP until
	the libraries are fixed.

Version 1.32
	Login now logs the ip-address of the connecting host to utmp as it
	should.

Version 1.31b (2-Feb-95):
	Daniel Quinlan <quinlan@yggdrasil.com> and Ross Biro 
	<biro@yggdrasil.com> suggested a patch to login.c that allows for 
	shell scripts in the shell field of /etc/passwd, so one can now
	have (as a line in /etc/passwd):
		bye::1000:1000:Outlogger:/bin:echo Bye
	Logging in as "bye" with no password simply echoes Bye on the screen.
	This has applications for pppd/slip.

Version 1.31a (28-Oct-94):
	Scott Telford provided a patch for simpleinit, so executing reboot
	from singleuser mode won't partially execute /etc/rc before
	the reboot.

Version 1.30 (17-Sep-94):
	tobias@server.et-inf.fho-emden.de (Peter Tobias) has made a more 
	advanced hostname command that understands some options such as
	-f for FQDN etc. I'll not duplicate his work. Use his hostname
	package if you wish.

	svm@kozmix.xs4all.nl (Sander van Malssen) provided more features
	for the /etc/issue file in agetty. \U and \u now expand to the 
	number of current users.

	It is now possible to state the value of TERM on the agetty command
	line. This was also provided by Sander.

	This has been built under Linux 1.1.42 with gcc 2.5.8 and libc 4.5.26.

Version 1.29 (18-Aug-94):
	Finally got around to making a real version after the numerous
	alpha versions of 1.28. Scott Telford <st@epcc.ed.ac.uk> provided
	a patch for write(1) to make it look more like BSD write.

	Fixed login so that the .hushlogin feature works even with real
	protective users mounted via NFS (ie. where root can't access
	the user's .hushlogin file).

	Cleaned up the code to make -Wall bearable.

Version 1.28c (21-Jul-94):
	Rik Faith reminded me that agetty should use the syslog
	facility. It now does.

Version 1.28b (30-May-94):
	On suggestion from Jeremy Fitzhardinge <jeremy@suite.sw.oz.au>
	I added -- as option delimiter on args passed from agetty to
	login. Fixes -froot hole for other login programs. The login
	program in this package never had that hole.

Version 1.28a (16-May-94):
	bill@goshawk.lanl.gov provided a couple of patches, one fixing
	terminal setup in agetty, and reboot is now supposed to be
	in /sbin according to FSSTND.

Version 1.27 (10-May-94):
	Changed login.c, so all bad login attempts are logged, and added
	usertty security feature. See about.usertty for an explanation.
	There's no longer a limit of 20 chars in the TERM environment 
	variable. Suggested by Nicolai Langfeldt <janl@math.uio.no>

	Added #ifdef HAVE_QUOTA around quota checks. Enable them if
	you have quota stuff in your libraries and kernel.
	Also re-enabled set/getpriority() calls as we now have them,
	and have had for a long time...

	Now wtmp is locked and unlocked around writes to avoid mangling.
	Due to Jaakko Hyv{tti <HYVATTI@cc.helsinki.fi>.

	Wrt. agetty: A \o in /etc/issue now inserts the domainname, as 
	set by domainname(1). Sander van Malssen provided this.
	This is being used under Linux 1.1.9

	Beefed up the agetty.8 man-page to describe the /etc/issue
	options. Added man-pages for wall, cage, who.

Version 1.26 alpha (25-Apr-94):
	Added patch from Bill Reynolds <bill@goshawk.lanl.gov> to 
	simpleinit, so it will drop into single user if /etc/rc
	fails, eg. from fsck.

Version 1.25 (9-Feb-94):
	Agetty should now work with the Linux 0.99pl15a kernel.
	ECHOCTL and ECHOPRT are no longer set in the termios struct.
	Also made agetty accept both "tty baudrate" and "baudrate tty"
	arguments.

Version 1.24 (23-Jan-94): changes since 1.22
	Christian von Roques <roques@juliet.ka.sub.org> provided a patch
	that cleans up the handling of the -L option on agetty. 
	Rik Faith <faith@cs.unc.edu> enhanced several man-pages...

Version 1.23 (11-Dec-93): changes since 1.21
	Mitchum DSouza provided the hostid(1) code. It needs libc 4.4.4 or
	later and a Linux 0.99.14 kernel or later. It can set and print
	the world unique hostid of the machine. This may be used in 
	connection with commercial software licenses. God forbid!
	I added the -v option, and munged the code a bit, so don't blame
	Mitch if you don't like it.

	I made the "cage" program. Using this as a shell in the passwd
	file, enables one to let users log into a chroot'ed environment.
	For those that have modem logins and are concerned about security.
	Read the source for further info.

	"who am i" now works.

	The login program works with Yellow Pages (aka NIS) simply by
	linking with an appropriate library containing a proper version
	of getpwnam() and friends.

Version 1.21 (30-Oct-93): changes since 1.20
	In simpleinit.c: The boottime wtmp record is now written *after*
	/etc/rc is run, to put a correct timestamp on it.
	Daniel Thumim <dthumim@mit.edu> suggested this fix.

	The source and Makefile is prepared for optional installation of 
	binaries in /sbin instead of /etc, and logfiles in /usr/adm instead
	of /etc. See and change the Makefile to suit your preferences.
	Rik Faith and Stephen Tweedie inspired this change.

Version 1.20 (30-Jul-93): changes since 1.17:
	Versions 1.18 and 1.19 were never made publicly available.
	Agetty now supports a -L switch that makes it force the CLOCAL flag.
	This is useful if you have a local terminal attached with a partly
	wired serial cable that does not pass on the Carrier Detect signal.

	There's a domainname program like the hostname program; contributed
	by Lars Wirzenius.

	Simpleinit will now write a REBOOT record to wtmp on boot up. Time-
	zone support is now optional in simpleinit. Both of these patches
	were made by Scott Telford <st@epcc.ed.ac.uk>.

	This is for Linux 0.99.11 or later.

Version 1.17 (19-May-93): changes since 1.16:
	Login, simpleinit and write should now work with shadow passwords
	too. See the Makefile. Thanks to Anders Buch who let me have an
	account on his SLS based Linux box on the Internet, so I could test
	this. I should also thank jmorriso@rflab.ee.ubc.ca (John Paul Morrison)
	who sent me the shadow patch to login.c

Version 1.16 (24-Apr-93): changes since 1.15a:
	Simpleinit now clears the utmp entry associated with the pid's that
	it reaps if there is one. A few are still using simpleinit and this
	was a popular demand. It also appends an entry to wtmp

Version 1.15a (15-Mar-93): changes since 1.13a:
	junio@shadow.twinsun.com (Jun Hamano) sent me a one-line fix
	for occasional mangled issue-output from agetty.

Version 1.13a (2-Mar-93): changes since 1.12a:
	With the new LILO (0.9), there are more than one possible arg
	to init, so Werner Almesberger <almesber@bernina.ethz.ch>
	suggested that a loop over argv[] was made in boot_single() in
	simpleinit.c

Version 1.12a (24-Feb-93): changes since 1.11:
	This is for Linux 0.99.6 or later. Built with gcc 2.3.3 and libc4.2
	jrs@world.std.com (Rick Sladkey) told me that the setenv("TZ",..)
	in login.c did more harm than good, so I commented it out.

Version 1.11a (16-Feb-93): changes since 1.9a:
	This is for Linux 0.99.5 or later.
	Anthony Rumble <arumble@extro.ucc.su.OZ.AU> made me avare that
	the patches for vhangup() from Steven S. Dick didn't quite work,
	so I changed it.

	Linus Torvalds provided another patch relating to vhangup, since
	in newer Linuxen vhangup() doesn't really close all files, so we
	can't just open the tty's again.

Version 1.9a (18-Jan-93): changes since 1.8a:
	Rick Faith sent me man-pages for most of the utilities in this
	package. They are now included.

	Steven S. Dick <ssd@nevets.oau.org> sent me a patch for login.c
	so DTR won't drop during vhangup() on a modemline.

	This is completely untested!! I haven't even had the time to
	compile it yet.

Version 1.8a (13-Dec-92): changes since 1.7:
	This is for Linux 0.98.6 or later. Compiles with gcc2.2.2d7 and libc4.1

	Bettered write/wall after fix from I forget who. Now wall can have
	commandline args.

	Fixed bug in who.c

	Patched simpleinit.c with patch from Ed Carp, so it sets the timezone
	from /etc/TZ. Should probably by be /etc/timezone.

	Sander Van Malssen <sander@kozmix.hacktic.nl> provided a patch
	for getty, so it can understand certain escapecodes in /etc/issue.

	I hacked up a very simple substitute for a syslog() call, to try out
	the logging. If you have a real syslog() and syslogd then use that!

	The special vhangup.c file is out, it's in the official libc by now.
	(and even in the libc that I have :-)

	who, and write are now deprecated, get the better ones from one of
	the GNU packages, shellutils I think.

	Some people think that the simple init provided in this package is too
	spartan, if you think the same, then get the SYSV compatible init
	from Miquel van Smoorenburg <miquels@maestro.htsa.aha.nl>
	Simpleinit will probably be deprecated in the future.

Version 1.7: 26-Oct-92 changes since 1.6:
	This is for Linux 0.97PL4 or later.

	Thanks to Werner Almesberger, init now has support for a 
	singleuser mode. 

	Login now supports the -h <hostname> option, used in connection
	with TCP/IP. (rlogin/telnet)

	Getty writes an entry to /etc/wtmp when started, so last won't report
	"still logged in" for tty's that have not been logged into since
	the last user of that tty logged out. This patch was inspired by
	Mitchum DSouza. To gain the full benefit of this, get the newest
	last from the admutils-1.4.tar.Z package or later.

Version 1.6 (29-Aug-92): changes since 1.5:
	This is for Linux 0.97P1+ or later.
	
	Login now uses the newly implemented vhangup() sys-call, to prevent
	snooping on the tty.
	An alternative getpass() function is now provided with login, because
	I was told that the old one in libc didn't work with telnet and
	or rlogin. I don't have a network or a kernel with TCP/IP so I haven't
	tested the new one with telnet, but it is derived from BSD sources
	that are supposed to work with networking.

Version 1.5 (12-Aug-92): changes since 1.4
	This is for Linux 0.97 or later, and has been built with gcc2.2.2

	This release just puts in a few bugfixes in login.c and simpleinit.c

Version 1.4 (4-Jul-92): changes since 1.3:
	This is for Linux 0.96b, and has been built and tested with gcc 2.2.2.

	Init now handles the SIGINT signal. When init gets a SIGINT it will
	call /usr/bin/reboot and thereby gently reboot the machine. This
	makes sense because after Linux 0.96B-PL1 the key-combination
	Ctrl-Alt-Del may send a SIGINT to init instead of booting the 
	machine the hard way without syncing or anything.

	You may want to get the admutils-1.1 package which includes a program
	that will instruct the kernel to use the "gentle-reboot" procedure.

Version 1.3 (14-Jun-92): changes since 1.2:
	This is for Linux 0.96A.

	The ioctl(TIOCSWINSZ) has been removed from login.c because it now
	works :-).
	
	login.c now supports a lastlog database.

	Several programs and pieces of source that were included in the 1.2
	package has been *removed* as they are incorporated into the new
	libc. Other omitted parts such as last(1) has been replaced by
	better versions, and can be found in the admutils package.

	Agetty is now called getty and will be placed in /etc.

	A few changes has been made to make it possible to compile the
	stuff with GCC 2.x.

Version 1.2 (28-Feb-92): changes since 1.1:
	This is for Linux 0.12.

	A couple of problems with simpleinit.c has been solved, thanks to
	Humberto Zuazaga. So now init groks comments in /etc/inittab, and
	handles the HUP and TSTP signals properly.

	I added two small scripts to the distribution: users and mesg.

	TERM is now carried through from /etc/inittab all the way to the
	shell. Console tty's are special-cased, so the termcap entry in
	/etc/inittab is overridden by the setting given at boot-time.
	This requires a different patch to the kernel than that distributed
	with version 1.1

	Login no more sends superfluous chars from a password to the 
	shell. It also properly prints a NL after the password.

	Agetty didn't set the erase character properly, it does now.

	A few extra defines has been added to utmp.h

	Several netters helped discover the bugs in 1.1. Thanks to them
	all.

Version 1.1 (released 19-Feb-92): Changes since 1.0:
	A bug in simpleinit.c has been fixed, thanks to Pietro Castelli.
	The definition of the ut_line field has been changed to track the
	USG standard more closely, we now strip "/dev/" off the front.
	Thanks to: Douglas E. Quale and Stephen Gallimore.

	I have added a getlogin.c library routine, and a write(1) command.
	I removed the qpl-init stuff. If people want to use it, they should
	get it from the source. I don't want to hack on it anymore.

	A couple of people reported problems with getty having problems 
	with serial terminals. That was correct. I borrowed a null-modem
	from Tommy Thorn, and now the problems should be fixed. It seems
	that there is kept a lot of garbage in the serial buffers, flush
	them and it works like a charm. Getty does an ioctl(0, TCFLSH, 2)
	for this.

	The write.c code now doubles as code for a wall(1) program.

Description of the various files:

login.c		The login program. This is a portation of BSD login, first
		to HP-UX 8.0 by Michael Glad (glad@daimi.aau.dk), and
		to Linux (initially to 0.12) by me.

agetty.c	The getty program. From comp.sources.misc, by W.Z. Venema.
		Hacked a bit by me.

write.c		A write(1) command, used to pass messages between users
		at different terminals. This code doubles as code for 
		a wall(1) command. Make a symlink: /usr/bin/wall ->
		/usr/bin/write for this.

mesg		A tiny shellscript, so you can avoid that other people write
		to your shell.

pathnames.h:
		Header.

Getty will print the contents of /etc/issue if it's present before asking
for username. Login will print the contents of /etc/motd after successful
login. Login doesn't print /etc/motd, and doesn't check for mail if
~/.hushlogin is present and world readable.

If /etc/nologin is present then login will print its contents and disallow
any logins except root.
It might be a good idea to have a "rm -f /etc/nologin" line in one's 
/etc/rc file.

If /etc/securetty is present it defines which tty's that root can login on.

   - Peter (poe@daimi.aau.dk)
