diff options
author | Dag-Erling Smørgrav <des@FreeBSD.org> | 2002-06-29 10:57:53 +0000 |
---|---|---|
committer | Dag-Erling Smørgrav <des@FreeBSD.org> | 2002-06-29 10:57:53 +0000 |
commit | bf2e2524a2ce36c9fe21605c86ea138d38f07c88 (patch) | |
tree | 54caab26a5ee53139196f833f382e9e047c4d0a2 /crypto | |
parent | 5b400a39b8add453bd7e777b9306ef91f8f1403c (diff) | |
download | src-bf2e2524a2ce36c9fe21605c86ea138d38f07c88.tar.gz src-bf2e2524a2ce36c9fe21605c86ea138d38f07c88.zip |
Canonicize the host name before looking it up in the host file.
Sponsored by: DARPA, NAI Labs
Notes
Notes:
svn path=/head/; revision=99054
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/openssh/ssh.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/crypto/openssh/ssh.c b/crypto/openssh/ssh.c index 24ee541423a3..64e7c113e33d 100644 --- a/crypto/openssh/ssh.c +++ b/crypto/openssh/ssh.c @@ -41,6 +41,7 @@ #include "includes.h" RCSID("$OpenBSD: ssh.c,v 1.179 2002/06/12 01:09:52 markus Exp $"); +RCSID("$FreeBSD$"); #include <openssl/evp.h> #include <openssl/err.h> @@ -242,7 +243,7 @@ main(int ac, char **av) /* Get user data. */ pw = getpwuid(original_real_uid); if (!pw) { - log("You don't exist, go away!"); + log("unknown user %d", original_real_uid); exit(1); } /* Take a copy of the returned structure. */ @@ -600,6 +601,23 @@ again: if (options.hostname != NULL) host = options.hostname; + /* Find canonic host name. */ + if (strchr(host, '.') == 0) { + struct addrinfo hints; + struct addrinfo *ai = NULL; + int errgai; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = IPv4or6; + hints.ai_flags = AI_CANONNAME; + hints.ai_socktype = SOCK_STREAM; + errgai = getaddrinfo(host, NULL, &hints, &ai); + if (errgai == 0) { + if (ai->ai_canonname != NULL) + host = xstrdup(ai->ai_canonname); + freeaddrinfo(ai); + } + } + /* Disable rhosts authentication if not running as root. */ #ifdef HAVE_CYGWIN /* Ignore uid if running under Windows */ |