#include <sys/socket.h>
#include <net/in.h>

struct sockaddr_in hisctladdr = {AF_INET, 79 };
    int     i, j, netfd;
    long hostnum, rhost();

    setbuf(stdout, 0);
    if (argc > 1 && index(argv[1],'@')) /* Want to finger remote? */
    {
	for (i = j = 0; argv[1][i] != '@'; i++)	/* Copy user */
	    user[j++] = argv[1][i];
	for (i++, j = 0; argv[1][i] != NULL; i++)	/* Copy host */
	    host[j++] = argv[1][i];
	p = malloc (strlen (host) + 1);		/* Stash host someplace */
	strcpy (p, host);
        hostnum = rhost (&p);		/* Get host number */
        if (hostnum == -1)
        {
	    fprintf (stderr, "Unknown hostname: %s\n", host);
	    exit(1);
	}
        hisctladdr.sin_port = htons (hisctladdr.sin_port);
        hisctladdr.sin_addr.s_addr = hostnum;
	if ((netfd = socket(SOCK_STREAM, 0, (struct sockaddr *)0, 0)) < 0
	    || connect(netfd, &hisctladdr)) {
		perror(raddr(hisctladdr.sin_addr.s_addr));
		exit(1);
	}
	fprintf(stdout,"[%s]\n",host);
	if (user[0])
	    sprintf(buf, "%s\r\n", user);	/* Specific user */
	else
	    sprintf(buf, "\r\n");		/* Everyone */
	write (netfd, buf, strlen(buf));
	while ((i = read(netfd, buf, sizeof(buf))) > 0) write(1, buf, i);
 	close(netfd);
	exit(0);
    }
