From a483d5b52d4761c80e02a7d57a4ded3f93b30d98 Mon Sep 17 00:00:00 2001 From: brian Date: Tue, 6 Apr 1999 12:41:27 +0000 Subject: [PATCH] MF src/libexec/telnetd: Verify the reverse DNS lookup ala rlogind. Suggested by: markm git-svn-id: http://svn0.us-east.freebsd.org/base/head/contrib/telnet@45377 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- telnetd/telnetd.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/telnetd/telnetd.c b/telnetd/telnetd.c index acbf3a8..b869dca 100644 --- a/telnetd/telnetd.c +++ b/telnetd/telnetd.c @@ -42,7 +42,7 @@ static const char copyright[] = static const char sccsid[] = "@(#)telnetd.c 8.4 (Berkeley) 5/30/95"; #endif static const char rcsid[] = - "$Id: telnetd.c,v 1.4 1998/02/16 12:09:27 markm Exp $"; + "$Id: telnetd.c,v 1.5 1998/12/16 06:06:06 peter Exp $"; #endif /* not lint */ #include "telnetd.h" @@ -869,7 +869,23 @@ doit(who) } else if (hp && (strlen(hp->h_name) <= (unsigned int)((utmp_len < 0) ? -utmp_len : utmp_len))) { - host = hp->h_name; + strncpy(remote_host_name, hp->h_name, + sizeof(remote_host_name)-1); + hp = gethostbyname(remote_host_name); + if (hp == NULL) + host = inet_ntoa(who->sin_addr); + else for (; ; hp->h_addr_list++) { + if (hp->h_addr_list[0] == NULL) { + /* End of list - ditch it */ + host = inet_ntoa(who->sin_addr); + break; + } + if (!bcmp(hp->h_addr_list[0], (caddr_t)&who->sin_addr, + sizeof(who->sin_addr))) { + host = hp->h_name; + break; /* OK! */ + } + } } else { host = inet_ntoa(who->sin_addr); }