]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: add sshkey_save_public(), to save a public key; ok
authordjm@openbsd.org <djm@openbsd.org>
Thu, 2 Jan 2020 22:38:33 +0000 (22:38 +0000)
committerDamien Miller <djm@mindrot.org>
Thu, 2 Jan 2020 22:41:20 +0000 (09:41 +1100)
markus@

OpenBSD-Commit-ID: 5d6f96a966d10d7fa689ff9aa9e1d6767ad5a076

authfile.c
authfile.h

index 37341189cbea64ebf07eb25fad23599f0d07ee5c..bf22d63e834273267c946e5365e00e92f75cb489 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: authfile.c,v 1.135 2019/09/03 08:30:47 djm Exp $ */
+/* $OpenBSD: authfile.c,v 1.136 2020/01/02 22:38:33 djm Exp $ */
 /*
  * Copyright (c) 2000, 2013 Markus Friedl.  All rights reserved.
  *
@@ -550,3 +550,34 @@ sshkey_advance_past_options(char **cpp)
        return (*cp == '\0' && quoted) ? -1 : 0;
 }
 
+/* Save a public key */
+int
+sshkey_save_public(const struct sshkey *key, const char *path,
+    const char *comment)
+{
+       int fd, oerrno;
+       FILE *f = NULL;
+       int r = SSH_ERR_INTERNAL_ERROR;
+
+       if ((fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644)) == -1)
+               return SSH_ERR_SYSTEM_ERROR;
+       if ((f = fdopen(fd, "w")) == NULL) {
+               r = SSH_ERR_SYSTEM_ERROR;
+               goto fail;
+       }
+       if ((r = sshkey_write(key, f)) != 0)
+               goto fail;
+       fprintf(f, " %s\n", comment);
+       if (ferror(f) || fclose(f) != 0) {
+               r = SSH_ERR_SYSTEM_ERROR;
+ fail:
+               oerrno = errno;
+               if (f != NULL)
+                       fclose(f);
+               else
+                       close(fd);
+               errno = oerrno;
+               return r;
+       }
+       return 0;
+}
index 9c8a95a016c827619dc6d9e32a033d1652d0fb9f..a2840cf80822e3eb525ca0975db0f1cdec0d80d5 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: authfile.h,v 1.23 2019/09/03 08:30:47 djm Exp $ */
+/* $OpenBSD: authfile.h,v 1.24 2020/01/02 22:38:33 djm Exp $ */
 
 /*
  * Copyright (c) 2000, 2013 Markus Friedl.  All rights reserved.
@@ -49,5 +49,7 @@ int sshkey_perm_ok(int, const char *);
 int sshkey_in_file(struct sshkey *, const char *, int, int);
 int sshkey_check_revoked(struct sshkey *key, const char *revoked_keys_file);
 int sshkey_advance_past_options(char **cpp);
+int sshkey_save_public(const struct sshkey *key, const char *path,
+    const char *comment);
 
 #endif