diff options
author | des <des@FreeBSD.org> | 2002-06-29 10:57:53 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2002-06-29 10:57:53 +0000 |
commit | eb9c7816d4d782455a703012ab4a67c418203c65 (patch) | |
tree | 54caab26a5ee53139196f833f382e9e047c4d0a2 /crypto | |
parent | c6ba2ba489be65498933b63cda1dfd392d041303 (diff) | |
download | FreeBSD-src-eb9c7816d4d782455a703012ab4a67c418203c65.zip FreeBSD-src-eb9c7816d4d782455a703012ab4a67c418203c65.tar.gz |
Canonicize the host name before looking it up in the host file.
Sponsored by: DARPA, NAI Labs
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 24ee541..64e7c113 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 */ |