Subject: hack to display host info in finger(1)
To: None <current-users@sun-lamp.cs.berkeley.edu>
From: Luke Mewburn <lm@rmit.edu.au>
List: current-users
Date: 04/04/1994 12:50:00
I submit this patch for finger which adds a feature - the ability to
toggle the display of the hostname instead of the office info in the
short listing. I personally find the hostname info more useful.
The patch adds the `-h' option to finger. 
A cosmetic change is also made - if the login time was less than six
days ago, it prints the day name (e.g, `Tue') instead of the month
and day (e.g, `Mar 29').
It also changes fingerd to default to using -h.

Also, a few days ago I sent some fixes to share/doc/usd. I don't know
if they got to sun-lamp though (I was having mailer problems at the
time), but I can't see them in the tree yet.

Luke.

--- cut here --- file: finger.dif
*** finger.orig/finger.1	Tue Feb 15 21:19:28 1994
--- usr.bin/finger/finger.1	Tue Mar 29 23:21:23 1994
***************
*** 32,38 ****
  .\"	from: @(#)finger.1	6.14 (Berkeley) 7/27/91
  .\"	$Id: finger.1,v 1.4 1994/02/14 19:07:33 cgd Exp $
  .\"
! .Dd July 27, 1991
  .Dt FINGER 1
  .Os BSD 4
  .Sh NAME
--- 32,38 ----
  .\"	from: @(#)finger.1	6.14 (Berkeley) 7/27/91
  .\"	$Id: finger.1,v 1.4 1994/02/14 19:07:33 cgd Exp $
  .\"
! .Dd March 29, 1994
  .Dt FINGER 1
  .Os BSD 4
  .Sh NAME
***************
*** 40,46 ****
  .Nd user information lookup program
  .Sh SYNOPSIS
  .Nm finger
! .Op Fl lmsp
  .Op Ar user ...
  .Op Ar user@host ...
  .Sh DESCRIPTION
--- 40,46 ----
  .Nd user information lookup program
  .Sh SYNOPSIS
  .Nm finger
! .Op Fl lmsph
  .Op Ar user ...
  .Op Ar user@host ...
  .Sh DESCRIPTION
***************
*** 55,67 ****
  displays the user's login name, real name, terminal name and write
  status (as a ``*'' before the terminal name if write permission is
  denied), idle time, login time, office location and office phone
! number.
  .Pp
  Idle time is in minutes if it is a single integer, hours and minutes
  if a ``:'' is present, or days if a ``d'' is present.
! Login time is displayed as month, day, hours and minutes, unless
! more than six months ago, in which case the year is displayed rather
! than the hours and minutes.
  .Pp
  Unknown devices as well as nonexistent idle and login times are
  displayed as single asterisks.
--- 55,69 ----
  displays the user's login name, real name, terminal name and write
  status (as a ``*'' before the terminal name if write permission is
  denied), idle time, login time, office location and office phone
! number. If
! .Fl h
! is also given, the remote host is printed instead of the office information.
  .Pp
  Idle time is in minutes if it is a single integer, hours and minutes
  if a ``:'' is present, or days if a ``d'' is present.
! Login time is displayed as dayname if less than 6 days, else month,
! day; hours and minutes, unless more than six months ago, in which
! case the year is displayed rather than the hours and minutes.
  .Pp
  Unknown devices as well as nonexistent idle and login times are
  displayed as single asterisks.
***************
*** 99,104 ****
--- 101,111 ----
  at their mailbox since new mail arriving, or ``New mail received ...'',
  ``  Unread since ...'' if they have new mail.
  .Pp
+ .It Fl h
+ When used in conjunction with the
+ .Fl s 
+ option, the remote host information is displayed instead of the office
+ location and office phone.
  .It Fl p
  Prevents
  the
***************
*** 164,166 ****
--- 171,175 ----
  .Nm finger
  command appeared in
  .Bx 3.0 .
+ Luke Mewburn (lm@rmit.edu.au) added mail status reporting, and the
+ optional remote host printing.
*** finger.orig/finger.c	Fri Dec 17 18:11:10 1993
--- usr.bin/finger/finger.c	Tue Mar 29 10:41:04 1994
***************
*** 35,41 ****
   */

  /*
!  * Mail status reporting added 931007 by Luke Mewburn, <zak@rmit.edu.au>.
   */

  #ifndef lint
--- 35,42 ----
   */

  /*
!  * Mail status reporting added 931007 by Luke Mewburn, <lm@rmit.edu.au>.
!  * Host/office toggling added 940329 by Luke Mewburn, <lm@rmit.edu.au>.
   */

  #ifndef lint
***************
*** 60,65 ****
--- 61,67 ----
   * and office location/phone number.  The long format gives the same
   * information (in a more legible format) as well as home directory, shell,
   * mail info, and .plan/.project files.
+  * If -h is used with -s, the office info is replaced by the remote host info.
   */

  #include <sys/param.h>
***************
*** 69,74 ****
--- 71,77 ----

  time_t now;
  int lflag, sflag, mflag, pplan;
+ int hflag;
  char tbuf[1024];

  main(argc, argv)
***************
*** 79,85 ****
  	int ch;
  	time_t time();

! 	while ((ch = getopt(argc, argv, "lmps")) != EOF)
  		switch(ch) {
  		case 'l':
  			lflag = 1;		/* long format */
--- 82,88 ----
  	int ch;
  	time_t time();

! 	while ((ch = getopt(argc, argv, "lmpsh")) != EOF)
  		switch(ch) {
  		case 'l':
  			lflag = 1;		/* long format */
***************
*** 93,102 ****
  		case 's':
  			sflag = 1;		/* short format */
  			break;
  		case '?':
  		default:
  			(void)fprintf(stderr,
! 			    "usage: finger [-lmps] [login ...]\n");
  			exit(1);
  		}
  	argc -= optind;
--- 96,108 ----
  		case 's':
  			sflag = 1;		/* short format */
  			break;
+ 		case 'h':
+ 			hflag = 1;		/* print host, not office */
+ 			break;
  		case '?':
  		default:
  			(void)fprintf(stderr,
! 			    "usage: finger [-lmpsh] [login ...]\n");
  			exit(1);
  		}
  	argc -= optind;
*** finger.orig/sprint.c	Fri Dec 17 18:11:12 1993
--- usr.bin/finger/sprint.c	Tue Mar 29 23:20:53 1994
***************
*** 50,55 ****
--- 50,56 ----
  sflag_print()
  {
  	extern time_t now;
+ 	extern int    hflag;
  	register PERSON *pn;
  	register WHERE *w;
  	register int cnt;
***************
*** 67,80 ****
  	 *	if terminal writeable (add an '*' to the terminal name
  	 *		if not)
  	 *	if logged in show idle time and day logged in, else
! 	 *		show last login date and time.  If > 6 moths,
! 	 *		show year instead of time.
! 	 *	office location
! 	 *	office phone
  	 */
  #define	MAXREALNAME	20
! 	(void)printf("%-*s %-*s %s\n", UT_NAMESIZE, "Login", MAXREALNAME,
! 	    "Name", "Tty  Idle  Login Time   Office     Office Phone");
  	for (cnt = 0; cnt < entries; ++cnt) {
  		pn = list[cnt];
  		for (w = pn->whead; w != NULL; w = w->next) {
--- 68,88 ----
  	 *	if terminal writeable (add an '*' to the terminal name
  	 *		if not)
  	 *	if logged in show idle time and day logged in, else
! 	 *		show last login date and time.  If > 6 months,
! 	 *		show year instead of time. If < 6 days,
! 	 *		show day name instead of month & day.
! 	 *	if (-h) given:
! 	 *		remote host
! 	 *	else
! 	 *		office location
! 	 *		office phone
  	 */
  #define	MAXREALNAME	20
! #define MAXHOSTNAME	20
! 	    /* "Name", "Tty  Idle  Login Time   Office     Office Phone"); */
! 	(void)printf("%-*s %-*s %s  %s\n", UT_NAMESIZE, "Login", MAXREALNAME,
! 	    "Name", "Tty  Idle   Login Time", (hflag) ? " Where"
! 						     : "Office     Office Phone");
  	for (cnt = 0; cnt < entries; ++cnt) {
  		pn = list[cnt];
  		for (w = pn->whead; w != NULL; w = w->next) {
***************
*** 99,116 ****
  			} else
  				(void)printf("    *  ");
  			p = ctime(&w->loginat);
! 			(void)printf("%.6s", p + 4);
  			if (now - w->loginat >= SECSPERDAY * DAYSPERNYEAR / 2)
  				(void)printf("  %.4s", p + 20);
  			else
  				(void)printf(" %.5s", p + 11);
! office:			if (pn->office)
! 				(void)printf(" %-10.10s", pn->office);
! 			else if (pn->officephone)
! 				(void)printf(" %-10.10s", " ");
! 			if (pn->officephone)
! 				(void)printf(" %-.15s",
! 				    prphone(pn->officephone));
  			putchar('\n');
  		}
  	}
--- 107,132 ----
  			} else
  				(void)printf("    *  ");
  			p = ctime(&w->loginat);
! 			if (now - w->loginat < SECSPERDAY * (DAYSPERWEEK - 1))
! 				(void)printf("  %.3s ", p);
! 			else
! 				(void)printf("%.6s", p + 4);
  			if (now - w->loginat >= SECSPERDAY * DAYSPERNYEAR / 2)
  				(void)printf("  %.4s", p + 20);
  			else
  				(void)printf(" %.5s", p + 11);
! office:			
! 			if (hflag)
! 				(void)printf("  %.*s", MAXHOSTNAME, w->host);
! 			else {
! 				if (pn->office)
! 					(void)printf(" %-10.10s", pn->office);
! 				else if (pn->officephone)
! 					(void)printf(" %-10.10s", " ");
! 				if (pn->officephone)
! 					(void)printf(" %-.15s",
! 					    prphone(pn->officephone));
! 			}
  			putchar('\n');
  		}
  	}
*** fingerd.c.orig	Tue Mar 29 23:28:06 1994
--- libexec/fingerd/fingerd.c	Tue Mar 29 23:29:47 1994
***************
*** 68,74 ****
  		exit(1);

  	av[0] = "finger";
! 	for (lp = line, ap = &av[1];;) {
  		*ap = strtok(lp, " \t\r\n");
  		if (!*ap)
  			break;
--- 68,75 ----
  		exit(1);

  	av[0] = "finger";
! 	av[1] = "-h";
! 	for (lp = line, ap = &av[2];;) {
  		*ap = strtok(lp, " \t\r\n");
  		if (!*ap)
  			break;
--- cut here ---
-- 
Luke Mewburn			Programmer, Technical Services Group,
Email: <lm@rmit.edu.au>		Department of Computer Science, RMIT,
Phone: +61 3 660 3210		Melbourne, Victoria, Australia.

------------------------------------------------------------------------------