summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2002-06-29 10:57:53 +0000
committerdes <des@FreeBSD.org>2002-06-29 10:57:53 +0000
commiteb9c7816d4d782455a703012ab4a67c418203c65 (patch)
tree54caab26a5ee53139196f833f382e9e047c4d0a2 /crypto
parentc6ba2ba489be65498933b63cda1dfd392d041303 (diff)
downloadFreeBSD-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.c20
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 */
OpenPOWER on IntegriCloud