more REMOTEHOST

Loki Jorgenson loki at NAZGUL.PHYSICS.MCGILL.CA
Sun Jun 23 00:39:51 AEST 1991


	Since we're getting in the mood.... I remembered somewhat 
belatedly that I also wrote a little utmp parser to find the remotehost
site.  It takes an argument (user name) or none (lists all remotely
connected users) and returns the user name, the tty, the remotehost
and the date of login (in time(2) formate).  It works on BSD systems
such as our date SUn OSv3.5 system which I wrote it for.

	It helpfully strips out the the domain from the remote host name
for local use.  This is not that helpful for truly remote sites but
its easy to hack the code.  Plus, most remote site names are too long
for utmp's host name limit anyway.

Enjoy,
 -------------- cut here -----------------
#include <stdio.h>
#include <fcntl.h>
#include <utmp.h>

struct utmp user;

main(argc,argv)
int argc;
char *argv[];
{
int uptr,notyet=1;

	if((uptr=open("/etc/utmp",O_RDONLY))<0)
	  fail("fERR >< cannot open /etc/utmp for read\n");
	if (argc>1)	do {
	  if(!(get_user(uptr))) break;
	  if(!(notyet=(strcmp(argv[1],user.ut_name))))
	     print_entry(&user);
			   } while(notyet);
	else do {
	  if(!(get_user(uptr))) break;
	  print_entry(&user);
		} while(notyet);
	close(uptr);
}

get_user(fptr)
int fptr;
{
int result;
	result = read(fptr,&user,sizeof(struct utmp));
	if(result!=sizeof(struct utmp)&&result)
		fail("rERR >< failed read on /etc/utmp\n");
	return(result);
}

#include <string.h>

print_entry(entry)
struct utmp *entry;
{
int ii,ch='.';
char *cptr;
	if(!strlen(entry->ut_name)) return;
	if((cptr=strchr(entry->ut_host,ch))!=NULL) *cptr = '\0';
	fprintf(stdout,"%.8s  ",entry->ut_name);
	fprintf(stdout,"%.8s  ",entry->ut_line);
	fprintf(stdout,"%.16s  ",entry->ut_host);
	fprintf(stdout,"%ld\n",entry->ut_time);
}


fail(string)
char *string;
{
  fprintf(stderr,"%s",string);
  exit();
}
------------ cute here -----------------

                             _ _         _ _
Loki Jorgenson              / / _ _ _ _ _ \ \  node:  loki at Physics.McGill.CA
Grad/Systems Manager       /_/_/_/_/ \_\_\_\_\ BITNET: PY29 at MCGILLA
Physics, McGill University \ \ \_\_\_/_/_/ / / fax:   (514) 398-3733
Montreal Quebec CANADA      \_\_         _/_/  phone: (514) 398-7027

                      -*  Anatomically  correct  *-




More information about the Comp.sys.sgi mailing list