diff options
author | brian <brian@FreeBSD.org> | 1999-04-06 12:41:27 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1999-04-06 12:41:27 +0000 |
commit | 290eeb0e063af18e399528a0393a4ebae1f0281d (patch) | |
tree | 7c693cb0ccb42aaa063cb26f03843b4ffd45895f /crypto/telnet/telnetd | |
parent | de886587fee38a2b6d267e4b9f1452643ee84206 (diff) | |
download | FreeBSD-src-290eeb0e063af18e399528a0393a4ebae1f0281d.zip FreeBSD-src-290eeb0e063af18e399528a0393a4ebae1f0281d.tar.gz |
MF src/libexec/telnetd: Verify the reverse DNS lookup
ala rlogind.
Suggested by: markm
Diffstat (limited to 'crypto/telnet/telnetd')
-rw-r--r-- | crypto/telnet/telnetd/telnetd.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/crypto/telnet/telnetd/telnetd.c b/crypto/telnet/telnetd/telnetd.c index acbf3a8..b869dca 100644 --- a/crypto/telnet/telnetd/telnetd.c +++ b/crypto/telnet/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); } |