=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/ssh.c,v retrieving revision 1.427 retrieving revision 1.428 diff -u -r1.427 -r1.428 --- src/usr.bin/ssh/ssh.c 2015/10/15 23:51:40 1.427 +++ src/usr.bin/ssh/ssh.c 2015/10/16 18:40:49 1.428 @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh.c,v 1.427 2015/10/15 23:51:40 djm Exp $ */ +/* $OpenBSD: ssh.c,v 1.428 2015/10/16 18:40:49 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -389,6 +389,17 @@ return addrs; } + /* If domain name is anchored, then resolve it now */ + if ((*hostp)[strlen(*hostp) - 1] == '.') { + debug3("%s: name is fully qualified", __func__); + fullhost = xstrdup(*hostp); + if ((addrs = resolve_host(fullhost, port, 0, + newname, sizeof(newname))) != NULL) + goto found; + free(fullhost); + goto notfound; + } + /* Don't apply canonicalization to sufficiently-qualified hostnames */ ndots = 0; for (cp = *hostp; *cp != '\0'; cp++) { @@ -412,6 +423,7 @@ free(fullhost); continue; } + found: /* Remove trailing '.' */ fullhost[strlen(fullhost) - 1] = '\0'; /* Follow CNAME if requested */ @@ -423,6 +435,7 @@ *hostp = fullhost; return addrs; } + notfound: if (!options.canonicalize_fallback_local) fatal("%s: Could not resolve host \"%s\"", __progname, *hostp); debug2("%s: host %s not found in any suffix", __func__, *hostp);