diff options
author | Brian Somers <brian@FreeBSD.org> | 1999-04-06 12:41:27 +0000 |
---|---|---|
committer | Brian Somers <brian@FreeBSD.org> | 1999-04-06 12:41:27 +0000 |
commit | 3bfc6c798d9441aadc8b926391d8c0e6511f49f8 (patch) | |
tree | c8931a71cd7b7ca720fed8993307a8b6dd6aa64d /crypto | |
parent | 3e6a56bb87d4875b898751e36fe6f5cd378b0d0a (diff) | |
download | src-3bfc6c798d9441aadc8b926391d8c0e6511f49f8.tar.gz src-3bfc6c798d9441aadc8b926391d8c0e6511f49f8.zip |
MF src/libexec/telnetd: Verify the reverse DNS lookup
ala rlogind.
Suggested by: markm
Notes
Notes:
svn path=/head/; revision=45377
Diffstat (limited to 'crypto')
-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 acbf3a840dd2..b869dca4a814 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); } |