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.

About installation: See the bottom of this file. Check the Makefile!
Be sure you know what you are doing! You may well be able to lock
yourself out from your machine. Especially: The init provided here
(simpleinit) is NOT a SYSV compatible init and the inittab format
is different.

If you are uncertain whether you got the latest version, check out

	ftp://ftp.daimi.aau.dk/pub/linux/poe/

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 publically 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 untilities 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.

who.c		A simple who(1) util. to list utmp. Done by me.
		You may prefer the GNU who util. with more options
		and features.

hostname.c	A hostname(1) command to get and set the hostname. I did
		this too.

domainname.c	Like hostname, only reads out or sets the domainname.

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

simpleinit.c	A simple init program, written by me. Uses /etc/inittab

		A "kill -HUP" to init makes it re-read /etc/inittab.
		A "kill -TSTP" to init makes it stop spawning gettys on the
		ttys. A second "kill -TSTP" starts it again.
		A kill -INT to init makes it attempt a reboot of the machine.
		this works in connection with kernel support for softboot
		when Ctrl-Alt-Del is pressed.

		Init will start up in singleuser mode if /etc/singleboot
		exists at boottime, or if it is given an argument of "single"
		via eg. LILO. If /etc/securesingle exists it will ask for the
		root password before starting single user.

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.

users		Another script that uses awk(1) and tr(1) to process the
		output from who(1) into a one-liner.
		If you don't have awk, but have Perl, this does the same:

		who | perl -ane 'print "$F[0] "'; echo ""

pathnames.h:
		Header.

param.h
		Header, extended with getdtablesize() macro, should go
		in /usr/include/sys

Building.
---------
A "make all" should do. At least it does for me.

Installation:
-------------

login		should go in /bin, if you don't like this change
		pathnames.h and recompile at least agetty.

getty, init	Put them in SBINDIR

who, hostname, write, wall, mesg, users:
		/usr/bin

securetty	login needs this in /etc, defines which ttys that root
		can login on. This should *never* include ttys{1,2}

inittab		the simpleinit code needs this in /etc. Note that the syntax
		of /etc/inittab has little to do with the syntax of a real
		SysV inittab. Edit this one for your local setup.

shells		The chsh program will use this if it's placed in /etc. It
		defines the valid shell-programs. Have one abs. path on
		each line.

You can also do a "make install" as root, but don't just do it because I
say so, check the Makefile first.

"Make install" will install only the new binaries, and not motd, inittab,
securetty and issue. To install these configuration files, do a 
"make Install".

Getty requires a /dev/console to write errors to. I just made it a symlink
to /dev/tty1. Because of a bug in the tty driver this errorlogging may
cause the shell on tty1 to logout.

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)
