Subject: Re: pcvt and TIOCCONS
To: Gordon W. Ross <gwr@mc.com>
From: Chris G Demetriou <Chris_G_Demetriou@UX2.SP.CS.CMU.EDU>
List: current-users
Date: 04/18/1996 20:01:27
> Actions to be performed at login and logout time would be controlled
> by two files: /etc/tty_login and /etc/tty_logout respectively.  Both
> would use the same format, and would be processed by a single library
> function to be added to libutil.  The file format would be lines of
> the form:
> 
> 	# comment line
> 	tty_name	shell_command
> 
> The format could (optionally) be extended to allow multi-line
> commands by continuing onto the next line when a backslash is
> the last character on the line.  [ Is this desirable? ]

I don't care one way or the other...  8-)

> The tty_name would be matched against the name of the current
> tty line so all lines (and only those lines) with he tty_name
> field matching would be processed.
> 
> The shell_command field would be run as 'sh -c "shell_command"'
> with the following environment variable guaranteed to be set:
> 
> 	USER=user_name

I would say that you also want the name of the tty that they're
logging in to or out of...  That way i could write one big program,
that handled all of the actions for all of my ttys, rather than having
to have lots of little scripts...

a default path would be nice, too...  8-)


> This format allows simple commands to be specified directly as
> a shell command, and more complicated processing could be done
> with an external program.  Here are examples of each:
> 
> Example /etc/tty_login file:
> 	# This line just needs one related device chown'ed
> 	/dev/wsconsole		chown ${USER} /dev/wsmouse
> 	# This line has several related devices, which are
> 	# handled by the external program /etc/console.sh
> 	/dev/kdconsole		/etc/console.sh login
>
> Example /etc/tty_logout file:
> 	# This line just needs one related device chown'ed
> 	/dev/wsconsole		chown root /dev/wsmouse
> 	# This line has several related devices, which are
> 	# handled by the external program /etc/console.sh
> 	/dev/kdconsole		/etc/console.sh logout

I would suggest that the tty names as used in these files be the same
as those in /etc/ttys, unless there's a good reason to do otherwise.


> Here is a proposed interface for the new libutil function:
> 
> void tty_relatives(char *filepath, char *ttyname, char *username);
> 
> 	filepath: one of:
> 		_PATH_TTY_LOGIN 	("/etc/tty_login")
> 		_PATH_TTY_LOGOUT 	("/etc/tty_logout")
> 	
> 	ttyname:  name of the tty getty runs on (i.e. /dev/console)

again, why not as specified in /etc/ttys?


> The above function would be called by src/usr.bin/login/login.c
> just after it does the chown call to the tty line, i.e.:
> 
> 	tty_relatives(_PATH_TTY_LOGIN, ttyn, pwd->pw_name);
> 
> The same function would also be called by getty in main.c as:
> 
> 	tty_relatives(_PATH_TTY_LOGOUT, ttyn, "root");
> 
> just after it does its chown/chmod calls for the tty line.

This looks sane, to me...

> There may be better ways to communicate the various pieces of
> information like $USER in the call to tty_relatives(), and the
> name of that function is certainly open to improvments...

I see you're as good at naming functions as I am...  8-)


One possible adjustment: it may make sense to have the 'matching' code
support wildcards, either via glob-like syntax or regexps...

For instance, i can imagine wanting to do something like:

	tty[BC]?	serial_line_timer

where that action could start a process to limit total login time
allowed for that user on that tty, or something like:

	*		check_logger	

where that action may, say, want to check for logins by
individuals suspected of doing Bad Things, etc., and set up some type
of logging mechnism, or something...



cgd