This fixes an apparent bug in fingerd w/the NetKit-B 0.5 distribution and 
below.  The bug shows up when a finger like "finger @@@@@@@@@@" is done.  
fingerd will spawn a new finger process for every consecutive @.  This is
because the user name is parsed out by taking everything from the last @ on
and passing it to fingerd.  This also allows finger redirection in the form
of finger root@sunsite.unc.edu@tsx-11.mit.edu.  That will finger
root@sunsite through tsx-11 as long as each of the involved systems is
affected by the bug.  (They are).  This seems to stem from the BSD net kit
from which the linux one is based.  I don't know how far this goes as far as
commercial unixes go, but everything we tried except Ultrix 4.3 has this
problem.  Unixes tried: Solaris, SunOs, IRIX, AIX, FreeBSD, Linux
(Slackware), and Ultrix 4.2A.

Clayton O'Neill
cs339014@bit.csc.lsu.edu
coneil@bit.csc.lsu.edu
--- finger.old/net.c	Tue Aug 23 03:46:19 1994
+++ net.c	Fri Nov 18 17:07:38 1994
@@ -57,12 +57,16 @@
 	struct servent *sp;
 	struct sockaddr_in sin;
 	int s;
-	char *alist[1], *host, *rindex();
+	char *alist[1], *at, *host, *rindex();
 	u_long inet_addr();
 
-	if (!(host = rindex(name, '@')))
+	if (!(at = index(name, '@')))
 		return;
-	*host++ = '\0';
+	*at++ = '\0';
+	if (!(host = rindex(at, '@')))
+		host=at;
+	else 
+		host++;
 	if (!(hp = gethostbyname(host))) {
 		defaddr.s_addr = inet_addr(host);
 		if (defaddr.s_addr == -1) {
