]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: fix a bug I introduced in r1.406: when printing private key
authordjm@openbsd.org <djm@openbsd.org>
Mon, 20 Apr 2020 04:43:57 +0000 (04:43 +0000)
committerDamien Miller <djm@mindrot.org>
Mon, 20 Apr 2020 04:46:40 +0000 (14:46 +1000)
fingerprint of old-format key, key comments were not being displayed. Spotted
by loic AT venez.fr, ok dtucker

OpenBSD-Commit-ID: 2d98e4f9eb168eea733d17e141e1ead9fe26e533

ssh-keygen.c

index c181b58aa2e3cf557b161b04ffcadaadd913860c..d50ca5f28c517c24831fd8e329bf3339f7dcc64c 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keygen.c,v 1.406 2020/04/17 07:16:07 djm Exp $ */
+/* $OpenBSD: ssh-keygen.c,v 1.407 2020/04/20 04:43:57 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -910,21 +910,25 @@ fingerprint_private(const char *path)
 {
        struct stat st;
        char *comment = NULL;
-       struct sshkey *key = NULL;
+       struct sshkey *privkey = NULL, *pubkey = NULL;
        int r;
 
        if (stat(identity_file, &st) == -1)
                fatal("%s: %s", path, strerror(errno));
-       if ((r = sshkey_load_private(path, NULL, &key, &comment)) != 0) {
-               debug("load private \"%s\": %s", path, ssh_err(r));
-               if ((r = sshkey_load_public(path, &key, &comment)) != 0) {
-                       debug("load public \"%s\": %s", path, ssh_err(r));
-                       fatal("%s is not a key file.", path);
-               }
+       if ((r = sshkey_load_public(path, &pubkey, &comment)) != 0)
+               debug("load public \"%s\": %s", path, ssh_err(r));
+       if (pubkey == NULL || comment == NULL || *comment == '\0') {
+               free(comment);
+               if ((r = sshkey_load_private(path, NULL,
+                   &privkey, &comment)) != 0)
+                       debug("load private \"%s\": %s", path, ssh_err(r));
        }
+       if (pubkey == NULL && privkey == NULL)
+               fatal("%s is not a key file.", path);
 
-       fingerprint_one_key(key, comment);
-       sshkey_free(key);
+       fingerprint_one_key(pubkey == NULL ? privkey : pubkey, comment);
+       sshkey_free(pubkey);
+       sshkey_free(privkey);
        free(comment);
 }