require 'sys/socket.ph';

# Safe finger code borrowed from finger.pl library by Eric Mumpower
#
        $where = "mitdir";

        if ( $where !~ /[\d{1,3}\.]{3}\d{1,3}/) {
            ($name,$aliases,$type,$len,@addrs) = gethostbyname($where);
        }
        else {
            ($name,$aliases,$type,$len,@addrs) = gethostbyaddr(pack('C4', split(
/\./, $where)), 2);
        }

        if ((! @addrs) || (@addrs[0] eq "")) {
            return "Error: Couldn't resolve host $where\n";
        }
   
        $sockaddr = 'S n a4 x8';

        # The port number for finger is 79
        $portnum = 79;

        ($name, $aliases, $proto) = getprotobyname("tcp");

        # Make the socket filehandle.

        if (! socket(S, &main'AF_INET, &main'SOCK_STREAM, $proto)) {
            return "Error: Cannot open socket for finger because:\n", $!, "\n";
        }

        if (! connect(S,pack($sockaddr, &main'AF_INET, $portnum, @addrs[0]))) {
            if ($! eq "Connection refused") {
                return "Error: Finger connection refused at $where.";
            }
            else {
                return "Cannot connect to finger socket at remote machine because: \n", $!, "\n";
            }
            return;
        }

        # Set socket to be command buffered.

        select(S); $| = 1; select(STDOUT);

        # send query

        print S "$who\r\n";

        $fing = join('', <S>);

        return $fing;
