summaryrefslogtreecommitdiffstats
path: root/ssh-keyscan.c
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2018-02-23 06:14:05 +0100
committerDamien Miller <djm@mindrot.org>2018-02-23 07:00:52 +0100
commit1a348359e4d2876203b5255941bae348557f4f54 (patch)
tree261e9047facd8bd8213ca2c4f38389b334eb60b3 /ssh-keyscan.c
parentupstream: Add missing braces. (diff)
downloadopenssh-1a348359e4d2876203b5255941bae348557f4f54.tar.xz
openssh-1a348359e4d2876203b5255941bae348557f4f54.zip
upstream: Add ssh-keyscan -D option to make it print its results in
SSHFP format bz#2821, ok dtucker@ OpenBSD-Commit-ID: 831446b582e0f298ca15c9d99c415c899e392221
Diffstat (limited to 'ssh-keyscan.c')
-rw-r--r--ssh-keyscan.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/ssh-keyscan.c b/ssh-keyscan.c
index a816a220e..15059f6fa 100644
--- a/ssh-keyscan.c
+++ b/ssh-keyscan.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keyscan.c,v 1.116 2017/11/25 06:46:22 dtucker Exp $ */
+/* $OpenBSD: ssh-keyscan.c,v 1.117 2018/02/23 05:14:05 djm Exp $ */
/*
* Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>.
*
@@ -46,6 +46,7 @@
#include "hostfile.h"
#include "ssherr.h"
#include "ssh_api.h"
+#include "dns.h"
/* Flag indicating whether IPv4 or IPv6. This can be set on the command line.
Default value is AF_UNSPEC means both IPv4 and IPv6. */
@@ -66,6 +67,8 @@ int get_keytypes = KT_RSA|KT_ECDSA|KT_ED25519;
int hash_hosts = 0; /* Hash hostname on output */
+int print_sshfp = 0; /* Print SSHFP records instead of known_hosts */
+
#define MAXMAXFD 256
/* The number of seconds after which to give up on a TCP connection */
@@ -280,6 +283,11 @@ keyprint_one(const char *host, struct sshkey *key)
char *hostport;
const char *known_host, *hashed;
+ if (print_sshfp) {
+ export_dns_rr(host, key, stdout, 0);
+ return;
+ }
+
hostport = put_host_port(host, ssh_port);
lowercase(hostport);
if (hash_hosts && (hashed = host_hash(host, NULL, 0)) == NULL)
@@ -497,7 +505,8 @@ congreet(int s)
confree(s);
return;
}
- fprintf(stderr, "# %s:%d %s\n", c->c_name, ssh_port, chop(buf));
+ fprintf(stderr, "%c %s:%d %s\n", print_sshfp ? ';' : '#',
+ c->c_name, ssh_port, chop(buf));
keygrab_ssh2(c);
confree(s);
}
@@ -621,7 +630,7 @@ static void
usage(void)
{
fprintf(stderr,
- "usage: %s [-46cHv] [-f file] [-p port] [-T timeout] [-t type]\n"
+ "usage: %s [-46cDHv] [-f file] [-p port] [-T timeout] [-t type]\n"
"\t\t [host | addrlist namelist] ...\n",
__progname);
exit(1);
@@ -650,7 +659,7 @@ main(int argc, char **argv)
if (argc <= 1)
usage();
- while ((opt = getopt(argc, argv, "cHv46p:T:t:f:")) != -1) {
+ while ((opt = getopt(argc, argv, "cDHv46p:T:t:f:")) != -1) {
switch (opt) {
case 'H':
hash_hosts = 1;
@@ -658,6 +667,9 @@ main(int argc, char **argv)
case 'c':
get_cert = 1;
break;
+ case 'D':
+ print_sshfp = 1;
+ break;
case 'p':
ssh_port = a2port(optarg);
if (ssh_port <= 0) {