james@yunexus.UUCP (James Pierre Lewis) (11/04/88)
#! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # Makefile # ywho.1v # ywho.c # This archive created: Thu Nov 3 15:22:31 1988 export PATH; PATH=/bin:$PATH echo shar: extracting "'Makefile'" '(1815 characters)' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else sed 's/^ X//' << \SHAR_EOF > 'Makefile' XCFLAGS = -O X XDEST = /usr/local/bin X XEXTHDRS = /usr/include/netdb.h \ X /usr/include/netinet/in.h \ X /usr/include/rpc/auth.h \ X /usr/include/rpc/auth_unix.h \ X /usr/include/rpc/clnt.h \ X /usr/include/rpc/rpc.h \ X /usr/include/rpc/rpc_msg.h \ X /usr/include/rpc/svc.h \ X /usr/include/rpc/svc_auth.h \ X /usr/include/rpc/types.h \ X /usr/include/rpc/xdr.h \ X /usr/include/rpcsvc/rusers.h \ X /usr/include/stdio.h \ X /usr/include/sys/socket.h \ X /usr/include/sys/sysmacros.h \ X /usr/include/sys/time.h \ X /usr/include/sys/types.h \ X /usr/include/time.h \ X /usr/include/utmp.h X XHDRS = X XLDFLAGS = X XLIBS = X XLINKER = cc X XMAKEFILE = Makefile X XOBJS = ywho.o X XPRINT = pr X XPROGRAM = ywho X XSRCS = ywho.c X Xall: $(PROGRAM) X X$(PROGRAM): $(OBJS) $(LIBS) X $(LINKER) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROGRAM) -lrpcsvc X Xclean:; rm -f $(OBJS) X Xdepend:; mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST) X Xindex:; ctags -wx $(HDRS) $(SRCS) X Xinstall: $(PROGRAM) X install -s $(PROGRAM) $(DEST) X Xprint:; $(PRINT) $(HDRS) $(SRCS) X Xprogram: $(PROGRAM) X Xtags: $(HDRS) $(SRCS); ctags $(HDRS) $(SRCS) X Xupdate: $(DEST)/$(PROGRAM) X X$(DEST)/$(PROGRAM): $(SRCS) $(LIBS) $(HDRS) $(EXTHDRS) X @make -f $(MAKEFILE) DEST=$(DEST) install X### Xywho.o: /usr/include/stdio.h /usr/include/utmp.h /usr/include/rpc/rpc.h \ X /usr/include/rpc/types.h /usr/include/sys/types.h \ X /usr/include/sys/sysmacros.h /usr/include/netinet/in.h \ X /usr/include/rpc/xdr.h /usr/include/rpc/auth.h \ X /usr/include/rpc/clnt.h /usr/include/rpc/rpc_msg.h \ X /usr/include/rpc/auth_unix.h /usr/include/rpc/svc.h \ X /usr/include/rpc/svc_auth.h /usr/include/rpcsvc/rusers.h \ X /usr/include/sys/socket.h /usr/include/sys/time.h /usr/include/time.h \ X /usr/include/netdb.h SHAR_EOF if test 1815 -ne "`wc -c < 'Makefile'`" then echo shar: error transmitting "'Makefile'" '(should have been 1815 characters)' fi fi # end of overwriting check echo shar: extracting "'ywho.1v'" '(828 characters)' if test -f 'ywho.1v' then echo shar: will not over-write existing file "'ywho.1v'" else sed 's/^ X//' << \SHAR_EOF > 'ywho.1v' X.TH YWHO 1V "2 November 1988" X.SH NAME Xywho \- who on all clients in a Sun network. X.SH SYNOPSIS X.B ywho X[ host ] X.SH DESCRIPTION X.I ywho Xis another version of rwho, but it is faster than rwho and requires Xno /usr/spool/rwho/rwhod.*. Note that rwho wastes system resources, but Xywho doesn't. It utilizes SUN RPC and XDR protocol. X.nf X XUser tty login idle host Xoperator console Oct 26 06:28 00:03:48 (yetti) Xjames tty06 Nov 3 11:09 (yetti) Xjxu tty0a Nov 3 10:00 00:05:00 (mithra) Xjonathan tty0b Nov 3 09:57 00:00:39 (bigfoot) Xli tty0c Nov 3 14:32 00:00:15 (nexus) X.fi X.SH AUTHORS XJames P. Lewis, York University, 1988 X.SH SEE ALSO X/etc/hosts X.SH NOTE XWhen a host is down, it retries until timeout. It only works if your Xserver and clients are configured with SUN RPC. SHAR_EOF if test 828 -ne "`wc -c < 'ywho.1v'`" then echo shar: error transmitting "'ywho.1v'" '(should have been 828 characters)' fi fi # end of overwriting check echo shar: extracting "'ywho.c'" '(2402 characters)' if test -f 'ywho.c' then echo shar: will not over-write existing file "'ywho.c'" else sed 's/^ X//' << \SHAR_EOF > 'ywho.c' X#include <stdio.h> X#include <utmp.h> X#include <rpc/rpc.h> X#include <rpcsvc/rusers.h> X#include <sys/socket.h> X#include <sys/time.h> X#include <netdb.h> X X#define HST_LEN 31 X X/*---------------------------------------------------------------------------*/ X Xmain(argc, argv) X Xchar **argv; Xint argc; X{ X extern char *ctime(); X char hst_nam[HST_LEN], X tmp[BUFSIZ]; X int addrlen, X hh, X i, X j, X mm, X sock = RPC_ANYSOCK, X ss; X register CLIENT *client; X struct hostent *hp; X struct timeval pertry_timeout, X total_timeout; X struct utmpidlearr cutmpidlearr; X struct sockaddr_in server_addr; X enum clnt_stat clnt_stat; X X X if (argc < 2) X gethostname(hst_nam, HST_LEN); X else strcpy(hst_nam, argv[1]); X X if ((hp = gethostbyname(hst_nam)) == NULL) X { X fprintf(stderr, "can't get addr for %s\n", hst_nam); X exit(); X } X X pertry_timeout.tv_sec = 3; X pertry_timeout.tv_usec = 0; X addrlen = sizeof(struct sockaddr_in); X bcopy(hp->h_addr, (caddr_t) &server_addr.sin_addr, hp->h_length); X server_addr.sin_family = AF_INET; X server_addr.sin_port = 0; X X if ((client = clntudp_create(&server_addr, RUSERSPROG, X RUSERSVERS_IDLE, pertry_timeout, &sock)) == NULL) X { X clnt_pcreateerror("clntudp_create"); X exit(); X } X X total_timeout.tv_sec = 3; X total_timeout.tv_usec = 0; X clnt_stat = clnt_call(client, RUSERSPROC_NAMES, xdr_void, X 0, xdr_utmpidlearr, &cutmpidlearr, total_timeout); X X if (clnt_stat != RPC_SUCCESS) X { X clnt_perror(client, argv[0]); X exit(); X } X X clnt_destroy(client); X printf("%-8.8s %-8.8s %-12.12s %-8.8s %s\n", X "User", "tty", "login", "idle", "host"); X X for (i = 0; i < cutmpidlearr.uia_cnt; i++) X { X j = cutmpidlearr.uia_arr[i]->ui_utmp.ut_time; X X if (cutmpidlearr.uia_arr[i]->ui_idle == NULL) X *tmp = NULL; X else X { X hh = mm = ss = NULL; X X if ((ss = cutmpidlearr.uia_arr[i]->ui_idle) > 60) X { X mm = ss / 60; X ss = ss % 60; X } X X if (mm > 60) X { X hh = mm / 60; X mm = mm % 60; X } X X sprintf(tmp, "%-2.2d:%-2.2d:%-2.2d", hh, mm, ss); X } X X printf("%-8.8s %-8.8s %-12.12s %-8.8s (%s)\n", X cutmpidlearr.uia_arr[i]->ui_utmp.ut_name, X cutmpidlearr.uia_arr[i]->ui_utmp.ut_line, X ctime(&j)+4, X tmp, X (*cutmpidlearr.uia_arr[i]->ui_utmp.ut_host) ? X cutmpidlearr.uia_arr[i]->ui_utmp.ut_host : hst_nam); X } X X exit(); X} X X/*---------------------------------------------------------------------------*/ SHAR_EOF if test 2402 -ne "`wc -c < 'ywho.c'`" then echo shar: error transmitting "'ywho.c'" '(should have been 2402 characters)' fi fi # end of overwriting check # End of shell archive exit 0