Index: src/contrib/telnet/telnetd/telnetd.c =================================================================== RCS file: /home/ncvs/src/contrib/telnet/telnetd/telnetd.c,v retrieving revision 1.25.4.1 diff -u -r1.25.4.1 telnetd.c --- src/contrib/telnet/telnetd/telnetd.c 13 Feb 2005 13:17:23 -0000 1.25.4.1 +++ src/contrib/telnet/telnetd/telnetd.c 13 Feb 2005 16:10:49 -0000 @@ -73,7 +73,7 @@ char ptyibuf2[BUFSIZ]; int readstream(int, char *, int); -void doit(struct sockaddr *); +void doit(struct sockaddr *, char *); int terminaltypeok(char *); int hostinfo = 1; /* do we print login banner? */ @@ -82,7 +82,7 @@ int keepalive = 1; const char *altlogin; -void doit(struct sockaddr *); +void doit(struct sockaddr *, char *); int terminaltypeok(char *); void startslave(char *, int, char *); extern void usage(void); @@ -139,6 +139,7 @@ int tos = -1; #endif char *ep; + char telnetcli[64] = ""; pfrontp = pbackp = ptyobuf; netip = netibuf; @@ -411,7 +412,14 @@ } #endif /* defined(IPPROTO_IP) && defined(IP_TOS) */ net = 0; - doit((struct sockaddr *)&from); + + if (family == AF_INET) { + snprintf(telnetcli, sizeof(telnetcli), "%s %d", + inet_ntoa(((struct sockaddr_in *) &from)->sin_addr), + ntohs(((struct sockaddr_in *) &from)->sin_port)); + } + + doit((struct sockaddr *)&from, telnetcli); /* NOTREACHED */ return(0); } /* end of main */ @@ -657,7 +665,7 @@ * Get a pty, scan input lines. */ void -doit(struct sockaddr *who) +doit(struct sockaddr *who, char *telnetcli) { int err_; /* XXX */ int ptynum; @@ -719,6 +727,7 @@ *user_name = 0; level = getterminaltype(user_name); setenv("TERM", terminaltype ? terminaltype : "network", 1); + setenv("TELNET_CLIENT", telnetcli? telnetcli: "", 1); telnet(net, pty, remote_hostname); /* begin server process */