From eb9c7816d4d782455a703012ab4a67c418203c65 Mon Sep 17 00:00:00 2001 From: des Date: Sat, 29 Jun 2002 10:57:53 +0000 Subject: Canonicize the host name before looking it up in the host file. Sponsored by: DARPA, NAI Labs --- crypto/openssh/ssh.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'crypto') 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 #include @@ -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 */ -- cgit v1.1